aboutsummaryrefslogtreecommitdiffstats
path: root/scripts/mod
diff options
context:
space:
mode:
authorMartin Schwidefsky <schwidefsky@de.ibm.com>2006-09-20 09:58:25 -0400
committerMartin Schwidefsky <schwidefsky@de.ibm.com>2006-09-20 09:58:25 -0400
commit1534c3820c26aca4e2567f97b8add8bea40e7e2b (patch)
treeda76ec6d0c3abb099ffe7d542b3f0f6fe570957f /scripts/mod
parent7561b974e0cbbdca1bb880b55200afd9a1a20737 (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')
-rw-r--r--scripts/mod/file2alias.c12
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" */
269static 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" */
269static int do_serio_entry(const char *filename, 277static 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",