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/reset.h>
41 #include <asm/atomic.h>
42 #include <asm/system.h>
44 #include <linux/hrtimer.h>
45 #include <linux/ktime.h>
49 /* Some prototypes. */
50 static void ap_scan_bus(struct work_struct *);
51 static void ap_poll_all(unsigned long);
52 static enum hrtimer_restart ap_poll_timeout(struct hrtimer *);
53 static int ap_poll_thread_start(void);
54 static void ap_poll_thread_stop(void);
55 static void ap_request_timeout(unsigned long);
56 static inline void ap_schedule_poll_timer(void);
61 MODULE_AUTHOR("IBM Corporation");
62 MODULE_DESCRIPTION("Adjunct Processor Bus driver, "
63 "Copyright 2006 IBM Corporation");
64 MODULE_LICENSE("GPL");
69 int ap_domain_index = -1; /* Adjunct Processor Domain Index */
70 module_param_named(domain, ap_domain_index, int, 0000);
71 MODULE_PARM_DESC(domain, "domain index for ap devices");
72 EXPORT_SYMBOL(ap_domain_index);
74 static int ap_thread_flag = 0;
75 module_param_named(poll_thread, ap_thread_flag, int, 0000);
76 MODULE_PARM_DESC(poll_thread, "Turn on/off poll thread, default is 0 (off).");
78 static struct device *ap_root_device = NULL;
79 static DEFINE_SPINLOCK(ap_device_list_lock);
80 static LIST_HEAD(ap_device_list);
83 * Workqueue & timer for bus rescan.
85 static struct workqueue_struct *ap_work_queue;
86 static struct timer_list ap_config_timer;
87 static int ap_config_time = AP_CONFIG_TIME;
88 static DECLARE_WORK(ap_config_work, ap_scan_bus);
91 * Tasklet & timer for AP request polling and interrupts
93 static DECLARE_TASKLET(ap_tasklet, ap_poll_all, 0);
94 static atomic_t ap_poll_requests = ATOMIC_INIT(0);
95 static DECLARE_WAIT_QUEUE_HEAD(ap_poll_wait);
96 static struct task_struct *ap_poll_kthread = NULL;
97 static DEFINE_MUTEX(ap_poll_thread_mutex);
98 static void *ap_interrupt_indicator;
99 static struct hrtimer ap_poll_timer;
100 /* In LPAR poll with 4kHz frequency. Poll every 250000 nanoseconds.
101 * If z/VM change to 1500000 nanoseconds to adjust to z/VM polling.*/
102 static unsigned long long poll_timeout = 250000;
105 * ap_using_interrupts() - Returns non-zero if interrupt support is
108 static inline int ap_using_interrupts(void)
110 return ap_interrupt_indicator != NULL;
114 * ap_intructions_available() - Test if AP instructions are available.
116 * Returns 0 if the AP instructions are installed.
118 static inline int ap_instructions_available(void)
120 register unsigned long reg0 asm ("0") = AP_MKQID(0,0);
121 register unsigned long reg1 asm ("1") = -ENODEV;
122 register unsigned long reg2 asm ("2") = 0UL;
125 " .long 0xb2af0000\n" /* PQAP(TAPQ) */
129 : "+d" (reg0), "+d" (reg1), "+d" (reg2) : : "cc" );
134 * ap_interrupts_available(): Test if AP interrupts are available.
136 * Returns 1 if AP interrupts are available.
138 static int ap_interrupts_available(void)
140 unsigned long long facility_bits[2];
142 if (stfle(facility_bits, 2) <= 1)
144 if (!(facility_bits[0] & (1ULL << 61)) ||
145 !(facility_bits[1] & (1ULL << 62)))
151 * ap_test_queue(): Test adjunct processor queue.
152 * @qid: The AP queue number
153 * @queue_depth: Pointer to queue depth value
154 * @device_type: Pointer to device type value
156 * Returns AP queue status structure.
158 static inline struct ap_queue_status
159 ap_test_queue(ap_qid_t qid, int *queue_depth, int *device_type)
161 register unsigned long reg0 asm ("0") = qid;
162 register struct ap_queue_status reg1 asm ("1");
163 register unsigned long reg2 asm ("2") = 0UL;
165 asm volatile(".long 0xb2af0000" /* PQAP(TAPQ) */
166 : "+d" (reg0), "=d" (reg1), "+d" (reg2) : : "cc");
167 *device_type = (int) (reg2 >> 24);
168 *queue_depth = (int) (reg2 & 0xff);
173 * ap_reset_queue(): Reset adjunct processor queue.
174 * @qid: The AP queue number
176 * Returns AP queue status structure.
178 static inline struct ap_queue_status ap_reset_queue(ap_qid_t qid)
180 register unsigned long reg0 asm ("0") = qid | 0x01000000UL;
181 register struct ap_queue_status reg1 asm ("1");
182 register unsigned long reg2 asm ("2") = 0UL;
185 ".long 0xb2af0000" /* PQAP(RAPQ) */
186 : "+d" (reg0), "=d" (reg1), "+d" (reg2) : : "cc");
192 * ap_queue_interruption_control(): Enable interruption for a specific AP.
193 * @qid: The AP queue number
194 * @ind: The notification indicator byte
196 * Returns AP queue status.
198 static inline struct ap_queue_status
199 ap_queue_interruption_control(ap_qid_t qid, void *ind)
201 register unsigned long reg0 asm ("0") = qid | 0x03000000UL;
202 register unsigned long reg1_in asm ("1") = 0x0000800000000000UL | AP_ISC;
203 register struct ap_queue_status reg1_out asm ("1");
204 register void *reg2 asm ("2") = ind;
206 ".long 0xb2af0000" /* PQAP(RAPQ) */
207 : "+d" (reg0), "+d" (reg1_in), "=d" (reg1_out), "+d" (reg2)
215 * ap_queue_enable_interruption(): Enable interruption on an AP.
216 * @qid: The AP queue number
217 * @ind: the notification indicator byte
219 * Enables interruption on AP queue via ap_queue_interruption_control(). Based
220 * on the return value it waits a while and tests the AP queue if interrupts
221 * have been switched on using ap_test_queue().
223 static int ap_queue_enable_interruption(ap_qid_t qid, void *ind)
226 struct ap_queue_status status;
227 int t_depth, t_device_type, rc, i;
230 status = ap_queue_interruption_control(qid, ind);
232 for (i = 0; i < AP_MAX_RESET; i++) {
233 switch (status.response_code) {
234 case AP_RESPONSE_NORMAL:
235 if (status.int_enabled)
238 case AP_RESPONSE_RESET_IN_PROGRESS:
239 case AP_RESPONSE_BUSY:
241 case AP_RESPONSE_Q_NOT_AVAIL:
242 case AP_RESPONSE_DECONFIGURED:
243 case AP_RESPONSE_CHECKSTOPPED:
244 case AP_RESPONSE_INVALID_ADDRESS:
246 case AP_RESPONSE_OTHERWISE_CHANGED:
247 if (status.int_enabled)
253 if (i < AP_MAX_RESET - 1) {
255 status = ap_test_queue(qid, &t_depth, &t_device_type);
265 * __ap_send(): Send message to adjunct processor queue.
266 * @qid: The AP queue number
267 * @psmid: The program supplied message identifier
268 * @msg: The message text
269 * @length: The message length
271 * Returns AP queue status structure.
272 * Condition code 1 on NQAP can't happen because the L bit is 1.
273 * Condition code 2 on NQAP also means the send is incomplete,
274 * because a segment boundary was reached. The NQAP is repeated.
276 static inline struct ap_queue_status
277 __ap_send(ap_qid_t qid, unsigned long long psmid, void *msg, size_t length)
279 typedef struct { char _[length]; } msgblock;
280 register unsigned long reg0 asm ("0") = qid | 0x40000000UL;
281 register struct ap_queue_status reg1 asm ("1");
282 register unsigned long reg2 asm ("2") = (unsigned long) msg;
283 register unsigned long reg3 asm ("3") = (unsigned long) length;
284 register unsigned long reg4 asm ("4") = (unsigned int) (psmid >> 32);
285 register unsigned long reg5 asm ("5") = (unsigned int) psmid;
288 "0: .long 0xb2ad0042\n" /* DQAP */
290 : "+d" (reg0), "=d" (reg1), "+d" (reg2), "+d" (reg3)
291 : "d" (reg4), "d" (reg5), "m" (*(msgblock *) msg)
296 int ap_send(ap_qid_t qid, unsigned long long psmid, void *msg, size_t length)
298 struct ap_queue_status status;
300 status = __ap_send(qid, psmid, msg, length);
301 switch (status.response_code) {
302 case AP_RESPONSE_NORMAL:
304 case AP_RESPONSE_Q_FULL:
305 case AP_RESPONSE_RESET_IN_PROGRESS:
307 default: /* Device is gone. */
311 EXPORT_SYMBOL(ap_send);
314 * __ap_recv(): Receive message from adjunct processor queue.
315 * @qid: The AP queue number
316 * @psmid: Pointer to program supplied message identifier
317 * @msg: The message text
318 * @length: The message length
320 * Returns AP queue status structure.
321 * Condition code 1 on DQAP means the receive has taken place
322 * but only partially. The response is incomplete, hence the
324 * Condition code 2 on DQAP also means the receive is incomplete,
325 * this time because a segment boundary was reached. Again, the
327 * Note that gpr2 is used by the DQAP instruction to keep track of
328 * any 'residual' length, in case the instruction gets interrupted.
329 * Hence it gets zeroed before the instruction.
331 static inline struct ap_queue_status
332 __ap_recv(ap_qid_t qid, unsigned long long *psmid, void *msg, size_t length)
334 typedef struct { char _[length]; } msgblock;
335 register unsigned long reg0 asm("0") = qid | 0x80000000UL;
336 register struct ap_queue_status reg1 asm ("1");
337 register unsigned long reg2 asm("2") = 0UL;
338 register unsigned long reg4 asm("4") = (unsigned long) msg;
339 register unsigned long reg5 asm("5") = (unsigned long) length;
340 register unsigned long reg6 asm("6") = 0UL;
341 register unsigned long reg7 asm("7") = 0UL;
345 "0: .long 0xb2ae0064\n"
347 : "+d" (reg0), "=d" (reg1), "+d" (reg2),
348 "+d" (reg4), "+d" (reg5), "+d" (reg6), "+d" (reg7),
349 "=m" (*(msgblock *) msg) : : "cc" );
350 *psmid = (((unsigned long long) reg6) << 32) + reg7;
354 int ap_recv(ap_qid_t qid, unsigned long long *psmid, void *msg, size_t length)
356 struct ap_queue_status status;
358 status = __ap_recv(qid, psmid, msg, length);
359 switch (status.response_code) {
360 case AP_RESPONSE_NORMAL:
362 case AP_RESPONSE_NO_PENDING_REPLY:
363 if (status.queue_empty)
366 case AP_RESPONSE_RESET_IN_PROGRESS:
372 EXPORT_SYMBOL(ap_recv);
375 * ap_query_queue(): Check if an AP queue is available.
376 * @qid: The AP queue number
377 * @queue_depth: Pointer to queue depth value
378 * @device_type: Pointer to device type value
380 * The test is repeated for AP_MAX_RESET times.
382 static int ap_query_queue(ap_qid_t qid, int *queue_depth, int *device_type)
384 struct ap_queue_status status;
385 int t_depth, t_device_type, rc, i;
388 for (i = 0; i < AP_MAX_RESET; i++) {
389 status = ap_test_queue(qid, &t_depth, &t_device_type);
390 switch (status.response_code) {
391 case AP_RESPONSE_NORMAL:
392 *queue_depth = t_depth + 1;
393 *device_type = t_device_type;
396 case AP_RESPONSE_Q_NOT_AVAIL:
399 case AP_RESPONSE_RESET_IN_PROGRESS:
401 case AP_RESPONSE_DECONFIGURED:
404 case AP_RESPONSE_CHECKSTOPPED:
407 case AP_RESPONSE_INVALID_ADDRESS:
410 case AP_RESPONSE_OTHERWISE_CHANGED:
412 case AP_RESPONSE_BUSY:
419 if (i < AP_MAX_RESET - 1)
426 * ap_init_queue(): Reset an AP queue.
427 * @qid: The AP queue number
429 * Reset an AP queue and wait for it to become available again.
431 static int ap_init_queue(ap_qid_t qid)
433 struct ap_queue_status status;
437 status = ap_reset_queue(qid);
438 for (i = 0; i < AP_MAX_RESET; i++) {
439 switch (status.response_code) {
440 case AP_RESPONSE_NORMAL:
441 if (status.queue_empty)
444 case AP_RESPONSE_Q_NOT_AVAIL:
445 case AP_RESPONSE_DECONFIGURED:
446 case AP_RESPONSE_CHECKSTOPPED:
447 i = AP_MAX_RESET; /* return with -ENODEV */
449 case AP_RESPONSE_RESET_IN_PROGRESS:
451 case AP_RESPONSE_BUSY:
455 if (rc != -ENODEV && rc != -EBUSY)
457 if (i < AP_MAX_RESET - 1) {
459 status = ap_test_queue(qid, &dummy, &dummy);
462 if (rc == 0 && ap_using_interrupts()) {
463 rc = ap_queue_enable_interruption(qid, ap_interrupt_indicator);
464 /* If interruption mode is supported by the machine,
465 * but an AP can not be enabled for interruption then
466 * the AP will be discarded. */
468 pr_err("Registering adapter interrupts for "
469 "AP %d failed\n", AP_QID_DEVICE(qid));
475 * ap_increase_queue_count(): Arm request timeout.
476 * @ap_dev: Pointer to an AP device.
478 * Arm request timeout if an AP device was idle and a new request is submitted.
480 static void ap_increase_queue_count(struct ap_device *ap_dev)
482 int timeout = ap_dev->drv->request_timeout;
484 ap_dev->queue_count++;
485 if (ap_dev->queue_count == 1) {
486 mod_timer(&ap_dev->timeout, jiffies + timeout);
487 ap_dev->reset = AP_RESET_ARMED;
492 * ap_decrease_queue_count(): Decrease queue count.
493 * @ap_dev: Pointer to an AP device.
495 * If AP device is still alive, re-schedule request timeout if there are still
498 static void ap_decrease_queue_count(struct ap_device *ap_dev)
500 int timeout = ap_dev->drv->request_timeout;
502 ap_dev->queue_count--;
503 if (ap_dev->queue_count > 0)
504 mod_timer(&ap_dev->timeout, jiffies + timeout);
507 * The timeout timer should to be disabled now - since
508 * del_timer_sync() is very expensive, we just tell via the
509 * reset flag to ignore the pending timeout timer.
511 ap_dev->reset = AP_RESET_IGNORE;
515 * AP device related attributes.
517 static ssize_t ap_hwtype_show(struct device *dev,
518 struct device_attribute *attr, char *buf)
520 struct ap_device *ap_dev = to_ap_dev(dev);
521 return snprintf(buf, PAGE_SIZE, "%d\n", ap_dev->device_type);
524 static DEVICE_ATTR(hwtype, 0444, ap_hwtype_show, NULL);
525 static ssize_t ap_depth_show(struct device *dev, struct device_attribute *attr,
528 struct ap_device *ap_dev = to_ap_dev(dev);
529 return snprintf(buf, PAGE_SIZE, "%d\n", ap_dev->queue_depth);
532 static DEVICE_ATTR(depth, 0444, ap_depth_show, NULL);
533 static ssize_t ap_request_count_show(struct device *dev,
534 struct device_attribute *attr,
537 struct ap_device *ap_dev = to_ap_dev(dev);
540 spin_lock_bh(&ap_dev->lock);
541 rc = snprintf(buf, PAGE_SIZE, "%d\n", ap_dev->total_request_count);
542 spin_unlock_bh(&ap_dev->lock);
546 static DEVICE_ATTR(request_count, 0444, ap_request_count_show, NULL);
548 static ssize_t ap_modalias_show(struct device *dev,
549 struct device_attribute *attr, char *buf)
551 return sprintf(buf, "ap:t%02X", to_ap_dev(dev)->device_type);
554 static DEVICE_ATTR(modalias, 0444, ap_modalias_show, NULL);
556 static struct attribute *ap_dev_attrs[] = {
557 &dev_attr_hwtype.attr,
558 &dev_attr_depth.attr,
559 &dev_attr_request_count.attr,
560 &dev_attr_modalias.attr,
563 static struct attribute_group ap_dev_attr_group = {
564 .attrs = ap_dev_attrs
569 * @dev: Pointer to device
570 * @drv: Pointer to device_driver
572 * AP bus driver registration/unregistration.
574 static int ap_bus_match(struct device *dev, struct device_driver *drv)
576 struct ap_device *ap_dev = to_ap_dev(dev);
577 struct ap_driver *ap_drv = to_ap_drv(drv);
578 struct ap_device_id *id;
581 * Compare device type of the device with the list of
582 * supported types of the device_driver.
584 for (id = ap_drv->ids; id->match_flags; id++) {
585 if ((id->match_flags & AP_DEVICE_ID_MATCH_DEVICE_TYPE) &&
586 (id->dev_type != ap_dev->device_type))
594 * ap_uevent(): Uevent function for AP devices.
595 * @dev: Pointer to device
596 * @env: Pointer to kobj_uevent_env
598 * It sets up a single environment variable DEV_TYPE which contains the
599 * hardware device type.
601 static int ap_uevent (struct device *dev, struct kobj_uevent_env *env)
603 struct ap_device *ap_dev = to_ap_dev(dev);
609 /* Set up DEV_TYPE environment variable. */
610 retval = add_uevent_var(env, "DEV_TYPE=%04X", ap_dev->device_type);
615 retval = add_uevent_var(env, "MODALIAS=ap:t%02X", ap_dev->device_type);
620 static struct bus_type ap_bus_type = {
622 .match = &ap_bus_match,
623 .uevent = &ap_uevent,
626 static int ap_device_probe(struct device *dev)
628 struct ap_device *ap_dev = to_ap_dev(dev);
629 struct ap_driver *ap_drv = to_ap_drv(dev->driver);
632 ap_dev->drv = ap_drv;
633 rc = ap_drv->probe ? ap_drv->probe(ap_dev) : -ENODEV;
635 spin_lock_bh(&ap_device_list_lock);
636 list_add(&ap_dev->list, &ap_device_list);
637 spin_unlock_bh(&ap_device_list_lock);
643 * __ap_flush_queue(): Flush requests.
644 * @ap_dev: Pointer to the AP device
646 * Flush all requests from the request/pending queue of an AP device.
648 static void __ap_flush_queue(struct ap_device *ap_dev)
650 struct ap_message *ap_msg, *next;
652 list_for_each_entry_safe(ap_msg, next, &ap_dev->pendingq, list) {
653 list_del_init(&ap_msg->list);
654 ap_dev->pendingq_count--;
655 ap_dev->drv->receive(ap_dev, ap_msg, ERR_PTR(-ENODEV));
657 list_for_each_entry_safe(ap_msg, next, &ap_dev->requestq, list) {
658 list_del_init(&ap_msg->list);
659 ap_dev->requestq_count--;
660 ap_dev->drv->receive(ap_dev, ap_msg, ERR_PTR(-ENODEV));
664 void ap_flush_queue(struct ap_device *ap_dev)
666 spin_lock_bh(&ap_dev->lock);
667 __ap_flush_queue(ap_dev);
668 spin_unlock_bh(&ap_dev->lock);
670 EXPORT_SYMBOL(ap_flush_queue);
672 static int ap_device_remove(struct device *dev)
674 struct ap_device *ap_dev = to_ap_dev(dev);
675 struct ap_driver *ap_drv = ap_dev->drv;
677 ap_flush_queue(ap_dev);
678 del_timer_sync(&ap_dev->timeout);
679 spin_lock_bh(&ap_device_list_lock);
680 list_del_init(&ap_dev->list);
681 spin_unlock_bh(&ap_device_list_lock);
683 ap_drv->remove(ap_dev);
684 spin_lock_bh(&ap_dev->lock);
685 atomic_sub(ap_dev->queue_count, &ap_poll_requests);
686 spin_unlock_bh(&ap_dev->lock);
690 int ap_driver_register(struct ap_driver *ap_drv, struct module *owner,
693 struct device_driver *drv = &ap_drv->driver;
695 drv->bus = &ap_bus_type;
696 drv->probe = ap_device_probe;
697 drv->remove = ap_device_remove;
700 return driver_register(drv);
702 EXPORT_SYMBOL(ap_driver_register);
704 void ap_driver_unregister(struct ap_driver *ap_drv)
706 driver_unregister(&ap_drv->driver);
708 EXPORT_SYMBOL(ap_driver_unregister);
713 static ssize_t ap_domain_show(struct bus_type *bus, char *buf)
715 return snprintf(buf, PAGE_SIZE, "%d\n", ap_domain_index);
718 static BUS_ATTR(ap_domain, 0444, ap_domain_show, NULL);
720 static ssize_t ap_config_time_show(struct bus_type *bus, char *buf)
722 return snprintf(buf, PAGE_SIZE, "%d\n", ap_config_time);
725 static ssize_t ap_interrupts_show(struct bus_type *bus, char *buf)
727 return snprintf(buf, PAGE_SIZE, "%d\n",
728 ap_using_interrupts() ? 1 : 0);
731 static BUS_ATTR(ap_interrupts, 0444, ap_interrupts_show, NULL);
733 static ssize_t ap_config_time_store(struct bus_type *bus,
734 const char *buf, size_t count)
738 if (sscanf(buf, "%d\n", &time) != 1 || time < 5 || time > 120)
740 ap_config_time = time;
741 if (!timer_pending(&ap_config_timer) ||
742 !mod_timer(&ap_config_timer, jiffies + ap_config_time * HZ)) {
743 ap_config_timer.expires = jiffies + ap_config_time * HZ;
744 add_timer(&ap_config_timer);
749 static BUS_ATTR(config_time, 0644, ap_config_time_show, ap_config_time_store);
751 static ssize_t ap_poll_thread_show(struct bus_type *bus, char *buf)
753 return snprintf(buf, PAGE_SIZE, "%d\n", ap_poll_kthread ? 1 : 0);
756 static ssize_t ap_poll_thread_store(struct bus_type *bus,
757 const char *buf, size_t count)
761 if (sscanf(buf, "%d\n", &flag) != 1)
764 rc = ap_poll_thread_start();
769 ap_poll_thread_stop();
773 static BUS_ATTR(poll_thread, 0644, ap_poll_thread_show, ap_poll_thread_store);
775 static ssize_t poll_timeout_show(struct bus_type *bus, char *buf)
777 return snprintf(buf, PAGE_SIZE, "%llu\n", poll_timeout);
780 static ssize_t poll_timeout_store(struct bus_type *bus, const char *buf,
783 unsigned long long time;
786 /* 120 seconds = maximum poll interval */
787 if (sscanf(buf, "%llu\n", &time) != 1 || time < 1 ||
788 time > 120000000000ULL)
791 hr_time = ktime_set(0, poll_timeout);
793 if (!hrtimer_is_queued(&ap_poll_timer) ||
794 !hrtimer_forward(&ap_poll_timer, hrtimer_get_expires(&ap_poll_timer), hr_time)) {
795 hrtimer_set_expires(&ap_poll_timer, hr_time);
796 hrtimer_start_expires(&ap_poll_timer, HRTIMER_MODE_ABS);
801 static BUS_ATTR(poll_timeout, 0644, poll_timeout_show, poll_timeout_store);
803 static struct bus_attribute *const ap_bus_attrs[] = {
805 &bus_attr_config_time,
806 &bus_attr_poll_thread,
807 &bus_attr_ap_interrupts,
808 &bus_attr_poll_timeout,
813 * ap_select_domain(): Select an AP domain.
815 * Pick one of the 16 AP domains.
817 static int ap_select_domain(void)
819 int queue_depth, device_type, count, max_count, best_domain;
823 * We want to use a single domain. Either the one specified with
824 * the "domain=" parameter or the domain with the maximum number
827 if (ap_domain_index >= 0 && ap_domain_index < AP_DOMAINS)
828 /* Domain has already been selected. */
832 for (i = 0; i < AP_DOMAINS; i++) {
834 for (j = 0; j < AP_DEVICES; j++) {
835 ap_qid_t qid = AP_MKQID(j, i);
836 rc = ap_query_queue(qid, &queue_depth, &device_type);
841 if (count > max_count) {
846 if (best_domain >= 0){
847 ap_domain_index = best_domain;
854 * ap_probe_device_type(): Find the device type of an AP.
855 * @ap_dev: pointer to the AP device.
857 * Find the device type if query queue returned a device type of 0.
859 static int ap_probe_device_type(struct ap_device *ap_dev)
861 static unsigned char msg[] = {
862 0x00,0x06,0x00,0x00,0x00,0x00,0x00,0x00,
863 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
864 0x00,0x00,0x00,0x58,0x00,0x00,0x00,0x00,
865 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
866 0x01,0x00,0x43,0x43,0x41,0x2d,0x41,0x50,
867 0x50,0x4c,0x20,0x20,0x20,0x01,0x01,0x01,
868 0x00,0x00,0x00,0x00,0x50,0x4b,0x00,0x00,
869 0x00,0x00,0x01,0x1c,0x00,0x00,0x00,0x00,
870 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
871 0x00,0x00,0x05,0xb8,0x00,0x00,0x00,0x00,
872 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
873 0x70,0x00,0x41,0x00,0x00,0x00,0x00,0x00,
874 0x00,0x00,0x54,0x32,0x01,0x00,0xa0,0x00,
875 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
876 0x00,0x00,0x00,0x00,0xb8,0x05,0x00,0x00,
877 0x00,0x00,0x00,0x00,0x00,0x00,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,0x0a,0x00,0x00,0x00,0x00,0x00,
884 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
885 0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,
886 0x49,0x43,0x53,0x46,0x20,0x20,0x20,0x20,
887 0x50,0x4b,0x0a,0x00,0x50,0x4b,0x43,0x53,
888 0x2d,0x31,0x2e,0x32,0x37,0x00,0x11,0x22,
889 0x33,0x44,0x55,0x66,0x77,0x88,0x99,0x00,
890 0x11,0x22,0x33,0x44,0x55,0x66,0x77,0x88,
891 0x99,0x00,0x11,0x22,0x33,0x44,0x55,0x66,
892 0x77,0x88,0x99,0x00,0x11,0x22,0x33,0x44,
893 0x55,0x66,0x77,0x88,0x99,0x00,0x11,0x22,
894 0x33,0x44,0x55,0x66,0x77,0x88,0x99,0x00,
895 0x11,0x22,0x33,0x5d,0x00,0x5b,0x00,0x77,
896 0x88,0x1e,0x00,0x00,0x57,0x00,0x00,0x00,
897 0x00,0x04,0x00,0x00,0x4f,0x00,0x00,0x00,
898 0x03,0x02,0x00,0x00,0x40,0x01,0x00,0x01,
899 0xce,0x02,0x68,0x2d,0x5f,0xa9,0xde,0x0c,
900 0xf6,0xd2,0x7b,0x58,0x4b,0xf9,0x28,0x68,
901 0x3d,0xb4,0xf4,0xef,0x78,0xd5,0xbe,0x66,
902 0x63,0x42,0xef,0xf8,0xfd,0xa4,0xf8,0xb0,
903 0x8e,0x29,0xc2,0xc9,0x2e,0xd8,0x45,0xb8,
904 0x53,0x8c,0x6f,0x4e,0x72,0x8f,0x6c,0x04,
905 0x9c,0x88,0xfc,0x1e,0xc5,0x83,0x55,0x57,
906 0xf7,0xdd,0xfd,0x4f,0x11,0x36,0x95,0x5d,
908 struct ap_queue_status status;
909 unsigned long long psmid;
913 reply = (void *) get_zeroed_page(GFP_KERNEL);
919 status = __ap_send(ap_dev->qid, 0x0102030405060708ULL,
921 if (status.response_code != AP_RESPONSE_NORMAL) {
926 /* Wait for the test message to complete. */
927 for (i = 0; i < 6; i++) {
929 status = __ap_recv(ap_dev->qid, &psmid, reply, 4096);
930 if (status.response_code == AP_RESPONSE_NORMAL &&
931 psmid == 0x0102030405060708ULL)
936 if (reply[0] == 0x00 && reply[1] == 0x86)
937 ap_dev->device_type = AP_DEVICE_TYPE_PCICC;
939 ap_dev->device_type = AP_DEVICE_TYPE_PCICA;
945 free_page((unsigned long) reply);
950 static void ap_interrupt_handler(void *unused1, void *unused2)
952 tasklet_schedule(&ap_tasklet);
956 * __ap_scan_bus(): Scan the AP bus.
957 * @dev: Pointer to device
958 * @data: Pointer to data
960 * Scan the AP bus for new devices.
962 static int __ap_scan_bus(struct device *dev, void *data)
964 return to_ap_dev(dev)->qid == (ap_qid_t)(unsigned long) data;
967 static void ap_device_release(struct device *dev)
969 struct ap_device *ap_dev = to_ap_dev(dev);
974 static void ap_scan_bus(struct work_struct *unused)
976 struct ap_device *ap_dev;
979 int queue_depth, device_type;
982 if (ap_select_domain() != 0)
984 for (i = 0; i < AP_DEVICES; i++) {
985 qid = AP_MKQID(i, ap_domain_index);
986 dev = bus_find_device(&ap_bus_type, NULL,
987 (void *)(unsigned long)qid,
989 rc = ap_query_queue(qid, &queue_depth, &device_type);
992 set_current_state(TASK_UNINTERRUPTIBLE);
993 schedule_timeout(AP_RESET_TIMEOUT);
994 rc = ap_query_queue(qid, &queue_depth,
997 ap_dev = to_ap_dev(dev);
998 spin_lock_bh(&ap_dev->lock);
999 if (rc || ap_dev->unregistered) {
1000 spin_unlock_bh(&ap_dev->lock);
1001 device_unregister(dev);
1005 spin_unlock_bh(&ap_dev->lock);
1011 rc = ap_init_queue(qid);
1014 ap_dev = kzalloc(sizeof(*ap_dev), GFP_KERNEL);
1018 ap_dev->queue_depth = queue_depth;
1019 ap_dev->unregistered = 1;
1020 spin_lock_init(&ap_dev->lock);
1021 INIT_LIST_HEAD(&ap_dev->pendingq);
1022 INIT_LIST_HEAD(&ap_dev->requestq);
1023 INIT_LIST_HEAD(&ap_dev->list);
1024 setup_timer(&ap_dev->timeout, ap_request_timeout,
1025 (unsigned long) ap_dev);
1026 if (device_type == 0)
1027 ap_probe_device_type(ap_dev);
1029 ap_dev->device_type = device_type;
1031 ap_dev->device.bus = &ap_bus_type;
1032 ap_dev->device.parent = ap_root_device;
1033 dev_set_name(&ap_dev->device, "card%02x",
1034 AP_QID_DEVICE(ap_dev->qid));
1035 ap_dev->device.release = ap_device_release;
1036 rc = device_register(&ap_dev->device);
1041 /* Add device attributes. */
1042 rc = sysfs_create_group(&ap_dev->device.kobj,
1043 &ap_dev_attr_group);
1045 spin_lock_bh(&ap_dev->lock);
1046 ap_dev->unregistered = 0;
1047 spin_unlock_bh(&ap_dev->lock);
1050 device_unregister(&ap_dev->device);
1055 ap_config_timeout(unsigned long ptr)
1057 queue_work(ap_work_queue, &ap_config_work);
1058 ap_config_timer.expires = jiffies + ap_config_time * HZ;
1059 add_timer(&ap_config_timer);
1063 * ap_schedule_poll_timer(): Schedule poll timer.
1065 * Set up the timer to run the poll tasklet
1067 static inline void ap_schedule_poll_timer(void)
1069 if (ap_using_interrupts())
1071 if (hrtimer_is_queued(&ap_poll_timer))
1073 hrtimer_start(&ap_poll_timer, ktime_set(0, poll_timeout),
1078 * ap_poll_read(): Receive pending reply messages from an AP device.
1079 * @ap_dev: pointer to the AP device
1080 * @flags: pointer to control flags, bit 2^0 is set if another poll is
1081 * required, bit 2^1 is set if the poll timer needs to get armed
1083 * Returns 0 if the device is still present, -ENODEV if not.
1085 static int ap_poll_read(struct ap_device *ap_dev, unsigned long *flags)
1087 struct ap_queue_status status;
1088 struct ap_message *ap_msg;
1090 if (ap_dev->queue_count <= 0)
1092 status = __ap_recv(ap_dev->qid, &ap_dev->reply->psmid,
1093 ap_dev->reply->message, ap_dev->reply->length);
1094 switch (status.response_code) {
1095 case AP_RESPONSE_NORMAL:
1096 atomic_dec(&ap_poll_requests);
1097 ap_decrease_queue_count(ap_dev);
1098 list_for_each_entry(ap_msg, &ap_dev->pendingq, list) {
1099 if (ap_msg->psmid != ap_dev->reply->psmid)
1101 list_del_init(&ap_msg->list);
1102 ap_dev->pendingq_count--;
1103 ap_dev->drv->receive(ap_dev, ap_msg, ap_dev->reply);
1106 if (ap_dev->queue_count > 0)
1109 case AP_RESPONSE_NO_PENDING_REPLY:
1110 if (status.queue_empty) {
1111 /* The card shouldn't forget requests but who knows. */
1112 atomic_sub(ap_dev->queue_count, &ap_poll_requests);
1113 ap_dev->queue_count = 0;
1114 list_splice_init(&ap_dev->pendingq, &ap_dev->requestq);
1115 ap_dev->requestq_count += ap_dev->pendingq_count;
1116 ap_dev->pendingq_count = 0;
1127 * ap_poll_write(): Send messages from the request queue to an AP device.
1128 * @ap_dev: pointer to the AP device
1129 * @flags: pointer to control flags, bit 2^0 is set if another poll is
1130 * required, bit 2^1 is set if the poll timer needs to get armed
1132 * Returns 0 if the device is still present, -ENODEV if not.
1134 static int ap_poll_write(struct ap_device *ap_dev, unsigned long *flags)
1136 struct ap_queue_status status;
1137 struct ap_message *ap_msg;
1139 if (ap_dev->requestq_count <= 0 ||
1140 ap_dev->queue_count >= ap_dev->queue_depth)
1142 /* Start the next request on the queue. */
1143 ap_msg = list_entry(ap_dev->requestq.next, struct ap_message, list);
1144 status = __ap_send(ap_dev->qid, ap_msg->psmid,
1145 ap_msg->message, ap_msg->length);
1146 switch (status.response_code) {
1147 case AP_RESPONSE_NORMAL:
1148 atomic_inc(&ap_poll_requests);
1149 ap_increase_queue_count(ap_dev);
1150 list_move_tail(&ap_msg->list, &ap_dev->pendingq);
1151 ap_dev->requestq_count--;
1152 ap_dev->pendingq_count++;
1153 if (ap_dev->queue_count < ap_dev->queue_depth &&
1154 ap_dev->requestq_count > 0)
1158 case AP_RESPONSE_Q_FULL:
1159 case AP_RESPONSE_RESET_IN_PROGRESS:
1162 case AP_RESPONSE_MESSAGE_TOO_BIG:
1171 * ap_poll_queue(): Poll AP device for pending replies and send new messages.
1172 * @ap_dev: pointer to the bus device
1173 * @flags: pointer to control flags, bit 2^0 is set if another poll is
1174 * required, bit 2^1 is set if the poll timer needs to get armed
1176 * Poll AP device for pending replies and send new messages. If either
1177 * ap_poll_read or ap_poll_write returns -ENODEV unregister the device.
1180 static inline int ap_poll_queue(struct ap_device *ap_dev, unsigned long *flags)
1184 rc = ap_poll_read(ap_dev, flags);
1187 return ap_poll_write(ap_dev, flags);
1191 * __ap_queue_message(): Queue a message to a device.
1192 * @ap_dev: pointer to the AP device
1193 * @ap_msg: the message to be queued
1195 * Queue a message to a device. Returns 0 if successful.
1197 static int __ap_queue_message(struct ap_device *ap_dev, struct ap_message *ap_msg)
1199 struct ap_queue_status status;
1201 if (list_empty(&ap_dev->requestq) &&
1202 ap_dev->queue_count < ap_dev->queue_depth) {
1203 status = __ap_send(ap_dev->qid, ap_msg->psmid,
1204 ap_msg->message, ap_msg->length);
1205 switch (status.response_code) {
1206 case AP_RESPONSE_NORMAL:
1207 list_add_tail(&ap_msg->list, &ap_dev->pendingq);
1208 atomic_inc(&ap_poll_requests);
1209 ap_dev->pendingq_count++;
1210 ap_increase_queue_count(ap_dev);
1211 ap_dev->total_request_count++;
1213 case AP_RESPONSE_Q_FULL:
1214 case AP_RESPONSE_RESET_IN_PROGRESS:
1215 list_add_tail(&ap_msg->list, &ap_dev->requestq);
1216 ap_dev->requestq_count++;
1217 ap_dev->total_request_count++;
1219 case AP_RESPONSE_MESSAGE_TOO_BIG:
1220 ap_dev->drv->receive(ap_dev, ap_msg, ERR_PTR(-EINVAL));
1222 default: /* Device is gone. */
1223 ap_dev->drv->receive(ap_dev, ap_msg, ERR_PTR(-ENODEV));
1227 list_add_tail(&ap_msg->list, &ap_dev->requestq);
1228 ap_dev->requestq_count++;
1229 ap_dev->total_request_count++;
1232 ap_schedule_poll_timer();
1236 void ap_queue_message(struct ap_device *ap_dev, struct ap_message *ap_msg)
1238 unsigned long flags;
1241 spin_lock_bh(&ap_dev->lock);
1242 if (!ap_dev->unregistered) {
1243 /* Make room on the queue by polling for finished requests. */
1244 rc = ap_poll_queue(ap_dev, &flags);
1246 rc = __ap_queue_message(ap_dev, ap_msg);
1248 wake_up(&ap_poll_wait);
1250 ap_dev->unregistered = 1;
1252 ap_dev->drv->receive(ap_dev, ap_msg, ERR_PTR(-ENODEV));
1255 spin_unlock_bh(&ap_dev->lock);
1257 device_unregister(&ap_dev->device);
1259 EXPORT_SYMBOL(ap_queue_message);
1262 * ap_cancel_message(): Cancel a crypto request.
1263 * @ap_dev: The AP device that has the message queued
1264 * @ap_msg: The message that is to be removed
1266 * Cancel a crypto request. This is done by removing the request
1267 * from the device pending or request queue. Note that the
1268 * request stays on the AP queue. When it finishes the message
1269 * reply will be discarded because the psmid can't be found.
1271 void ap_cancel_message(struct ap_device *ap_dev, struct ap_message *ap_msg)
1273 struct ap_message *tmp;
1275 spin_lock_bh(&ap_dev->lock);
1276 if (!list_empty(&ap_msg->list)) {
1277 list_for_each_entry(tmp, &ap_dev->pendingq, list)
1278 if (tmp->psmid == ap_msg->psmid) {
1279 ap_dev->pendingq_count--;
1282 ap_dev->requestq_count--;
1284 list_del_init(&ap_msg->list);
1286 spin_unlock_bh(&ap_dev->lock);
1288 EXPORT_SYMBOL(ap_cancel_message);
1291 * ap_poll_timeout(): AP receive polling for finished AP requests.
1292 * @unused: Unused pointer.
1294 * Schedules the AP tasklet using a high resolution timer.
1296 static enum hrtimer_restart ap_poll_timeout(struct hrtimer *unused)
1298 tasklet_schedule(&ap_tasklet);
1299 return HRTIMER_NORESTART;
1303 * ap_reset(): Reset a not responding AP device.
1304 * @ap_dev: Pointer to the AP device
1306 * Reset a not responding AP device and move all requests from the
1307 * pending queue to the request queue.
1309 static void ap_reset(struct ap_device *ap_dev)
1313 ap_dev->reset = AP_RESET_IGNORE;
1314 atomic_sub(ap_dev->queue_count, &ap_poll_requests);
1315 ap_dev->queue_count = 0;
1316 list_splice_init(&ap_dev->pendingq, &ap_dev->requestq);
1317 ap_dev->requestq_count += ap_dev->pendingq_count;
1318 ap_dev->pendingq_count = 0;
1319 rc = ap_init_queue(ap_dev->qid);
1321 ap_dev->unregistered = 1;
1324 static int __ap_poll_device(struct ap_device *ap_dev, unsigned long *flags)
1326 spin_lock(&ap_dev->lock);
1327 if (!ap_dev->unregistered) {
1328 if (ap_poll_queue(ap_dev, flags))
1329 ap_dev->unregistered = 1;
1330 if (ap_dev->reset == AP_RESET_DO)
1333 spin_unlock(&ap_dev->lock);
1338 * ap_poll_all(): Poll all AP devices.
1339 * @dummy: Unused variable
1341 * Poll all AP devices on the bus in a round robin fashion. Continue
1342 * polling until bit 2^0 of the control flags is not set. If bit 2^1
1343 * of the control flags has been set arm the poll timer.
1345 static void ap_poll_all(unsigned long dummy)
1347 unsigned long flags;
1348 struct ap_device *ap_dev;
1350 /* Reset the indicator if interrupts are used. Thus new interrupts can
1351 * be received. Doing it in the beginning of the tasklet is therefor
1352 * important that no requests on any AP get lost.
1354 if (ap_using_interrupts())
1355 xchg((u8 *)ap_interrupt_indicator, 0);
1358 spin_lock(&ap_device_list_lock);
1359 list_for_each_entry(ap_dev, &ap_device_list, list) {
1360 __ap_poll_device(ap_dev, &flags);
1362 spin_unlock(&ap_device_list_lock);
1363 } while (flags & 1);
1365 ap_schedule_poll_timer();
1369 * ap_poll_thread(): Thread that polls for finished requests.
1370 * @data: Unused pointer
1372 * AP bus poll thread. The purpose of this thread is to poll for
1373 * finished requests in a loop if there is a "free" cpu - that is
1374 * a cpu that doesn't have anything better to do. The polling stops
1375 * as soon as there is another task or if all messages have been
1378 static int ap_poll_thread(void *data)
1380 DECLARE_WAITQUEUE(wait, current);
1381 unsigned long flags;
1383 struct ap_device *ap_dev;
1385 set_user_nice(current, 19);
1387 if (need_resched()) {
1391 add_wait_queue(&ap_poll_wait, &wait);
1392 set_current_state(TASK_INTERRUPTIBLE);
1393 if (kthread_should_stop())
1395 requests = atomic_read(&ap_poll_requests);
1398 set_current_state(TASK_RUNNING);
1399 remove_wait_queue(&ap_poll_wait, &wait);
1402 spin_lock_bh(&ap_device_list_lock);
1403 list_for_each_entry(ap_dev, &ap_device_list, list) {
1404 __ap_poll_device(ap_dev, &flags);
1406 spin_unlock_bh(&ap_device_list_lock);
1408 set_current_state(TASK_RUNNING);
1409 remove_wait_queue(&ap_poll_wait, &wait);
1413 static int ap_poll_thread_start(void)
1417 if (ap_using_interrupts())
1419 mutex_lock(&ap_poll_thread_mutex);
1420 if (!ap_poll_kthread) {
1421 ap_poll_kthread = kthread_run(ap_poll_thread, NULL, "appoll");
1422 rc = IS_ERR(ap_poll_kthread) ? PTR_ERR(ap_poll_kthread) : 0;
1424 ap_poll_kthread = NULL;
1428 mutex_unlock(&ap_poll_thread_mutex);
1432 static void ap_poll_thread_stop(void)
1434 mutex_lock(&ap_poll_thread_mutex);
1435 if (ap_poll_kthread) {
1436 kthread_stop(ap_poll_kthread);
1437 ap_poll_kthread = NULL;
1439 mutex_unlock(&ap_poll_thread_mutex);
1443 * ap_request_timeout(): Handling of request timeouts
1444 * @data: Holds the AP device.
1446 * Handles request timeouts.
1448 static void ap_request_timeout(unsigned long data)
1450 struct ap_device *ap_dev = (struct ap_device *) data;
1452 if (ap_dev->reset == AP_RESET_ARMED) {
1453 ap_dev->reset = AP_RESET_DO;
1455 if (ap_using_interrupts())
1456 tasklet_schedule(&ap_tasklet);
1460 static void ap_reset_domain(void)
1464 if (ap_domain_index != -1)
1465 for (i = 0; i < AP_DEVICES; i++)
1466 ap_reset_queue(AP_MKQID(i, ap_domain_index));
1469 static void ap_reset_all(void)
1473 for (i = 0; i < AP_DOMAINS; i++)
1474 for (j = 0; j < AP_DEVICES; j++)
1475 ap_reset_queue(AP_MKQID(j, i));
1478 static struct reset_call ap_reset_call = {
1483 * ap_module_init(): The module initialization code.
1485 * Initializes the module.
1487 int __init ap_module_init(void)
1491 if (ap_domain_index < -1 || ap_domain_index >= AP_DOMAINS) {
1492 pr_warning("%d is not a valid cryptographic domain\n",
1496 if (ap_instructions_available() != 0) {
1497 pr_warning("The hardware system does not support "
1498 "AP instructions\n");
1501 if (ap_interrupts_available()) {
1502 isc_register(AP_ISC);
1503 ap_interrupt_indicator = s390_register_adapter_interrupt(
1504 &ap_interrupt_handler, NULL, AP_ISC);
1505 if (IS_ERR(ap_interrupt_indicator)) {
1506 ap_interrupt_indicator = NULL;
1507 isc_unregister(AP_ISC);
1511 register_reset_call(&ap_reset_call);
1513 /* Create /sys/bus/ap. */
1514 rc = bus_register(&ap_bus_type);
1517 for (i = 0; ap_bus_attrs[i]; i++) {
1518 rc = bus_create_file(&ap_bus_type, ap_bus_attrs[i]);
1523 /* Create /sys/devices/ap. */
1524 ap_root_device = root_device_register("ap");
1525 rc = IS_ERR(ap_root_device) ? PTR_ERR(ap_root_device) : 0;
1529 ap_work_queue = create_singlethread_workqueue("kapwork");
1530 if (!ap_work_queue) {
1535 if (ap_select_domain() == 0)
1538 /* Setup the AP bus rescan timer. */
1539 init_timer(&ap_config_timer);
1540 ap_config_timer.function = ap_config_timeout;
1541 ap_config_timer.data = 0;
1542 ap_config_timer.expires = jiffies + ap_config_time * HZ;
1543 add_timer(&ap_config_timer);
1545 /* Setup the high resultion poll timer.
1546 * If we are running under z/VM adjust polling to z/VM polling rate.
1549 poll_timeout = 1500000;
1550 hrtimer_init(&ap_poll_timer, CLOCK_MONOTONIC, HRTIMER_MODE_ABS);
1551 ap_poll_timer.function = ap_poll_timeout;
1553 /* Start the low priority AP bus poll thread. */
1554 if (ap_thread_flag) {
1555 rc = ap_poll_thread_start();
1563 del_timer_sync(&ap_config_timer);
1564 hrtimer_cancel(&ap_poll_timer);
1565 destroy_workqueue(ap_work_queue);
1567 root_device_unregister(ap_root_device);
1570 bus_remove_file(&ap_bus_type, ap_bus_attrs[i]);
1571 bus_unregister(&ap_bus_type);
1573 unregister_reset_call(&ap_reset_call);
1574 if (ap_using_interrupts()) {
1575 s390_unregister_adapter_interrupt(ap_interrupt_indicator, AP_ISC);
1576 isc_unregister(AP_ISC);
1581 static int __ap_match_all(struct device *dev, void *data)
1587 * ap_modules_exit(): The module termination code
1589 * Terminates the module.
1591 void ap_module_exit(void)
1597 ap_poll_thread_stop();
1598 del_timer_sync(&ap_config_timer);
1599 hrtimer_cancel(&ap_poll_timer);
1600 destroy_workqueue(ap_work_queue);
1601 tasklet_kill(&ap_tasklet);
1602 root_device_unregister(ap_root_device);
1603 while ((dev = bus_find_device(&ap_bus_type, NULL, NULL,
1606 device_unregister(dev);
1609 for (i = 0; ap_bus_attrs[i]; i++)
1610 bus_remove_file(&ap_bus_type, ap_bus_attrs[i]);
1611 bus_unregister(&ap_bus_type);
1612 unregister_reset_call(&ap_reset_call);
1613 if (ap_using_interrupts()) {
1614 s390_unregister_adapter_interrupt(ap_interrupt_indicator, AP_ISC);
1615 isc_unregister(AP_ISC);
1619 #ifndef CONFIG_ZCRYPT_MONOLITHIC
1620 module_init(ap_module_init);
1621 module_exit(ap_module_exit);