mirror of https://gitee.com/openkylin/linux.git
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:
parent
99558ea93c
commit
96d042a68b
|
@ -120,7 +120,7 @@ struct iucv_message {
|
||||||
u32 reply_size;
|
u32 reply_size;
|
||||||
u8 rmmsg[8];
|
u8 rmmsg[8];
|
||||||
u8 flags;
|
u8 flags;
|
||||||
};
|
} __packed;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* struct iucv_handler
|
* 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,
|
int iucv_message_send2way(struct iucv_path *path, struct iucv_message *msg,
|
||||||
u8 flags, u32 srccls, void *buffer, size_t size,
|
u8 flags, u32 srccls, void *buffer, size_t size,
|
||||||
void *answer, size_t asize, size_t *residual);
|
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 @@ static int iucv_pm_restore(struct device *dev)
|
||||||
return rc;
|
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
|
* iucv_init
|
||||||
*
|
*
|
||||||
|
@ -2038,6 +2059,8 @@ static int __init iucv_init(void)
|
||||||
rc = bus_register(&iucv_bus);
|
rc = bus_register(&iucv_bus);
|
||||||
if (rc)
|
if (rc)
|
||||||
goto out_reboot;
|
goto out_reboot;
|
||||||
|
iucv_if.root = iucv_root;
|
||||||
|
iucv_if.bus = &iucv_bus;
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
out_reboot:
|
out_reboot:
|
||||||
|
|
Loading…
Reference in New Issue