iucv: introduce loadable iucv interface

This patch adds a symbol to dynamically load iucv functions.

Signed-off-by: Frank Blaschka <frank.blaschka@de.ibm.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
Frank Blaschka 2011-08-08 01:33:49 +00:00 коммит произвёл David S. Miller
Родитель 99558ea93c
Коммит 96d042a68b
2 изменённых файлов: 58 добавлений и 1 удалений

Просмотреть файл

@ -120,7 +120,7 @@ struct iucv_message {
u32 reply_size;
u8 rmmsg[8];
u8 flags;
};
} __packed;
/*
* struct iucv_handler
@ -459,3 +459,37 @@ int __iucv_message_send(struct iucv_path *path, struct iucv_message *msg,
int iucv_message_send2way(struct iucv_path *path, struct iucv_message *msg,
u8 flags, u32 srccls, void *buffer, size_t size,
void *answer, size_t asize, size_t *residual);
struct iucv_interface {
int (*message_receive)(struct iucv_path *path, struct iucv_message *msg,
u8 flags, void *buffer, size_t size, size_t *residual);
int (*__message_receive)(struct iucv_path *path,
struct iucv_message *msg, u8 flags, void *buffer, size_t size,
size_t *residual);
int (*message_reply)(struct iucv_path *path, struct iucv_message *msg,
u8 flags, void *reply, size_t size);
int (*message_reject)(struct iucv_path *path, struct iucv_message *msg);
int (*message_send)(struct iucv_path *path, struct iucv_message *msg,
u8 flags, u32 srccls, void *buffer, size_t size);
int (*__message_send)(struct iucv_path *path, struct iucv_message *msg,
u8 flags, u32 srccls, void *buffer, size_t size);
int (*message_send2way)(struct iucv_path *path,
struct iucv_message *msg, u8 flags, u32 srccls, void *buffer,
size_t size, void *answer, size_t asize, size_t *residual);
int (*message_purge)(struct iucv_path *path, struct iucv_message *msg,
u32 srccls);
int (*path_accept)(struct iucv_path *path, struct iucv_handler *handler,
u8 userdata[16], void *private);
int (*path_connect)(struct iucv_path *path,
struct iucv_handler *handler,
u8 userid[8], u8 system[8], u8 userdata[16], void *private);
int (*path_quiesce)(struct iucv_path *path, u8 userdata[16]);
int (*path_resume)(struct iucv_path *path, u8 userdata[16]);
int (*path_sever)(struct iucv_path *path, u8 userdata[16]);
int (*iucv_register)(struct iucv_handler *handler, int smp);
void (*iucv_unregister)(struct iucv_handler *handler, int smp);
struct bus_type *bus;
struct device *root;
};
extern struct iucv_interface iucv_if;

Просмотреть файл

@ -1974,6 +1974,27 @@ out:
return rc;
}
struct iucv_interface iucv_if = {
.message_receive = iucv_message_receive,
.__message_receive = __iucv_message_receive,
.message_reply = iucv_message_reply,
.message_reject = iucv_message_reject,
.message_send = iucv_message_send,
.__message_send = __iucv_message_send,
.message_send2way = iucv_message_send2way,
.message_purge = iucv_message_purge,
.path_accept = iucv_path_accept,
.path_connect = iucv_path_connect,
.path_quiesce = iucv_path_quiesce,
.path_resume = iucv_path_resume,
.path_sever = iucv_path_sever,
.iucv_register = iucv_register,
.iucv_unregister = iucv_unregister,
.bus = NULL,
.root = NULL,
};
EXPORT_SYMBOL(iucv_if);
/**
* iucv_init
*
@ -2038,6 +2059,8 @@ static int __init iucv_init(void)
rc = bus_register(&iucv_bus);
if (rc)
goto out_reboot;
iucv_if.root = iucv_root;
iucv_if.bus = &iucv_bus;
return 0;
out_reboot: