diff options
author | Martin Schwidefsky <schwidefsky@de.ibm.com> | 2006-09-20 09:58:25 -0400 |
---|---|---|
committer | Martin Schwidefsky <schwidefsky@de.ibm.com> | 2006-09-20 09:58:25 -0400 |
commit | 1534c3820c26aca4e2567f97b8add8bea40e7e2b (patch) | |
tree | da76ec6d0c3abb099ffe7d542b3f0f6fe570957f /scripts/mod/file2alias.c | |
parent | 7561b974e0cbbdca1bb880b55200afd9a1a20737 (diff) |
[S390] zcrypt adjunct processor bus.
Add a bus for the adjunct processor interface. Up to 64 devices can
be connect to the ap bus interface, each device with 16 domains. That
makes 1024 message queues. The interface is asynchronous, the answer
to a message sent to a queue needs to be received at some later point
in time. Unfortunately the interface does not provide interrupts when
a message reply is pending. So the ap bus needs to implement some
fancy polling, each active queue is polled once per 1/HZ second or
continuously if an idle cpus exsists and the poll thread is activ
(see poll_thread parameter).
The ap bus uses the sysfs path /sys/bus/ap and has two bus attributes,
ap_domain and config_time. The ap_domain selects one of the 16 domains
to be used for this system. This limits the maximum number of ap devices
to 64. The config_time attribute contains the number of seconds between
two ap bus scans to find new devices.
The ap bus uses the modalias entries of the form "ap:tN" to autoload
the ap driver for hardware type N. Currently known types are:
3 - PCICC, 4 - PCICA, 5 - PCIXCC, 6 - CEX2A and 7 - CEX2C.
Signed-off-by: Cornelia Huck <cornelia.huck@de.ibm.com>
Signed-off-by: Ralph Wuerthner <rwuerthn@de.ibm.com>
Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
Diffstat (limited to 'scripts/mod/file2alias.c')
-rw-r--r-- | scripts/mod/file2alias.c | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/scripts/mod/file2alias.c b/scripts/mod/file2alias.c index e2de650d3dbf..de76da80443f 100644 --- a/scripts/mod/file2alias.c +++ b/scripts/mod/file2alias.c | |||
@@ -265,6 +265,14 @@ static int do_ccw_entry(const char *filename, | |||
265 | return 1; | 265 | return 1; |
266 | } | 266 | } |
267 | 267 | ||
268 | /* looks like: "ap:tN" */ | ||
269 | static int do_ap_entry(const char *filename, | ||
270 | struct ap_device_id *id, char *alias) | ||
271 | { | ||
272 | sprintf(alias, "ap:t%02X", id->dev_type); | ||
273 | return 1; | ||
274 | } | ||
275 | |||
268 | /* Looks like: "serio:tyNprNidNexN" */ | 276 | /* Looks like: "serio:tyNprNidNexN" */ |
269 | static int do_serio_entry(const char *filename, | 277 | static int do_serio_entry(const char *filename, |
270 | struct serio_device_id *id, char *alias) | 278 | struct serio_device_id *id, char *alias) |
@@ -503,6 +511,10 @@ void handle_moddevtable(struct module *mod, struct elf_info *info, | |||
503 | do_table(symval, sym->st_size, | 511 | do_table(symval, sym->st_size, |
504 | sizeof(struct ccw_device_id), "ccw", | 512 | sizeof(struct ccw_device_id), "ccw", |
505 | do_ccw_entry, mod); | 513 | do_ccw_entry, mod); |
514 | else if (sym_is(symname, "__mod_ap_device_table")) | ||
515 | do_table(symval, sym->st_size, | ||
516 | sizeof(struct ap_device_id), "ap", | ||
517 | do_ap_entry, mod); | ||
506 | else if (sym_is(symname, "__mod_serio_device_table")) | 518 | else if (sym_is(symname, "__mod_serio_device_table")) |
507 | do_table(symval, sym->st_size, | 519 | do_table(symval, sym->st_size, |
508 | sizeof(struct serio_device_id), "serio", | 520 | sizeof(struct serio_device_id), "serio", |