Commit 96d042a68bc204c1d39abd71dcb29d9fcb1601ce
Committed by
David S. Miller
1 parent
99558ea93c
Exists in
master
and in
38 other branches
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>
Showing 2 changed files with 58 additions and 1 deletions Side-by-side Diff
include/net/iucv/iucv.h
... | ... | @@ -120,7 +120,7 @@ |
120 | 120 | u32 reply_size; |
121 | 121 | u8 rmmsg[8]; |
122 | 122 | u8 flags; |
123 | -}; | |
123 | +} __packed; | |
124 | 124 | |
125 | 125 | /* |
126 | 126 | * struct iucv_handler |
... | ... | @@ -459,4 +459,38 @@ |
459 | 459 | int iucv_message_send2way(struct iucv_path *path, struct iucv_message *msg, |
460 | 460 | u8 flags, u32 srccls, void *buffer, size_t size, |
461 | 461 | void *answer, size_t asize, size_t *residual); |
462 | + | |
463 | +struct iucv_interface { | |
464 | + int (*message_receive)(struct iucv_path *path, struct iucv_message *msg, | |
465 | + u8 flags, void *buffer, size_t size, size_t *residual); | |
466 | + int (*__message_receive)(struct iucv_path *path, | |
467 | + struct iucv_message *msg, u8 flags, void *buffer, size_t size, | |
468 | + size_t *residual); | |
469 | + int (*message_reply)(struct iucv_path *path, struct iucv_message *msg, | |
470 | + u8 flags, void *reply, size_t size); | |
471 | + int (*message_reject)(struct iucv_path *path, struct iucv_message *msg); | |
472 | + int (*message_send)(struct iucv_path *path, struct iucv_message *msg, | |
473 | + u8 flags, u32 srccls, void *buffer, size_t size); | |
474 | + int (*__message_send)(struct iucv_path *path, struct iucv_message *msg, | |
475 | + u8 flags, u32 srccls, void *buffer, size_t size); | |
476 | + int (*message_send2way)(struct iucv_path *path, | |
477 | + struct iucv_message *msg, u8 flags, u32 srccls, void *buffer, | |
478 | + size_t size, void *answer, size_t asize, size_t *residual); | |
479 | + int (*message_purge)(struct iucv_path *path, struct iucv_message *msg, | |
480 | + u32 srccls); | |
481 | + int (*path_accept)(struct iucv_path *path, struct iucv_handler *handler, | |
482 | + u8 userdata[16], void *private); | |
483 | + int (*path_connect)(struct iucv_path *path, | |
484 | + struct iucv_handler *handler, | |
485 | + u8 userid[8], u8 system[8], u8 userdata[16], void *private); | |
486 | + int (*path_quiesce)(struct iucv_path *path, u8 userdata[16]); | |
487 | + int (*path_resume)(struct iucv_path *path, u8 userdata[16]); | |
488 | + int (*path_sever)(struct iucv_path *path, u8 userdata[16]); | |
489 | + int (*iucv_register)(struct iucv_handler *handler, int smp); | |
490 | + void (*iucv_unregister)(struct iucv_handler *handler, int smp); | |
491 | + struct bus_type *bus; | |
492 | + struct device *root; | |
493 | +}; | |
494 | + | |
495 | +extern struct iucv_interface iucv_if; |
net/iucv/iucv.c
... | ... | @@ -1974,6 +1974,27 @@ |
1974 | 1974 | return rc; |
1975 | 1975 | } |
1976 | 1976 | |
1977 | +struct iucv_interface iucv_if = { | |
1978 | + .message_receive = iucv_message_receive, | |
1979 | + .__message_receive = __iucv_message_receive, | |
1980 | + .message_reply = iucv_message_reply, | |
1981 | + .message_reject = iucv_message_reject, | |
1982 | + .message_send = iucv_message_send, | |
1983 | + .__message_send = __iucv_message_send, | |
1984 | + .message_send2way = iucv_message_send2way, | |
1985 | + .message_purge = iucv_message_purge, | |
1986 | + .path_accept = iucv_path_accept, | |
1987 | + .path_connect = iucv_path_connect, | |
1988 | + .path_quiesce = iucv_path_quiesce, | |
1989 | + .path_resume = iucv_path_resume, | |
1990 | + .path_sever = iucv_path_sever, | |
1991 | + .iucv_register = iucv_register, | |
1992 | + .iucv_unregister = iucv_unregister, | |
1993 | + .bus = NULL, | |
1994 | + .root = NULL, | |
1995 | +}; | |
1996 | +EXPORT_SYMBOL(iucv_if); | |
1997 | + | |
1977 | 1998 | /** |
1978 | 1999 | * iucv_init |
1979 | 2000 | * |
... | ... | @@ -2038,6 +2059,8 @@ |
2038 | 2059 | rc = bus_register(&iucv_bus); |
2039 | 2060 | if (rc) |
2040 | 2061 | goto out_reboot; |
2062 | + iucv_if.root = iucv_root; | |
2063 | + iucv_if.bus = &iucv_bus; | |
2041 | 2064 | return 0; |
2042 | 2065 | |
2043 | 2066 | out_reboot: |