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>
8 * Felix Beck <felix.beck@de.ibm.com>
10 * Adjunct processor bus.
12 * This program is free software; you can redistribute it and/or modify
13 * it under the terms of the GNU General Public License as published by
14 * the Free Software Foundation; either version 2, or (at your option)
17 * This program is distributed in the hope that it will be useful,
18 * but WITHOUT ANY WARRANTY; without even the implied warranty of
19 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
20 * GNU General Public License for more details.
22 * You should have received a copy of the GNU General Public License
23 * along with this program; if not, write to the Free Software
24 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
27 #define KMSG_COMPONENT "ap"
28 #define pr_fmt(fmt) KMSG_COMPONENT ": " fmt
30 #include <linux/module.h>
31 #include <linux/init.h>
32 #include <linux/delay.h>
33 #include <linux/err.h>
34 #include <linux/interrupt.h>
35 #include <linux/workqueue.h>
36 #include <linux/notifier.h>
37 #include <linux/kthread.h>
38 #include <linux/mutex.h>
39 #include <asm/s390_rdev.h>
40 #include <asm/reset.h>
42 #include <asm/atomic.h>
43 #include <asm/system.h>
45 #include <linux/hrtimer.h>
46 #include <linux/ktime.h>
50 /* Some prototypes. */
51 static void ap_scan_bus(struct work_struct *);
52 static void ap_poll_all(unsigned long);
53 static enum hrtimer_restart ap_poll_timeout(struct hrtimer *);
54 static int ap_poll_thread_start(void);
55 static void ap_poll_thread_stop(void);
56 static void ap_request_timeout(unsigned long);
57 static inline void ap_schedule_poll_timer(void);
62 MODULE_AUTHOR("IBM Corporation");
63 MODULE_DESCRIPTION("Adjunct Processor Bus driver, "
64 "Copyright 2006 IBM Corporation");
65 MODULE_LICENSE("GPL");
70 int ap_domain_index = -1; /* Adjunct Processor Domain Index */
71 module_param_named(domain, ap_domain_index, int, 0000);
72 MODULE_PARM_DESC(domain, "domain index for ap devices");
73 EXPORT_SYMBOL(ap_domain_index);
75 static int ap_thread_flag = 0;
76 module_param_named(poll_thread, ap_thread_flag, int, 0000);
77 MODULE_PARM_DESC(poll_thread, "Turn on/off poll thread, default is 0 (off).");
79 static struct device *ap_root_device = NULL;
80 static DEFINE_SPINLOCK(ap_device_list_lock);
81 static LIST_HEAD(ap_device_list);
84 * Workqueue & timer for bus rescan.
86 static struct workqueue_struct *ap_work_queue;
87 static struct timer_list ap_config_timer;
88 static int ap_config_time = AP_CONFIG_TIME;
89 static DECLARE_WORK(ap_config_work, ap_scan_bus);
92 * Tasklet & timer for AP request polling and interrupts
94 static DECLARE_TASKLET(ap_tasklet, ap_poll_all, 0);
95 static atomic_t ap_poll_requests = ATOMIC_INIT(0);
96 static DECLARE_WAIT_QUEUE_HEAD(ap_poll_wait);
97 static struct task_struct *ap_poll_kthread = NULL;
98 static DEFINE_MUTEX(ap_poll_thread_mutex);
99 static void *ap_interrupt_indicator;
100 static struct hrtimer ap_poll_timer;
101 /* In LPAR poll with 4kHz frequency. Poll every 250000 nanoseconds.
102 * If z/VM change to 1500000 nanoseconds to adjust to z/VM polling.*/
103 static unsigned long long poll_timeout = 250000;
106 * ap_using_interrupts() - Returns non-zero if interrupt support is
109 static inline int ap_using_interrupts(void)
111 return ap_interrupt_indicator != NULL;
115 * ap_intructions_available() - Test if AP instructions are available.
117 * Returns 0 if the AP instructions are installed.
119 static inline int ap_instructions_available(void)
121 register unsigned long reg0 asm ("0") = AP_MKQID(0,0);
122 register unsigned long reg1 asm ("1") = -ENODEV;
123 register unsigned long reg2 asm ("2") = 0UL;
126 " .long 0xb2af0000\n" /* PQAP(TAPQ) */
130 : "+d" (reg0), "+d" (reg1), "+d" (reg2) : : "cc" );
135 * ap_interrupts_available(): Test if AP interrupts are available.
137 * Returns 1 if AP interrupts are available.
139 static int ap_interrupts_available(void)
141 unsigned long long facility_bits[2];
143 if (stfle(facility_bits, 2) <= 1)
145 if (!(facility_bits[0] & (1ULL << 61)) ||
146 !(facility_bits[1] & (1ULL << 62)))
152 * ap_test_queue(): Test adjunct processor queue.
153 * @qid: The AP queue number
154 * @queue_depth: Pointer to queue depth value
155 * @device_type: Pointer to device type value
157 * Returns AP queue status structure.
159 static inline struct ap_queue_status
160 ap_test_queue(ap_qid_t qid, int *queue_depth, int *device_type)
162 register unsigned long reg0 asm ("0") = qid;
163 register struct ap_queue_status reg1 asm ("1");
164 register unsigned long reg2 asm ("2") = 0UL;
166 asm volatile(".long 0xb2af0000" /* PQAP(TAPQ) */
167 : "+d" (reg0), "=d" (reg1), "+d" (reg2) : : "cc");
168 *device_type = (int) (reg2 >> 24);
169 *queue_depth = (int) (reg2 & 0xff);
174 * ap_reset_queue(): Reset adjunct processor queue.
175 * @qid: The AP queue number
177 * Returns AP queue status structure.
179 static inline struct ap_queue_status ap_reset_queue(ap_qid_t qid)
181 register unsigned long reg0 asm ("0") = qid | 0x01000000UL;
182 register struct ap_queue_status reg1 asm ("1");
183 register unsigned long reg2 asm ("2") = 0UL;
186 ".long 0xb2af0000" /* PQAP(RAPQ) */
187 : "+d" (reg0), "=d" (reg1), "+d" (reg2) : : "cc");
193 * ap_queue_interruption_control(): Enable interruption for a specific AP.
194 * @qid: The AP queue number
195 * @ind: The notification indicator byte
197 * Returns AP queue status.
199 static inline struct ap_queue_status
200 ap_queue_interruption_control(ap_qid_t qid, void *ind)
202 register unsigned long reg0 asm ("0") = qid | 0x03000000UL;
203 register unsigned long reg1_in asm ("1") = 0x0000800000000000UL | AP_ISC;
204 register struct ap_queue_status reg1_out asm ("1");
205 register void *reg2 asm ("2") = ind;
207 ".long 0xb2af0000" /* PQAP(RAPQ) */
208 : "+d" (reg0), "+d" (reg1_in), "=d" (reg1_out), "+d" (reg2)
216 * ap_queue_enable_interruption(): Enable interruption on an AP.
217 * @qid: The AP queue number
218 * @ind: the notification indicator byte
220 * Enables interruption on AP queue via ap_queue_interruption_control(). Based
221 * on the return value it waits a while and tests the AP queue if interrupts
222 * have been switched on using ap_test_queue().
224 static int ap_queue_enable_interruption(ap_qid_t qid, void *ind)
227 struct ap_queue_status status;
228 int t_depth, t_device_type, rc, i;
231 status = ap_queue_interruption_control(qid, ind);
233 for (i = 0; i < AP_MAX_RESET; i++) {
234 switch (status.response_code) {
235 case AP_RESPONSE_NORMAL:
236 if (status.int_enabled)
239 case AP_RESPONSE_RESET_IN_PROGRESS:
240 case AP_RESPONSE_BUSY:
242 case AP_RESPONSE_Q_NOT_AVAIL:
243 case AP_RESPONSE_DECONFIGURED:
244 case AP_RESPONSE_CHECKSTOPPED:
245 case AP_RESPONSE_INVALID_ADDRESS:
247 case AP_RESPONSE_OTHERWISE_CHANGED:
248 if (status.int_enabled)
254 if (i < AP_MAX_RESET - 1) {
256 status = ap_test_queue(qid, &t_depth, &t_device_type);
266 * __ap_send(): Send message to adjunct processor queue.
267 * @qid: The AP queue number
268 * @psmid: The program supplied message identifier
269 * @msg: The message text
270 * @length: The message length
272 * Returns AP queue status structure.
273 * Condition code 1 on NQAP can't happen because the L bit is 1.
274 * Condition code 2 on NQAP also means the send is incomplete,
275 * because a segment boundary was reached. The NQAP is repeated.
277 static inline struct ap_queue_status
278 __ap_send(ap_qid_t qid, unsigned long long psmid, void *msg, size_t length)
280 typedef struct { char _[length]; } msgblock;
281 register unsigned long reg0 asm ("0") = qid | 0x40000000UL;
282 register struct ap_queue_status reg1 asm ("1");
283 register unsigned long reg2 asm ("2") = (unsigned long) msg;
284 register unsigned long reg3 asm ("3") = (unsigned long) length;
285 register unsigned long reg4 asm ("4") = (unsigned int) (psmid >> 32);
286 register unsigned long reg5 asm ("5") = (unsigned int) psmid;
289 "0: .long 0xb2ad0042\n" /* DQAP */
291 : "+d" (reg0), "=d" (reg1), "+d" (reg2), "+d" (reg3)
292 : "d" (reg4), "d" (reg5), "m" (*(msgblock *) msg)
297 int ap_send(ap_qid_t qid, unsigned long long psmid, void *msg, size_t length)
299 struct ap_queue_status status;
301 status = __ap_send(qid, psmid, msg, length);
302 switch (status.response_code) {
303 case AP_RESPONSE_NORMAL:
305 case AP_RESPONSE_Q_FULL:
306 case AP_RESPONSE_RESET_IN_PROGRESS:
308 default: /* Device is gone. */
312 EXPORT_SYMBOL(ap_send);
315 * __ap_recv(): Receive message from adjunct processor queue.
316 * @qid: The AP queue number
317 * @psmid: Pointer to program supplied message identifier
318 * @msg: The message text
319 * @length: The message length
321 * Returns AP queue status structure.
322 * Condition code 1 on DQAP means the receive has taken place
323 * but only partially. The response is incomplete, hence the
325 * Condition code 2 on DQAP also means the receive is incomplete,
326 * this time because a segment boundary was reached. Again, the
328 * Note that gpr2 is used by the DQAP instruction to keep track of
329 * any 'residual' length, in case the instruction gets interrupted.
330 * Hence it gets zeroed before the instruction.
332 static inline struct ap_queue_status
333 __ap_recv(ap_qid_t qid, unsigned long long *psmid, void *msg, size_t length)
335 typedef struct { char _[length]; } msgblock;
336 register unsigned long reg0 asm("0") = qid | 0x80000000UL;
337 register struct ap_queue_status reg1 asm ("1");
338 register unsigned long reg2 asm("2") = 0UL;
339 register unsigned long reg4 asm("4") = (unsigned long) msg;
340 register unsigned long reg5 asm("5") = (unsigned long) length;
341 register unsigned long reg6 asm("6") = 0UL;
342 register unsigned long reg7 asm("7") = 0UL;
346 "0: .long 0xb2ae0064\n"
348 : "+d" (reg0), "=d" (reg1), "+d" (reg2),
349 "+d" (reg4), "+d" (reg5), "+d" (reg6), "+d" (reg7),
350 "=m" (*(msgblock *) msg) : : "cc" );
351 *psmid = (((unsigned long long) reg6) << 32) + reg7;
355 int ap_recv(ap_qid_t qid, unsigned long long *psmid, void *msg, size_t length)
357 struct ap_queue_status status;
359 status = __ap_recv(qid, psmid, msg, length);
360 switch (status.response_code) {
361 case AP_RESPONSE_NORMAL:
363 case AP_RESPONSE_NO_PENDING_REPLY:
364 if (status.queue_empty)
367 case AP_RESPONSE_RESET_IN_PROGRESS:
373 EXPORT_SYMBOL(ap_recv);
376 * ap_query_queue(): Check if an AP queue is available.
377 * @qid: The AP queue number
378 * @queue_depth: Pointer to queue depth value
379 * @device_type: Pointer to device type value
381 * The test is repeated for AP_MAX_RESET times.
383 static int ap_query_queue(ap_qid_t qid, int *queue_depth, int *device_type)
385 struct ap_queue_status status;
386 int t_depth, t_device_type, rc, i;
389 for (i = 0; i < AP_MAX_RESET; i++) {
390 status = ap_test_queue(qid, &t_depth, &t_device_type);
391 switch (status.response_code) {
392 case AP_RESPONSE_NORMAL:
393 *queue_depth = t_depth + 1;
394 *device_type = t_device_type;
397 case AP_RESPONSE_Q_NOT_AVAIL:
400 case AP_RESPONSE_RESET_IN_PROGRESS:
402 case AP_RESPONSE_DECONFIGURED:
405 case AP_RESPONSE_CHECKSTOPPED:
408 case AP_RESPONSE_INVALID_ADDRESS:
411 case AP_RESPONSE_OTHERWISE_CHANGED:
413 case AP_RESPONSE_BUSY:
420 if (i < AP_MAX_RESET - 1)
427 * ap_init_queue(): Reset an AP queue.
428 * @qid: The AP queue number
430 * Reset an AP queue and wait for it to become available again.
432 static int ap_init_queue(ap_qid_t qid)
434 struct ap_queue_status status;
438 status = ap_reset_queue(qid);
439 for (i = 0; i < AP_MAX_RESET; i++) {
440 switch (status.response_code) {
441 case AP_RESPONSE_NORMAL:
442 if (status.queue_empty)
445 case AP_RESPONSE_Q_NOT_AVAIL:
446 case AP_RESPONSE_DECONFIGURED:
447 case AP_RESPONSE_CHECKSTOPPED:
448 i = AP_MAX_RESET; /* return with -ENODEV */
450 case AP_RESPONSE_RESET_IN_PROGRESS:
452 case AP_RESPONSE_BUSY:
456 if (rc != -ENODEV && rc != -EBUSY)
458 if (i < AP_MAX_RESET - 1) {
460 status = ap_test_queue(qid, &dummy, &dummy);
463 if (rc == 0 && ap_using_interrupts()) {
464 rc = ap_queue_enable_interruption(qid, ap_interrupt_indicator);
465 /* If interruption mode is supported by the machine,
466 * but an AP can not be enabled for interruption then
467 * the AP will be discarded. */
469 pr_err("Registering adapter interrupts for "
470 "AP %d failed\n", AP_QID_DEVICE(qid));
476 * ap_increase_queue_count(): Arm request timeout.
477 * @ap_dev: Pointer to an AP device.
479 * Arm request timeout if an AP device was idle and a new request is submitted.
481 static void ap_increase_queue_count(struct ap_device *ap_dev)
483 int timeout = ap_dev->drv->request_timeout;
485 ap_dev->queue_count++;
486 if (ap_dev->queue_count == 1) {
487 mod_timer(&ap_dev->timeout, jiffies + timeout);
488 ap_dev->reset = AP_RESET_ARMED;
493 * ap_decrease_queue_count(): Decrease queue count.
494 * @ap_dev: Pointer to an AP device.
496 * If AP device is still alive, re-schedule request timeout if there are still
499 static void ap_decrease_queue_count(struct ap_device *ap_dev)
501 int timeout = ap_dev->drv->request_timeout;
503 ap_dev->queue_count--;
504 if (ap_dev->queue_count > 0)
505 mod_timer(&ap_dev->timeout, jiffies + timeout);
508 * The timeout timer should to be disabled now - since
509 * del_timer_sync() is very expensive, we just tell via the
510 * reset flag to ignore the pending timeout timer.
512 ap_dev->reset = AP_RESET_IGNORE;
516 * AP device related attributes.
518 static ssize_t ap_hwtype_show(struct device *dev,
519 struct device_attribute *attr, char *buf)
521 struct ap_device *ap_dev = to_ap_dev(dev);
522 return snprintf(buf, PAGE_SIZE, "%d\n", ap_dev->device_type);
525 static DEVICE_ATTR(hwtype, 0444, ap_hwtype_show, NULL);
526 static ssize_t ap_depth_show(struct device *dev, struct device_attribute *attr,
529 struct ap_device *ap_dev = to_ap_dev(dev);
530 return snprintf(buf, PAGE_SIZE, "%d\n", ap_dev->queue_depth);
533 static DEVICE_ATTR(depth, 0444, ap_depth_show, NULL);
534 static ssize_t ap_request_count_show(struct device *dev,
535 struct device_attribute *attr,
538 struct ap_device *ap_dev = to_ap_dev(dev);
541 spin_lock_bh(&ap_dev->lock);
542 rc = snprintf(buf, PAGE_SIZE, "%d\n", ap_dev->total_request_count);
543 spin_unlock_bh(&ap_dev->lock);
547 static DEVICE_ATTR(request_count, 0444, ap_request_count_show, NULL);
549 static ssize_t ap_modalias_show(struct device *dev,
550 struct device_attribute *attr, char *buf)
552 return sprintf(buf, "ap:t%02X", to_ap_dev(dev)->device_type);
555 static DEVICE_ATTR(modalias, 0444, ap_modalias_show, NULL);
557 static struct attribute *ap_dev_attrs[] = {
558 &dev_attr_hwtype.attr,
559 &dev_attr_depth.attr,
560 &dev_attr_request_count.attr,
561 &dev_attr_modalias.attr,
564 static struct attribute_group ap_dev_attr_group = {
565 .attrs = ap_dev_attrs
570 * @dev: Pointer to device
571 * @drv: Pointer to device_driver
573 * AP bus driver registration/unregistration.
575 static int ap_bus_match(struct device *dev, struct device_driver *drv)
577 struct ap_device *ap_dev = to_ap_dev(dev);
578 struct ap_driver *ap_drv = to_ap_drv(drv);
579 struct ap_device_id *id;
582 * Compare device type of the device with the list of
583 * supported types of the device_driver.
585 for (id = ap_drv->ids; id->match_flags; id++) {
586 if ((id->match_flags & AP_DEVICE_ID_MATCH_DEVICE_TYPE) &&
587 (id->dev_type != ap_dev->device_type))
595 * ap_uevent(): Uevent function for AP devices.
596 * @dev: Pointer to device
597 * @env: Pointer to kobj_uevent_env
599 * It sets up a single environment variable DEV_TYPE which contains the
600 * hardware device type.
602 static int ap_uevent (struct device *dev, struct kobj_uevent_env *env)
604 struct ap_device *ap_dev = to_ap_dev(dev);
610 /* Set up DEV_TYPE environment variable. */
611 retval = add_uevent_var(env, "DEV_TYPE=%04X", ap_dev->device_type);
616 retval = add_uevent_var(env, "MODALIAS=ap:t%02X", ap_dev->device_type);
621 static struct bus_type ap_bus_type = {
623 .match = &ap_bus_match,
624 .uevent = &ap_uevent,
627 static int ap_device_probe(struct device *dev)
629 struct ap_device *ap_dev = to_ap_dev(dev);
630 struct ap_driver *ap_drv = to_ap_drv(dev->driver);
633 ap_dev->drv = ap_drv;
634 rc = ap_drv->probe ? ap_drv->probe(ap_dev) : -ENODEV;
636 spin_lock_bh(&ap_device_list_lock);
637 list_add(&ap_dev->list, &ap_device_list);
638 spin_unlock_bh(&ap_device_list_lock);
644 * __ap_flush_queue(): Flush requests.
645 * @ap_dev: Pointer to the AP device
647 * Flush all requests from the request/pending queue of an AP device.
649 static void __ap_flush_queue(struct ap_device *ap_dev)
651 struct ap_message *ap_msg, *next;
653 list_for_each_entry_safe(ap_msg, next, &ap_dev->pendingq, list) {
654 list_del_init(&ap_msg->list);
655 ap_dev->pendingq_count--;
656 ap_dev->drv->receive(ap_dev, ap_msg, ERR_PTR(-ENODEV));
658 list_for_each_entry_safe(ap_msg, next, &ap_dev->requestq, list) {
659 list_del_init(&ap_msg->list);
660 ap_dev->requestq_count--;
661 ap_dev->drv->receive(ap_dev, ap_msg, ERR_PTR(-ENODEV));
665 void ap_flush_queue(struct ap_device *ap_dev)
667 spin_lock_bh(&ap_dev->lock);
668 __ap_flush_queue(ap_dev);
669 spin_unlock_bh(&ap_dev->lock);
671 EXPORT_SYMBOL(ap_flush_queue);
673 static int ap_device_remove(struct device *dev)
675 struct ap_device *ap_dev = to_ap_dev(dev);
676 struct ap_driver *ap_drv = ap_dev->drv;
678 ap_flush_queue(ap_dev);
679 del_timer_sync(&ap_dev->timeout);
680 spin_lock_bh(&ap_device_list_lock);
681 list_del_init(&ap_dev->list);
682 spin_unlock_bh(&ap_device_list_lock);
684 ap_drv->remove(ap_dev);
685 spin_lock_bh(&ap_dev->lock);
686 atomic_sub(ap_dev->queue_count, &ap_poll_requests);
687 spin_unlock_bh(&ap_dev->lock);
691 int ap_driver_register(struct ap_driver *ap_drv, struct module *owner,
694 struct device_driver *drv = &ap_drv->driver;
696 drv->bus = &ap_bus_type;
697 drv->probe = ap_device_probe;
698 drv->remove = ap_device_remove;
701 return driver_register(drv);
703 EXPORT_SYMBOL(ap_driver_register);
705 void ap_driver_unregister(struct ap_driver *ap_drv)
707 driver_unregister(&ap_drv->driver);
709 EXPORT_SYMBOL(ap_driver_unregister);
714 static ssize_t ap_domain_show(struct bus_type *bus, char *buf)
716 return snprintf(buf, PAGE_SIZE, "%d\n", ap_domain_index);
719 static BUS_ATTR(ap_domain, 0444, ap_domain_show, NULL);
721 static ssize_t ap_config_time_show(struct bus_type *bus, char *buf)
723 return snprintf(buf, PAGE_SIZE, "%d\n", ap_config_time);
726 static ssize_t ap_interrupts_show(struct bus_type *bus, char *buf)
728 return snprintf(buf, PAGE_SIZE, "%d\n",
729 ap_using_interrupts() ? 1 : 0);
732 static BUS_ATTR(ap_interrupts, 0444, ap_interrupts_show, NULL);
734 static ssize_t ap_config_time_store(struct bus_type *bus,
735 const char *buf, size_t count)
739 if (sscanf(buf, "%d\n", &time) != 1 || time < 5 || time > 120)
741 ap_config_time = time;
742 if (!timer_pending(&ap_config_timer) ||
743 !mod_timer(&ap_config_timer, jiffies + ap_config_time * HZ)) {
744 ap_config_timer.expires = jiffies + ap_config_time * HZ;
745 add_timer(&ap_config_timer);
750 static BUS_ATTR(config_time, 0644, ap_config_time_show, ap_config_time_store);
752 static ssize_t ap_poll_thread_show(struct bus_type *bus, char *buf)
754 return snprintf(buf, PAGE_SIZE, "%d\n", ap_poll_kthread ? 1 : 0);
757 static ssize_t ap_poll_thread_store(struct bus_type *bus,
758 const char *buf, size_t count)
762 if (sscanf(buf, "%d\n", &flag) != 1)
765 rc = ap_poll_thread_start();
770 ap_poll_thread_stop();
774 static BUS_ATTR(poll_thread, 0644, ap_poll_thread_show, ap_poll_thread_store);
776 static ssize_t poll_timeout_show(struct bus_type *bus, char *buf)
778 return snprintf(buf, PAGE_SIZE, "%llu\n", poll_timeout);
781 static ssize_t poll_timeout_store(struct bus_type *bus, const char *buf,
784 unsigned long long time;
787 /* 120 seconds = maximum poll interval */
788 if (sscanf(buf, "%llu\n", &time) != 1 || time < 1 ||
789 time > 120000000000ULL)
792 hr_time = ktime_set(0, poll_timeout);
794 if (!hrtimer_is_queued(&ap_poll_timer) ||
795 !hrtimer_forward(&ap_poll_timer, hrtimer_get_expires(&ap_poll_timer), hr_time)) {
796 hrtimer_set_expires(&ap_poll_timer, hr_time);
797 hrtimer_start_expires(&ap_poll_timer, HRTIMER_MODE_ABS);
802 static BUS_ATTR(poll_timeout, 0644, poll_timeout_show, poll_timeout_store);
804 static struct bus_attribute *const ap_bus_attrs[] = {
806 &bus_attr_config_time,
807 &bus_attr_poll_thread,
808 &bus_attr_ap_interrupts,
809 &bus_attr_poll_timeout,
814 * ap_select_domain(): Select an AP domain.
816 * Pick one of the 16 AP domains.
818 static int ap_select_domain(void)
820 int queue_depth, device_type, count, max_count, best_domain;
824 * We want to use a single domain. Either the one specified with
825 * the "domain=" parameter or the domain with the maximum number
828 if (ap_domain_index >= 0 && ap_domain_index < AP_DOMAINS)
829 /* Domain has already been selected. */
833 for (i = 0; i < AP_DOMAINS; i++) {
835 for (j = 0; j < AP_DEVICES; j++) {
836 ap_qid_t qid = AP_MKQID(j, i);
837 rc = ap_query_queue(qid, &queue_depth, &device_type);
842 if (count > max_count) {
847 if (best_domain >= 0){
848 ap_domain_index = best_domain;
855 * ap_probe_device_type(): Find the device type of an AP.
856 * @ap_dev: pointer to the AP device.
858 * Find the device type if query queue returned a device type of 0.
860 static int ap_probe_device_type(struct ap_device *ap_dev)
862 static unsigned char msg[] = {
863 0x00,0x06,0x00,0x00,0x00,0x00,0x00,0x00,
864 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
865 0x00,0x00,0x00,0x58,0x00,0x00,0x00,0x00,
866 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
867 0x01,0x00,0x43,0x43,0x41,0x2d,0x41,0x50,
868 0x50,0x4c,0x20,0x20,0x20,0x01,0x01,0x01,
869 0x00,0x00,0x00,0x00,0x50,0x4b,0x00,0x00,
870 0x00,0x00,0x01,0x1c,0x00,0x00,0x00,0x00,
871 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
872 0x00,0x00,0x05,0xb8,0x00,0x00,0x00,0x00,
873 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
874 0x70,0x00,0x41,0x00,0x00,0x00,0x00,0x00,
875 0x00,0x00,0x54,0x32,0x01,0x00,0xa0,0x00,
876 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
877 0x00,0x00,0x00,0x00,0xb8,0x05,0x00,0x00,
878 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
879 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
880 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
881 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
882 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
883 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
884 0x00,0x00,0x0a,0x00,0x00,0x00,0x00,0x00,
885 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
886 0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,
887 0x49,0x43,0x53,0x46,0x20,0x20,0x20,0x20,
888 0x50,0x4b,0x0a,0x00,0x50,0x4b,0x43,0x53,
889 0x2d,0x31,0x2e,0x32,0x37,0x00,0x11,0x22,
890 0x33,0x44,0x55,0x66,0x77,0x88,0x99,0x00,
891 0x11,0x22,0x33,0x44,0x55,0x66,0x77,0x88,
892 0x99,0x00,0x11,0x22,0x33,0x44,0x55,0x66,
893 0x77,0x88,0x99,0x00,0x11,0x22,0x33,0x44,
894 0x55,0x66,0x77,0x88,0x99,0x00,0x11,0x22,
895 0x33,0x44,0x55,0x66,0x77,0x88,0x99,0x00,
896 0x11,0x22,0x33,0x5d,0x00,0x5b,0x00,0x77,
897 0x88,0x1e,0x00,0x00,0x57,0x00,0x00,0x00,
898 0x00,0x04,0x00,0x00,0x4f,0x00,0x00,0x00,
899 0x03,0x02,0x00,0x00,0x40,0x01,0x00,0x01,
900 0xce,0x02,0x68,0x2d,0x5f,0xa9,0xde,0x0c,
901 0xf6,0xd2,0x7b,0x58,0x4b,0xf9,0x28,0x68,
902 0x3d,0xb4,0xf4,0xef,0x78,0xd5,0xbe,0x66,
903 0x63,0x42,0xef,0xf8,0xfd,0xa4,0xf8,0xb0,
904 0x8e,0x29,0xc2,0xc9,0x2e,0xd8,0x45,0xb8,
905 0x53,0x8c,0x6f,0x4e,0x72,0x8f,0x6c,0x04,
906 0x9c,0x88,0xfc,0x1e,0xc5,0x83,0x55,0x57,
907 0xf7,0xdd,0xfd,0x4f,0x11,0x36,0x95,0x5d,
909 struct ap_queue_status status;
910 unsigned long long psmid;
914 reply = (void *) get_zeroed_page(GFP_KERNEL);
920 status = __ap_send(ap_dev->qid, 0x0102030405060708ULL,
922 if (status.response_code != AP_RESPONSE_NORMAL) {
927 /* Wait for the test message to complete. */
928 for (i = 0; i < 6; i++) {
930 status = __ap_recv(ap_dev->qid, &psmid, reply, 4096);
931 if (status.response_code == AP_RESPONSE_NORMAL &&
932 psmid == 0x0102030405060708ULL)
937 if (reply[0] == 0x00 && reply[1] == 0x86)
938 ap_dev->device_type = AP_DEVICE_TYPE_PCICC;
940 ap_dev->device_type = AP_DEVICE_TYPE_PCICA;
946 free_page((unsigned long) reply);
951 static void ap_interrupt_handler(void *unused1, void *unused2)
953 tasklet_schedule(&ap_tasklet);
957 * __ap_scan_bus(): Scan the AP bus.
958 * @dev: Pointer to device
959 * @data: Pointer to data
961 * Scan the AP bus for new devices.
963 static int __ap_scan_bus(struct device *dev, void *data)
965 return to_ap_dev(dev)->qid == (ap_qid_t)(unsigned long) data;
968 static void ap_device_release(struct device *dev)
970 struct ap_device *ap_dev = to_ap_dev(dev);
975 static void ap_scan_bus(struct work_struct *unused)
977 struct ap_device *ap_dev;
980 int queue_depth, device_type;
983 if (ap_select_domain() != 0)
985 for (i = 0; i < AP_DEVICES; i++) {
986 qid = AP_MKQID(i, ap_domain_index);
987 dev = bus_find_device(&ap_bus_type, NULL,
988 (void *)(unsigned long)qid,
990 rc = ap_query_queue(qid, &queue_depth, &device_type);
993 set_current_state(TASK_UNINTERRUPTIBLE);
994 schedule_timeout(AP_RESET_TIMEOUT);
995 rc = ap_query_queue(qid, &queue_depth,
998 ap_dev = to_ap_dev(dev);
999 spin_lock_bh(&ap_dev->lock);
1000 if (rc || ap_dev->unregistered) {
1001 spin_unlock_bh(&ap_dev->lock);
1002 device_unregister(dev);
1006 spin_unlock_bh(&ap_dev->lock);
1012 rc = ap_init_queue(qid);
1015 ap_dev = kzalloc(sizeof(*ap_dev), GFP_KERNEL);
1019 ap_dev->queue_depth = queue_depth;
1020 ap_dev->unregistered = 1;
1021 spin_lock_init(&ap_dev->lock);
1022 INIT_LIST_HEAD(&ap_dev->pendingq);
1023 INIT_LIST_HEAD(&ap_dev->requestq);
1024 INIT_LIST_HEAD(&ap_dev->list);
1025 setup_timer(&ap_dev->timeout, ap_request_timeout,
1026 (unsigned long) ap_dev);
1027 if (device_type == 0)
1028 ap_probe_device_type(ap_dev);
1030 ap_dev->device_type = device_type;
1032 ap_dev->device.bus = &ap_bus_type;
1033 ap_dev->device.parent = ap_root_device;
1034 dev_set_name(&ap_dev->device, "card%02x",
1035 AP_QID_DEVICE(ap_dev->qid));
1036 ap_dev->device.release = ap_device_release;
1037 rc = device_register(&ap_dev->device);
1042 /* Add device attributes. */
1043 rc = sysfs_create_group(&ap_dev->device.kobj,
1044 &ap_dev_attr_group);
1046 spin_lock_bh(&ap_dev->lock);
1047 ap_dev->unregistered = 0;
1048 spin_unlock_bh(&ap_dev->lock);
1051 device_unregister(&ap_dev->device);
1056 ap_config_timeout(unsigned long ptr)
1058 queue_work(ap_work_queue, &ap_config_work);
1059 ap_config_timer.expires = jiffies + ap_config_time * HZ;
1060 add_timer(&ap_config_timer);
1064 * ap_schedule_poll_timer(): Schedule poll timer.
1066 * Set up the timer to run the poll tasklet
1068 static inline void ap_schedule_poll_timer(void)
1070 if (ap_using_interrupts())
1072 if (hrtimer_is_queued(&ap_poll_timer))
1074 hrtimer_start(&ap_poll_timer, ktime_set(0, poll_timeout),
1079 * ap_poll_read(): Receive pending reply messages from an AP device.
1080 * @ap_dev: pointer to the AP device
1081 * @flags: pointer to control flags, bit 2^0 is set if another poll is
1082 * required, bit 2^1 is set if the poll timer needs to get armed
1084 * Returns 0 if the device is still present, -ENODEV if not.
1086 static int ap_poll_read(struct ap_device *ap_dev, unsigned long *flags)
1088 struct ap_queue_status status;
1089 struct ap_message *ap_msg;
1091 if (ap_dev->queue_count <= 0)
1093 status = __ap_recv(ap_dev->qid, &ap_dev->reply->psmid,
1094 ap_dev->reply->message, ap_dev->reply->length);
1095 switch (status.response_code) {
1096 case AP_RESPONSE_NORMAL:
1097 atomic_dec(&ap_poll_requests);
1098 ap_decrease_queue_count(ap_dev);
1099 list_for_each_entry(ap_msg, &ap_dev->pendingq, list) {
1100 if (ap_msg->psmid != ap_dev->reply->psmid)
1102 list_del_init(&ap_msg->list);
1103 ap_dev->pendingq_count--;
1104 ap_dev->drv->receive(ap_dev, ap_msg, ap_dev->reply);
1107 if (ap_dev->queue_count > 0)
1110 case AP_RESPONSE_NO_PENDING_REPLY:
1111 if (status.queue_empty) {
1112 /* The card shouldn't forget requests but who knows. */
1113 atomic_sub(ap_dev->queue_count, &ap_poll_requests);
1114 ap_dev->queue_count = 0;
1115 list_splice_init(&ap_dev->pendingq, &ap_dev->requestq);
1116 ap_dev->requestq_count += ap_dev->pendingq_count;
1117 ap_dev->pendingq_count = 0;
1128 * ap_poll_write(): Send messages from the request queue to an AP device.
1129 * @ap_dev: pointer to the AP device
1130 * @flags: pointer to control flags, bit 2^0 is set if another poll is
1131 * required, bit 2^1 is set if the poll timer needs to get armed
1133 * Returns 0 if the device is still present, -ENODEV if not.
1135 static int ap_poll_write(struct ap_device *ap_dev, unsigned long *flags)
1137 struct ap_queue_status status;
1138 struct ap_message *ap_msg;
1140 if (ap_dev->requestq_count <= 0 ||
1141 ap_dev->queue_count >= ap_dev->queue_depth)
1143 /* Start the next request on the queue. */
1144 ap_msg = list_entry(ap_dev->requestq.next, struct ap_message, list);
1145 status = __ap_send(ap_dev->qid, ap_msg->psmid,
1146 ap_msg->message, ap_msg->length);
1147 switch (status.response_code) {
1148 case AP_RESPONSE_NORMAL:
1149 atomic_inc(&ap_poll_requests);
1150 ap_increase_queue_count(ap_dev);
1151 list_move_tail(&ap_msg->list, &ap_dev->pendingq);
1152 ap_dev->requestq_count--;
1153 ap_dev->pendingq_count++;
1154 if (ap_dev->queue_count < ap_dev->queue_depth &&
1155 ap_dev->requestq_count > 0)
1159 case AP_RESPONSE_Q_FULL:
1160 case AP_RESPONSE_RESET_IN_PROGRESS:
1163 case AP_RESPONSE_MESSAGE_TOO_BIG:
1172 * ap_poll_queue(): Poll AP device for pending replies and send new messages.
1173 * @ap_dev: pointer to the bus device
1174 * @flags: pointer to control flags, bit 2^0 is set if another poll is
1175 * required, bit 2^1 is set if the poll timer needs to get armed
1177 * Poll AP device for pending replies and send new messages. If either
1178 * ap_poll_read or ap_poll_write returns -ENODEV unregister the device.
1181 static inline int ap_poll_queue(struct ap_device *ap_dev, unsigned long *flags)
1185 rc = ap_poll_read(ap_dev, flags);
1188 return ap_poll_write(ap_dev, flags);
1192 * __ap_queue_message(): Queue a message to a device.
1193 * @ap_dev: pointer to the AP device
1194 * @ap_msg: the message to be queued
1196 * Queue a message to a device. Returns 0 if successful.
1198 static int __ap_queue_message(struct ap_device *ap_dev, struct ap_message *ap_msg)
1200 struct ap_queue_status status;
1202 if (list_empty(&ap_dev->requestq) &&
1203 ap_dev->queue_count < ap_dev->queue_depth) {
1204 status = __ap_send(ap_dev->qid, ap_msg->psmid,
1205 ap_msg->message, ap_msg->length);
1206 switch (status.response_code) {
1207 case AP_RESPONSE_NORMAL:
1208 list_add_tail(&ap_msg->list, &ap_dev->pendingq);
1209 atomic_inc(&ap_poll_requests);
1210 ap_dev->pendingq_count++;
1211 ap_increase_queue_count(ap_dev);
1212 ap_dev->total_request_count++;
1214 case AP_RESPONSE_Q_FULL:
1215 case AP_RESPONSE_RESET_IN_PROGRESS:
1216 list_add_tail(&ap_msg->list, &ap_dev->requestq);
1217 ap_dev->requestq_count++;
1218 ap_dev->total_request_count++;
1220 case AP_RESPONSE_MESSAGE_TOO_BIG:
1221 ap_dev->drv->receive(ap_dev, ap_msg, ERR_PTR(-EINVAL));
1223 default: /* Device is gone. */
1224 ap_dev->drv->receive(ap_dev, ap_msg, ERR_PTR(-ENODEV));
1228 list_add_tail(&ap_msg->list, &ap_dev->requestq);
1229 ap_dev->requestq_count++;
1230 ap_dev->total_request_count++;
1233 ap_schedule_poll_timer();
1237 void ap_queue_message(struct ap_device *ap_dev, struct ap_message *ap_msg)
1239 unsigned long flags;
1242 spin_lock_bh(&ap_dev->lock);
1243 if (!ap_dev->unregistered) {
1244 /* Make room on the queue by polling for finished requests. */
1245 rc = ap_poll_queue(ap_dev, &flags);
1247 rc = __ap_queue_message(ap_dev, ap_msg);
1249 wake_up(&ap_poll_wait);
1251 ap_dev->unregistered = 1;
1253 ap_dev->drv->receive(ap_dev, ap_msg, ERR_PTR(-ENODEV));
1256 spin_unlock_bh(&ap_dev->lock);
1258 device_unregister(&ap_dev->device);
1260 EXPORT_SYMBOL(ap_queue_message);
1263 * ap_cancel_message(): Cancel a crypto request.
1264 * @ap_dev: The AP device that has the message queued
1265 * @ap_msg: The message that is to be removed
1267 * Cancel a crypto request. This is done by removing the request
1268 * from the device pending or request queue. Note that the
1269 * request stays on the AP queue. When it finishes the message
1270 * reply will be discarded because the psmid can't be found.
1272 void ap_cancel_message(struct ap_device *ap_dev, struct ap_message *ap_msg)
1274 struct ap_message *tmp;
1276 spin_lock_bh(&ap_dev->lock);
1277 if (!list_empty(&ap_msg->list)) {
1278 list_for_each_entry(tmp, &ap_dev->pendingq, list)
1279 if (tmp->psmid == ap_msg->psmid) {
1280 ap_dev->pendingq_count--;
1283 ap_dev->requestq_count--;
1285 list_del_init(&ap_msg->list);
1287 spin_unlock_bh(&ap_dev->lock);
1289 EXPORT_SYMBOL(ap_cancel_message);
1292 * ap_poll_timeout(): AP receive polling for finished AP requests.
1293 * @unused: Unused pointer.
1295 * Schedules the AP tasklet using a high resolution timer.
1297 static enum hrtimer_restart ap_poll_timeout(struct hrtimer *unused)
1299 tasklet_schedule(&ap_tasklet);
1300 return HRTIMER_NORESTART;
1304 * ap_reset(): Reset a not responding AP device.
1305 * @ap_dev: Pointer to the AP device
1307 * Reset a not responding AP device and move all requests from the
1308 * pending queue to the request queue.
1310 static void ap_reset(struct ap_device *ap_dev)
1314 ap_dev->reset = AP_RESET_IGNORE;
1315 atomic_sub(ap_dev->queue_count, &ap_poll_requests);
1316 ap_dev->queue_count = 0;
1317 list_splice_init(&ap_dev->pendingq, &ap_dev->requestq);
1318 ap_dev->requestq_count += ap_dev->pendingq_count;
1319 ap_dev->pendingq_count = 0;
1320 rc = ap_init_queue(ap_dev->qid);
1322 ap_dev->unregistered = 1;
1325 static int __ap_poll_device(struct ap_device *ap_dev, unsigned long *flags)
1327 spin_lock(&ap_dev->lock);
1328 if (!ap_dev->unregistered) {
1329 if (ap_poll_queue(ap_dev, flags))
1330 ap_dev->unregistered = 1;
1331 if (ap_dev->reset == AP_RESET_DO)
1334 spin_unlock(&ap_dev->lock);
1339 * ap_poll_all(): Poll all AP devices.
1340 * @dummy: Unused variable
1342 * Poll all AP devices on the bus in a round robin fashion. Continue
1343 * polling until bit 2^0 of the control flags is not set. If bit 2^1
1344 * of the control flags has been set arm the poll timer.
1346 static void ap_poll_all(unsigned long dummy)
1348 unsigned long flags;
1349 struct ap_device *ap_dev;
1351 /* Reset the indicator if interrupts are used. Thus new interrupts can
1352 * be received. Doing it in the beginning of the tasklet is therefor
1353 * important that no requests on any AP get lost.
1355 if (ap_using_interrupts())
1356 xchg((u8 *)ap_interrupt_indicator, 0);
1359 spin_lock(&ap_device_list_lock);
1360 list_for_each_entry(ap_dev, &ap_device_list, list) {
1361 __ap_poll_device(ap_dev, &flags);
1363 spin_unlock(&ap_device_list_lock);
1364 } while (flags & 1);
1366 ap_schedule_poll_timer();
1370 * ap_poll_thread(): Thread that polls for finished requests.
1371 * @data: Unused pointer
1373 * AP bus poll thread. The purpose of this thread is to poll for
1374 * finished requests in a loop if there is a "free" cpu - that is
1375 * a cpu that doesn't have anything better to do. The polling stops
1376 * as soon as there is another task or if all messages have been
1379 static int ap_poll_thread(void *data)
1381 DECLARE_WAITQUEUE(wait, current);
1382 unsigned long flags;
1384 struct ap_device *ap_dev;
1386 set_user_nice(current, 19);
1388 if (need_resched()) {
1392 add_wait_queue(&ap_poll_wait, &wait);
1393 set_current_state(TASK_INTERRUPTIBLE);
1394 if (kthread_should_stop())
1396 requests = atomic_read(&ap_poll_requests);
1399 set_current_state(TASK_RUNNING);
1400 remove_wait_queue(&ap_poll_wait, &wait);
1403 spin_lock_bh(&ap_device_list_lock);
1404 list_for_each_entry(ap_dev, &ap_device_list, list) {
1405 __ap_poll_device(ap_dev, &flags);
1407 spin_unlock_bh(&ap_device_list_lock);
1409 set_current_state(TASK_RUNNING);
1410 remove_wait_queue(&ap_poll_wait, &wait);
1414 static int ap_poll_thread_start(void)
1418 if (ap_using_interrupts())
1420 mutex_lock(&ap_poll_thread_mutex);
1421 if (!ap_poll_kthread) {
1422 ap_poll_kthread = kthread_run(ap_poll_thread, NULL, "appoll");
1423 rc = IS_ERR(ap_poll_kthread) ? PTR_ERR(ap_poll_kthread) : 0;
1425 ap_poll_kthread = NULL;
1429 mutex_unlock(&ap_poll_thread_mutex);
1433 static void ap_poll_thread_stop(void)
1435 mutex_lock(&ap_poll_thread_mutex);
1436 if (ap_poll_kthread) {
1437 kthread_stop(ap_poll_kthread);
1438 ap_poll_kthread = NULL;
1440 mutex_unlock(&ap_poll_thread_mutex);
1444 * ap_request_timeout(): Handling of request timeouts
1445 * @data: Holds the AP device.
1447 * Handles request timeouts.
1449 static void ap_request_timeout(unsigned long data)
1451 struct ap_device *ap_dev = (struct ap_device *) data;
1453 if (ap_dev->reset == AP_RESET_ARMED) {
1454 ap_dev->reset = AP_RESET_DO;
1456 if (ap_using_interrupts())
1457 tasklet_schedule(&ap_tasklet);
1461 static void ap_reset_domain(void)
1465 if (ap_domain_index != -1)
1466 for (i = 0; i < AP_DEVICES; i++)
1467 ap_reset_queue(AP_MKQID(i, ap_domain_index));
1470 static void ap_reset_all(void)
1474 for (i = 0; i < AP_DOMAINS; i++)
1475 for (j = 0; j < AP_DEVICES; j++)
1476 ap_reset_queue(AP_MKQID(j, i));
1479 static struct reset_call ap_reset_call = {
1484 * ap_module_init(): The module initialization code.
1486 * Initializes the module.
1488 int __init ap_module_init(void)
1492 if (ap_domain_index < -1 || ap_domain_index >= AP_DOMAINS) {
1493 pr_warning("%d is not a valid cryptographic domain\n",
1497 if (ap_instructions_available() != 0) {
1498 pr_warning("The hardware system does not support "
1499 "AP instructions\n");
1502 if (ap_interrupts_available()) {
1503 isc_register(AP_ISC);
1504 ap_interrupt_indicator = s390_register_adapter_interrupt(
1505 &ap_interrupt_handler, NULL, AP_ISC);
1506 if (IS_ERR(ap_interrupt_indicator)) {
1507 ap_interrupt_indicator = NULL;
1508 isc_unregister(AP_ISC);
1512 register_reset_call(&ap_reset_call);
1514 /* Create /sys/bus/ap. */
1515 rc = bus_register(&ap_bus_type);
1518 for (i = 0; ap_bus_attrs[i]; i++) {
1519 rc = bus_create_file(&ap_bus_type, ap_bus_attrs[i]);
1524 /* Create /sys/devices/ap. */
1525 ap_root_device = s390_root_dev_register("ap");
1526 rc = IS_ERR(ap_root_device) ? PTR_ERR(ap_root_device) : 0;
1530 ap_work_queue = create_singlethread_workqueue("kapwork");
1531 if (!ap_work_queue) {
1536 if (ap_select_domain() == 0)
1539 /* Setup the AP bus rescan timer. */
1540 init_timer(&ap_config_timer);
1541 ap_config_timer.function = ap_config_timeout;
1542 ap_config_timer.data = 0;
1543 ap_config_timer.expires = jiffies + ap_config_time * HZ;
1544 add_timer(&ap_config_timer);
1546 /* Setup the high resultion poll timer.
1547 * If we are running under z/VM adjust polling to z/VM polling rate.
1550 poll_timeout = 1500000;
1551 hrtimer_init(&ap_poll_timer, CLOCK_MONOTONIC, HRTIMER_MODE_ABS);
1552 ap_poll_timer.function = ap_poll_timeout;
1554 /* Start the low priority AP bus poll thread. */
1555 if (ap_thread_flag) {
1556 rc = ap_poll_thread_start();
1564 del_timer_sync(&ap_config_timer);
1565 hrtimer_cancel(&ap_poll_timer);
1566 destroy_workqueue(ap_work_queue);
1568 s390_root_dev_unregister(ap_root_device);
1571 bus_remove_file(&ap_bus_type, ap_bus_attrs[i]);
1572 bus_unregister(&ap_bus_type);
1574 unregister_reset_call(&ap_reset_call);
1575 if (ap_using_interrupts()) {
1576 s390_unregister_adapter_interrupt(ap_interrupt_indicator, AP_ISC);
1577 isc_unregister(AP_ISC);
1582 static int __ap_match_all(struct device *dev, void *data)
1588 * ap_modules_exit(): The module termination code
1590 * Terminates the module.
1592 void ap_module_exit(void)
1598 ap_poll_thread_stop();
1599 del_timer_sync(&ap_config_timer);
1600 hrtimer_cancel(&ap_poll_timer);
1601 destroy_workqueue(ap_work_queue);
1602 tasklet_kill(&ap_tasklet);
1603 s390_root_dev_unregister(ap_root_device);
1604 while ((dev = bus_find_device(&ap_bus_type, NULL, NULL,
1607 device_unregister(dev);
1610 for (i = 0; ap_bus_attrs[i]; i++)
1611 bus_remove_file(&ap_bus_type, ap_bus_attrs[i]);
1612 bus_unregister(&ap_bus_type);
1613 unregister_reset_call(&ap_reset_call);
1614 if (ap_using_interrupts()) {
1615 s390_unregister_adapter_interrupt(ap_interrupt_indicator, AP_ISC);
1616 isc_unregister(AP_ISC);
1620 #ifndef CONFIG_ZCRYPT_MONOLITHIC
1621 module_init(ap_module_init);
1622 module_exit(ap_module_exit);