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>
9 * Holger Dengler <hd@linux.vnet.ibm.com>
11 * Adjunct processor bus.
13 * This program is free software; you can redistribute it and/or modify
14 * it under the terms of the GNU General Public License as published by
15 * the Free Software Foundation; either version 2, or (at your option)
18 * This program is distributed in the hope that it will be useful,
19 * but WITHOUT ANY WARRANTY; without even the implied warranty of
20 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21 * GNU General Public License for more details.
23 * You should have received a copy of the GNU General Public License
24 * along with this program; if not, write to the Free Software
25 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
28 #define KMSG_COMPONENT "ap"
29 #define pr_fmt(fmt) KMSG_COMPONENT ": " fmt
31 #include <linux/kernel_stat.h>
32 #include <linux/module.h>
33 #include <linux/init.h>
34 #include <linux/delay.h>
35 #include <linux/err.h>
36 #include <linux/interrupt.h>
37 #include <linux/workqueue.h>
38 #include <linux/slab.h>
39 #include <linux/notifier.h>
40 #include <linux/kthread.h>
41 #include <linux/mutex.h>
42 #include <asm/reset.h>
44 #include <linux/atomic.h>
46 #include <linux/hrtimer.h>
47 #include <linux/ktime.h>
48 #include <asm/facility.h>
52 /* Some prototypes. */
53 static void ap_scan_bus(struct work_struct *);
54 static void ap_poll_all(unsigned long);
55 static enum hrtimer_restart ap_poll_timeout(struct hrtimer *);
56 static int ap_poll_thread_start(void);
57 static void ap_poll_thread_stop(void);
58 static void ap_request_timeout(unsigned long);
59 static inline void ap_schedule_poll_timer(void);
60 static int __ap_poll_device(struct ap_device *ap_dev, unsigned long *flags);
61 static int ap_device_remove(struct device *dev);
62 static int ap_device_probe(struct device *dev);
63 static void ap_interrupt_handler(void *unused1, void *unused2);
64 static void ap_reset(struct ap_device *ap_dev);
65 static void ap_config_timeout(unsigned long ptr);
66 static int ap_select_domain(void);
71 MODULE_AUTHOR("IBM Corporation");
72 MODULE_DESCRIPTION("Adjunct Processor Bus driver, "
73 "Copyright 2006 IBM Corporation");
74 MODULE_LICENSE("GPL");
79 int ap_domain_index = -1; /* Adjunct Processor Domain Index */
80 module_param_named(domain, ap_domain_index, int, 0000);
81 MODULE_PARM_DESC(domain, "domain index for ap devices");
82 EXPORT_SYMBOL(ap_domain_index);
84 static int ap_thread_flag = 0;
85 module_param_named(poll_thread, ap_thread_flag, int, 0000);
86 MODULE_PARM_DESC(poll_thread, "Turn on/off poll thread, default is 0 (off).");
88 static struct device *ap_root_device = NULL;
89 static DEFINE_SPINLOCK(ap_device_list_lock);
90 static LIST_HEAD(ap_device_list);
93 * Workqueue & timer for bus rescan.
95 static struct workqueue_struct *ap_work_queue;
96 static struct timer_list ap_config_timer;
97 static int ap_config_time = AP_CONFIG_TIME;
98 static DECLARE_WORK(ap_config_work, ap_scan_bus);
101 * Tasklet & timer for AP request polling and interrupts
103 static DECLARE_TASKLET(ap_tasklet, ap_poll_all, 0);
104 static atomic_t ap_poll_requests = ATOMIC_INIT(0);
105 static DECLARE_WAIT_QUEUE_HEAD(ap_poll_wait);
106 static struct task_struct *ap_poll_kthread = NULL;
107 static DEFINE_MUTEX(ap_poll_thread_mutex);
108 static DEFINE_SPINLOCK(ap_poll_timer_lock);
109 static void *ap_interrupt_indicator;
110 static struct hrtimer ap_poll_timer;
111 /* In LPAR poll with 4kHz frequency. Poll every 250000 nanoseconds.
112 * If z/VM change to 1500000 nanoseconds to adjust to z/VM polling.*/
113 static unsigned long long poll_timeout = 250000;
116 static int ap_suspend_flag;
117 /* Flag to check if domain was set through module parameter domain=. This is
118 * important when supsend and resume is done in a z/VM environment where the
119 * domain might change. */
120 static int user_set_domain = 0;
121 static struct bus_type ap_bus_type;
124 * ap_using_interrupts() - Returns non-zero if interrupt support is
127 static inline int ap_using_interrupts(void)
129 return ap_interrupt_indicator != NULL;
133 * ap_intructions_available() - Test if AP instructions are available.
135 * Returns 0 if the AP instructions are installed.
137 static inline int ap_instructions_available(void)
139 register unsigned long reg0 asm ("0") = AP_MKQID(0,0);
140 register unsigned long reg1 asm ("1") = -ENODEV;
141 register unsigned long reg2 asm ("2") = 0UL;
144 " .long 0xb2af0000\n" /* PQAP(TAPQ) */
148 : "+d" (reg0), "+d" (reg1), "+d" (reg2) : : "cc" );
153 * ap_interrupts_available(): Test if AP interrupts are available.
155 * Returns 1 if AP interrupts are available.
157 static int ap_interrupts_available(void)
159 return test_facility(2) && test_facility(65);
163 * ap_test_queue(): Test adjunct processor queue.
164 * @qid: The AP queue number
165 * @queue_depth: Pointer to queue depth value
166 * @device_type: Pointer to device type value
168 * Returns AP queue status structure.
170 static inline struct ap_queue_status
171 ap_test_queue(ap_qid_t qid, int *queue_depth, int *device_type)
173 register unsigned long reg0 asm ("0") = qid;
174 register struct ap_queue_status reg1 asm ("1");
175 register unsigned long reg2 asm ("2") = 0UL;
177 asm volatile(".long 0xb2af0000" /* PQAP(TAPQ) */
178 : "+d" (reg0), "=d" (reg1), "+d" (reg2) : : "cc");
179 *device_type = (int) (reg2 >> 24);
180 *queue_depth = (int) (reg2 & 0xff);
185 * ap_reset_queue(): Reset adjunct processor queue.
186 * @qid: The AP queue number
188 * Returns AP queue status structure.
190 static inline struct ap_queue_status ap_reset_queue(ap_qid_t qid)
192 register unsigned long reg0 asm ("0") = qid | 0x01000000UL;
193 register struct ap_queue_status reg1 asm ("1");
194 register unsigned long reg2 asm ("2") = 0UL;
197 ".long 0xb2af0000" /* PQAP(RAPQ) */
198 : "+d" (reg0), "=d" (reg1), "+d" (reg2) : : "cc");
204 * ap_queue_interruption_control(): Enable interruption for a specific AP.
205 * @qid: The AP queue number
206 * @ind: The notification indicator byte
208 * Returns AP queue status.
210 static inline struct ap_queue_status
211 ap_queue_interruption_control(ap_qid_t qid, void *ind)
213 register unsigned long reg0 asm ("0") = qid | 0x03000000UL;
214 register unsigned long reg1_in asm ("1") = 0x0000800000000000UL | AP_ISC;
215 register struct ap_queue_status reg1_out asm ("1");
216 register void *reg2 asm ("2") = ind;
218 ".long 0xb2af0000" /* PQAP(AQIC) */
219 : "+d" (reg0), "+d" (reg1_in), "=d" (reg1_out), "+d" (reg2)
227 static inline struct ap_queue_status
228 __ap_query_functions(ap_qid_t qid, unsigned int *functions)
230 register unsigned long reg0 asm ("0") = 0UL | qid | (1UL << 23);
231 register struct ap_queue_status reg1 asm ("1") = AP_QUEUE_STATUS_INVALID;
232 register unsigned long reg2 asm ("2");
235 ".long 0xb2af0000\n" /* PQAP(TAPQ) */
238 : "+d" (reg0), "+d" (reg1), "=d" (reg2)
242 *functions = (unsigned int)(reg2 >> 32);
248 * ap_query_functions(): Query supported functions.
249 * @qid: The AP queue number
250 * @functions: Pointer to functions field.
254 * -ENODEV if queue not valid.
255 * -EBUSY if device busy.
256 * -EINVAL if query function is not supported
258 static int ap_query_functions(ap_qid_t qid, unsigned int *functions)
261 struct ap_queue_status status;
263 status = __ap_query_functions(qid, functions);
265 for (i = 0; i < AP_MAX_RESET; i++) {
266 if (ap_queue_status_invalid_test(&status))
269 switch (status.response_code) {
270 case AP_RESPONSE_NORMAL:
272 case AP_RESPONSE_RESET_IN_PROGRESS:
273 case AP_RESPONSE_BUSY:
275 case AP_RESPONSE_Q_NOT_AVAIL:
276 case AP_RESPONSE_DECONFIGURED:
277 case AP_RESPONSE_CHECKSTOPPED:
278 case AP_RESPONSE_INVALID_ADDRESS:
280 case AP_RESPONSE_OTHERWISE_CHANGED:
285 if (i < AP_MAX_RESET - 1) {
287 status = __ap_query_functions(qid, functions);
297 * ap_4096_commands_availablen(): Check for availability of 4096 bit RSA
299 * @qid: The AP queue number
301 * Returns 1 if 4096 bit RSA keys are support fo the AP, returns 0 if not.
303 int ap_4096_commands_available(ap_qid_t qid)
305 unsigned int functions;
307 if (ap_query_functions(qid, &functions))
310 return test_ap_facility(functions, 1) &&
311 test_ap_facility(functions, 2);
313 EXPORT_SYMBOL(ap_4096_commands_available);
316 * ap_queue_enable_interruption(): Enable interruption on an AP.
317 * @qid: The AP queue number
318 * @ind: the notification indicator byte
320 * Enables interruption on AP queue via ap_queue_interruption_control(). Based
321 * on the return value it waits a while and tests the AP queue if interrupts
322 * have been switched on using ap_test_queue().
324 static int ap_queue_enable_interruption(ap_qid_t qid, void *ind)
327 struct ap_queue_status status;
328 int t_depth, t_device_type, rc, i;
331 status = ap_queue_interruption_control(qid, ind);
333 for (i = 0; i < AP_MAX_RESET; i++) {
334 switch (status.response_code) {
335 case AP_RESPONSE_NORMAL:
336 if (status.int_enabled)
339 case AP_RESPONSE_RESET_IN_PROGRESS:
340 case AP_RESPONSE_BUSY:
341 if (i < AP_MAX_RESET - 1) {
343 status = ap_queue_interruption_control(qid,
348 case AP_RESPONSE_Q_NOT_AVAIL:
349 case AP_RESPONSE_DECONFIGURED:
350 case AP_RESPONSE_CHECKSTOPPED:
351 case AP_RESPONSE_INVALID_ADDRESS:
353 case AP_RESPONSE_OTHERWISE_CHANGED:
354 if (status.int_enabled)
360 if (i < AP_MAX_RESET - 1) {
362 status = ap_test_queue(qid, &t_depth, &t_device_type);
372 * __ap_send(): Send message to adjunct processor queue.
373 * @qid: The AP queue number
374 * @psmid: The program supplied message identifier
375 * @msg: The message text
376 * @length: The message length
377 * @special: Special Bit
379 * Returns AP queue status structure.
380 * Condition code 1 on NQAP can't happen because the L bit is 1.
381 * Condition code 2 on NQAP also means the send is incomplete,
382 * because a segment boundary was reached. The NQAP is repeated.
384 static inline struct ap_queue_status
385 __ap_send(ap_qid_t qid, unsigned long long psmid, void *msg, size_t length,
386 unsigned int special)
388 typedef struct { char _[length]; } msgblock;
389 register unsigned long reg0 asm ("0") = qid | 0x40000000UL;
390 register struct ap_queue_status reg1 asm ("1");
391 register unsigned long reg2 asm ("2") = (unsigned long) msg;
392 register unsigned long reg3 asm ("3") = (unsigned long) length;
393 register unsigned long reg4 asm ("4") = (unsigned int) (psmid >> 32);
394 register unsigned long reg5 asm ("5") = (unsigned int) psmid;
400 "0: .long 0xb2ad0042\n" /* NQAP */
402 : "+d" (reg0), "=d" (reg1), "+d" (reg2), "+d" (reg3)
403 : "d" (reg4), "d" (reg5), "m" (*(msgblock *) msg)
408 int ap_send(ap_qid_t qid, unsigned long long psmid, void *msg, size_t length)
410 struct ap_queue_status status;
412 status = __ap_send(qid, psmid, msg, length, 0);
413 switch (status.response_code) {
414 case AP_RESPONSE_NORMAL:
416 case AP_RESPONSE_Q_FULL:
417 case AP_RESPONSE_RESET_IN_PROGRESS:
419 case AP_RESPONSE_REQ_FAC_NOT_INST:
421 default: /* Device is gone. */
425 EXPORT_SYMBOL(ap_send);
428 * __ap_recv(): Receive message from adjunct processor queue.
429 * @qid: The AP queue number
430 * @psmid: Pointer to program supplied message identifier
431 * @msg: The message text
432 * @length: The message length
434 * Returns AP queue status structure.
435 * Condition code 1 on DQAP means the receive has taken place
436 * but only partially. The response is incomplete, hence the
438 * Condition code 2 on DQAP also means the receive is incomplete,
439 * this time because a segment boundary was reached. Again, the
441 * Note that gpr2 is used by the DQAP instruction to keep track of
442 * any 'residual' length, in case the instruction gets interrupted.
443 * Hence it gets zeroed before the instruction.
445 static inline struct ap_queue_status
446 __ap_recv(ap_qid_t qid, unsigned long long *psmid, void *msg, size_t length)
448 typedef struct { char _[length]; } msgblock;
449 register unsigned long reg0 asm("0") = qid | 0x80000000UL;
450 register struct ap_queue_status reg1 asm ("1");
451 register unsigned long reg2 asm("2") = 0UL;
452 register unsigned long reg4 asm("4") = (unsigned long) msg;
453 register unsigned long reg5 asm("5") = (unsigned long) length;
454 register unsigned long reg6 asm("6") = 0UL;
455 register unsigned long reg7 asm("7") = 0UL;
459 "0: .long 0xb2ae0064\n" /* DQAP */
461 : "+d" (reg0), "=d" (reg1), "+d" (reg2),
462 "+d" (reg4), "+d" (reg5), "+d" (reg6), "+d" (reg7),
463 "=m" (*(msgblock *) msg) : : "cc" );
464 *psmid = (((unsigned long long) reg6) << 32) + reg7;
468 int ap_recv(ap_qid_t qid, unsigned long long *psmid, void *msg, size_t length)
470 struct ap_queue_status status;
472 status = __ap_recv(qid, psmid, msg, length);
473 switch (status.response_code) {
474 case AP_RESPONSE_NORMAL:
476 case AP_RESPONSE_NO_PENDING_REPLY:
477 if (status.queue_empty)
480 case AP_RESPONSE_RESET_IN_PROGRESS:
486 EXPORT_SYMBOL(ap_recv);
489 * ap_query_queue(): Check if an AP queue is available.
490 * @qid: The AP queue number
491 * @queue_depth: Pointer to queue depth value
492 * @device_type: Pointer to device type value
494 * The test is repeated for AP_MAX_RESET times.
496 static int ap_query_queue(ap_qid_t qid, int *queue_depth, int *device_type)
498 struct ap_queue_status status;
499 int t_depth, t_device_type, rc, i;
502 for (i = 0; i < AP_MAX_RESET; i++) {
503 status = ap_test_queue(qid, &t_depth, &t_device_type);
504 switch (status.response_code) {
505 case AP_RESPONSE_NORMAL:
506 *queue_depth = t_depth + 1;
507 *device_type = t_device_type;
510 case AP_RESPONSE_Q_NOT_AVAIL:
513 case AP_RESPONSE_RESET_IN_PROGRESS:
515 case AP_RESPONSE_DECONFIGURED:
518 case AP_RESPONSE_CHECKSTOPPED:
521 case AP_RESPONSE_INVALID_ADDRESS:
524 case AP_RESPONSE_OTHERWISE_CHANGED:
526 case AP_RESPONSE_BUSY:
533 if (i < AP_MAX_RESET - 1)
540 * ap_init_queue(): Reset an AP queue.
541 * @qid: The AP queue number
543 * Reset an AP queue and wait for it to become available again.
545 static int ap_init_queue(ap_qid_t qid)
547 struct ap_queue_status status;
551 status = ap_reset_queue(qid);
552 for (i = 0; i < AP_MAX_RESET; i++) {
553 switch (status.response_code) {
554 case AP_RESPONSE_NORMAL:
555 if (status.queue_empty)
558 case AP_RESPONSE_Q_NOT_AVAIL:
559 case AP_RESPONSE_DECONFIGURED:
560 case AP_RESPONSE_CHECKSTOPPED:
561 i = AP_MAX_RESET; /* return with -ENODEV */
563 case AP_RESPONSE_RESET_IN_PROGRESS:
565 case AP_RESPONSE_BUSY:
569 if (rc != -ENODEV && rc != -EBUSY)
571 if (i < AP_MAX_RESET - 1) {
573 status = ap_test_queue(qid, &dummy, &dummy);
576 if (rc == 0 && ap_using_interrupts()) {
577 rc = ap_queue_enable_interruption(qid, ap_interrupt_indicator);
578 /* If interruption mode is supported by the machine,
579 * but an AP can not be enabled for interruption then
580 * the AP will be discarded. */
582 pr_err("Registering adapter interrupts for "
583 "AP %d failed\n", AP_QID_DEVICE(qid));
589 * ap_increase_queue_count(): Arm request timeout.
590 * @ap_dev: Pointer to an AP device.
592 * Arm request timeout if an AP device was idle and a new request is submitted.
594 static void ap_increase_queue_count(struct ap_device *ap_dev)
596 int timeout = ap_dev->drv->request_timeout;
598 ap_dev->queue_count++;
599 if (ap_dev->queue_count == 1) {
600 mod_timer(&ap_dev->timeout, jiffies + timeout);
601 ap_dev->reset = AP_RESET_ARMED;
606 * ap_decrease_queue_count(): Decrease queue count.
607 * @ap_dev: Pointer to an AP device.
609 * If AP device is still alive, re-schedule request timeout if there are still
612 static void ap_decrease_queue_count(struct ap_device *ap_dev)
614 int timeout = ap_dev->drv->request_timeout;
616 ap_dev->queue_count--;
617 if (ap_dev->queue_count > 0)
618 mod_timer(&ap_dev->timeout, jiffies + timeout);
621 * The timeout timer should to be disabled now - since
622 * del_timer_sync() is very expensive, we just tell via the
623 * reset flag to ignore the pending timeout timer.
625 ap_dev->reset = AP_RESET_IGNORE;
629 * AP device related attributes.
631 static ssize_t ap_hwtype_show(struct device *dev,
632 struct device_attribute *attr, char *buf)
634 struct ap_device *ap_dev = to_ap_dev(dev);
635 return snprintf(buf, PAGE_SIZE, "%d\n", ap_dev->device_type);
638 static DEVICE_ATTR(hwtype, 0444, ap_hwtype_show, NULL);
639 static ssize_t ap_depth_show(struct device *dev, struct device_attribute *attr,
642 struct ap_device *ap_dev = to_ap_dev(dev);
643 return snprintf(buf, PAGE_SIZE, "%d\n", ap_dev->queue_depth);
646 static DEVICE_ATTR(depth, 0444, ap_depth_show, NULL);
647 static ssize_t ap_request_count_show(struct device *dev,
648 struct device_attribute *attr,
651 struct ap_device *ap_dev = to_ap_dev(dev);
654 spin_lock_bh(&ap_dev->lock);
655 rc = snprintf(buf, PAGE_SIZE, "%d\n", ap_dev->total_request_count);
656 spin_unlock_bh(&ap_dev->lock);
660 static DEVICE_ATTR(request_count, 0444, ap_request_count_show, NULL);
662 static ssize_t ap_modalias_show(struct device *dev,
663 struct device_attribute *attr, char *buf)
665 return sprintf(buf, "ap:t%02X", to_ap_dev(dev)->device_type);
668 static DEVICE_ATTR(modalias, 0444, ap_modalias_show, NULL);
670 static struct attribute *ap_dev_attrs[] = {
671 &dev_attr_hwtype.attr,
672 &dev_attr_depth.attr,
673 &dev_attr_request_count.attr,
674 &dev_attr_modalias.attr,
677 static struct attribute_group ap_dev_attr_group = {
678 .attrs = ap_dev_attrs
683 * @dev: Pointer to device
684 * @drv: Pointer to device_driver
686 * AP bus driver registration/unregistration.
688 static int ap_bus_match(struct device *dev, struct device_driver *drv)
690 struct ap_device *ap_dev = to_ap_dev(dev);
691 struct ap_driver *ap_drv = to_ap_drv(drv);
692 struct ap_device_id *id;
695 * Compare device type of the device with the list of
696 * supported types of the device_driver.
698 for (id = ap_drv->ids; id->match_flags; id++) {
699 if ((id->match_flags & AP_DEVICE_ID_MATCH_DEVICE_TYPE) &&
700 (id->dev_type != ap_dev->device_type))
708 * ap_uevent(): Uevent function for AP devices.
709 * @dev: Pointer to device
710 * @env: Pointer to kobj_uevent_env
712 * It sets up a single environment variable DEV_TYPE which contains the
713 * hardware device type.
715 static int ap_uevent (struct device *dev, struct kobj_uevent_env *env)
717 struct ap_device *ap_dev = to_ap_dev(dev);
723 /* Set up DEV_TYPE environment variable. */
724 retval = add_uevent_var(env, "DEV_TYPE=%04X", ap_dev->device_type);
729 retval = add_uevent_var(env, "MODALIAS=ap:t%02X", ap_dev->device_type);
734 static int ap_bus_suspend(struct device *dev, pm_message_t state)
736 struct ap_device *ap_dev = to_ap_dev(dev);
739 if (!ap_suspend_flag) {
742 /* Disable scanning for devices, thus we do not want to scan
743 * for them after removing.
745 del_timer_sync(&ap_config_timer);
746 if (ap_work_queue != NULL) {
747 destroy_workqueue(ap_work_queue);
748 ap_work_queue = NULL;
751 tasklet_disable(&ap_tasklet);
753 /* Poll on the device until all requests are finished. */
756 spin_lock_bh(&ap_dev->lock);
757 __ap_poll_device(ap_dev, &flags);
758 spin_unlock_bh(&ap_dev->lock);
759 } while ((flags & 1) || (flags & 2));
761 spin_lock_bh(&ap_dev->lock);
762 ap_dev->unregistered = 1;
763 spin_unlock_bh(&ap_dev->lock);
768 static int ap_bus_resume(struct device *dev)
771 struct ap_device *ap_dev = to_ap_dev(dev);
773 if (ap_suspend_flag) {
775 if (!ap_interrupts_available())
776 ap_interrupt_indicator = NULL;
777 if (!user_set_domain) {
778 ap_domain_index = -1;
781 init_timer(&ap_config_timer);
782 ap_config_timer.function = ap_config_timeout;
783 ap_config_timer.data = 0;
784 ap_config_timer.expires = jiffies + ap_config_time * HZ;
785 add_timer(&ap_config_timer);
786 ap_work_queue = create_singlethread_workqueue("kapwork");
789 tasklet_enable(&ap_tasklet);
790 if (!ap_using_interrupts())
791 ap_schedule_poll_timer();
793 tasklet_schedule(&ap_tasklet);
795 rc = ap_poll_thread_start();
797 if (AP_QID_QUEUE(ap_dev->qid) != ap_domain_index) {
798 spin_lock_bh(&ap_dev->lock);
799 ap_dev->qid = AP_MKQID(AP_QID_DEVICE(ap_dev->qid),
801 spin_unlock_bh(&ap_dev->lock);
803 queue_work(ap_work_queue, &ap_config_work);
808 static struct bus_type ap_bus_type = {
810 .match = &ap_bus_match,
811 .uevent = &ap_uevent,
812 .suspend = ap_bus_suspend,
813 .resume = ap_bus_resume
816 static int ap_device_probe(struct device *dev)
818 struct ap_device *ap_dev = to_ap_dev(dev);
819 struct ap_driver *ap_drv = to_ap_drv(dev->driver);
822 ap_dev->drv = ap_drv;
823 rc = ap_drv->probe ? ap_drv->probe(ap_dev) : -ENODEV;
825 spin_lock_bh(&ap_device_list_lock);
826 list_add(&ap_dev->list, &ap_device_list);
827 spin_unlock_bh(&ap_device_list_lock);
833 * __ap_flush_queue(): Flush requests.
834 * @ap_dev: Pointer to the AP device
836 * Flush all requests from the request/pending queue of an AP device.
838 static void __ap_flush_queue(struct ap_device *ap_dev)
840 struct ap_message *ap_msg, *next;
842 list_for_each_entry_safe(ap_msg, next, &ap_dev->pendingq, list) {
843 list_del_init(&ap_msg->list);
844 ap_dev->pendingq_count--;
845 ap_msg->receive(ap_dev, ap_msg, ERR_PTR(-ENODEV));
847 list_for_each_entry_safe(ap_msg, next, &ap_dev->requestq, list) {
848 list_del_init(&ap_msg->list);
849 ap_dev->requestq_count--;
850 ap_msg->receive(ap_dev, ap_msg, ERR_PTR(-ENODEV));
854 void ap_flush_queue(struct ap_device *ap_dev)
856 spin_lock_bh(&ap_dev->lock);
857 __ap_flush_queue(ap_dev);
858 spin_unlock_bh(&ap_dev->lock);
860 EXPORT_SYMBOL(ap_flush_queue);
862 static int ap_device_remove(struct device *dev)
864 struct ap_device *ap_dev = to_ap_dev(dev);
865 struct ap_driver *ap_drv = ap_dev->drv;
867 ap_flush_queue(ap_dev);
868 del_timer_sync(&ap_dev->timeout);
869 spin_lock_bh(&ap_device_list_lock);
870 list_del_init(&ap_dev->list);
871 spin_unlock_bh(&ap_device_list_lock);
873 ap_drv->remove(ap_dev);
874 spin_lock_bh(&ap_dev->lock);
875 atomic_sub(ap_dev->queue_count, &ap_poll_requests);
876 spin_unlock_bh(&ap_dev->lock);
880 int ap_driver_register(struct ap_driver *ap_drv, struct module *owner,
883 struct device_driver *drv = &ap_drv->driver;
885 drv->bus = &ap_bus_type;
886 drv->probe = ap_device_probe;
887 drv->remove = ap_device_remove;
890 return driver_register(drv);
892 EXPORT_SYMBOL(ap_driver_register);
894 void ap_driver_unregister(struct ap_driver *ap_drv)
896 driver_unregister(&ap_drv->driver);
898 EXPORT_SYMBOL(ap_driver_unregister);
903 static ssize_t ap_domain_show(struct bus_type *bus, char *buf)
905 return snprintf(buf, PAGE_SIZE, "%d\n", ap_domain_index);
908 static BUS_ATTR(ap_domain, 0444, ap_domain_show, NULL);
910 static ssize_t ap_config_time_show(struct bus_type *bus, char *buf)
912 return snprintf(buf, PAGE_SIZE, "%d\n", ap_config_time);
915 static ssize_t ap_interrupts_show(struct bus_type *bus, char *buf)
917 return snprintf(buf, PAGE_SIZE, "%d\n",
918 ap_using_interrupts() ? 1 : 0);
921 static BUS_ATTR(ap_interrupts, 0444, ap_interrupts_show, NULL);
923 static ssize_t ap_config_time_store(struct bus_type *bus,
924 const char *buf, size_t count)
928 if (sscanf(buf, "%d\n", &time) != 1 || time < 5 || time > 120)
930 ap_config_time = time;
931 if (!timer_pending(&ap_config_timer) ||
932 !mod_timer(&ap_config_timer, jiffies + ap_config_time * HZ)) {
933 ap_config_timer.expires = jiffies + ap_config_time * HZ;
934 add_timer(&ap_config_timer);
939 static BUS_ATTR(config_time, 0644, ap_config_time_show, ap_config_time_store);
941 static ssize_t ap_poll_thread_show(struct bus_type *bus, char *buf)
943 return snprintf(buf, PAGE_SIZE, "%d\n", ap_poll_kthread ? 1 : 0);
946 static ssize_t ap_poll_thread_store(struct bus_type *bus,
947 const char *buf, size_t count)
951 if (sscanf(buf, "%d\n", &flag) != 1)
954 rc = ap_poll_thread_start();
959 ap_poll_thread_stop();
963 static BUS_ATTR(poll_thread, 0644, ap_poll_thread_show, ap_poll_thread_store);
965 static ssize_t poll_timeout_show(struct bus_type *bus, char *buf)
967 return snprintf(buf, PAGE_SIZE, "%llu\n", poll_timeout);
970 static ssize_t poll_timeout_store(struct bus_type *bus, const char *buf,
973 unsigned long long time;
976 /* 120 seconds = maximum poll interval */
977 if (sscanf(buf, "%llu\n", &time) != 1 || time < 1 ||
978 time > 120000000000ULL)
981 hr_time = ktime_set(0, poll_timeout);
983 if (!hrtimer_is_queued(&ap_poll_timer) ||
984 !hrtimer_forward(&ap_poll_timer, hrtimer_get_expires(&ap_poll_timer), hr_time)) {
985 hrtimer_set_expires(&ap_poll_timer, hr_time);
986 hrtimer_start_expires(&ap_poll_timer, HRTIMER_MODE_ABS);
991 static BUS_ATTR(poll_timeout, 0644, poll_timeout_show, poll_timeout_store);
993 static struct bus_attribute *const ap_bus_attrs[] = {
995 &bus_attr_config_time,
996 &bus_attr_poll_thread,
997 &bus_attr_ap_interrupts,
998 &bus_attr_poll_timeout,
1003 * ap_select_domain(): Select an AP domain.
1005 * Pick one of the 16 AP domains.
1007 static int ap_select_domain(void)
1009 int queue_depth, device_type, count, max_count, best_domain;
1013 * We want to use a single domain. Either the one specified with
1014 * the "domain=" parameter or the domain with the maximum number
1017 if (ap_domain_index >= 0 && ap_domain_index < AP_DOMAINS)
1018 /* Domain has already been selected. */
1022 for (i = 0; i < AP_DOMAINS; i++) {
1024 for (j = 0; j < AP_DEVICES; j++) {
1025 ap_qid_t qid = AP_MKQID(j, i);
1026 rc = ap_query_queue(qid, &queue_depth, &device_type);
1031 if (count > max_count) {
1036 if (best_domain >= 0){
1037 ap_domain_index = best_domain;
1044 * ap_probe_device_type(): Find the device type of an AP.
1045 * @ap_dev: pointer to the AP device.
1047 * Find the device type if query queue returned a device type of 0.
1049 static int ap_probe_device_type(struct ap_device *ap_dev)
1051 static unsigned char msg[] = {
1052 0x00,0x06,0x00,0x00,0x00,0x00,0x00,0x00,
1053 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
1054 0x00,0x00,0x00,0x58,0x00,0x00,0x00,0x00,
1055 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
1056 0x01,0x00,0x43,0x43,0x41,0x2d,0x41,0x50,
1057 0x50,0x4c,0x20,0x20,0x20,0x01,0x01,0x01,
1058 0x00,0x00,0x00,0x00,0x50,0x4b,0x00,0x00,
1059 0x00,0x00,0x01,0x1c,0x00,0x00,0x00,0x00,
1060 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
1061 0x00,0x00,0x05,0xb8,0x00,0x00,0x00,0x00,
1062 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
1063 0x70,0x00,0x41,0x00,0x00,0x00,0x00,0x00,
1064 0x00,0x00,0x54,0x32,0x01,0x00,0xa0,0x00,
1065 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
1066 0x00,0x00,0x00,0x00,0xb8,0x05,0x00,0x00,
1067 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
1068 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
1069 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
1070 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
1071 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
1072 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
1073 0x00,0x00,0x0a,0x00,0x00,0x00,0x00,0x00,
1074 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
1075 0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,
1076 0x49,0x43,0x53,0x46,0x20,0x20,0x20,0x20,
1077 0x50,0x4b,0x0a,0x00,0x50,0x4b,0x43,0x53,
1078 0x2d,0x31,0x2e,0x32,0x37,0x00,0x11,0x22,
1079 0x33,0x44,0x55,0x66,0x77,0x88,0x99,0x00,
1080 0x11,0x22,0x33,0x44,0x55,0x66,0x77,0x88,
1081 0x99,0x00,0x11,0x22,0x33,0x44,0x55,0x66,
1082 0x77,0x88,0x99,0x00,0x11,0x22,0x33,0x44,
1083 0x55,0x66,0x77,0x88,0x99,0x00,0x11,0x22,
1084 0x33,0x44,0x55,0x66,0x77,0x88,0x99,0x00,
1085 0x11,0x22,0x33,0x5d,0x00,0x5b,0x00,0x77,
1086 0x88,0x1e,0x00,0x00,0x57,0x00,0x00,0x00,
1087 0x00,0x04,0x00,0x00,0x4f,0x00,0x00,0x00,
1088 0x03,0x02,0x00,0x00,0x40,0x01,0x00,0x01,
1089 0xce,0x02,0x68,0x2d,0x5f,0xa9,0xde,0x0c,
1090 0xf6,0xd2,0x7b,0x58,0x4b,0xf9,0x28,0x68,
1091 0x3d,0xb4,0xf4,0xef,0x78,0xd5,0xbe,0x66,
1092 0x63,0x42,0xef,0xf8,0xfd,0xa4,0xf8,0xb0,
1093 0x8e,0x29,0xc2,0xc9,0x2e,0xd8,0x45,0xb8,
1094 0x53,0x8c,0x6f,0x4e,0x72,0x8f,0x6c,0x04,
1095 0x9c,0x88,0xfc,0x1e,0xc5,0x83,0x55,0x57,
1096 0xf7,0xdd,0xfd,0x4f,0x11,0x36,0x95,0x5d,
1098 struct ap_queue_status status;
1099 unsigned long long psmid;
1103 reply = (void *) get_zeroed_page(GFP_KERNEL);
1109 status = __ap_send(ap_dev->qid, 0x0102030405060708ULL,
1110 msg, sizeof(msg), 0);
1111 if (status.response_code != AP_RESPONSE_NORMAL) {
1116 /* Wait for the test message to complete. */
1117 for (i = 0; i < 6; i++) {
1119 status = __ap_recv(ap_dev->qid, &psmid, reply, 4096);
1120 if (status.response_code == AP_RESPONSE_NORMAL &&
1121 psmid == 0x0102030405060708ULL)
1125 /* Got an answer. */
1126 if (reply[0] == 0x00 && reply[1] == 0x86)
1127 ap_dev->device_type = AP_DEVICE_TYPE_PCICC;
1129 ap_dev->device_type = AP_DEVICE_TYPE_PCICA;
1135 free_page((unsigned long) reply);
1140 static void ap_interrupt_handler(void *unused1, void *unused2)
1142 kstat_cpu(smp_processor_id()).irqs[IOINT_APB]++;
1143 tasklet_schedule(&ap_tasklet);
1147 * __ap_scan_bus(): Scan the AP bus.
1148 * @dev: Pointer to device
1149 * @data: Pointer to data
1151 * Scan the AP bus for new devices.
1153 static int __ap_scan_bus(struct device *dev, void *data)
1155 return to_ap_dev(dev)->qid == (ap_qid_t)(unsigned long) data;
1158 static void ap_device_release(struct device *dev)
1160 struct ap_device *ap_dev = to_ap_dev(dev);
1165 static void ap_scan_bus(struct work_struct *unused)
1167 struct ap_device *ap_dev;
1170 int queue_depth, device_type;
1171 unsigned int device_functions;
1174 if (ap_select_domain() != 0)
1176 for (i = 0; i < AP_DEVICES; i++) {
1177 qid = AP_MKQID(i, ap_domain_index);
1178 dev = bus_find_device(&ap_bus_type, NULL,
1179 (void *)(unsigned long)qid,
1181 rc = ap_query_queue(qid, &queue_depth, &device_type);
1184 set_current_state(TASK_UNINTERRUPTIBLE);
1185 schedule_timeout(AP_RESET_TIMEOUT);
1186 rc = ap_query_queue(qid, &queue_depth,
1189 ap_dev = to_ap_dev(dev);
1190 spin_lock_bh(&ap_dev->lock);
1191 if (rc || ap_dev->unregistered) {
1192 spin_unlock_bh(&ap_dev->lock);
1193 if (ap_dev->unregistered)
1195 device_unregister(dev);
1199 spin_unlock_bh(&ap_dev->lock);
1205 rc = ap_init_queue(qid);
1208 ap_dev = kzalloc(sizeof(*ap_dev), GFP_KERNEL);
1212 ap_dev->queue_depth = queue_depth;
1213 ap_dev->unregistered = 1;
1214 spin_lock_init(&ap_dev->lock);
1215 INIT_LIST_HEAD(&ap_dev->pendingq);
1216 INIT_LIST_HEAD(&ap_dev->requestq);
1217 INIT_LIST_HEAD(&ap_dev->list);
1218 setup_timer(&ap_dev->timeout, ap_request_timeout,
1219 (unsigned long) ap_dev);
1220 switch (device_type) {
1222 if (ap_probe_device_type(ap_dev)) {
1228 if (ap_query_functions(qid, &device_functions)) {
1232 if (test_ap_facility(device_functions, 3))
1233 ap_dev->device_type = AP_DEVICE_TYPE_CEX3C;
1234 else if (test_ap_facility(device_functions, 4))
1235 ap_dev->device_type = AP_DEVICE_TYPE_CEX3A;
1242 ap_dev->device_type = device_type;
1245 ap_dev->device.bus = &ap_bus_type;
1246 ap_dev->device.parent = ap_root_device;
1247 if (dev_set_name(&ap_dev->device, "card%02x",
1248 AP_QID_DEVICE(ap_dev->qid))) {
1252 ap_dev->device.release = ap_device_release;
1253 rc = device_register(&ap_dev->device);
1255 put_device(&ap_dev->device);
1258 /* Add device attributes. */
1259 rc = sysfs_create_group(&ap_dev->device.kobj,
1260 &ap_dev_attr_group);
1262 spin_lock_bh(&ap_dev->lock);
1263 ap_dev->unregistered = 0;
1264 spin_unlock_bh(&ap_dev->lock);
1267 device_unregister(&ap_dev->device);
1272 ap_config_timeout(unsigned long ptr)
1274 queue_work(ap_work_queue, &ap_config_work);
1275 ap_config_timer.expires = jiffies + ap_config_time * HZ;
1276 add_timer(&ap_config_timer);
1280 * __ap_schedule_poll_timer(): Schedule poll timer.
1282 * Set up the timer to run the poll tasklet
1284 static inline void __ap_schedule_poll_timer(void)
1288 spin_lock_bh(&ap_poll_timer_lock);
1289 if (hrtimer_is_queued(&ap_poll_timer) || ap_suspend_flag)
1291 if (ktime_to_ns(hrtimer_expires_remaining(&ap_poll_timer)) <= 0) {
1292 hr_time = ktime_set(0, poll_timeout);
1293 hrtimer_forward_now(&ap_poll_timer, hr_time);
1294 hrtimer_restart(&ap_poll_timer);
1297 spin_unlock_bh(&ap_poll_timer_lock);
1301 * ap_schedule_poll_timer(): Schedule poll timer.
1303 * Set up the timer to run the poll tasklet
1305 static inline void ap_schedule_poll_timer(void)
1307 if (ap_using_interrupts())
1309 __ap_schedule_poll_timer();
1313 * ap_poll_read(): Receive pending reply messages from an AP device.
1314 * @ap_dev: pointer to the AP device
1315 * @flags: pointer to control flags, bit 2^0 is set if another poll is
1316 * required, bit 2^1 is set if the poll timer needs to get armed
1318 * Returns 0 if the device is still present, -ENODEV if not.
1320 static int ap_poll_read(struct ap_device *ap_dev, unsigned long *flags)
1322 struct ap_queue_status status;
1323 struct ap_message *ap_msg;
1325 if (ap_dev->queue_count <= 0)
1327 status = __ap_recv(ap_dev->qid, &ap_dev->reply->psmid,
1328 ap_dev->reply->message, ap_dev->reply->length);
1329 switch (status.response_code) {
1330 case AP_RESPONSE_NORMAL:
1331 atomic_dec(&ap_poll_requests);
1332 ap_decrease_queue_count(ap_dev);
1333 list_for_each_entry(ap_msg, &ap_dev->pendingq, list) {
1334 if (ap_msg->psmid != ap_dev->reply->psmid)
1336 list_del_init(&ap_msg->list);
1337 ap_dev->pendingq_count--;
1338 ap_msg->receive(ap_dev, ap_msg, ap_dev->reply);
1341 if (ap_dev->queue_count > 0)
1344 case AP_RESPONSE_NO_PENDING_REPLY:
1345 if (status.queue_empty) {
1346 /* The card shouldn't forget requests but who knows. */
1347 atomic_sub(ap_dev->queue_count, &ap_poll_requests);
1348 ap_dev->queue_count = 0;
1349 list_splice_init(&ap_dev->pendingq, &ap_dev->requestq);
1350 ap_dev->requestq_count += ap_dev->pendingq_count;
1351 ap_dev->pendingq_count = 0;
1362 * ap_poll_write(): Send messages from the request queue to an AP device.
1363 * @ap_dev: pointer to the AP device
1364 * @flags: pointer to control flags, bit 2^0 is set if another poll is
1365 * required, bit 2^1 is set if the poll timer needs to get armed
1367 * Returns 0 if the device is still present, -ENODEV if not.
1369 static int ap_poll_write(struct ap_device *ap_dev, unsigned long *flags)
1371 struct ap_queue_status status;
1372 struct ap_message *ap_msg;
1374 if (ap_dev->requestq_count <= 0 ||
1375 ap_dev->queue_count >= ap_dev->queue_depth)
1377 /* Start the next request on the queue. */
1378 ap_msg = list_entry(ap_dev->requestq.next, struct ap_message, list);
1379 status = __ap_send(ap_dev->qid, ap_msg->psmid,
1380 ap_msg->message, ap_msg->length, ap_msg->special);
1381 switch (status.response_code) {
1382 case AP_RESPONSE_NORMAL:
1383 atomic_inc(&ap_poll_requests);
1384 ap_increase_queue_count(ap_dev);
1385 list_move_tail(&ap_msg->list, &ap_dev->pendingq);
1386 ap_dev->requestq_count--;
1387 ap_dev->pendingq_count++;
1388 if (ap_dev->queue_count < ap_dev->queue_depth &&
1389 ap_dev->requestq_count > 0)
1393 case AP_RESPONSE_RESET_IN_PROGRESS:
1394 __ap_schedule_poll_timer();
1395 case AP_RESPONSE_Q_FULL:
1398 case AP_RESPONSE_MESSAGE_TOO_BIG:
1399 case AP_RESPONSE_REQ_FAC_NOT_INST:
1408 * ap_poll_queue(): Poll AP device for pending replies and send new messages.
1409 * @ap_dev: pointer to the bus device
1410 * @flags: pointer to control flags, bit 2^0 is set if another poll is
1411 * required, bit 2^1 is set if the poll timer needs to get armed
1413 * Poll AP device for pending replies and send new messages. If either
1414 * ap_poll_read or ap_poll_write returns -ENODEV unregister the device.
1417 static inline int ap_poll_queue(struct ap_device *ap_dev, unsigned long *flags)
1421 rc = ap_poll_read(ap_dev, flags);
1424 return ap_poll_write(ap_dev, flags);
1428 * __ap_queue_message(): Queue a message to a device.
1429 * @ap_dev: pointer to the AP device
1430 * @ap_msg: the message to be queued
1432 * Queue a message to a device. Returns 0 if successful.
1434 static int __ap_queue_message(struct ap_device *ap_dev, struct ap_message *ap_msg)
1436 struct ap_queue_status status;
1438 if (list_empty(&ap_dev->requestq) &&
1439 ap_dev->queue_count < ap_dev->queue_depth) {
1440 status = __ap_send(ap_dev->qid, ap_msg->psmid,
1441 ap_msg->message, ap_msg->length,
1443 switch (status.response_code) {
1444 case AP_RESPONSE_NORMAL:
1445 list_add_tail(&ap_msg->list, &ap_dev->pendingq);
1446 atomic_inc(&ap_poll_requests);
1447 ap_dev->pendingq_count++;
1448 ap_increase_queue_count(ap_dev);
1449 ap_dev->total_request_count++;
1451 case AP_RESPONSE_Q_FULL:
1452 case AP_RESPONSE_RESET_IN_PROGRESS:
1453 list_add_tail(&ap_msg->list, &ap_dev->requestq);
1454 ap_dev->requestq_count++;
1455 ap_dev->total_request_count++;
1457 case AP_RESPONSE_REQ_FAC_NOT_INST:
1458 case AP_RESPONSE_MESSAGE_TOO_BIG:
1459 ap_msg->receive(ap_dev, ap_msg, ERR_PTR(-EINVAL));
1461 default: /* Device is gone. */
1462 ap_msg->receive(ap_dev, ap_msg, ERR_PTR(-ENODEV));
1466 list_add_tail(&ap_msg->list, &ap_dev->requestq);
1467 ap_dev->requestq_count++;
1468 ap_dev->total_request_count++;
1471 ap_schedule_poll_timer();
1475 void ap_queue_message(struct ap_device *ap_dev, struct ap_message *ap_msg)
1477 unsigned long flags;
1480 /* For asynchronous message handling a valid receive-callback
1482 BUG_ON(!ap_msg->receive);
1484 spin_lock_bh(&ap_dev->lock);
1485 if (!ap_dev->unregistered) {
1486 /* Make room on the queue by polling for finished requests. */
1487 rc = ap_poll_queue(ap_dev, &flags);
1489 rc = __ap_queue_message(ap_dev, ap_msg);
1491 wake_up(&ap_poll_wait);
1493 ap_dev->unregistered = 1;
1495 ap_msg->receive(ap_dev, ap_msg, ERR_PTR(-ENODEV));
1498 spin_unlock_bh(&ap_dev->lock);
1500 device_unregister(&ap_dev->device);
1502 EXPORT_SYMBOL(ap_queue_message);
1505 * ap_cancel_message(): Cancel a crypto request.
1506 * @ap_dev: The AP device that has the message queued
1507 * @ap_msg: The message that is to be removed
1509 * Cancel a crypto request. This is done by removing the request
1510 * from the device pending or request queue. Note that the
1511 * request stays on the AP queue. When it finishes the message
1512 * reply will be discarded because the psmid can't be found.
1514 void ap_cancel_message(struct ap_device *ap_dev, struct ap_message *ap_msg)
1516 struct ap_message *tmp;
1518 spin_lock_bh(&ap_dev->lock);
1519 if (!list_empty(&ap_msg->list)) {
1520 list_for_each_entry(tmp, &ap_dev->pendingq, list)
1521 if (tmp->psmid == ap_msg->psmid) {
1522 ap_dev->pendingq_count--;
1525 ap_dev->requestq_count--;
1527 list_del_init(&ap_msg->list);
1529 spin_unlock_bh(&ap_dev->lock);
1531 EXPORT_SYMBOL(ap_cancel_message);
1534 * ap_poll_timeout(): AP receive polling for finished AP requests.
1535 * @unused: Unused pointer.
1537 * Schedules the AP tasklet using a high resolution timer.
1539 static enum hrtimer_restart ap_poll_timeout(struct hrtimer *unused)
1541 tasklet_schedule(&ap_tasklet);
1542 return HRTIMER_NORESTART;
1546 * ap_reset(): Reset a not responding AP device.
1547 * @ap_dev: Pointer to the AP device
1549 * Reset a not responding AP device and move all requests from the
1550 * pending queue to the request queue.
1552 static void ap_reset(struct ap_device *ap_dev)
1556 ap_dev->reset = AP_RESET_IGNORE;
1557 atomic_sub(ap_dev->queue_count, &ap_poll_requests);
1558 ap_dev->queue_count = 0;
1559 list_splice_init(&ap_dev->pendingq, &ap_dev->requestq);
1560 ap_dev->requestq_count += ap_dev->pendingq_count;
1561 ap_dev->pendingq_count = 0;
1562 rc = ap_init_queue(ap_dev->qid);
1564 ap_dev->unregistered = 1;
1566 __ap_schedule_poll_timer();
1569 static int __ap_poll_device(struct ap_device *ap_dev, unsigned long *flags)
1571 if (!ap_dev->unregistered) {
1572 if (ap_poll_queue(ap_dev, flags))
1573 ap_dev->unregistered = 1;
1574 if (ap_dev->reset == AP_RESET_DO)
1581 * ap_poll_all(): Poll all AP devices.
1582 * @dummy: Unused variable
1584 * Poll all AP devices on the bus in a round robin fashion. Continue
1585 * polling until bit 2^0 of the control flags is not set. If bit 2^1
1586 * of the control flags has been set arm the poll timer.
1588 static void ap_poll_all(unsigned long dummy)
1590 unsigned long flags;
1591 struct ap_device *ap_dev;
1593 /* Reset the indicator if interrupts are used. Thus new interrupts can
1594 * be received. Doing it in the beginning of the tasklet is therefor
1595 * important that no requests on any AP get lost.
1597 if (ap_using_interrupts())
1598 xchg((u8 *)ap_interrupt_indicator, 0);
1601 spin_lock(&ap_device_list_lock);
1602 list_for_each_entry(ap_dev, &ap_device_list, list) {
1603 spin_lock(&ap_dev->lock);
1604 __ap_poll_device(ap_dev, &flags);
1605 spin_unlock(&ap_dev->lock);
1607 spin_unlock(&ap_device_list_lock);
1608 } while (flags & 1);
1610 ap_schedule_poll_timer();
1614 * ap_poll_thread(): Thread that polls for finished requests.
1615 * @data: Unused pointer
1617 * AP bus poll thread. The purpose of this thread is to poll for
1618 * finished requests in a loop if there is a "free" cpu - that is
1619 * a cpu that doesn't have anything better to do. The polling stops
1620 * as soon as there is another task or if all messages have been
1623 static int ap_poll_thread(void *data)
1625 DECLARE_WAITQUEUE(wait, current);
1626 unsigned long flags;
1628 struct ap_device *ap_dev;
1630 set_user_nice(current, 19);
1632 if (ap_suspend_flag)
1634 if (need_resched()) {
1638 add_wait_queue(&ap_poll_wait, &wait);
1639 set_current_state(TASK_INTERRUPTIBLE);
1640 if (kthread_should_stop())
1642 requests = atomic_read(&ap_poll_requests);
1645 set_current_state(TASK_RUNNING);
1646 remove_wait_queue(&ap_poll_wait, &wait);
1649 spin_lock_bh(&ap_device_list_lock);
1650 list_for_each_entry(ap_dev, &ap_device_list, list) {
1651 spin_lock(&ap_dev->lock);
1652 __ap_poll_device(ap_dev, &flags);
1653 spin_unlock(&ap_dev->lock);
1655 spin_unlock_bh(&ap_device_list_lock);
1657 set_current_state(TASK_RUNNING);
1658 remove_wait_queue(&ap_poll_wait, &wait);
1662 static int ap_poll_thread_start(void)
1666 if (ap_using_interrupts() || ap_suspend_flag)
1668 mutex_lock(&ap_poll_thread_mutex);
1669 if (!ap_poll_kthread) {
1670 ap_poll_kthread = kthread_run(ap_poll_thread, NULL, "appoll");
1671 rc = IS_ERR(ap_poll_kthread) ? PTR_ERR(ap_poll_kthread) : 0;
1673 ap_poll_kthread = NULL;
1677 mutex_unlock(&ap_poll_thread_mutex);
1681 static void ap_poll_thread_stop(void)
1683 mutex_lock(&ap_poll_thread_mutex);
1684 if (ap_poll_kthread) {
1685 kthread_stop(ap_poll_kthread);
1686 ap_poll_kthread = NULL;
1688 mutex_unlock(&ap_poll_thread_mutex);
1692 * ap_request_timeout(): Handling of request timeouts
1693 * @data: Holds the AP device.
1695 * Handles request timeouts.
1697 static void ap_request_timeout(unsigned long data)
1699 struct ap_device *ap_dev = (struct ap_device *) data;
1701 if (ap_dev->reset == AP_RESET_ARMED) {
1702 ap_dev->reset = AP_RESET_DO;
1704 if (ap_using_interrupts())
1705 tasklet_schedule(&ap_tasklet);
1709 static void ap_reset_domain(void)
1713 if (ap_domain_index != -1)
1714 for (i = 0; i < AP_DEVICES; i++)
1715 ap_reset_queue(AP_MKQID(i, ap_domain_index));
1718 static void ap_reset_all(void)
1722 for (i = 0; i < AP_DOMAINS; i++)
1723 for (j = 0; j < AP_DEVICES; j++)
1724 ap_reset_queue(AP_MKQID(j, i));
1727 static struct reset_call ap_reset_call = {
1732 * ap_module_init(): The module initialization code.
1734 * Initializes the module.
1736 int __init ap_module_init(void)
1740 if (ap_domain_index < -1 || ap_domain_index >= AP_DOMAINS) {
1741 pr_warning("%d is not a valid cryptographic domain\n",
1745 /* In resume callback we need to know if the user had set the domain.
1746 * If so, we can not just reset it.
1748 if (ap_domain_index >= 0)
1749 user_set_domain = 1;
1751 if (ap_instructions_available() != 0) {
1752 pr_warning("The hardware system does not support "
1753 "AP instructions\n");
1756 if (ap_interrupts_available()) {
1757 isc_register(AP_ISC);
1758 ap_interrupt_indicator = s390_register_adapter_interrupt(
1759 &ap_interrupt_handler, NULL, AP_ISC);
1760 if (IS_ERR(ap_interrupt_indicator)) {
1761 ap_interrupt_indicator = NULL;
1762 isc_unregister(AP_ISC);
1766 register_reset_call(&ap_reset_call);
1768 /* Create /sys/bus/ap. */
1769 rc = bus_register(&ap_bus_type);
1772 for (i = 0; ap_bus_attrs[i]; i++) {
1773 rc = bus_create_file(&ap_bus_type, ap_bus_attrs[i]);
1778 /* Create /sys/devices/ap. */
1779 ap_root_device = root_device_register("ap");
1780 rc = IS_ERR(ap_root_device) ? PTR_ERR(ap_root_device) : 0;
1784 ap_work_queue = create_singlethread_workqueue("kapwork");
1785 if (!ap_work_queue) {
1790 if (ap_select_domain() == 0)
1793 /* Setup the AP bus rescan timer. */
1794 init_timer(&ap_config_timer);
1795 ap_config_timer.function = ap_config_timeout;
1796 ap_config_timer.data = 0;
1797 ap_config_timer.expires = jiffies + ap_config_time * HZ;
1798 add_timer(&ap_config_timer);
1800 /* Setup the high resultion poll timer.
1801 * If we are running under z/VM adjust polling to z/VM polling rate.
1804 poll_timeout = 1500000;
1805 spin_lock_init(&ap_poll_timer_lock);
1806 hrtimer_init(&ap_poll_timer, CLOCK_MONOTONIC, HRTIMER_MODE_ABS);
1807 ap_poll_timer.function = ap_poll_timeout;
1809 /* Start the low priority AP bus poll thread. */
1810 if (ap_thread_flag) {
1811 rc = ap_poll_thread_start();
1819 del_timer_sync(&ap_config_timer);
1820 hrtimer_cancel(&ap_poll_timer);
1821 destroy_workqueue(ap_work_queue);
1823 root_device_unregister(ap_root_device);
1826 bus_remove_file(&ap_bus_type, ap_bus_attrs[i]);
1827 bus_unregister(&ap_bus_type);
1829 unregister_reset_call(&ap_reset_call);
1830 if (ap_using_interrupts()) {
1831 s390_unregister_adapter_interrupt(ap_interrupt_indicator, AP_ISC);
1832 isc_unregister(AP_ISC);
1837 static int __ap_match_all(struct device *dev, void *data)
1843 * ap_modules_exit(): The module termination code
1845 * Terminates the module.
1847 void ap_module_exit(void)
1853 ap_poll_thread_stop();
1854 del_timer_sync(&ap_config_timer);
1855 hrtimer_cancel(&ap_poll_timer);
1856 destroy_workqueue(ap_work_queue);
1857 tasklet_kill(&ap_tasklet);
1858 root_device_unregister(ap_root_device);
1859 while ((dev = bus_find_device(&ap_bus_type, NULL, NULL,
1862 device_unregister(dev);
1865 for (i = 0; ap_bus_attrs[i]; i++)
1866 bus_remove_file(&ap_bus_type, ap_bus_attrs[i]);
1867 bus_unregister(&ap_bus_type);
1868 unregister_reset_call(&ap_reset_call);
1869 if (ap_using_interrupts()) {
1870 s390_unregister_adapter_interrupt(ap_interrupt_indicator, AP_ISC);
1871 isc_unregister(AP_ISC);
1875 module_init(ap_module_init);
1876 module_exit(ap_module_exit);