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/slab.h>
37 #include <linux/notifier.h>
38 #include <linux/kthread.h>
39 #include <linux/mutex.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);
58 static int __ap_poll_device(struct ap_device *ap_dev, unsigned long *flags);
59 static int ap_device_remove(struct device *dev);
60 static int ap_device_probe(struct device *dev);
61 static void ap_interrupt_handler(void *unused1, void *unused2);
62 static void ap_reset(struct ap_device *ap_dev);
63 static void ap_config_timeout(unsigned long ptr);
64 static int ap_select_domain(void);
69 MODULE_AUTHOR("IBM Corporation");
70 MODULE_DESCRIPTION("Adjunct Processor Bus driver, "
71 "Copyright 2006 IBM Corporation");
72 MODULE_LICENSE("GPL");
77 int ap_domain_index = -1; /* Adjunct Processor Domain Index */
78 module_param_named(domain, ap_domain_index, int, 0000);
79 MODULE_PARM_DESC(domain, "domain index for ap devices");
80 EXPORT_SYMBOL(ap_domain_index);
82 static int ap_thread_flag = 0;
83 module_param_named(poll_thread, ap_thread_flag, int, 0000);
84 MODULE_PARM_DESC(poll_thread, "Turn on/off poll thread, default is 0 (off).");
86 static struct device *ap_root_device = NULL;
87 static DEFINE_SPINLOCK(ap_device_list_lock);
88 static LIST_HEAD(ap_device_list);
91 * Workqueue & timer for bus rescan.
93 static struct workqueue_struct *ap_work_queue;
94 static struct timer_list ap_config_timer;
95 static int ap_config_time = AP_CONFIG_TIME;
96 static DECLARE_WORK(ap_config_work, ap_scan_bus);
99 * Tasklet & timer for AP request polling and interrupts
101 static DECLARE_TASKLET(ap_tasklet, ap_poll_all, 0);
102 static atomic_t ap_poll_requests = ATOMIC_INIT(0);
103 static DECLARE_WAIT_QUEUE_HEAD(ap_poll_wait);
104 static struct task_struct *ap_poll_kthread = NULL;
105 static DEFINE_MUTEX(ap_poll_thread_mutex);
106 static DEFINE_SPINLOCK(ap_poll_timer_lock);
107 static void *ap_interrupt_indicator;
108 static struct hrtimer ap_poll_timer;
109 /* In LPAR poll with 4kHz frequency. Poll every 250000 nanoseconds.
110 * If z/VM change to 1500000 nanoseconds to adjust to z/VM polling.*/
111 static unsigned long long poll_timeout = 250000;
114 static int ap_suspend_flag;
115 /* Flag to check if domain was set through module parameter domain=. This is
116 * important when supsend and resume is done in a z/VM environment where the
117 * domain might change. */
118 static int user_set_domain = 0;
119 static struct bus_type ap_bus_type;
122 * ap_using_interrupts() - Returns non-zero if interrupt support is
125 static inline int ap_using_interrupts(void)
127 return ap_interrupt_indicator != NULL;
131 * ap_intructions_available() - Test if AP instructions are available.
133 * Returns 0 if the AP instructions are installed.
135 static inline int ap_instructions_available(void)
137 register unsigned long reg0 asm ("0") = AP_MKQID(0,0);
138 register unsigned long reg1 asm ("1") = -ENODEV;
139 register unsigned long reg2 asm ("2") = 0UL;
142 " .long 0xb2af0000\n" /* PQAP(TAPQ) */
146 : "+d" (reg0), "+d" (reg1), "+d" (reg2) : : "cc" );
151 * ap_interrupts_available(): Test if AP interrupts are available.
153 * Returns 1 if AP interrupts are available.
155 static int ap_interrupts_available(void)
157 return test_facility(1) && test_facility(2);
161 * ap_test_queue(): Test adjunct processor queue.
162 * @qid: The AP queue number
163 * @queue_depth: Pointer to queue depth value
164 * @device_type: Pointer to device type value
166 * Returns AP queue status structure.
168 static inline struct ap_queue_status
169 ap_test_queue(ap_qid_t qid, int *queue_depth, int *device_type)
171 register unsigned long reg0 asm ("0") = qid;
172 register struct ap_queue_status reg1 asm ("1");
173 register unsigned long reg2 asm ("2") = 0UL;
175 asm volatile(".long 0xb2af0000" /* PQAP(TAPQ) */
176 : "+d" (reg0), "=d" (reg1), "+d" (reg2) : : "cc");
177 *device_type = (int) (reg2 >> 24);
178 *queue_depth = (int) (reg2 & 0xff);
183 * ap_reset_queue(): Reset adjunct processor queue.
184 * @qid: The AP queue number
186 * Returns AP queue status structure.
188 static inline struct ap_queue_status ap_reset_queue(ap_qid_t qid)
190 register unsigned long reg0 asm ("0") = qid | 0x01000000UL;
191 register struct ap_queue_status reg1 asm ("1");
192 register unsigned long reg2 asm ("2") = 0UL;
195 ".long 0xb2af0000" /* PQAP(RAPQ) */
196 : "+d" (reg0), "=d" (reg1), "+d" (reg2) : : "cc");
202 * ap_queue_interruption_control(): Enable interruption for a specific AP.
203 * @qid: The AP queue number
204 * @ind: The notification indicator byte
206 * Returns AP queue status.
208 static inline struct ap_queue_status
209 ap_queue_interruption_control(ap_qid_t qid, void *ind)
211 register unsigned long reg0 asm ("0") = qid | 0x03000000UL;
212 register unsigned long reg1_in asm ("1") = 0x0000800000000000UL | AP_ISC;
213 register struct ap_queue_status reg1_out asm ("1");
214 register void *reg2 asm ("2") = ind;
216 ".long 0xb2af0000" /* PQAP(RAPQ) */
217 : "+d" (reg0), "+d" (reg1_in), "=d" (reg1_out), "+d" (reg2)
225 * ap_queue_enable_interruption(): Enable interruption on an AP.
226 * @qid: The AP queue number
227 * @ind: the notification indicator byte
229 * Enables interruption on AP queue via ap_queue_interruption_control(). Based
230 * on the return value it waits a while and tests the AP queue if interrupts
231 * have been switched on using ap_test_queue().
233 static int ap_queue_enable_interruption(ap_qid_t qid, void *ind)
236 struct ap_queue_status status;
237 int t_depth, t_device_type, rc, i;
240 status = ap_queue_interruption_control(qid, ind);
242 for (i = 0; i < AP_MAX_RESET; i++) {
243 switch (status.response_code) {
244 case AP_RESPONSE_NORMAL:
245 if (status.int_enabled)
248 case AP_RESPONSE_RESET_IN_PROGRESS:
249 case AP_RESPONSE_BUSY:
251 case AP_RESPONSE_Q_NOT_AVAIL:
252 case AP_RESPONSE_DECONFIGURED:
253 case AP_RESPONSE_CHECKSTOPPED:
254 case AP_RESPONSE_INVALID_ADDRESS:
256 case AP_RESPONSE_OTHERWISE_CHANGED:
257 if (status.int_enabled)
263 if (i < AP_MAX_RESET - 1) {
265 status = ap_test_queue(qid, &t_depth, &t_device_type);
275 * __ap_send(): Send message to adjunct processor queue.
276 * @qid: The AP queue number
277 * @psmid: The program supplied message identifier
278 * @msg: The message text
279 * @length: The message length
280 * @special: Special Bit
282 * Returns AP queue status structure.
283 * Condition code 1 on NQAP can't happen because the L bit is 1.
284 * Condition code 2 on NQAP also means the send is incomplete,
285 * because a segment boundary was reached. The NQAP is repeated.
287 static inline struct ap_queue_status
288 __ap_send(ap_qid_t qid, unsigned long long psmid, void *msg, size_t length,
289 unsigned int special)
291 typedef struct { char _[length]; } msgblock;
292 register unsigned long reg0 asm ("0") = qid | 0x40000000UL;
293 register struct ap_queue_status reg1 asm ("1");
294 register unsigned long reg2 asm ("2") = (unsigned long) msg;
295 register unsigned long reg3 asm ("3") = (unsigned long) length;
296 register unsigned long reg4 asm ("4") = (unsigned int) (psmid >> 32);
297 register unsigned long reg5 asm ("5") = (unsigned int) psmid;
303 "0: .long 0xb2ad0042\n" /* DQAP */
305 : "+d" (reg0), "=d" (reg1), "+d" (reg2), "+d" (reg3)
306 : "d" (reg4), "d" (reg5), "m" (*(msgblock *) msg)
311 int ap_send(ap_qid_t qid, unsigned long long psmid, void *msg, size_t length)
313 struct ap_queue_status status;
315 status = __ap_send(qid, psmid, msg, length, 0);
316 switch (status.response_code) {
317 case AP_RESPONSE_NORMAL:
319 case AP_RESPONSE_Q_FULL:
320 case AP_RESPONSE_RESET_IN_PROGRESS:
322 case AP_RESPONSE_REQ_FAC_NOT_INST:
324 default: /* Device is gone. */
328 EXPORT_SYMBOL(ap_send);
331 * __ap_recv(): Receive message from adjunct processor queue.
332 * @qid: The AP queue number
333 * @psmid: Pointer to program supplied message identifier
334 * @msg: The message text
335 * @length: The message length
337 * Returns AP queue status structure.
338 * Condition code 1 on DQAP means the receive has taken place
339 * but only partially. The response is incomplete, hence the
341 * Condition code 2 on DQAP also means the receive is incomplete,
342 * this time because a segment boundary was reached. Again, the
344 * Note that gpr2 is used by the DQAP instruction to keep track of
345 * any 'residual' length, in case the instruction gets interrupted.
346 * Hence it gets zeroed before the instruction.
348 static inline struct ap_queue_status
349 __ap_recv(ap_qid_t qid, unsigned long long *psmid, void *msg, size_t length)
351 typedef struct { char _[length]; } msgblock;
352 register unsigned long reg0 asm("0") = qid | 0x80000000UL;
353 register struct ap_queue_status reg1 asm ("1");
354 register unsigned long reg2 asm("2") = 0UL;
355 register unsigned long reg4 asm("4") = (unsigned long) msg;
356 register unsigned long reg5 asm("5") = (unsigned long) length;
357 register unsigned long reg6 asm("6") = 0UL;
358 register unsigned long reg7 asm("7") = 0UL;
362 "0: .long 0xb2ae0064\n"
364 : "+d" (reg0), "=d" (reg1), "+d" (reg2),
365 "+d" (reg4), "+d" (reg5), "+d" (reg6), "+d" (reg7),
366 "=m" (*(msgblock *) msg) : : "cc" );
367 *psmid = (((unsigned long long) reg6) << 32) + reg7;
371 int ap_recv(ap_qid_t qid, unsigned long long *psmid, void *msg, size_t length)
373 struct ap_queue_status status;
375 status = __ap_recv(qid, psmid, msg, length);
376 switch (status.response_code) {
377 case AP_RESPONSE_NORMAL:
379 case AP_RESPONSE_NO_PENDING_REPLY:
380 if (status.queue_empty)
383 case AP_RESPONSE_RESET_IN_PROGRESS:
389 EXPORT_SYMBOL(ap_recv);
392 * ap_query_queue(): Check if an AP queue is available.
393 * @qid: The AP queue number
394 * @queue_depth: Pointer to queue depth value
395 * @device_type: Pointer to device type value
397 * The test is repeated for AP_MAX_RESET times.
399 static int ap_query_queue(ap_qid_t qid, int *queue_depth, int *device_type)
401 struct ap_queue_status status;
402 int t_depth, t_device_type, rc, i;
405 for (i = 0; i < AP_MAX_RESET; i++) {
406 status = ap_test_queue(qid, &t_depth, &t_device_type);
407 switch (status.response_code) {
408 case AP_RESPONSE_NORMAL:
409 *queue_depth = t_depth + 1;
410 *device_type = t_device_type;
413 case AP_RESPONSE_Q_NOT_AVAIL:
416 case AP_RESPONSE_RESET_IN_PROGRESS:
418 case AP_RESPONSE_DECONFIGURED:
421 case AP_RESPONSE_CHECKSTOPPED:
424 case AP_RESPONSE_INVALID_ADDRESS:
427 case AP_RESPONSE_OTHERWISE_CHANGED:
429 case AP_RESPONSE_BUSY:
436 if (i < AP_MAX_RESET - 1)
443 * ap_init_queue(): Reset an AP queue.
444 * @qid: The AP queue number
446 * Reset an AP queue and wait for it to become available again.
448 static int ap_init_queue(ap_qid_t qid)
450 struct ap_queue_status status;
454 status = ap_reset_queue(qid);
455 for (i = 0; i < AP_MAX_RESET; i++) {
456 switch (status.response_code) {
457 case AP_RESPONSE_NORMAL:
458 if (status.queue_empty)
461 case AP_RESPONSE_Q_NOT_AVAIL:
462 case AP_RESPONSE_DECONFIGURED:
463 case AP_RESPONSE_CHECKSTOPPED:
464 i = AP_MAX_RESET; /* return with -ENODEV */
466 case AP_RESPONSE_RESET_IN_PROGRESS:
468 case AP_RESPONSE_BUSY:
472 if (rc != -ENODEV && rc != -EBUSY)
474 if (i < AP_MAX_RESET - 1) {
476 status = ap_test_queue(qid, &dummy, &dummy);
479 if (rc == 0 && ap_using_interrupts()) {
480 rc = ap_queue_enable_interruption(qid, ap_interrupt_indicator);
481 /* If interruption mode is supported by the machine,
482 * but an AP can not be enabled for interruption then
483 * the AP will be discarded. */
485 pr_err("Registering adapter interrupts for "
486 "AP %d failed\n", AP_QID_DEVICE(qid));
492 * ap_increase_queue_count(): Arm request timeout.
493 * @ap_dev: Pointer to an AP device.
495 * Arm request timeout if an AP device was idle and a new request is submitted.
497 static void ap_increase_queue_count(struct ap_device *ap_dev)
499 int timeout = ap_dev->drv->request_timeout;
501 ap_dev->queue_count++;
502 if (ap_dev->queue_count == 1) {
503 mod_timer(&ap_dev->timeout, jiffies + timeout);
504 ap_dev->reset = AP_RESET_ARMED;
509 * ap_decrease_queue_count(): Decrease queue count.
510 * @ap_dev: Pointer to an AP device.
512 * If AP device is still alive, re-schedule request timeout if there are still
515 static void ap_decrease_queue_count(struct ap_device *ap_dev)
517 int timeout = ap_dev->drv->request_timeout;
519 ap_dev->queue_count--;
520 if (ap_dev->queue_count > 0)
521 mod_timer(&ap_dev->timeout, jiffies + timeout);
524 * The timeout timer should to be disabled now - since
525 * del_timer_sync() is very expensive, we just tell via the
526 * reset flag to ignore the pending timeout timer.
528 ap_dev->reset = AP_RESET_IGNORE;
532 * AP device related attributes.
534 static ssize_t ap_hwtype_show(struct device *dev,
535 struct device_attribute *attr, char *buf)
537 struct ap_device *ap_dev = to_ap_dev(dev);
538 return snprintf(buf, PAGE_SIZE, "%d\n", ap_dev->device_type);
541 static DEVICE_ATTR(hwtype, 0444, ap_hwtype_show, NULL);
542 static ssize_t ap_depth_show(struct device *dev, struct device_attribute *attr,
545 struct ap_device *ap_dev = to_ap_dev(dev);
546 return snprintf(buf, PAGE_SIZE, "%d\n", ap_dev->queue_depth);
549 static DEVICE_ATTR(depth, 0444, ap_depth_show, NULL);
550 static ssize_t ap_request_count_show(struct device *dev,
551 struct device_attribute *attr,
554 struct ap_device *ap_dev = to_ap_dev(dev);
557 spin_lock_bh(&ap_dev->lock);
558 rc = snprintf(buf, PAGE_SIZE, "%d\n", ap_dev->total_request_count);
559 spin_unlock_bh(&ap_dev->lock);
563 static DEVICE_ATTR(request_count, 0444, ap_request_count_show, NULL);
565 static ssize_t ap_modalias_show(struct device *dev,
566 struct device_attribute *attr, char *buf)
568 return sprintf(buf, "ap:t%02X", to_ap_dev(dev)->device_type);
571 static DEVICE_ATTR(modalias, 0444, ap_modalias_show, NULL);
573 static struct attribute *ap_dev_attrs[] = {
574 &dev_attr_hwtype.attr,
575 &dev_attr_depth.attr,
576 &dev_attr_request_count.attr,
577 &dev_attr_modalias.attr,
580 static struct attribute_group ap_dev_attr_group = {
581 .attrs = ap_dev_attrs
586 * @dev: Pointer to device
587 * @drv: Pointer to device_driver
589 * AP bus driver registration/unregistration.
591 static int ap_bus_match(struct device *dev, struct device_driver *drv)
593 struct ap_device *ap_dev = to_ap_dev(dev);
594 struct ap_driver *ap_drv = to_ap_drv(drv);
595 struct ap_device_id *id;
598 * Compare device type of the device with the list of
599 * supported types of the device_driver.
601 for (id = ap_drv->ids; id->match_flags; id++) {
602 if ((id->match_flags & AP_DEVICE_ID_MATCH_DEVICE_TYPE) &&
603 (id->dev_type != ap_dev->device_type))
611 * ap_uevent(): Uevent function for AP devices.
612 * @dev: Pointer to device
613 * @env: Pointer to kobj_uevent_env
615 * It sets up a single environment variable DEV_TYPE which contains the
616 * hardware device type.
618 static int ap_uevent (struct device *dev, struct kobj_uevent_env *env)
620 struct ap_device *ap_dev = to_ap_dev(dev);
626 /* Set up DEV_TYPE environment variable. */
627 retval = add_uevent_var(env, "DEV_TYPE=%04X", ap_dev->device_type);
632 retval = add_uevent_var(env, "MODALIAS=ap:t%02X", ap_dev->device_type);
637 static int ap_bus_suspend(struct device *dev, pm_message_t state)
639 struct ap_device *ap_dev = to_ap_dev(dev);
642 if (!ap_suspend_flag) {
645 /* Disable scanning for devices, thus we do not want to scan
646 * for them after removing.
648 del_timer_sync(&ap_config_timer);
649 if (ap_work_queue != NULL) {
650 destroy_workqueue(ap_work_queue);
651 ap_work_queue = NULL;
654 tasklet_disable(&ap_tasklet);
656 /* Poll on the device until all requests are finished. */
659 spin_lock_bh(&ap_dev->lock);
660 __ap_poll_device(ap_dev, &flags);
661 spin_unlock_bh(&ap_dev->lock);
662 } while ((flags & 1) || (flags & 2));
664 spin_lock_bh(&ap_dev->lock);
665 ap_dev->unregistered = 1;
666 spin_unlock_bh(&ap_dev->lock);
671 static int ap_bus_resume(struct device *dev)
674 struct ap_device *ap_dev = to_ap_dev(dev);
676 if (ap_suspend_flag) {
678 if (!ap_interrupts_available())
679 ap_interrupt_indicator = NULL;
680 if (!user_set_domain) {
681 ap_domain_index = -1;
684 init_timer(&ap_config_timer);
685 ap_config_timer.function = ap_config_timeout;
686 ap_config_timer.data = 0;
687 ap_config_timer.expires = jiffies + ap_config_time * HZ;
688 add_timer(&ap_config_timer);
689 ap_work_queue = create_singlethread_workqueue("kapwork");
692 tasklet_enable(&ap_tasklet);
693 if (!ap_using_interrupts())
694 ap_schedule_poll_timer();
696 tasklet_schedule(&ap_tasklet);
698 rc = ap_poll_thread_start();
700 if (AP_QID_QUEUE(ap_dev->qid) != ap_domain_index) {
701 spin_lock_bh(&ap_dev->lock);
702 ap_dev->qid = AP_MKQID(AP_QID_DEVICE(ap_dev->qid),
704 spin_unlock_bh(&ap_dev->lock);
706 queue_work(ap_work_queue, &ap_config_work);
711 static struct bus_type ap_bus_type = {
713 .match = &ap_bus_match,
714 .uevent = &ap_uevent,
715 .suspend = ap_bus_suspend,
716 .resume = ap_bus_resume
719 static int ap_device_probe(struct device *dev)
721 struct ap_device *ap_dev = to_ap_dev(dev);
722 struct ap_driver *ap_drv = to_ap_drv(dev->driver);
725 ap_dev->drv = ap_drv;
726 rc = ap_drv->probe ? ap_drv->probe(ap_dev) : -ENODEV;
728 spin_lock_bh(&ap_device_list_lock);
729 list_add(&ap_dev->list, &ap_device_list);
730 spin_unlock_bh(&ap_device_list_lock);
736 * __ap_flush_queue(): Flush requests.
737 * @ap_dev: Pointer to the AP device
739 * Flush all requests from the request/pending queue of an AP device.
741 static void __ap_flush_queue(struct ap_device *ap_dev)
743 struct ap_message *ap_msg, *next;
745 list_for_each_entry_safe(ap_msg, next, &ap_dev->pendingq, list) {
746 list_del_init(&ap_msg->list);
747 ap_dev->pendingq_count--;
748 ap_dev->drv->receive(ap_dev, ap_msg, ERR_PTR(-ENODEV));
750 list_for_each_entry_safe(ap_msg, next, &ap_dev->requestq, list) {
751 list_del_init(&ap_msg->list);
752 ap_dev->requestq_count--;
753 ap_dev->drv->receive(ap_dev, ap_msg, ERR_PTR(-ENODEV));
757 void ap_flush_queue(struct ap_device *ap_dev)
759 spin_lock_bh(&ap_dev->lock);
760 __ap_flush_queue(ap_dev);
761 spin_unlock_bh(&ap_dev->lock);
763 EXPORT_SYMBOL(ap_flush_queue);
765 static int ap_device_remove(struct device *dev)
767 struct ap_device *ap_dev = to_ap_dev(dev);
768 struct ap_driver *ap_drv = ap_dev->drv;
770 ap_flush_queue(ap_dev);
771 del_timer_sync(&ap_dev->timeout);
772 spin_lock_bh(&ap_device_list_lock);
773 list_del_init(&ap_dev->list);
774 spin_unlock_bh(&ap_device_list_lock);
776 ap_drv->remove(ap_dev);
777 spin_lock_bh(&ap_dev->lock);
778 atomic_sub(ap_dev->queue_count, &ap_poll_requests);
779 spin_unlock_bh(&ap_dev->lock);
783 int ap_driver_register(struct ap_driver *ap_drv, struct module *owner,
786 struct device_driver *drv = &ap_drv->driver;
788 drv->bus = &ap_bus_type;
789 drv->probe = ap_device_probe;
790 drv->remove = ap_device_remove;
793 return driver_register(drv);
795 EXPORT_SYMBOL(ap_driver_register);
797 void ap_driver_unregister(struct ap_driver *ap_drv)
799 driver_unregister(&ap_drv->driver);
801 EXPORT_SYMBOL(ap_driver_unregister);
806 static ssize_t ap_domain_show(struct bus_type *bus, char *buf)
808 return snprintf(buf, PAGE_SIZE, "%d\n", ap_domain_index);
811 static BUS_ATTR(ap_domain, 0444, ap_domain_show, NULL);
813 static ssize_t ap_config_time_show(struct bus_type *bus, char *buf)
815 return snprintf(buf, PAGE_SIZE, "%d\n", ap_config_time);
818 static ssize_t ap_interrupts_show(struct bus_type *bus, char *buf)
820 return snprintf(buf, PAGE_SIZE, "%d\n",
821 ap_using_interrupts() ? 1 : 0);
824 static BUS_ATTR(ap_interrupts, 0444, ap_interrupts_show, NULL);
826 static ssize_t ap_config_time_store(struct bus_type *bus,
827 const char *buf, size_t count)
831 if (sscanf(buf, "%d\n", &time) != 1 || time < 5 || time > 120)
833 ap_config_time = time;
834 if (!timer_pending(&ap_config_timer) ||
835 !mod_timer(&ap_config_timer, jiffies + ap_config_time * HZ)) {
836 ap_config_timer.expires = jiffies + ap_config_time * HZ;
837 add_timer(&ap_config_timer);
842 static BUS_ATTR(config_time, 0644, ap_config_time_show, ap_config_time_store);
844 static ssize_t ap_poll_thread_show(struct bus_type *bus, char *buf)
846 return snprintf(buf, PAGE_SIZE, "%d\n", ap_poll_kthread ? 1 : 0);
849 static ssize_t ap_poll_thread_store(struct bus_type *bus,
850 const char *buf, size_t count)
854 if (sscanf(buf, "%d\n", &flag) != 1)
857 rc = ap_poll_thread_start();
862 ap_poll_thread_stop();
866 static BUS_ATTR(poll_thread, 0644, ap_poll_thread_show, ap_poll_thread_store);
868 static ssize_t poll_timeout_show(struct bus_type *bus, char *buf)
870 return snprintf(buf, PAGE_SIZE, "%llu\n", poll_timeout);
873 static ssize_t poll_timeout_store(struct bus_type *bus, const char *buf,
876 unsigned long long time;
879 /* 120 seconds = maximum poll interval */
880 if (sscanf(buf, "%llu\n", &time) != 1 || time < 1 ||
881 time > 120000000000ULL)
884 hr_time = ktime_set(0, poll_timeout);
886 if (!hrtimer_is_queued(&ap_poll_timer) ||
887 !hrtimer_forward(&ap_poll_timer, hrtimer_get_expires(&ap_poll_timer), hr_time)) {
888 hrtimer_set_expires(&ap_poll_timer, hr_time);
889 hrtimer_start_expires(&ap_poll_timer, HRTIMER_MODE_ABS);
894 static BUS_ATTR(poll_timeout, 0644, poll_timeout_show, poll_timeout_store);
896 static struct bus_attribute *const ap_bus_attrs[] = {
898 &bus_attr_config_time,
899 &bus_attr_poll_thread,
900 &bus_attr_ap_interrupts,
901 &bus_attr_poll_timeout,
906 * ap_select_domain(): Select an AP domain.
908 * Pick one of the 16 AP domains.
910 static int ap_select_domain(void)
912 int queue_depth, device_type, count, max_count, best_domain;
916 * We want to use a single domain. Either the one specified with
917 * the "domain=" parameter or the domain with the maximum number
920 if (ap_domain_index >= 0 && ap_domain_index < AP_DOMAINS)
921 /* Domain has already been selected. */
925 for (i = 0; i < AP_DOMAINS; i++) {
927 for (j = 0; j < AP_DEVICES; j++) {
928 ap_qid_t qid = AP_MKQID(j, i);
929 rc = ap_query_queue(qid, &queue_depth, &device_type);
934 if (count > max_count) {
939 if (best_domain >= 0){
940 ap_domain_index = best_domain;
947 * ap_probe_device_type(): Find the device type of an AP.
948 * @ap_dev: pointer to the AP device.
950 * Find the device type if query queue returned a device type of 0.
952 static int ap_probe_device_type(struct ap_device *ap_dev)
954 static unsigned char msg[] = {
955 0x00,0x06,0x00,0x00,0x00,0x00,0x00,0x00,
956 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
957 0x00,0x00,0x00,0x58,0x00,0x00,0x00,0x00,
958 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
959 0x01,0x00,0x43,0x43,0x41,0x2d,0x41,0x50,
960 0x50,0x4c,0x20,0x20,0x20,0x01,0x01,0x01,
961 0x00,0x00,0x00,0x00,0x50,0x4b,0x00,0x00,
962 0x00,0x00,0x01,0x1c,0x00,0x00,0x00,0x00,
963 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
964 0x00,0x00,0x05,0xb8,0x00,0x00,0x00,0x00,
965 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
966 0x70,0x00,0x41,0x00,0x00,0x00,0x00,0x00,
967 0x00,0x00,0x54,0x32,0x01,0x00,0xa0,0x00,
968 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
969 0x00,0x00,0x00,0x00,0xb8,0x05,0x00,0x00,
970 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
971 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
972 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
973 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
974 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
975 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
976 0x00,0x00,0x0a,0x00,0x00,0x00,0x00,0x00,
977 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
978 0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,
979 0x49,0x43,0x53,0x46,0x20,0x20,0x20,0x20,
980 0x50,0x4b,0x0a,0x00,0x50,0x4b,0x43,0x53,
981 0x2d,0x31,0x2e,0x32,0x37,0x00,0x11,0x22,
982 0x33,0x44,0x55,0x66,0x77,0x88,0x99,0x00,
983 0x11,0x22,0x33,0x44,0x55,0x66,0x77,0x88,
984 0x99,0x00,0x11,0x22,0x33,0x44,0x55,0x66,
985 0x77,0x88,0x99,0x00,0x11,0x22,0x33,0x44,
986 0x55,0x66,0x77,0x88,0x99,0x00,0x11,0x22,
987 0x33,0x44,0x55,0x66,0x77,0x88,0x99,0x00,
988 0x11,0x22,0x33,0x5d,0x00,0x5b,0x00,0x77,
989 0x88,0x1e,0x00,0x00,0x57,0x00,0x00,0x00,
990 0x00,0x04,0x00,0x00,0x4f,0x00,0x00,0x00,
991 0x03,0x02,0x00,0x00,0x40,0x01,0x00,0x01,
992 0xce,0x02,0x68,0x2d,0x5f,0xa9,0xde,0x0c,
993 0xf6,0xd2,0x7b,0x58,0x4b,0xf9,0x28,0x68,
994 0x3d,0xb4,0xf4,0xef,0x78,0xd5,0xbe,0x66,
995 0x63,0x42,0xef,0xf8,0xfd,0xa4,0xf8,0xb0,
996 0x8e,0x29,0xc2,0xc9,0x2e,0xd8,0x45,0xb8,
997 0x53,0x8c,0x6f,0x4e,0x72,0x8f,0x6c,0x04,
998 0x9c,0x88,0xfc,0x1e,0xc5,0x83,0x55,0x57,
999 0xf7,0xdd,0xfd,0x4f,0x11,0x36,0x95,0x5d,
1001 struct ap_queue_status status;
1002 unsigned long long psmid;
1006 reply = (void *) get_zeroed_page(GFP_KERNEL);
1012 status = __ap_send(ap_dev->qid, 0x0102030405060708ULL,
1013 msg, sizeof(msg), 0);
1014 if (status.response_code != AP_RESPONSE_NORMAL) {
1019 /* Wait for the test message to complete. */
1020 for (i = 0; i < 6; i++) {
1022 status = __ap_recv(ap_dev->qid, &psmid, reply, 4096);
1023 if (status.response_code == AP_RESPONSE_NORMAL &&
1024 psmid == 0x0102030405060708ULL)
1028 /* Got an answer. */
1029 if (reply[0] == 0x00 && reply[1] == 0x86)
1030 ap_dev->device_type = AP_DEVICE_TYPE_PCICC;
1032 ap_dev->device_type = AP_DEVICE_TYPE_PCICA;
1038 free_page((unsigned long) reply);
1043 static void ap_interrupt_handler(void *unused1, void *unused2)
1045 tasklet_schedule(&ap_tasklet);
1049 * __ap_scan_bus(): Scan the AP bus.
1050 * @dev: Pointer to device
1051 * @data: Pointer to data
1053 * Scan the AP bus for new devices.
1055 static int __ap_scan_bus(struct device *dev, void *data)
1057 return to_ap_dev(dev)->qid == (ap_qid_t)(unsigned long) data;
1060 static void ap_device_release(struct device *dev)
1062 struct ap_device *ap_dev = to_ap_dev(dev);
1067 static void ap_scan_bus(struct work_struct *unused)
1069 struct ap_device *ap_dev;
1072 int queue_depth, device_type;
1075 if (ap_select_domain() != 0)
1077 for (i = 0; i < AP_DEVICES; i++) {
1078 qid = AP_MKQID(i, ap_domain_index);
1079 dev = bus_find_device(&ap_bus_type, NULL,
1080 (void *)(unsigned long)qid,
1082 rc = ap_query_queue(qid, &queue_depth, &device_type);
1085 set_current_state(TASK_UNINTERRUPTIBLE);
1086 schedule_timeout(AP_RESET_TIMEOUT);
1087 rc = ap_query_queue(qid, &queue_depth,
1090 ap_dev = to_ap_dev(dev);
1091 spin_lock_bh(&ap_dev->lock);
1092 if (rc || ap_dev->unregistered) {
1093 spin_unlock_bh(&ap_dev->lock);
1094 if (ap_dev->unregistered)
1096 device_unregister(dev);
1100 spin_unlock_bh(&ap_dev->lock);
1106 rc = ap_init_queue(qid);
1109 ap_dev = kzalloc(sizeof(*ap_dev), GFP_KERNEL);
1113 ap_dev->queue_depth = queue_depth;
1114 ap_dev->unregistered = 1;
1115 spin_lock_init(&ap_dev->lock);
1116 INIT_LIST_HEAD(&ap_dev->pendingq);
1117 INIT_LIST_HEAD(&ap_dev->requestq);
1118 INIT_LIST_HEAD(&ap_dev->list);
1119 setup_timer(&ap_dev->timeout, ap_request_timeout,
1120 (unsigned long) ap_dev);
1121 if (device_type == 0)
1122 ap_probe_device_type(ap_dev);
1124 ap_dev->device_type = device_type;
1126 ap_dev->device.bus = &ap_bus_type;
1127 ap_dev->device.parent = ap_root_device;
1128 if (dev_set_name(&ap_dev->device, "card%02x",
1129 AP_QID_DEVICE(ap_dev->qid))) {
1133 ap_dev->device.release = ap_device_release;
1134 rc = device_register(&ap_dev->device);
1136 put_device(&ap_dev->device);
1139 /* Add device attributes. */
1140 rc = sysfs_create_group(&ap_dev->device.kobj,
1141 &ap_dev_attr_group);
1143 spin_lock_bh(&ap_dev->lock);
1144 ap_dev->unregistered = 0;
1145 spin_unlock_bh(&ap_dev->lock);
1148 device_unregister(&ap_dev->device);
1153 ap_config_timeout(unsigned long ptr)
1155 queue_work(ap_work_queue, &ap_config_work);
1156 ap_config_timer.expires = jiffies + ap_config_time * HZ;
1157 add_timer(&ap_config_timer);
1161 * ap_schedule_poll_timer(): Schedule poll timer.
1163 * Set up the timer to run the poll tasklet
1165 static inline void ap_schedule_poll_timer(void)
1169 spin_lock_bh(&ap_poll_timer_lock);
1170 if (ap_using_interrupts() || ap_suspend_flag)
1172 if (hrtimer_is_queued(&ap_poll_timer))
1174 if (ktime_to_ns(hrtimer_expires_remaining(&ap_poll_timer)) <= 0) {
1175 hr_time = ktime_set(0, poll_timeout);
1176 hrtimer_forward_now(&ap_poll_timer, hr_time);
1177 hrtimer_restart(&ap_poll_timer);
1180 spin_unlock_bh(&ap_poll_timer_lock);
1184 * ap_poll_read(): Receive pending reply messages from an AP device.
1185 * @ap_dev: pointer to the AP device
1186 * @flags: pointer to control flags, bit 2^0 is set if another poll is
1187 * required, bit 2^1 is set if the poll timer needs to get armed
1189 * Returns 0 if the device is still present, -ENODEV if not.
1191 static int ap_poll_read(struct ap_device *ap_dev, unsigned long *flags)
1193 struct ap_queue_status status;
1194 struct ap_message *ap_msg;
1196 if (ap_dev->queue_count <= 0)
1198 status = __ap_recv(ap_dev->qid, &ap_dev->reply->psmid,
1199 ap_dev->reply->message, ap_dev->reply->length);
1200 switch (status.response_code) {
1201 case AP_RESPONSE_NORMAL:
1202 atomic_dec(&ap_poll_requests);
1203 ap_decrease_queue_count(ap_dev);
1204 list_for_each_entry(ap_msg, &ap_dev->pendingq, list) {
1205 if (ap_msg->psmid != ap_dev->reply->psmid)
1207 list_del_init(&ap_msg->list);
1208 ap_dev->pendingq_count--;
1209 ap_dev->drv->receive(ap_dev, ap_msg, ap_dev->reply);
1212 if (ap_dev->queue_count > 0)
1215 case AP_RESPONSE_NO_PENDING_REPLY:
1216 if (status.queue_empty) {
1217 /* The card shouldn't forget requests but who knows. */
1218 atomic_sub(ap_dev->queue_count, &ap_poll_requests);
1219 ap_dev->queue_count = 0;
1220 list_splice_init(&ap_dev->pendingq, &ap_dev->requestq);
1221 ap_dev->requestq_count += ap_dev->pendingq_count;
1222 ap_dev->pendingq_count = 0;
1233 * ap_poll_write(): Send messages from the request queue to an AP device.
1234 * @ap_dev: pointer to the AP device
1235 * @flags: pointer to control flags, bit 2^0 is set if another poll is
1236 * required, bit 2^1 is set if the poll timer needs to get armed
1238 * Returns 0 if the device is still present, -ENODEV if not.
1240 static int ap_poll_write(struct ap_device *ap_dev, unsigned long *flags)
1242 struct ap_queue_status status;
1243 struct ap_message *ap_msg;
1245 if (ap_dev->requestq_count <= 0 ||
1246 ap_dev->queue_count >= ap_dev->queue_depth)
1248 /* Start the next request on the queue. */
1249 ap_msg = list_entry(ap_dev->requestq.next, struct ap_message, list);
1250 status = __ap_send(ap_dev->qid, ap_msg->psmid,
1251 ap_msg->message, ap_msg->length, ap_msg->special);
1252 switch (status.response_code) {
1253 case AP_RESPONSE_NORMAL:
1254 atomic_inc(&ap_poll_requests);
1255 ap_increase_queue_count(ap_dev);
1256 list_move_tail(&ap_msg->list, &ap_dev->pendingq);
1257 ap_dev->requestq_count--;
1258 ap_dev->pendingq_count++;
1259 if (ap_dev->queue_count < ap_dev->queue_depth &&
1260 ap_dev->requestq_count > 0)
1264 case AP_RESPONSE_Q_FULL:
1265 case AP_RESPONSE_RESET_IN_PROGRESS:
1268 case AP_RESPONSE_MESSAGE_TOO_BIG:
1269 case AP_RESPONSE_REQ_FAC_NOT_INST:
1278 * ap_poll_queue(): Poll AP device for pending replies and send new messages.
1279 * @ap_dev: pointer to the bus device
1280 * @flags: pointer to control flags, bit 2^0 is set if another poll is
1281 * required, bit 2^1 is set if the poll timer needs to get armed
1283 * Poll AP device for pending replies and send new messages. If either
1284 * ap_poll_read or ap_poll_write returns -ENODEV unregister the device.
1287 static inline int ap_poll_queue(struct ap_device *ap_dev, unsigned long *flags)
1291 rc = ap_poll_read(ap_dev, flags);
1294 return ap_poll_write(ap_dev, flags);
1298 * __ap_queue_message(): Queue a message to a device.
1299 * @ap_dev: pointer to the AP device
1300 * @ap_msg: the message to be queued
1302 * Queue a message to a device. Returns 0 if successful.
1304 static int __ap_queue_message(struct ap_device *ap_dev, struct ap_message *ap_msg)
1306 struct ap_queue_status status;
1308 if (list_empty(&ap_dev->requestq) &&
1309 ap_dev->queue_count < ap_dev->queue_depth) {
1310 status = __ap_send(ap_dev->qid, ap_msg->psmid,
1311 ap_msg->message, ap_msg->length,
1313 switch (status.response_code) {
1314 case AP_RESPONSE_NORMAL:
1315 list_add_tail(&ap_msg->list, &ap_dev->pendingq);
1316 atomic_inc(&ap_poll_requests);
1317 ap_dev->pendingq_count++;
1318 ap_increase_queue_count(ap_dev);
1319 ap_dev->total_request_count++;
1321 case AP_RESPONSE_Q_FULL:
1322 case AP_RESPONSE_RESET_IN_PROGRESS:
1323 list_add_tail(&ap_msg->list, &ap_dev->requestq);
1324 ap_dev->requestq_count++;
1325 ap_dev->total_request_count++;
1327 case AP_RESPONSE_REQ_FAC_NOT_INST:
1328 case AP_RESPONSE_MESSAGE_TOO_BIG:
1329 ap_dev->drv->receive(ap_dev, ap_msg, ERR_PTR(-EINVAL));
1331 default: /* Device is gone. */
1332 ap_dev->drv->receive(ap_dev, ap_msg, ERR_PTR(-ENODEV));
1336 list_add_tail(&ap_msg->list, &ap_dev->requestq);
1337 ap_dev->requestq_count++;
1338 ap_dev->total_request_count++;
1341 ap_schedule_poll_timer();
1345 void ap_queue_message(struct ap_device *ap_dev, struct ap_message *ap_msg)
1347 unsigned long flags;
1350 spin_lock_bh(&ap_dev->lock);
1351 if (!ap_dev->unregistered) {
1352 /* Make room on the queue by polling for finished requests. */
1353 rc = ap_poll_queue(ap_dev, &flags);
1355 rc = __ap_queue_message(ap_dev, ap_msg);
1357 wake_up(&ap_poll_wait);
1359 ap_dev->unregistered = 1;
1361 ap_dev->drv->receive(ap_dev, ap_msg, ERR_PTR(-ENODEV));
1364 spin_unlock_bh(&ap_dev->lock);
1366 device_unregister(&ap_dev->device);
1368 EXPORT_SYMBOL(ap_queue_message);
1371 * ap_cancel_message(): Cancel a crypto request.
1372 * @ap_dev: The AP device that has the message queued
1373 * @ap_msg: The message that is to be removed
1375 * Cancel a crypto request. This is done by removing the request
1376 * from the device pending or request queue. Note that the
1377 * request stays on the AP queue. When it finishes the message
1378 * reply will be discarded because the psmid can't be found.
1380 void ap_cancel_message(struct ap_device *ap_dev, struct ap_message *ap_msg)
1382 struct ap_message *tmp;
1384 spin_lock_bh(&ap_dev->lock);
1385 if (!list_empty(&ap_msg->list)) {
1386 list_for_each_entry(tmp, &ap_dev->pendingq, list)
1387 if (tmp->psmid == ap_msg->psmid) {
1388 ap_dev->pendingq_count--;
1391 ap_dev->requestq_count--;
1393 list_del_init(&ap_msg->list);
1395 spin_unlock_bh(&ap_dev->lock);
1397 EXPORT_SYMBOL(ap_cancel_message);
1400 * ap_poll_timeout(): AP receive polling for finished AP requests.
1401 * @unused: Unused pointer.
1403 * Schedules the AP tasklet using a high resolution timer.
1405 static enum hrtimer_restart ap_poll_timeout(struct hrtimer *unused)
1407 tasklet_schedule(&ap_tasklet);
1408 return HRTIMER_NORESTART;
1412 * ap_reset(): Reset a not responding AP device.
1413 * @ap_dev: Pointer to the AP device
1415 * Reset a not responding AP device and move all requests from the
1416 * pending queue to the request queue.
1418 static void ap_reset(struct ap_device *ap_dev)
1422 ap_dev->reset = AP_RESET_IGNORE;
1423 atomic_sub(ap_dev->queue_count, &ap_poll_requests);
1424 ap_dev->queue_count = 0;
1425 list_splice_init(&ap_dev->pendingq, &ap_dev->requestq);
1426 ap_dev->requestq_count += ap_dev->pendingq_count;
1427 ap_dev->pendingq_count = 0;
1428 rc = ap_init_queue(ap_dev->qid);
1430 ap_dev->unregistered = 1;
1433 static int __ap_poll_device(struct ap_device *ap_dev, unsigned long *flags)
1435 if (!ap_dev->unregistered) {
1436 if (ap_poll_queue(ap_dev, flags))
1437 ap_dev->unregistered = 1;
1438 if (ap_dev->reset == AP_RESET_DO)
1445 * ap_poll_all(): Poll all AP devices.
1446 * @dummy: Unused variable
1448 * Poll all AP devices on the bus in a round robin fashion. Continue
1449 * polling until bit 2^0 of the control flags is not set. If bit 2^1
1450 * of the control flags has been set arm the poll timer.
1452 static void ap_poll_all(unsigned long dummy)
1454 unsigned long flags;
1455 struct ap_device *ap_dev;
1457 /* Reset the indicator if interrupts are used. Thus new interrupts can
1458 * be received. Doing it in the beginning of the tasklet is therefor
1459 * important that no requests on any AP get lost.
1461 if (ap_using_interrupts())
1462 xchg((u8 *)ap_interrupt_indicator, 0);
1465 spin_lock(&ap_device_list_lock);
1466 list_for_each_entry(ap_dev, &ap_device_list, list) {
1467 spin_lock(&ap_dev->lock);
1468 __ap_poll_device(ap_dev, &flags);
1469 spin_unlock(&ap_dev->lock);
1471 spin_unlock(&ap_device_list_lock);
1472 } while (flags & 1);
1474 ap_schedule_poll_timer();
1478 * ap_poll_thread(): Thread that polls for finished requests.
1479 * @data: Unused pointer
1481 * AP bus poll thread. The purpose of this thread is to poll for
1482 * finished requests in a loop if there is a "free" cpu - that is
1483 * a cpu that doesn't have anything better to do. The polling stops
1484 * as soon as there is another task or if all messages have been
1487 static int ap_poll_thread(void *data)
1489 DECLARE_WAITQUEUE(wait, current);
1490 unsigned long flags;
1492 struct ap_device *ap_dev;
1494 set_user_nice(current, 19);
1496 if (ap_suspend_flag)
1498 if (need_resched()) {
1502 add_wait_queue(&ap_poll_wait, &wait);
1503 set_current_state(TASK_INTERRUPTIBLE);
1504 if (kthread_should_stop())
1506 requests = atomic_read(&ap_poll_requests);
1509 set_current_state(TASK_RUNNING);
1510 remove_wait_queue(&ap_poll_wait, &wait);
1513 spin_lock_bh(&ap_device_list_lock);
1514 list_for_each_entry(ap_dev, &ap_device_list, list) {
1515 spin_lock(&ap_dev->lock);
1516 __ap_poll_device(ap_dev, &flags);
1517 spin_unlock(&ap_dev->lock);
1519 spin_unlock_bh(&ap_device_list_lock);
1521 set_current_state(TASK_RUNNING);
1522 remove_wait_queue(&ap_poll_wait, &wait);
1526 static int ap_poll_thread_start(void)
1530 if (ap_using_interrupts() || ap_suspend_flag)
1532 mutex_lock(&ap_poll_thread_mutex);
1533 if (!ap_poll_kthread) {
1534 ap_poll_kthread = kthread_run(ap_poll_thread, NULL, "appoll");
1535 rc = IS_ERR(ap_poll_kthread) ? PTR_ERR(ap_poll_kthread) : 0;
1537 ap_poll_kthread = NULL;
1541 mutex_unlock(&ap_poll_thread_mutex);
1545 static void ap_poll_thread_stop(void)
1547 mutex_lock(&ap_poll_thread_mutex);
1548 if (ap_poll_kthread) {
1549 kthread_stop(ap_poll_kthread);
1550 ap_poll_kthread = NULL;
1552 mutex_unlock(&ap_poll_thread_mutex);
1556 * ap_request_timeout(): Handling of request timeouts
1557 * @data: Holds the AP device.
1559 * Handles request timeouts.
1561 static void ap_request_timeout(unsigned long data)
1563 struct ap_device *ap_dev = (struct ap_device *) data;
1565 if (ap_dev->reset == AP_RESET_ARMED) {
1566 ap_dev->reset = AP_RESET_DO;
1568 if (ap_using_interrupts())
1569 tasklet_schedule(&ap_tasklet);
1573 static void ap_reset_domain(void)
1577 if (ap_domain_index != -1)
1578 for (i = 0; i < AP_DEVICES; i++)
1579 ap_reset_queue(AP_MKQID(i, ap_domain_index));
1582 static void ap_reset_all(void)
1586 for (i = 0; i < AP_DOMAINS; i++)
1587 for (j = 0; j < AP_DEVICES; j++)
1588 ap_reset_queue(AP_MKQID(j, i));
1591 static struct reset_call ap_reset_call = {
1596 * ap_module_init(): The module initialization code.
1598 * Initializes the module.
1600 int __init ap_module_init(void)
1604 if (ap_domain_index < -1 || ap_domain_index >= AP_DOMAINS) {
1605 pr_warning("%d is not a valid cryptographic domain\n",
1609 /* In resume callback we need to know if the user had set the domain.
1610 * If so, we can not just reset it.
1612 if (ap_domain_index >= 0)
1613 user_set_domain = 1;
1615 if (ap_instructions_available() != 0) {
1616 pr_warning("The hardware system does not support "
1617 "AP instructions\n");
1620 if (ap_interrupts_available()) {
1621 isc_register(AP_ISC);
1622 ap_interrupt_indicator = s390_register_adapter_interrupt(
1623 &ap_interrupt_handler, NULL, AP_ISC);
1624 if (IS_ERR(ap_interrupt_indicator)) {
1625 ap_interrupt_indicator = NULL;
1626 isc_unregister(AP_ISC);
1630 register_reset_call(&ap_reset_call);
1632 /* Create /sys/bus/ap. */
1633 rc = bus_register(&ap_bus_type);
1636 for (i = 0; ap_bus_attrs[i]; i++) {
1637 rc = bus_create_file(&ap_bus_type, ap_bus_attrs[i]);
1642 /* Create /sys/devices/ap. */
1643 ap_root_device = root_device_register("ap");
1644 rc = IS_ERR(ap_root_device) ? PTR_ERR(ap_root_device) : 0;
1648 ap_work_queue = create_singlethread_workqueue("kapwork");
1649 if (!ap_work_queue) {
1654 if (ap_select_domain() == 0)
1657 /* Setup the AP bus rescan timer. */
1658 init_timer(&ap_config_timer);
1659 ap_config_timer.function = ap_config_timeout;
1660 ap_config_timer.data = 0;
1661 ap_config_timer.expires = jiffies + ap_config_time * HZ;
1662 add_timer(&ap_config_timer);
1664 /* Setup the high resultion poll timer.
1665 * If we are running under z/VM adjust polling to z/VM polling rate.
1668 poll_timeout = 1500000;
1669 spin_lock_init(&ap_poll_timer_lock);
1670 hrtimer_init(&ap_poll_timer, CLOCK_MONOTONIC, HRTIMER_MODE_ABS);
1671 ap_poll_timer.function = ap_poll_timeout;
1673 /* Start the low priority AP bus poll thread. */
1674 if (ap_thread_flag) {
1675 rc = ap_poll_thread_start();
1683 del_timer_sync(&ap_config_timer);
1684 hrtimer_cancel(&ap_poll_timer);
1685 destroy_workqueue(ap_work_queue);
1687 root_device_unregister(ap_root_device);
1690 bus_remove_file(&ap_bus_type, ap_bus_attrs[i]);
1691 bus_unregister(&ap_bus_type);
1693 unregister_reset_call(&ap_reset_call);
1694 if (ap_using_interrupts()) {
1695 s390_unregister_adapter_interrupt(ap_interrupt_indicator, AP_ISC);
1696 isc_unregister(AP_ISC);
1701 static int __ap_match_all(struct device *dev, void *data)
1707 * ap_modules_exit(): The module termination code
1709 * Terminates the module.
1711 void ap_module_exit(void)
1717 ap_poll_thread_stop();
1718 del_timer_sync(&ap_config_timer);
1719 hrtimer_cancel(&ap_poll_timer);
1720 destroy_workqueue(ap_work_queue);
1721 tasklet_kill(&ap_tasklet);
1722 root_device_unregister(ap_root_device);
1723 while ((dev = bus_find_device(&ap_bus_type, NULL, NULL,
1726 device_unregister(dev);
1729 for (i = 0; ap_bus_attrs[i]; i++)
1730 bus_remove_file(&ap_bus_type, ap_bus_attrs[i]);
1731 bus_unregister(&ap_bus_type);
1732 unregister_reset_call(&ap_reset_call);
1733 if (ap_using_interrupts()) {
1734 s390_unregister_adapter_interrupt(ap_interrupt_indicator, AP_ISC);
1735 isc_unregister(AP_ISC);
1739 #ifndef CONFIG_ZCRYPT_MONOLITHIC
1740 module_init(ap_module_init);
1741 module_exit(ap_module_exit);