2 * linux/drivers/s390/crypto/ap_bus.c
4 * Copyright (C) 2006 IBM Corporation
5 * Author(s): Cornelia Huck <cornelia.huck@de.ibm.com>
6 * Martin Schwidefsky <schwidefsky@de.ibm.com>
7 * Ralph Wuerthner <rwuerthn@de.ibm.com>
9 * Adjunct processor bus.
11 * This program is free software; you can redistribute it and/or modify
12 * it under the terms of the GNU General Public License as published by
13 * the Free Software Foundation; either version 2, or (at your option)
16 * This program is distributed in the hope that it will be useful,
17 * but WITHOUT ANY WARRANTY; without even the implied warranty of
18 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19 * GNU General Public License for more details.
21 * You should have received a copy of the GNU General Public License
22 * along with this program; if not, write to the Free Software
23 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
26 #include <linux/module.h>
27 #include <linux/init.h>
28 #include <linux/delay.h>
29 #include <linux/err.h>
30 #include <linux/interrupt.h>
31 #include <linux/workqueue.h>
32 #include <linux/notifier.h>
33 #include <linux/kthread.h>
34 #include <linux/mutex.h>
35 #include <asm/s390_rdev.h>
39 /* Some prototypes. */
40 static void ap_scan_bus(void *);
41 static void ap_poll_all(unsigned long);
42 static void ap_poll_timeout(unsigned long);
43 static int ap_poll_thread_start(void);
44 static void ap_poll_thread_stop(void);
49 MODULE_AUTHOR("IBM Corporation");
50 MODULE_DESCRIPTION("Adjunct Processor Bus driver, "
51 "Copyright 2006 IBM Corporation");
52 MODULE_LICENSE("GPL");
57 int ap_domain_index = -1; /* Adjunct Processor Domain Index */
58 module_param_named(domain, ap_domain_index, int, 0000);
59 MODULE_PARM_DESC(domain, "domain index for ap devices");
60 EXPORT_SYMBOL(ap_domain_index);
62 static int ap_thread_flag = 1;
63 module_param_named(poll_thread, ap_thread_flag, int, 0000);
64 MODULE_PARM_DESC(poll_thread, "Turn on/off poll thread, default is 1 (on).");
66 static struct device *ap_root_device = NULL;
69 * Workqueue & timer for bus rescan.
71 static struct workqueue_struct *ap_work_queue;
72 static struct timer_list ap_config_timer;
73 static int ap_config_time = AP_CONFIG_TIME;
74 static DECLARE_WORK(ap_config_work, ap_scan_bus, NULL);
77 * Tasklet & timer for AP request polling.
79 static struct timer_list ap_poll_timer = TIMER_INITIALIZER(ap_poll_timeout,0,0);
80 static DECLARE_TASKLET(ap_tasklet, ap_poll_all, 0);
81 static atomic_t ap_poll_requests = ATOMIC_INIT(0);
82 static DECLARE_WAIT_QUEUE_HEAD(ap_poll_wait);
83 static struct task_struct *ap_poll_kthread = NULL;
84 static DEFINE_MUTEX(ap_poll_thread_mutex);
87 * Test if ap instructions are available.
89 * Returns 0 if the ap instructions are installed.
91 static inline int ap_instructions_available(void)
93 register unsigned long reg0 asm ("0") = AP_MKQID(0,0);
94 register unsigned long reg1 asm ("1") = -ENODEV;
95 register unsigned long reg2 asm ("2") = 0UL;
98 " .long 0xb2af0000\n" /* PQAP(TAPQ) */
102 : "+d" (reg0), "+d" (reg1), "+d" (reg2) : : "cc" );
107 * Test adjunct processor queue.
108 * @qid: the ap queue number
109 * @queue_depth: pointer to queue depth value
110 * @device_type: pointer to device type value
112 * Returns ap queue status structure.
114 static inline struct ap_queue_status
115 ap_test_queue(ap_qid_t qid, int *queue_depth, int *device_type)
117 register unsigned long reg0 asm ("0") = qid;
118 register struct ap_queue_status reg1 asm ("1");
119 register unsigned long reg2 asm ("2") = 0UL;
121 asm volatile(".long 0xb2af0000" /* PQAP(TAPQ) */
122 : "+d" (reg0), "=d" (reg1), "+d" (reg2) : : "cc");
123 *device_type = (int) (reg2 >> 24);
124 *queue_depth = (int) (reg2 & 0xff);
129 * Reset adjunct processor queue.
130 * @qid: the ap queue number
132 * Returns ap queue status structure.
134 static inline struct ap_queue_status ap_reset_queue(ap_qid_t qid)
136 register unsigned long reg0 asm ("0") = qid | 0x01000000UL;
137 register struct ap_queue_status reg1 asm ("1");
138 register unsigned long reg2 asm ("2") = 0UL;
141 ".long 0xb2af0000" /* PQAP(RAPQ) */
142 : "+d" (reg0), "=d" (reg1), "+d" (reg2) : : "cc");
147 * Send message to adjunct processor queue.
148 * @qid: the ap queue number
149 * @psmid: the program supplied message identifier
150 * @msg: the message text
151 * @length: the message length
153 * Returns ap queue status structure.
155 * Condition code 1 on NQAP can't happen because the L bit is 1.
157 * Condition code 2 on NQAP also means the send is incomplete,
158 * because a segment boundary was reached. The NQAP is repeated.
160 static inline struct ap_queue_status
161 __ap_send(ap_qid_t qid, unsigned long long psmid, void *msg, size_t length)
163 typedef struct { char _[length]; } msgblock;
164 register unsigned long reg0 asm ("0") = qid | 0x40000000UL;
165 register struct ap_queue_status reg1 asm ("1");
166 register unsigned long reg2 asm ("2") = (unsigned long) msg;
167 register unsigned long reg3 asm ("3") = (unsigned long) length;
168 register unsigned long reg4 asm ("4") = (unsigned int) (psmid >> 32);
169 register unsigned long reg5 asm ("5") = (unsigned int) psmid;
172 "0: .long 0xb2ad0042\n" /* DQAP */
174 : "+d" (reg0), "=d" (reg1), "+d" (reg2), "+d" (reg3)
175 : "d" (reg4), "d" (reg5), "m" (*(msgblock *) msg)
180 int ap_send(ap_qid_t qid, unsigned long long psmid, void *msg, size_t length)
182 struct ap_queue_status status;
184 status = __ap_send(qid, psmid, msg, length);
185 switch (status.response_code) {
186 case AP_RESPONSE_NORMAL:
188 case AP_RESPONSE_Q_FULL:
190 default: /* Device is gone. */
194 EXPORT_SYMBOL(ap_send);
197 * Receive message from adjunct processor queue.
198 * @qid: the ap queue number
199 * @psmid: pointer to program supplied message identifier
200 * @msg: the message text
201 * @length: the message length
203 * Returns ap queue status structure.
205 * Condition code 1 on DQAP means the receive has taken place
206 * but only partially. The response is incomplete, hence the
209 * Condition code 2 on DQAP also means the receive is incomplete,
210 * this time because a segment boundary was reached. Again, the
213 * Note that gpr2 is used by the DQAP instruction to keep track of
214 * any 'residual' length, in case the instruction gets interrupted.
215 * Hence it gets zeroed before the instruction.
217 static inline struct ap_queue_status
218 __ap_recv(ap_qid_t qid, unsigned long long *psmid, void *msg, size_t length)
220 typedef struct { char _[length]; } msgblock;
221 register unsigned long reg0 asm("0") = qid | 0x80000000UL;
222 register struct ap_queue_status reg1 asm ("1");
223 register unsigned long reg2 asm("2") = 0UL;
224 register unsigned long reg4 asm("4") = (unsigned long) msg;
225 register unsigned long reg5 asm("5") = (unsigned long) length;
226 register unsigned long reg6 asm("6") = 0UL;
227 register unsigned long reg7 asm("7") = 0UL;
231 "0: .long 0xb2ae0064\n"
233 : "+d" (reg0), "=d" (reg1), "+d" (reg2),
234 "+d" (reg4), "+d" (reg5), "+d" (reg6), "+d" (reg7),
235 "=m" (*(msgblock *) msg) : : "cc" );
236 *psmid = (((unsigned long long) reg6) << 32) + reg7;
240 int ap_recv(ap_qid_t qid, unsigned long long *psmid, void *msg, size_t length)
242 struct ap_queue_status status;
244 status = __ap_recv(qid, psmid, msg, length);
245 switch (status.response_code) {
246 case AP_RESPONSE_NORMAL:
248 case AP_RESPONSE_NO_PENDING_REPLY:
249 if (status.queue_empty)
256 EXPORT_SYMBOL(ap_recv);
259 * Check if an AP queue is available. The test is repeated for
260 * AP_MAX_RESET times.
261 * @qid: the ap queue number
262 * @queue_depth: pointer to queue depth value
263 * @device_type: pointer to device type value
265 static int ap_query_queue(ap_qid_t qid, int *queue_depth, int *device_type)
267 struct ap_queue_status status;
268 int t_depth, t_device_type, rc, i;
271 for (i = 0; i < AP_MAX_RESET; i++) {
272 status = ap_test_queue(qid, &t_depth, &t_device_type);
273 switch (status.response_code) {
274 case AP_RESPONSE_NORMAL:
275 *queue_depth = t_depth + 1;
276 *device_type = t_device_type;
279 case AP_RESPONSE_Q_NOT_AVAIL:
282 case AP_RESPONSE_RESET_IN_PROGRESS:
284 case AP_RESPONSE_DECONFIGURED:
287 case AP_RESPONSE_CHECKSTOPPED:
290 case AP_RESPONSE_BUSY:
297 if (i < AP_MAX_RESET - 1)
304 * Reset an AP queue and wait for it to become available again.
305 * @qid: the ap queue number
307 static int ap_init_queue(ap_qid_t qid)
309 struct ap_queue_status status;
313 status = ap_reset_queue(qid);
314 for (i = 0; i < AP_MAX_RESET; i++) {
315 switch (status.response_code) {
316 case AP_RESPONSE_NORMAL:
317 if (status.queue_empty)
320 case AP_RESPONSE_Q_NOT_AVAIL:
321 case AP_RESPONSE_DECONFIGURED:
322 case AP_RESPONSE_CHECKSTOPPED:
323 i = AP_MAX_RESET; /* return with -ENODEV */
325 case AP_RESPONSE_RESET_IN_PROGRESS:
326 case AP_RESPONSE_BUSY:
332 if (i < AP_MAX_RESET - 1) {
334 status = ap_test_queue(qid, &dummy, &dummy);
341 * AP device related attributes.
343 static ssize_t ap_hwtype_show(struct device *dev,
344 struct device_attribute *attr, char *buf)
346 struct ap_device *ap_dev = to_ap_dev(dev);
347 return snprintf(buf, PAGE_SIZE, "%d\n", ap_dev->device_type);
349 static DEVICE_ATTR(hwtype, 0444, ap_hwtype_show, NULL);
351 static ssize_t ap_depth_show(struct device *dev, struct device_attribute *attr,
354 struct ap_device *ap_dev = to_ap_dev(dev);
355 return snprintf(buf, PAGE_SIZE, "%d\n", ap_dev->queue_depth);
357 static DEVICE_ATTR(depth, 0444, ap_depth_show, NULL);
359 static ssize_t ap_request_count_show(struct device *dev,
360 struct device_attribute *attr,
363 struct ap_device *ap_dev = to_ap_dev(dev);
366 spin_lock_bh(&ap_dev->lock);
367 rc = snprintf(buf, PAGE_SIZE, "%d\n", ap_dev->total_request_count);
368 spin_unlock_bh(&ap_dev->lock);
372 static DEVICE_ATTR(request_count, 0444, ap_request_count_show, NULL);
374 static ssize_t ap_modalias_show(struct device *dev,
375 struct device_attribute *attr, char *buf)
377 return sprintf(buf, "ap:t%02X", to_ap_dev(dev)->device_type);
380 static DEVICE_ATTR(modalias, 0444, ap_modalias_show, NULL);
382 static struct attribute *ap_dev_attrs[] = {
383 &dev_attr_hwtype.attr,
384 &dev_attr_depth.attr,
385 &dev_attr_request_count.attr,
386 &dev_attr_modalias.attr,
389 static struct attribute_group ap_dev_attr_group = {
390 .attrs = ap_dev_attrs
394 * AP bus driver registration/unregistration.
396 static int ap_bus_match(struct device *dev, struct device_driver *drv)
398 struct ap_device *ap_dev = to_ap_dev(dev);
399 struct ap_driver *ap_drv = to_ap_drv(drv);
400 struct ap_device_id *id;
403 * Compare device type of the device with the list of
404 * supported types of the device_driver.
406 for (id = ap_drv->ids; id->match_flags; id++) {
407 if ((id->match_flags & AP_DEVICE_ID_MATCH_DEVICE_TYPE) &&
408 (id->dev_type != ap_dev->device_type))
416 * uevent function for AP devices. It sets up a single environment
417 * variable DEV_TYPE which contains the hardware device type.
419 static int ap_uevent (struct device *dev, char **envp, int num_envp,
420 char *buffer, int buffer_size)
422 struct ap_device *ap_dev = to_ap_dev(dev);
428 /* Set up DEV_TYPE environment variable. */
430 length = scnprintf(buffer, buffer_size, "DEV_TYPE=%04X",
431 ap_dev->device_type);
432 if (buffer_size - length <= 0)
438 static struct bus_type ap_bus_type = {
440 .match = &ap_bus_match,
441 .uevent = &ap_uevent,
444 static int ap_device_probe(struct device *dev)
446 struct ap_device *ap_dev = to_ap_dev(dev);
447 struct ap_driver *ap_drv = to_ap_drv(dev->driver);
450 ap_dev->drv = ap_drv;
451 rc = ap_drv->probe ? ap_drv->probe(ap_dev) : -ENODEV;
456 * Flush all requests from the request/pending queue of an AP device.
457 * @ap_dev: pointer to the AP device.
459 static inline void __ap_flush_queue(struct ap_device *ap_dev)
461 struct ap_message *ap_msg, *next;
463 list_for_each_entry_safe(ap_msg, next, &ap_dev->pendingq, list) {
464 list_del_init(&ap_msg->list);
465 ap_dev->pendingq_count--;
466 ap_dev->drv->receive(ap_dev, ap_msg, ERR_PTR(-ENODEV));
468 list_for_each_entry_safe(ap_msg, next, &ap_dev->requestq, list) {
469 list_del_init(&ap_msg->list);
470 ap_dev->requestq_count--;
471 ap_dev->drv->receive(ap_dev, ap_msg, ERR_PTR(-ENODEV));
475 void ap_flush_queue(struct ap_device *ap_dev)
477 spin_lock_bh(&ap_dev->lock);
478 __ap_flush_queue(ap_dev);
479 spin_unlock_bh(&ap_dev->lock);
481 EXPORT_SYMBOL(ap_flush_queue);
483 static int ap_device_remove(struct device *dev)
485 struct ap_device *ap_dev = to_ap_dev(dev);
486 struct ap_driver *ap_drv = ap_dev->drv;
488 ap_flush_queue(ap_dev);
490 ap_drv->remove(ap_dev);
494 int ap_driver_register(struct ap_driver *ap_drv, struct module *owner,
497 struct device_driver *drv = &ap_drv->driver;
499 drv->bus = &ap_bus_type;
500 drv->probe = ap_device_probe;
501 drv->remove = ap_device_remove;
504 return driver_register(drv);
506 EXPORT_SYMBOL(ap_driver_register);
508 void ap_driver_unregister(struct ap_driver *ap_drv)
510 driver_unregister(&ap_drv->driver);
512 EXPORT_SYMBOL(ap_driver_unregister);
517 static ssize_t ap_domain_show(struct bus_type *bus, char *buf)
519 return snprintf(buf, PAGE_SIZE, "%d\n", ap_domain_index);
522 static BUS_ATTR(ap_domain, 0444, ap_domain_show, NULL);
524 static ssize_t ap_config_time_show(struct bus_type *bus, char *buf)
526 return snprintf(buf, PAGE_SIZE, "%d\n", ap_config_time);
529 static ssize_t ap_config_time_store(struct bus_type *bus,
530 const char *buf, size_t count)
534 if (sscanf(buf, "%d\n", &time) != 1 || time < 5 || time > 120)
536 ap_config_time = time;
537 if (!timer_pending(&ap_config_timer) ||
538 !mod_timer(&ap_config_timer, jiffies + ap_config_time * HZ)) {
539 ap_config_timer.expires = jiffies + ap_config_time * HZ;
540 add_timer(&ap_config_timer);
545 static BUS_ATTR(config_time, 0644, ap_config_time_show, ap_config_time_store);
547 static ssize_t ap_poll_thread_show(struct bus_type *bus, char *buf)
549 return snprintf(buf, PAGE_SIZE, "%d\n", ap_poll_kthread ? 1 : 0);
552 static ssize_t ap_poll_thread_store(struct bus_type *bus,
553 const char *buf, size_t count)
557 if (sscanf(buf, "%d\n", &flag) != 1)
560 rc = ap_poll_thread_start();
565 ap_poll_thread_stop();
569 static BUS_ATTR(poll_thread, 0644, ap_poll_thread_show, ap_poll_thread_store);
571 static struct bus_attribute *const ap_bus_attrs[] = {
573 &bus_attr_config_time,
574 &bus_attr_poll_thread,
579 * Pick one of the 16 ap domains.
581 static inline int ap_select_domain(void)
583 int queue_depth, device_type, count, max_count, best_domain;
587 * We want to use a single domain. Either the one specified with
588 * the "domain=" parameter or the domain with the maximum number
591 if (ap_domain_index >= 0 && ap_domain_index < AP_DOMAINS)
592 /* Domain has already been selected. */
596 for (i = 0; i < AP_DOMAINS; i++) {
598 for (j = 0; j < AP_DEVICES; j++) {
599 ap_qid_t qid = AP_MKQID(j, i);
600 rc = ap_query_queue(qid, &queue_depth, &device_type);
605 if (count > max_count) {
610 if (best_domain >= 0){
611 ap_domain_index = best_domain;
618 * Find the device type if query queue returned a device type of 0.
619 * @ap_dev: pointer to the AP device.
621 static int ap_probe_device_type(struct ap_device *ap_dev)
623 static unsigned char msg[] = {
624 0x00,0x06,0x00,0x00,0x00,0x00,0x00,0x00,
625 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
626 0x00,0x00,0x00,0x58,0x00,0x00,0x00,0x00,
627 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
628 0x01,0x00,0x43,0x43,0x41,0x2d,0x41,0x50,
629 0x50,0x4c,0x20,0x20,0x20,0x01,0x01,0x01,
630 0x00,0x00,0x00,0x00,0x50,0x4b,0x00,0x00,
631 0x00,0x00,0x01,0x1c,0x00,0x00,0x00,0x00,
632 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
633 0x00,0x00,0x05,0xb8,0x00,0x00,0x00,0x00,
634 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
635 0x70,0x00,0x41,0x00,0x00,0x00,0x00,0x00,
636 0x00,0x00,0x54,0x32,0x01,0x00,0xa0,0x00,
637 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
638 0x00,0x00,0x00,0x00,0xb8,0x05,0x00,0x00,
639 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
640 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
641 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
642 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
643 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
644 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
645 0x00,0x00,0x0a,0x00,0x00,0x00,0x00,0x00,
646 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
647 0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,
648 0x49,0x43,0x53,0x46,0x20,0x20,0x20,0x20,
649 0x50,0x4b,0x0a,0x00,0x50,0x4b,0x43,0x53,
650 0x2d,0x31,0x2e,0x32,0x37,0x00,0x11,0x22,
651 0x33,0x44,0x55,0x66,0x77,0x88,0x99,0x00,
652 0x11,0x22,0x33,0x44,0x55,0x66,0x77,0x88,
653 0x99,0x00,0x11,0x22,0x33,0x44,0x55,0x66,
654 0x77,0x88,0x99,0x00,0x11,0x22,0x33,0x44,
655 0x55,0x66,0x77,0x88,0x99,0x00,0x11,0x22,
656 0x33,0x44,0x55,0x66,0x77,0x88,0x99,0x00,
657 0x11,0x22,0x33,0x5d,0x00,0x5b,0x00,0x77,
658 0x88,0x1e,0x00,0x00,0x57,0x00,0x00,0x00,
659 0x00,0x04,0x00,0x00,0x4f,0x00,0x00,0x00,
660 0x03,0x02,0x00,0x00,0x40,0x01,0x00,0x01,
661 0xce,0x02,0x68,0x2d,0x5f,0xa9,0xde,0x0c,
662 0xf6,0xd2,0x7b,0x58,0x4b,0xf9,0x28,0x68,
663 0x3d,0xb4,0xf4,0xef,0x78,0xd5,0xbe,0x66,
664 0x63,0x42,0xef,0xf8,0xfd,0xa4,0xf8,0xb0,
665 0x8e,0x29,0xc2,0xc9,0x2e,0xd8,0x45,0xb8,
666 0x53,0x8c,0x6f,0x4e,0x72,0x8f,0x6c,0x04,
667 0x9c,0x88,0xfc,0x1e,0xc5,0x83,0x55,0x57,
668 0xf7,0xdd,0xfd,0x4f,0x11,0x36,0x95,0x5d,
670 struct ap_queue_status status;
671 unsigned long long psmid;
675 reply = (void *) get_zeroed_page(GFP_KERNEL);
681 status = __ap_send(ap_dev->qid, 0x0102030405060708ULL,
683 if (status.response_code != AP_RESPONSE_NORMAL) {
688 /* Wait for the test message to complete. */
689 for (i = 0; i < 6; i++) {
691 status = __ap_recv(ap_dev->qid, &psmid, reply, 4096);
692 if (status.response_code == AP_RESPONSE_NORMAL &&
693 psmid == 0x0102030405060708ULL)
698 if (reply[0] == 0x00 && reply[1] == 0x86)
699 ap_dev->device_type = AP_DEVICE_TYPE_PCICC;
701 ap_dev->device_type = AP_DEVICE_TYPE_PCICA;
707 free_page((unsigned long) reply);
713 * Scan the ap bus for new devices.
715 static int __ap_scan_bus(struct device *dev, void *data)
717 return to_ap_dev(dev)->qid == (ap_qid_t)(unsigned long) data;
720 static void ap_device_release(struct device *dev)
722 struct ap_device *ap_dev = to_ap_dev(dev);
727 static void ap_scan_bus(void *data)
729 struct ap_device *ap_dev;
732 int queue_depth, device_type;
735 if (ap_select_domain() != 0)
737 for (i = 0; i < AP_DEVICES; i++) {
738 qid = AP_MKQID(i, ap_domain_index);
739 dev = bus_find_device(&ap_bus_type, NULL,
740 (void *)(unsigned long)qid,
742 rc = ap_query_queue(qid, &queue_depth, &device_type);
745 device_unregister(dev);
754 rc = ap_init_queue(qid);
757 ap_dev = kzalloc(sizeof(*ap_dev), GFP_KERNEL);
761 ap_dev->queue_depth = queue_depth;
762 ap_dev->unregistered = 1;
763 spin_lock_init(&ap_dev->lock);
764 INIT_LIST_HEAD(&ap_dev->pendingq);
765 INIT_LIST_HEAD(&ap_dev->requestq);
766 if (device_type == 0)
767 ap_probe_device_type(ap_dev);
769 ap_dev->device_type = device_type;
771 ap_dev->device.bus = &ap_bus_type;
772 ap_dev->device.parent = ap_root_device;
773 snprintf(ap_dev->device.bus_id, BUS_ID_SIZE, "card%02x",
774 AP_QID_DEVICE(ap_dev->qid));
775 ap_dev->device.release = ap_device_release;
776 rc = device_register(&ap_dev->device);
781 /* Add device attributes. */
782 rc = sysfs_create_group(&ap_dev->device.kobj,
785 spin_lock_bh(&ap_dev->lock);
786 ap_dev->unregistered = 0;
787 spin_unlock_bh(&ap_dev->lock);
790 device_unregister(&ap_dev->device);
795 ap_config_timeout(unsigned long ptr)
797 queue_work(ap_work_queue, &ap_config_work);
798 ap_config_timer.expires = jiffies + ap_config_time * HZ;
799 add_timer(&ap_config_timer);
803 * Set up the timer to run the poll tasklet
805 static inline void ap_schedule_poll_timer(void)
807 if (timer_pending(&ap_poll_timer))
809 mod_timer(&ap_poll_timer, jiffies + AP_POLL_TIME);
813 * Receive pending reply messages from an AP device.
814 * @ap_dev: pointer to the AP device
815 * @flags: pointer to control flags, bit 2^0 is set if another poll is
816 * required, bit 2^1 is set if the poll timer needs to get armed
817 * Returns 0 if the device is still present, -ENODEV if not.
819 static inline int ap_poll_read(struct ap_device *ap_dev, unsigned long *flags)
821 struct ap_queue_status status;
822 struct ap_message *ap_msg;
824 if (ap_dev->queue_count <= 0)
826 status = __ap_recv(ap_dev->qid, &ap_dev->reply->psmid,
827 ap_dev->reply->message, ap_dev->reply->length);
828 switch (status.response_code) {
829 case AP_RESPONSE_NORMAL:
830 atomic_dec(&ap_poll_requests);
831 ap_dev->queue_count--;
832 list_for_each_entry(ap_msg, &ap_dev->pendingq, list) {
833 if (ap_msg->psmid != ap_dev->reply->psmid)
835 list_del_init(&ap_msg->list);
836 ap_dev->pendingq_count--;
837 ap_dev->drv->receive(ap_dev, ap_msg, ap_dev->reply);
840 if (ap_dev->queue_count > 0)
843 case AP_RESPONSE_NO_PENDING_REPLY:
844 if (status.queue_empty) {
845 /* The card shouldn't forget requests but who knows. */
846 ap_dev->queue_count = 0;
847 list_splice_init(&ap_dev->pendingq, &ap_dev->requestq);
848 ap_dev->requestq_count += ap_dev->pendingq_count;
849 ap_dev->pendingq_count = 0;
860 * Send messages from the request queue to an AP device.
861 * @ap_dev: pointer to the AP device
862 * @flags: pointer to control flags, bit 2^0 is set if another poll is
863 * required, bit 2^1 is set if the poll timer needs to get armed
864 * Returns 0 if the device is still present, -ENODEV if not.
866 static inline int ap_poll_write(struct ap_device *ap_dev, unsigned long *flags)
868 struct ap_queue_status status;
869 struct ap_message *ap_msg;
871 if (ap_dev->requestq_count <= 0 ||
872 ap_dev->queue_count >= ap_dev->queue_depth)
874 /* Start the next request on the queue. */
875 ap_msg = list_entry(ap_dev->requestq.next, struct ap_message, list);
876 status = __ap_send(ap_dev->qid, ap_msg->psmid,
877 ap_msg->message, ap_msg->length);
878 switch (status.response_code) {
879 case AP_RESPONSE_NORMAL:
880 atomic_inc(&ap_poll_requests);
881 ap_dev->queue_count++;
882 list_move_tail(&ap_msg->list, &ap_dev->pendingq);
883 ap_dev->requestq_count--;
884 ap_dev->pendingq_count++;
885 if (ap_dev->queue_count < ap_dev->queue_depth &&
886 ap_dev->requestq_count > 0)
890 case AP_RESPONSE_Q_FULL:
893 case AP_RESPONSE_MESSAGE_TOO_BIG:
902 * Poll AP device for pending replies and send new messages. If either
903 * ap_poll_read or ap_poll_write returns -ENODEV unregister the device.
904 * @ap_dev: pointer to the bus device
905 * @flags: pointer to control flags, bit 2^0 is set if another poll is
906 * required, bit 2^1 is set if the poll timer needs to get armed
909 static inline int ap_poll_queue(struct ap_device *ap_dev, unsigned long *flags)
913 rc = ap_poll_read(ap_dev, flags);
916 return ap_poll_write(ap_dev, flags);
920 * Queue a message to a device.
921 * @ap_dev: pointer to the AP device
922 * @ap_msg: the message to be queued
924 static int __ap_queue_message(struct ap_device *ap_dev, struct ap_message *ap_msg)
926 struct ap_queue_status status;
928 if (list_empty(&ap_dev->requestq) &&
929 ap_dev->queue_count < ap_dev->queue_depth) {
930 status = __ap_send(ap_dev->qid, ap_msg->psmid,
931 ap_msg->message, ap_msg->length);
932 switch (status.response_code) {
933 case AP_RESPONSE_NORMAL:
934 list_add_tail(&ap_msg->list, &ap_dev->pendingq);
935 atomic_inc(&ap_poll_requests);
936 ap_dev->pendingq_count++;
937 ap_dev->queue_count++;
938 ap_dev->total_request_count++;
940 case AP_RESPONSE_Q_FULL:
941 list_add_tail(&ap_msg->list, &ap_dev->requestq);
942 ap_dev->requestq_count++;
943 ap_dev->total_request_count++;
945 case AP_RESPONSE_MESSAGE_TOO_BIG:
946 ap_dev->drv->receive(ap_dev, ap_msg, ERR_PTR(-EINVAL));
948 default: /* Device is gone. */
949 ap_dev->drv->receive(ap_dev, ap_msg, ERR_PTR(-ENODEV));
953 list_add_tail(&ap_msg->list, &ap_dev->requestq);
954 ap_dev->requestq_count++;
955 ap_dev->total_request_count++;
958 ap_schedule_poll_timer();
962 void ap_queue_message(struct ap_device *ap_dev, struct ap_message *ap_msg)
967 spin_lock_bh(&ap_dev->lock);
968 if (!ap_dev->unregistered) {
969 /* Make room on the queue by polling for finished requests. */
970 rc = ap_poll_queue(ap_dev, &flags);
972 rc = __ap_queue_message(ap_dev, ap_msg);
974 wake_up(&ap_poll_wait);
976 ap_dev->unregistered = 1;
978 ap_dev->drv->receive(ap_dev, ap_msg, ERR_PTR(-ENODEV));
981 spin_unlock_bh(&ap_dev->lock);
983 device_unregister(&ap_dev->device);
985 EXPORT_SYMBOL(ap_queue_message);
988 * Cancel a crypto request. This is done by removing the request
989 * from the devive pendingq or requestq queue. Note that the
990 * request stays on the AP queue. When it finishes the message
991 * reply will be discarded because the psmid can't be found.
992 * @ap_dev: AP device that has the message queued
993 * @ap_msg: the message that is to be removed
995 void ap_cancel_message(struct ap_device *ap_dev, struct ap_message *ap_msg)
997 struct ap_message *tmp;
999 spin_lock_bh(&ap_dev->lock);
1000 if (!list_empty(&ap_msg->list)) {
1001 list_for_each_entry(tmp, &ap_dev->pendingq, list)
1002 if (tmp->psmid == ap_msg->psmid) {
1003 ap_dev->pendingq_count--;
1006 ap_dev->requestq_count--;
1008 list_del_init(&ap_msg->list);
1010 spin_unlock_bh(&ap_dev->lock);
1012 EXPORT_SYMBOL(ap_cancel_message);
1015 * AP receive polling for finished AP requests
1017 static void ap_poll_timeout(unsigned long unused)
1019 tasklet_schedule(&ap_tasklet);
1023 * Poll all AP devices on the bus in a round robin fashion. Continue
1024 * polling until bit 2^0 of the control flags is not set. If bit 2^1
1025 * of the control flags has been set arm the poll timer.
1027 static int __ap_poll_all(struct device *dev, void *data)
1029 struct ap_device *ap_dev = to_ap_dev(dev);
1032 spin_lock(&ap_dev->lock);
1033 if (!ap_dev->unregistered) {
1034 rc = ap_poll_queue(to_ap_dev(dev), (unsigned long *) data);
1036 ap_dev->unregistered = 1;
1039 spin_unlock(&ap_dev->lock);
1041 device_unregister(&ap_dev->device);
1045 static void ap_poll_all(unsigned long dummy)
1047 unsigned long flags;
1051 bus_for_each_dev(&ap_bus_type, NULL, &flags, __ap_poll_all);
1052 } while (flags & 1);
1054 ap_schedule_poll_timer();
1058 * AP bus poll thread. The purpose of this thread is to poll for
1059 * finished requests in a loop if there is a "free" cpu - that is
1060 * a cpu that doesn't have anything better to do. The polling stops
1061 * as soon as there is another task or if all messages have been
1064 static int ap_poll_thread(void *data)
1066 DECLARE_WAITQUEUE(wait, current);
1067 unsigned long flags;
1070 set_user_nice(current, 19);
1072 if (need_resched()) {
1076 add_wait_queue(&ap_poll_wait, &wait);
1077 set_current_state(TASK_INTERRUPTIBLE);
1078 if (kthread_should_stop())
1080 requests = atomic_read(&ap_poll_requests);
1083 set_current_state(TASK_RUNNING);
1084 remove_wait_queue(&ap_poll_wait, &wait);
1088 bus_for_each_dev(&ap_bus_type, NULL, &flags, __ap_poll_all);
1091 set_current_state(TASK_RUNNING);
1092 remove_wait_queue(&ap_poll_wait, &wait);
1096 static int ap_poll_thread_start(void)
1100 mutex_lock(&ap_poll_thread_mutex);
1101 if (!ap_poll_kthread) {
1102 ap_poll_kthread = kthread_run(ap_poll_thread, NULL, "appoll");
1103 rc = IS_ERR(ap_poll_kthread) ? PTR_ERR(ap_poll_kthread) : 0;
1105 ap_poll_kthread = NULL;
1109 mutex_unlock(&ap_poll_thread_mutex);
1113 static void ap_poll_thread_stop(void)
1115 mutex_lock(&ap_poll_thread_mutex);
1116 if (ap_poll_kthread) {
1117 kthread_stop(ap_poll_kthread);
1118 ap_poll_kthread = NULL;
1120 mutex_unlock(&ap_poll_thread_mutex);
1124 * The module initialization code.
1126 int __init ap_module_init(void)
1130 if (ap_domain_index < -1 || ap_domain_index >= AP_DOMAINS) {
1131 printk(KERN_WARNING "Invalid param: domain = %d. "
1132 " Not loading.\n", ap_domain_index);
1135 if (ap_instructions_available() != 0) {
1136 printk(KERN_WARNING "AP instructions not installed.\n");
1140 /* Create /sys/bus/ap. */
1141 rc = bus_register(&ap_bus_type);
1144 for (i = 0; ap_bus_attrs[i]; i++) {
1145 rc = bus_create_file(&ap_bus_type, ap_bus_attrs[i]);
1150 /* Create /sys/devices/ap. */
1151 ap_root_device = s390_root_dev_register("ap");
1152 rc = IS_ERR(ap_root_device) ? PTR_ERR(ap_root_device) : 0;
1156 ap_work_queue = create_singlethread_workqueue("kapwork");
1157 if (!ap_work_queue) {
1162 if (ap_select_domain() == 0)
1165 /* Setup the ap bus rescan timer. */
1166 init_timer(&ap_config_timer);
1167 ap_config_timer.function = ap_config_timeout;
1168 ap_config_timer.data = 0;
1169 ap_config_timer.expires = jiffies + ap_config_time * HZ;
1170 add_timer(&ap_config_timer);
1172 /* Start the low priority AP bus poll thread. */
1173 if (ap_thread_flag) {
1174 rc = ap_poll_thread_start();
1182 del_timer_sync(&ap_config_timer);
1183 del_timer_sync(&ap_poll_timer);
1184 destroy_workqueue(ap_work_queue);
1186 s390_root_dev_unregister(ap_root_device);
1189 bus_remove_file(&ap_bus_type, ap_bus_attrs[i]);
1190 bus_unregister(&ap_bus_type);
1195 static int __ap_match_all(struct device *dev, void *data)
1201 * The module termination code
1203 void ap_module_exit(void)
1208 ap_poll_thread_stop();
1209 del_timer_sync(&ap_config_timer);
1210 del_timer_sync(&ap_poll_timer);
1211 destroy_workqueue(ap_work_queue);
1212 s390_root_dev_unregister(ap_root_device);
1213 while ((dev = bus_find_device(&ap_bus_type, NULL, NULL,
1216 device_unregister(dev);
1219 for (i = 0; ap_bus_attrs[i]; i++)
1220 bus_remove_file(&ap_bus_type, ap_bus_attrs[i]);
1221 bus_unregister(&ap_bus_type);
1224 #ifndef CONFIG_ZCRYPT_MONOLITHIC
1225 module_init(ap_module_init);
1226 module_exit(ap_module_exit);