2 * Copyright IBM Corp. 2006, 2012
3 * Author(s): Cornelia Huck <cornelia.huck@de.ibm.com>
4 * Martin Schwidefsky <schwidefsky@de.ibm.com>
5 * Ralph Wuerthner <rwuerthn@de.ibm.com>
6 * Felix Beck <felix.beck@de.ibm.com>
7 * Holger Dengler <hd@linux.vnet.ibm.com>
9 * Adjunct processor bus.
11 * This program is free software; you can redistribute it and/or modify
12 * it under the terms of the GNU General Public License as published by
13 * the Free Software Foundation; either version 2, or (at your option)
16 * This program is distributed in the hope that it will be useful,
17 * but WITHOUT ANY WARRANTY; without even the implied warranty of
18 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19 * GNU General Public License for more details.
21 * You should have received a copy of the GNU General Public License
22 * along with this program; if not, write to the Free Software
23 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
26 #define KMSG_COMPONENT "ap"
27 #define pr_fmt(fmt) KMSG_COMPONENT ": " fmt
29 #include <linux/kernel_stat.h>
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 <linux/atomic.h>
44 #include <linux/hrtimer.h>
45 #include <linux/ktime.h>
46 #include <asm/facility.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(struct airq_struct
*airq
);
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);
65 static void ap_query_configuration(void);
70 MODULE_AUTHOR("IBM Corporation");
71 MODULE_DESCRIPTION("Adjunct Processor Bus driver, " \
72 "Copyright IBM Corp. 2006, 2012");
73 MODULE_LICENSE("GPL");
74 MODULE_ALIAS("z90crypt");
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 struct ap_config_info
*ap_configuration
;
90 static DEFINE_SPINLOCK(ap_device_list_lock
);
91 static LIST_HEAD(ap_device_list
);
94 * Workqueue & timer for bus rescan.
96 static struct workqueue_struct
*ap_work_queue
;
97 static struct timer_list ap_config_timer
;
98 static int ap_config_time
= AP_CONFIG_TIME
;
99 static DECLARE_WORK(ap_config_work
, ap_scan_bus
);
102 * Tasklet & timer for AP request polling and interrupts
104 static DECLARE_TASKLET(ap_tasklet
, ap_poll_all
, 0);
105 static atomic_t ap_poll_requests
= ATOMIC_INIT(0);
106 static DECLARE_WAIT_QUEUE_HEAD(ap_poll_wait
);
107 static struct task_struct
*ap_poll_kthread
= NULL
;
108 static DEFINE_MUTEX(ap_poll_thread_mutex
);
109 static DEFINE_SPINLOCK(ap_poll_timer_lock
);
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
;
123 /* Adapter interrupt definitions */
124 static int ap_airq_flag
;
126 static struct airq_struct ap_airq
= {
127 .handler
= ap_interrupt_handler
,
132 * ap_using_interrupts() - Returns non-zero if interrupt support is
135 static inline int ap_using_interrupts(void)
141 * ap_intructions_available() - Test if AP instructions are available.
143 * Returns 0 if the AP instructions are installed.
145 static inline int ap_instructions_available(void)
147 register unsigned long reg0
asm ("0") = AP_MKQID(0,0);
148 register unsigned long reg1
asm ("1") = -ENODEV
;
149 register unsigned long reg2
asm ("2") = 0UL;
152 " .long 0xb2af0000\n" /* PQAP(TAPQ) */
156 : "+d" (reg0
), "+d" (reg1
), "+d" (reg2
) : : "cc" );
161 * ap_interrupts_available(): Test if AP interrupts are available.
163 * Returns 1 if AP interrupts are available.
165 static int ap_interrupts_available(void)
167 return test_facility(2) && test_facility(65);
171 * ap_configuration_available(): Test if AP configuration
172 * information is available.
174 * Returns 1 if AP configuration information is available.
177 static int ap_configuration_available(void)
179 return test_facility(2) && test_facility(12);
184 * ap_test_queue(): Test adjunct processor queue.
185 * @qid: The AP queue number
186 * @queue_depth: Pointer to queue depth value
187 * @device_type: Pointer to device type value
189 * Returns AP queue status structure.
191 static inline struct ap_queue_status
192 ap_test_queue(ap_qid_t qid
, int *queue_depth
, int *device_type
)
194 register unsigned long reg0
asm ("0") = qid
;
195 register struct ap_queue_status reg1
asm ("1");
196 register unsigned long reg2
asm ("2") = 0UL;
198 asm volatile(".long 0xb2af0000" /* PQAP(TAPQ) */
199 : "+d" (reg0
), "=d" (reg1
), "+d" (reg2
) : : "cc");
200 *device_type
= (int) (reg2
>> 24);
201 *queue_depth
= (int) (reg2
& 0xff);
206 * ap_reset_queue(): Reset adjunct processor queue.
207 * @qid: The AP queue number
209 * Returns AP queue status structure.
211 static inline struct ap_queue_status
ap_reset_queue(ap_qid_t qid
)
213 register unsigned long reg0
asm ("0") = qid
| 0x01000000UL
;
214 register struct ap_queue_status reg1
asm ("1");
215 register unsigned long reg2
asm ("2") = 0UL;
218 ".long 0xb2af0000" /* PQAP(RAPQ) */
219 : "+d" (reg0
), "=d" (reg1
), "+d" (reg2
) : : "cc");
225 * ap_queue_interruption_control(): Enable interruption for a specific AP.
226 * @qid: The AP queue number
227 * @ind: The notification indicator byte
229 * Returns AP queue status.
231 static inline struct ap_queue_status
232 ap_queue_interruption_control(ap_qid_t qid
, void *ind
)
234 register unsigned long reg0
asm ("0") = qid
| 0x03000000UL
;
235 register unsigned long reg1_in
asm ("1") = 0x0000800000000000UL
| AP_ISC
;
236 register struct ap_queue_status reg1_out
asm ("1");
237 register void *reg2
asm ("2") = ind
;
239 ".long 0xb2af0000" /* PQAP(AQIC) */
240 : "+d" (reg0
), "+d" (reg1_in
), "=d" (reg1_out
), "+d" (reg2
)
248 static inline struct ap_queue_status
249 __ap_query_functions(ap_qid_t qid
, unsigned int *functions
)
251 register unsigned long reg0
asm ("0") = 0UL | qid
| (1UL << 23);
252 register struct ap_queue_status reg1
asm ("1") = AP_QUEUE_STATUS_INVALID
;
253 register unsigned long reg2
asm ("2");
256 ".long 0xb2af0000\n" /* PQAP(TAPQ) */
259 : "+d" (reg0
), "+d" (reg1
), "=d" (reg2
)
263 *functions
= (unsigned int)(reg2
>> 32);
269 static inline int __ap_query_configuration(struct ap_config_info
*config
)
271 register unsigned long reg0
asm ("0") = 0x04000000UL
;
272 register unsigned long reg1
asm ("1") = -EINVAL
;
273 register unsigned char *reg2
asm ("2") = (unsigned char *)config
;
276 ".long 0xb2af0000\n" /* PQAP(QCI) */
280 : "+d" (reg0
), "+d" (reg1
), "+d" (reg2
)
289 * ap_query_functions(): Query supported functions.
290 * @qid: The AP queue number
291 * @functions: Pointer to functions field.
295 * -ENODEV if queue not valid.
296 * -EBUSY if device busy.
297 * -EINVAL if query function is not supported
299 static int ap_query_functions(ap_qid_t qid
, unsigned int *functions
)
302 struct ap_queue_status status
;
304 status
= __ap_query_functions(qid
, functions
);
306 for (i
= 0; i
< AP_MAX_RESET
; i
++) {
307 if (ap_queue_status_invalid_test(&status
))
310 switch (status
.response_code
) {
311 case AP_RESPONSE_NORMAL
:
313 case AP_RESPONSE_RESET_IN_PROGRESS
:
314 case AP_RESPONSE_BUSY
:
316 case AP_RESPONSE_Q_NOT_AVAIL
:
317 case AP_RESPONSE_DECONFIGURED
:
318 case AP_RESPONSE_CHECKSTOPPED
:
319 case AP_RESPONSE_INVALID_ADDRESS
:
321 case AP_RESPONSE_OTHERWISE_CHANGED
:
326 if (i
< AP_MAX_RESET
- 1) {
328 status
= __ap_query_functions(qid
, functions
);
338 * ap_queue_enable_interruption(): Enable interruption on an AP.
339 * @qid: The AP queue number
340 * @ind: the notification indicator byte
342 * Enables interruption on AP queue via ap_queue_interruption_control(). Based
343 * on the return value it waits a while and tests the AP queue if interrupts
344 * have been switched on using ap_test_queue().
346 static int ap_queue_enable_interruption(ap_qid_t qid
, void *ind
)
349 struct ap_queue_status status
;
350 int t_depth
, t_device_type
, rc
, i
;
353 status
= ap_queue_interruption_control(qid
, ind
);
355 for (i
= 0; i
< AP_MAX_RESET
; i
++) {
356 switch (status
.response_code
) {
357 case AP_RESPONSE_NORMAL
:
358 if (status
.int_enabled
)
361 case AP_RESPONSE_RESET_IN_PROGRESS
:
362 case AP_RESPONSE_BUSY
:
363 if (i
< AP_MAX_RESET
- 1) {
365 status
= ap_queue_interruption_control(qid
,
370 case AP_RESPONSE_Q_NOT_AVAIL
:
371 case AP_RESPONSE_DECONFIGURED
:
372 case AP_RESPONSE_CHECKSTOPPED
:
373 case AP_RESPONSE_INVALID_ADDRESS
:
375 case AP_RESPONSE_OTHERWISE_CHANGED
:
376 if (status
.int_enabled
)
382 if (i
< AP_MAX_RESET
- 1) {
384 status
= ap_test_queue(qid
, &t_depth
, &t_device_type
);
394 * __ap_send(): Send message to adjunct processor queue.
395 * @qid: The AP queue number
396 * @psmid: The program supplied message identifier
397 * @msg: The message text
398 * @length: The message length
399 * @special: Special Bit
401 * Returns AP queue status structure.
402 * Condition code 1 on NQAP can't happen because the L bit is 1.
403 * Condition code 2 on NQAP also means the send is incomplete,
404 * because a segment boundary was reached. The NQAP is repeated.
406 static inline struct ap_queue_status
407 __ap_send(ap_qid_t qid
, unsigned long long psmid
, void *msg
, size_t length
,
408 unsigned int special
)
410 typedef struct { char _
[length
]; } msgblock
;
411 register unsigned long reg0
asm ("0") = qid
| 0x40000000UL
;
412 register struct ap_queue_status reg1
asm ("1");
413 register unsigned long reg2
asm ("2") = (unsigned long) msg
;
414 register unsigned long reg3
asm ("3") = (unsigned long) length
;
415 register unsigned long reg4
asm ("4") = (unsigned int) (psmid
>> 32);
416 register unsigned long reg5
asm ("5") = psmid
& 0xffffffff;
422 "0: .long 0xb2ad0042\n" /* NQAP */
424 : "+d" (reg0
), "=d" (reg1
), "+d" (reg2
), "+d" (reg3
)
425 : "d" (reg4
), "d" (reg5
), "m" (*(msgblock
*) msg
)
430 int ap_send(ap_qid_t qid
, unsigned long long psmid
, void *msg
, size_t length
)
432 struct ap_queue_status status
;
434 status
= __ap_send(qid
, psmid
, msg
, length
, 0);
435 switch (status
.response_code
) {
436 case AP_RESPONSE_NORMAL
:
438 case AP_RESPONSE_Q_FULL
:
439 case AP_RESPONSE_RESET_IN_PROGRESS
:
441 case AP_RESPONSE_REQ_FAC_NOT_INST
:
443 default: /* Device is gone. */
447 EXPORT_SYMBOL(ap_send
);
450 * __ap_recv(): Receive message from adjunct processor queue.
451 * @qid: The AP queue number
452 * @psmid: Pointer to program supplied message identifier
453 * @msg: The message text
454 * @length: The message length
456 * Returns AP queue status structure.
457 * Condition code 1 on DQAP means the receive has taken place
458 * but only partially. The response is incomplete, hence the
460 * Condition code 2 on DQAP also means the receive is incomplete,
461 * this time because a segment boundary was reached. Again, the
463 * Note that gpr2 is used by the DQAP instruction to keep track of
464 * any 'residual' length, in case the instruction gets interrupted.
465 * Hence it gets zeroed before the instruction.
467 static inline struct ap_queue_status
468 __ap_recv(ap_qid_t qid
, unsigned long long *psmid
, void *msg
, size_t length
)
470 typedef struct { char _
[length
]; } msgblock
;
471 register unsigned long reg0
asm("0") = qid
| 0x80000000UL
;
472 register struct ap_queue_status reg1
asm ("1");
473 register unsigned long reg2
asm("2") = 0UL;
474 register unsigned long reg4
asm("4") = (unsigned long) msg
;
475 register unsigned long reg5
asm("5") = (unsigned long) length
;
476 register unsigned long reg6
asm("6") = 0UL;
477 register unsigned long reg7
asm("7") = 0UL;
481 "0: .long 0xb2ae0064\n" /* DQAP */
483 : "+d" (reg0
), "=d" (reg1
), "+d" (reg2
),
484 "+d" (reg4
), "+d" (reg5
), "+d" (reg6
), "+d" (reg7
),
485 "=m" (*(msgblock
*) msg
) : : "cc" );
486 *psmid
= (((unsigned long long) reg6
) << 32) + reg7
;
490 int ap_recv(ap_qid_t qid
, unsigned long long *psmid
, void *msg
, size_t length
)
492 struct ap_queue_status status
;
494 status
= __ap_recv(qid
, psmid
, msg
, length
);
495 switch (status
.response_code
) {
496 case AP_RESPONSE_NORMAL
:
498 case AP_RESPONSE_NO_PENDING_REPLY
:
499 if (status
.queue_empty
)
502 case AP_RESPONSE_RESET_IN_PROGRESS
:
508 EXPORT_SYMBOL(ap_recv
);
511 * ap_query_queue(): Check if an AP queue is available.
512 * @qid: The AP queue number
513 * @queue_depth: Pointer to queue depth value
514 * @device_type: Pointer to device type value
516 * The test is repeated for AP_MAX_RESET times.
518 static int ap_query_queue(ap_qid_t qid
, int *queue_depth
, int *device_type
)
520 struct ap_queue_status status
;
521 int t_depth
, t_device_type
, rc
, i
;
524 for (i
= 0; i
< AP_MAX_RESET
; i
++) {
525 status
= ap_test_queue(qid
, &t_depth
, &t_device_type
);
526 switch (status
.response_code
) {
527 case AP_RESPONSE_NORMAL
:
528 *queue_depth
= t_depth
+ 1;
529 *device_type
= t_device_type
;
532 case AP_RESPONSE_Q_NOT_AVAIL
:
535 case AP_RESPONSE_RESET_IN_PROGRESS
:
537 case AP_RESPONSE_DECONFIGURED
:
540 case AP_RESPONSE_CHECKSTOPPED
:
543 case AP_RESPONSE_INVALID_ADDRESS
:
546 case AP_RESPONSE_OTHERWISE_CHANGED
:
548 case AP_RESPONSE_BUSY
:
555 if (i
< AP_MAX_RESET
- 1)
562 * ap_init_queue(): Reset an AP queue.
563 * @qid: The AP queue number
565 * Reset an AP queue and wait for it to become available again.
567 static int ap_init_queue(ap_qid_t qid
)
569 struct ap_queue_status status
;
573 status
= ap_reset_queue(qid
);
574 for (i
= 0; i
< AP_MAX_RESET
; i
++) {
575 switch (status
.response_code
) {
576 case AP_RESPONSE_NORMAL
:
577 if (status
.queue_empty
)
580 case AP_RESPONSE_Q_NOT_AVAIL
:
581 case AP_RESPONSE_DECONFIGURED
:
582 case AP_RESPONSE_CHECKSTOPPED
:
583 i
= AP_MAX_RESET
; /* return with -ENODEV */
585 case AP_RESPONSE_RESET_IN_PROGRESS
:
587 case AP_RESPONSE_BUSY
:
591 if (rc
!= -ENODEV
&& rc
!= -EBUSY
)
593 if (i
< AP_MAX_RESET
- 1) {
595 status
= ap_test_queue(qid
, &dummy
, &dummy
);
598 if (rc
== 0 && ap_using_interrupts()) {
599 rc
= ap_queue_enable_interruption(qid
, ap_airq
.lsi_ptr
);
600 /* If interruption mode is supported by the machine,
601 * but an AP can not be enabled for interruption then
602 * the AP will be discarded. */
604 pr_err("Registering adapter interrupts for "
605 "AP %d failed\n", AP_QID_DEVICE(qid
));
611 * ap_increase_queue_count(): Arm request timeout.
612 * @ap_dev: Pointer to an AP device.
614 * Arm request timeout if an AP device was idle and a new request is submitted.
616 static void ap_increase_queue_count(struct ap_device
*ap_dev
)
618 int timeout
= ap_dev
->drv
->request_timeout
;
620 ap_dev
->queue_count
++;
621 if (ap_dev
->queue_count
== 1) {
622 mod_timer(&ap_dev
->timeout
, jiffies
+ timeout
);
623 ap_dev
->reset
= AP_RESET_ARMED
;
628 * ap_decrease_queue_count(): Decrease queue count.
629 * @ap_dev: Pointer to an AP device.
631 * If AP device is still alive, re-schedule request timeout if there are still
634 static void ap_decrease_queue_count(struct ap_device
*ap_dev
)
636 int timeout
= ap_dev
->drv
->request_timeout
;
638 ap_dev
->queue_count
--;
639 if (ap_dev
->queue_count
> 0)
640 mod_timer(&ap_dev
->timeout
, jiffies
+ timeout
);
643 * The timeout timer should to be disabled now - since
644 * del_timer_sync() is very expensive, we just tell via the
645 * reset flag to ignore the pending timeout timer.
647 ap_dev
->reset
= AP_RESET_IGNORE
;
651 * AP device related attributes.
653 static ssize_t
ap_hwtype_show(struct device
*dev
,
654 struct device_attribute
*attr
, char *buf
)
656 struct ap_device
*ap_dev
= to_ap_dev(dev
);
657 return snprintf(buf
, PAGE_SIZE
, "%d\n", ap_dev
->device_type
);
660 static DEVICE_ATTR(hwtype
, 0444, ap_hwtype_show
, NULL
);
661 static ssize_t
ap_depth_show(struct device
*dev
, struct device_attribute
*attr
,
664 struct ap_device
*ap_dev
= to_ap_dev(dev
);
665 return snprintf(buf
, PAGE_SIZE
, "%d\n", ap_dev
->queue_depth
);
668 static DEVICE_ATTR(depth
, 0444, ap_depth_show
, NULL
);
669 static ssize_t
ap_request_count_show(struct device
*dev
,
670 struct device_attribute
*attr
,
673 struct ap_device
*ap_dev
= to_ap_dev(dev
);
676 spin_lock_bh(&ap_dev
->lock
);
677 rc
= snprintf(buf
, PAGE_SIZE
, "%d\n", ap_dev
->total_request_count
);
678 spin_unlock_bh(&ap_dev
->lock
);
682 static DEVICE_ATTR(request_count
, 0444, ap_request_count_show
, NULL
);
684 static ssize_t
ap_requestq_count_show(struct device
*dev
,
685 struct device_attribute
*attr
, char *buf
)
687 struct ap_device
*ap_dev
= to_ap_dev(dev
);
690 spin_lock_bh(&ap_dev
->lock
);
691 rc
= snprintf(buf
, PAGE_SIZE
, "%d\n", ap_dev
->requestq_count
);
692 spin_unlock_bh(&ap_dev
->lock
);
696 static DEVICE_ATTR(requestq_count
, 0444, ap_requestq_count_show
, NULL
);
698 static ssize_t
ap_pendingq_count_show(struct device
*dev
,
699 struct device_attribute
*attr
, char *buf
)
701 struct ap_device
*ap_dev
= to_ap_dev(dev
);
704 spin_lock_bh(&ap_dev
->lock
);
705 rc
= snprintf(buf
, PAGE_SIZE
, "%d\n", ap_dev
->pendingq_count
);
706 spin_unlock_bh(&ap_dev
->lock
);
710 static DEVICE_ATTR(pendingq_count
, 0444, ap_pendingq_count_show
, NULL
);
712 static ssize_t
ap_modalias_show(struct device
*dev
,
713 struct device_attribute
*attr
, char *buf
)
715 return sprintf(buf
, "ap:t%02X", to_ap_dev(dev
)->device_type
);
718 static DEVICE_ATTR(modalias
, 0444, ap_modalias_show
, NULL
);
720 static ssize_t
ap_functions_show(struct device
*dev
,
721 struct device_attribute
*attr
, char *buf
)
723 struct ap_device
*ap_dev
= to_ap_dev(dev
);
724 return snprintf(buf
, PAGE_SIZE
, "0x%08X\n", ap_dev
->functions
);
727 static DEVICE_ATTR(ap_functions
, 0444, ap_functions_show
, NULL
);
729 static struct attribute
*ap_dev_attrs
[] = {
730 &dev_attr_hwtype
.attr
,
731 &dev_attr_depth
.attr
,
732 &dev_attr_request_count
.attr
,
733 &dev_attr_requestq_count
.attr
,
734 &dev_attr_pendingq_count
.attr
,
735 &dev_attr_modalias
.attr
,
736 &dev_attr_ap_functions
.attr
,
739 static struct attribute_group ap_dev_attr_group
= {
740 .attrs
= ap_dev_attrs
745 * @dev: Pointer to device
746 * @drv: Pointer to device_driver
748 * AP bus driver registration/unregistration.
750 static int ap_bus_match(struct device
*dev
, struct device_driver
*drv
)
752 struct ap_device
*ap_dev
= to_ap_dev(dev
);
753 struct ap_driver
*ap_drv
= to_ap_drv(drv
);
754 struct ap_device_id
*id
;
757 * Compare device type of the device with the list of
758 * supported types of the device_driver.
760 for (id
= ap_drv
->ids
; id
->match_flags
; id
++) {
761 if ((id
->match_flags
& AP_DEVICE_ID_MATCH_DEVICE_TYPE
) &&
762 (id
->dev_type
!= ap_dev
->device_type
))
770 * ap_uevent(): Uevent function for AP devices.
771 * @dev: Pointer to device
772 * @env: Pointer to kobj_uevent_env
774 * It sets up a single environment variable DEV_TYPE which contains the
775 * hardware device type.
777 static int ap_uevent (struct device
*dev
, struct kobj_uevent_env
*env
)
779 struct ap_device
*ap_dev
= to_ap_dev(dev
);
785 /* Set up DEV_TYPE environment variable. */
786 retval
= add_uevent_var(env
, "DEV_TYPE=%04X", ap_dev
->device_type
);
791 retval
= add_uevent_var(env
, "MODALIAS=ap:t%02X", ap_dev
->device_type
);
796 static int ap_bus_suspend(struct device
*dev
, pm_message_t state
)
798 struct ap_device
*ap_dev
= to_ap_dev(dev
);
801 if (!ap_suspend_flag
) {
804 /* Disable scanning for devices, thus we do not want to scan
805 * for them after removing.
807 del_timer_sync(&ap_config_timer
);
808 if (ap_work_queue
!= NULL
) {
809 destroy_workqueue(ap_work_queue
);
810 ap_work_queue
= NULL
;
813 tasklet_disable(&ap_tasklet
);
815 /* Poll on the device until all requests are finished. */
818 spin_lock_bh(&ap_dev
->lock
);
819 __ap_poll_device(ap_dev
, &flags
);
820 spin_unlock_bh(&ap_dev
->lock
);
821 } while ((flags
& 1) || (flags
& 2));
823 spin_lock_bh(&ap_dev
->lock
);
824 ap_dev
->unregistered
= 1;
825 spin_unlock_bh(&ap_dev
->lock
);
830 static int ap_bus_resume(struct device
*dev
)
832 struct ap_device
*ap_dev
= to_ap_dev(dev
);
835 if (ap_suspend_flag
) {
837 if (ap_interrupts_available()) {
838 if (!ap_using_interrupts()) {
839 rc
= register_adapter_interrupt(&ap_airq
);
840 ap_airq_flag
= (rc
== 0);
843 if (ap_using_interrupts()) {
844 unregister_adapter_interrupt(&ap_airq
);
848 ap_query_configuration();
849 if (!user_set_domain
) {
850 ap_domain_index
= -1;
853 init_timer(&ap_config_timer
);
854 ap_config_timer
.function
= ap_config_timeout
;
855 ap_config_timer
.data
= 0;
856 ap_config_timer
.expires
= jiffies
+ ap_config_time
* HZ
;
857 add_timer(&ap_config_timer
);
858 ap_work_queue
= create_singlethread_workqueue("kapwork");
861 tasklet_enable(&ap_tasklet
);
862 if (!ap_using_interrupts())
863 ap_schedule_poll_timer();
865 tasklet_schedule(&ap_tasklet
);
867 rc
= ap_poll_thread_start();
872 if (AP_QID_QUEUE(ap_dev
->qid
) != ap_domain_index
) {
873 spin_lock_bh(&ap_dev
->lock
);
874 ap_dev
->qid
= AP_MKQID(AP_QID_DEVICE(ap_dev
->qid
),
876 spin_unlock_bh(&ap_dev
->lock
);
878 queue_work(ap_work_queue
, &ap_config_work
);
883 static struct bus_type ap_bus_type
= {
885 .match
= &ap_bus_match
,
886 .uevent
= &ap_uevent
,
887 .suspend
= ap_bus_suspend
,
888 .resume
= ap_bus_resume
891 static int ap_device_probe(struct device
*dev
)
893 struct ap_device
*ap_dev
= to_ap_dev(dev
);
894 struct ap_driver
*ap_drv
= to_ap_drv(dev
->driver
);
897 ap_dev
->drv
= ap_drv
;
898 rc
= ap_drv
->probe
? ap_drv
->probe(ap_dev
) : -ENODEV
;
900 spin_lock_bh(&ap_device_list_lock
);
901 list_add(&ap_dev
->list
, &ap_device_list
);
902 spin_unlock_bh(&ap_device_list_lock
);
908 * __ap_flush_queue(): Flush requests.
909 * @ap_dev: Pointer to the AP device
911 * Flush all requests from the request/pending queue of an AP device.
913 static void __ap_flush_queue(struct ap_device
*ap_dev
)
915 struct ap_message
*ap_msg
, *next
;
917 list_for_each_entry_safe(ap_msg
, next
, &ap_dev
->pendingq
, list
) {
918 list_del_init(&ap_msg
->list
);
919 ap_dev
->pendingq_count
--;
920 ap_msg
->receive(ap_dev
, ap_msg
, ERR_PTR(-ENODEV
));
922 list_for_each_entry_safe(ap_msg
, next
, &ap_dev
->requestq
, list
) {
923 list_del_init(&ap_msg
->list
);
924 ap_dev
->requestq_count
--;
925 ap_msg
->receive(ap_dev
, ap_msg
, ERR_PTR(-ENODEV
));
929 void ap_flush_queue(struct ap_device
*ap_dev
)
931 spin_lock_bh(&ap_dev
->lock
);
932 __ap_flush_queue(ap_dev
);
933 spin_unlock_bh(&ap_dev
->lock
);
935 EXPORT_SYMBOL(ap_flush_queue
);
937 static int ap_device_remove(struct device
*dev
)
939 struct ap_device
*ap_dev
= to_ap_dev(dev
);
940 struct ap_driver
*ap_drv
= ap_dev
->drv
;
942 ap_flush_queue(ap_dev
);
943 del_timer_sync(&ap_dev
->timeout
);
944 spin_lock_bh(&ap_device_list_lock
);
945 list_del_init(&ap_dev
->list
);
946 spin_unlock_bh(&ap_device_list_lock
);
948 ap_drv
->remove(ap_dev
);
949 spin_lock_bh(&ap_dev
->lock
);
950 atomic_sub(ap_dev
->queue_count
, &ap_poll_requests
);
951 spin_unlock_bh(&ap_dev
->lock
);
955 int ap_driver_register(struct ap_driver
*ap_drv
, struct module
*owner
,
958 struct device_driver
*drv
= &ap_drv
->driver
;
960 drv
->bus
= &ap_bus_type
;
961 drv
->probe
= ap_device_probe
;
962 drv
->remove
= ap_device_remove
;
965 return driver_register(drv
);
967 EXPORT_SYMBOL(ap_driver_register
);
969 void ap_driver_unregister(struct ap_driver
*ap_drv
)
971 driver_unregister(&ap_drv
->driver
);
973 EXPORT_SYMBOL(ap_driver_unregister
);
975 void ap_bus_force_rescan(void)
977 /* reconfigure the AP bus rescan timer. */
978 mod_timer(&ap_config_timer
, jiffies
+ ap_config_time
* HZ
);
979 /* processing a asynchronous bus rescan */
980 queue_work(ap_work_queue
, &ap_config_work
);
981 flush_work(&ap_config_work
);
983 EXPORT_SYMBOL(ap_bus_force_rescan
);
988 static ssize_t
ap_domain_show(struct bus_type
*bus
, char *buf
)
990 return snprintf(buf
, PAGE_SIZE
, "%d\n", ap_domain_index
);
993 static BUS_ATTR(ap_domain
, 0444, ap_domain_show
, NULL
);
995 static ssize_t
ap_config_time_show(struct bus_type
*bus
, char *buf
)
997 return snprintf(buf
, PAGE_SIZE
, "%d\n", ap_config_time
);
1000 static ssize_t
ap_interrupts_show(struct bus_type
*bus
, char *buf
)
1002 return snprintf(buf
, PAGE_SIZE
, "%d\n",
1003 ap_using_interrupts() ? 1 : 0);
1006 static BUS_ATTR(ap_interrupts
, 0444, ap_interrupts_show
, NULL
);
1008 static ssize_t
ap_config_time_store(struct bus_type
*bus
,
1009 const char *buf
, size_t count
)
1013 if (sscanf(buf
, "%d\n", &time
) != 1 || time
< 5 || time
> 120)
1015 ap_config_time
= time
;
1016 if (!timer_pending(&ap_config_timer
) ||
1017 !mod_timer(&ap_config_timer
, jiffies
+ ap_config_time
* HZ
)) {
1018 ap_config_timer
.expires
= jiffies
+ ap_config_time
* HZ
;
1019 add_timer(&ap_config_timer
);
1024 static BUS_ATTR(config_time
, 0644, ap_config_time_show
, ap_config_time_store
);
1026 static ssize_t
ap_poll_thread_show(struct bus_type
*bus
, char *buf
)
1028 return snprintf(buf
, PAGE_SIZE
, "%d\n", ap_poll_kthread
? 1 : 0);
1031 static ssize_t
ap_poll_thread_store(struct bus_type
*bus
,
1032 const char *buf
, size_t count
)
1036 if (sscanf(buf
, "%d\n", &flag
) != 1)
1039 rc
= ap_poll_thread_start();
1044 ap_poll_thread_stop();
1048 static BUS_ATTR(poll_thread
, 0644, ap_poll_thread_show
, ap_poll_thread_store
);
1050 static ssize_t
poll_timeout_show(struct bus_type
*bus
, char *buf
)
1052 return snprintf(buf
, PAGE_SIZE
, "%llu\n", poll_timeout
);
1055 static ssize_t
poll_timeout_store(struct bus_type
*bus
, const char *buf
,
1058 unsigned long long time
;
1061 /* 120 seconds = maximum poll interval */
1062 if (sscanf(buf
, "%llu\n", &time
) != 1 || time
< 1 ||
1063 time
> 120000000000ULL)
1065 poll_timeout
= time
;
1066 hr_time
= ktime_set(0, poll_timeout
);
1068 if (!hrtimer_is_queued(&ap_poll_timer
) ||
1069 !hrtimer_forward(&ap_poll_timer
, hrtimer_get_expires(&ap_poll_timer
), hr_time
)) {
1070 hrtimer_set_expires(&ap_poll_timer
, hr_time
);
1071 hrtimer_start_expires(&ap_poll_timer
, HRTIMER_MODE_ABS
);
1076 static BUS_ATTR(poll_timeout
, 0644, poll_timeout_show
, poll_timeout_store
);
1078 static struct bus_attribute
*const ap_bus_attrs
[] = {
1079 &bus_attr_ap_domain
,
1080 &bus_attr_config_time
,
1081 &bus_attr_poll_thread
,
1082 &bus_attr_ap_interrupts
,
1083 &bus_attr_poll_timeout
,
1087 static inline int ap_test_config(unsigned int *field
, unsigned int nr
)
1091 return ap_test_bit((field
+ (nr
>> 5)), (nr
& 0x1f));
1095 * ap_test_config_card_id(): Test, whether an AP card ID is configured.
1098 * Returns 0 if the card is not configured
1099 * 1 if the card is configured or
1100 * if the configuration information is not available
1102 static inline int ap_test_config_card_id(unsigned int id
)
1104 if (!ap_configuration
)
1106 return ap_test_config(ap_configuration
->apm
, id
);
1110 * ap_test_config_domain(): Test, whether an AP usage domain is configured.
1111 * @domain AP usage domain ID
1113 * Returns 0 if the usage domain is not configured
1114 * 1 if the usage domain is configured or
1115 * if the configuration information is not available
1117 static inline int ap_test_config_domain(unsigned int domain
)
1119 if (!ap_configuration
)
1121 return ap_test_config(ap_configuration
->aqm
, domain
);
1125 * ap_query_configuration(): Query AP configuration information.
1127 * Query information of installed cards and configured domains from AP.
1129 static void ap_query_configuration(void)
1132 if (ap_configuration_available()) {
1133 if (!ap_configuration
)
1135 kzalloc(sizeof(struct ap_config_info
),
1137 if (ap_configuration
)
1138 __ap_query_configuration(ap_configuration
);
1140 ap_configuration
= NULL
;
1142 ap_configuration
= NULL
;
1147 * ap_select_domain(): Select an AP domain.
1149 * Pick one of the 16 AP domains.
1151 static int ap_select_domain(void)
1153 int queue_depth
, device_type
, count
, max_count
, best_domain
;
1158 * We want to use a single domain. Either the one specified with
1159 * the "domain=" parameter or the domain with the maximum number
1162 if (ap_domain_index
>= 0 && ap_domain_index
< AP_DOMAINS
)
1163 /* Domain has already been selected. */
1167 for (i
= 0; i
< AP_DOMAINS
; i
++) {
1168 if (!ap_test_config_domain(i
))
1171 for (j
= 0; j
< AP_DEVICES
; j
++) {
1172 if (!ap_test_config_card_id(j
))
1174 qid
= AP_MKQID(j
, i
);
1175 rc
= ap_query_queue(qid
, &queue_depth
, &device_type
);
1180 if (count
> max_count
) {
1185 if (best_domain
>= 0){
1186 ap_domain_index
= best_domain
;
1193 * ap_probe_device_type(): Find the device type of an AP.
1194 * @ap_dev: pointer to the AP device.
1196 * Find the device type if query queue returned a device type of 0.
1198 static int ap_probe_device_type(struct ap_device
*ap_dev
)
1200 static unsigned char msg
[] = {
1201 0x00,0x06,0x00,0x00,0x00,0x00,0x00,0x00,
1202 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
1203 0x00,0x00,0x00,0x58,0x00,0x00,0x00,0x00,
1204 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
1205 0x01,0x00,0x43,0x43,0x41,0x2d,0x41,0x50,
1206 0x50,0x4c,0x20,0x20,0x20,0x01,0x01,0x01,
1207 0x00,0x00,0x00,0x00,0x50,0x4b,0x00,0x00,
1208 0x00,0x00,0x01,0x1c,0x00,0x00,0x00,0x00,
1209 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
1210 0x00,0x00,0x05,0xb8,0x00,0x00,0x00,0x00,
1211 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
1212 0x70,0x00,0x41,0x00,0x00,0x00,0x00,0x00,
1213 0x00,0x00,0x54,0x32,0x01,0x00,0xa0,0x00,
1214 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
1215 0x00,0x00,0x00,0x00,0xb8,0x05,0x00,0x00,
1216 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
1217 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
1218 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
1219 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
1220 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
1221 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
1222 0x00,0x00,0x0a,0x00,0x00,0x00,0x00,0x00,
1223 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
1224 0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,
1225 0x49,0x43,0x53,0x46,0x20,0x20,0x20,0x20,
1226 0x50,0x4b,0x0a,0x00,0x50,0x4b,0x43,0x53,
1227 0x2d,0x31,0x2e,0x32,0x37,0x00,0x11,0x22,
1228 0x33,0x44,0x55,0x66,0x77,0x88,0x99,0x00,
1229 0x11,0x22,0x33,0x44,0x55,0x66,0x77,0x88,
1230 0x99,0x00,0x11,0x22,0x33,0x44,0x55,0x66,
1231 0x77,0x88,0x99,0x00,0x11,0x22,0x33,0x44,
1232 0x55,0x66,0x77,0x88,0x99,0x00,0x11,0x22,
1233 0x33,0x44,0x55,0x66,0x77,0x88,0x99,0x00,
1234 0x11,0x22,0x33,0x5d,0x00,0x5b,0x00,0x77,
1235 0x88,0x1e,0x00,0x00,0x57,0x00,0x00,0x00,
1236 0x00,0x04,0x00,0x00,0x4f,0x00,0x00,0x00,
1237 0x03,0x02,0x00,0x00,0x40,0x01,0x00,0x01,
1238 0xce,0x02,0x68,0x2d,0x5f,0xa9,0xde,0x0c,
1239 0xf6,0xd2,0x7b,0x58,0x4b,0xf9,0x28,0x68,
1240 0x3d,0xb4,0xf4,0xef,0x78,0xd5,0xbe,0x66,
1241 0x63,0x42,0xef,0xf8,0xfd,0xa4,0xf8,0xb0,
1242 0x8e,0x29,0xc2,0xc9,0x2e,0xd8,0x45,0xb8,
1243 0x53,0x8c,0x6f,0x4e,0x72,0x8f,0x6c,0x04,
1244 0x9c,0x88,0xfc,0x1e,0xc5,0x83,0x55,0x57,
1245 0xf7,0xdd,0xfd,0x4f,0x11,0x36,0x95,0x5d,
1247 struct ap_queue_status status
;
1248 unsigned long long psmid
;
1252 reply
= (void *) get_zeroed_page(GFP_KERNEL
);
1258 status
= __ap_send(ap_dev
->qid
, 0x0102030405060708ULL
,
1259 msg
, sizeof(msg
), 0);
1260 if (status
.response_code
!= AP_RESPONSE_NORMAL
) {
1265 /* Wait for the test message to complete. */
1266 for (i
= 0; i
< 6; i
++) {
1268 status
= __ap_recv(ap_dev
->qid
, &psmid
, reply
, 4096);
1269 if (status
.response_code
== AP_RESPONSE_NORMAL
&&
1270 psmid
== 0x0102030405060708ULL
)
1274 /* Got an answer. */
1275 if (reply
[0] == 0x00 && reply
[1] == 0x86)
1276 ap_dev
->device_type
= AP_DEVICE_TYPE_PCICC
;
1278 ap_dev
->device_type
= AP_DEVICE_TYPE_PCICA
;
1284 free_page((unsigned long) reply
);
1289 static void ap_interrupt_handler(struct airq_struct
*airq
)
1291 inc_irq_stat(IRQIO_APB
);
1292 tasklet_schedule(&ap_tasklet
);
1296 * __ap_scan_bus(): Scan the AP bus.
1297 * @dev: Pointer to device
1298 * @data: Pointer to data
1300 * Scan the AP bus for new devices.
1302 static int __ap_scan_bus(struct device
*dev
, void *data
)
1304 return to_ap_dev(dev
)->qid
== (ap_qid_t
)(unsigned long) data
;
1307 static void ap_device_release(struct device
*dev
)
1309 struct ap_device
*ap_dev
= to_ap_dev(dev
);
1314 static void ap_scan_bus(struct work_struct
*unused
)
1316 struct ap_device
*ap_dev
;
1319 int queue_depth
, device_type
;
1320 unsigned int device_functions
;
1323 ap_query_configuration();
1324 if (ap_select_domain() != 0) {
1327 for (i
= 0; i
< AP_DEVICES
; i
++) {
1328 qid
= AP_MKQID(i
, ap_domain_index
);
1329 dev
= bus_find_device(&ap_bus_type
, NULL
,
1330 (void *)(unsigned long)qid
,
1332 if (ap_test_config_card_id(i
))
1333 rc
= ap_query_queue(qid
, &queue_depth
, &device_type
);
1338 set_current_state(TASK_UNINTERRUPTIBLE
);
1339 schedule_timeout(AP_RESET_TIMEOUT
);
1340 rc
= ap_query_queue(qid
, &queue_depth
,
1343 ap_dev
= to_ap_dev(dev
);
1344 spin_lock_bh(&ap_dev
->lock
);
1345 if (rc
|| ap_dev
->unregistered
) {
1346 spin_unlock_bh(&ap_dev
->lock
);
1347 if (ap_dev
->unregistered
)
1349 device_unregister(dev
);
1353 spin_unlock_bh(&ap_dev
->lock
);
1359 rc
= ap_init_queue(qid
);
1362 ap_dev
= kzalloc(sizeof(*ap_dev
), GFP_KERNEL
);
1366 ap_dev
->queue_depth
= queue_depth
;
1367 ap_dev
->unregistered
= 1;
1368 spin_lock_init(&ap_dev
->lock
);
1369 INIT_LIST_HEAD(&ap_dev
->pendingq
);
1370 INIT_LIST_HEAD(&ap_dev
->requestq
);
1371 INIT_LIST_HEAD(&ap_dev
->list
);
1372 setup_timer(&ap_dev
->timeout
, ap_request_timeout
,
1373 (unsigned long) ap_dev
);
1374 switch (device_type
) {
1376 /* device type probing for old cards */
1377 if (ap_probe_device_type(ap_dev
)) {
1383 ap_dev
->device_type
= device_type
;
1386 rc
= ap_query_functions(qid
, &device_functions
);
1388 ap_dev
->functions
= device_functions
;
1390 ap_dev
->functions
= 0u;
1392 ap_dev
->device
.bus
= &ap_bus_type
;
1393 ap_dev
->device
.parent
= ap_root_device
;
1394 if (dev_set_name(&ap_dev
->device
, "card%02x",
1395 AP_QID_DEVICE(ap_dev
->qid
))) {
1399 ap_dev
->device
.release
= ap_device_release
;
1400 rc
= device_register(&ap_dev
->device
);
1402 put_device(&ap_dev
->device
);
1405 /* Add device attributes. */
1406 rc
= sysfs_create_group(&ap_dev
->device
.kobj
,
1407 &ap_dev_attr_group
);
1409 spin_lock_bh(&ap_dev
->lock
);
1410 ap_dev
->unregistered
= 0;
1411 spin_unlock_bh(&ap_dev
->lock
);
1414 device_unregister(&ap_dev
->device
);
1419 ap_config_timeout(unsigned long ptr
)
1421 queue_work(ap_work_queue
, &ap_config_work
);
1422 ap_config_timer
.expires
= jiffies
+ ap_config_time
* HZ
;
1423 add_timer(&ap_config_timer
);
1427 * __ap_schedule_poll_timer(): Schedule poll timer.
1429 * Set up the timer to run the poll tasklet
1431 static inline void __ap_schedule_poll_timer(void)
1435 spin_lock_bh(&ap_poll_timer_lock
);
1436 if (hrtimer_is_queued(&ap_poll_timer
) || ap_suspend_flag
)
1438 if (ktime_to_ns(hrtimer_expires_remaining(&ap_poll_timer
)) <= 0) {
1439 hr_time
= ktime_set(0, poll_timeout
);
1440 hrtimer_forward_now(&ap_poll_timer
, hr_time
);
1441 hrtimer_restart(&ap_poll_timer
);
1444 spin_unlock_bh(&ap_poll_timer_lock
);
1448 * ap_schedule_poll_timer(): Schedule poll timer.
1450 * Set up the timer to run the poll tasklet
1452 static inline void ap_schedule_poll_timer(void)
1454 if (ap_using_interrupts())
1456 __ap_schedule_poll_timer();
1460 * ap_poll_read(): Receive pending reply messages from an AP device.
1461 * @ap_dev: pointer to the AP device
1462 * @flags: pointer to control flags, bit 2^0 is set if another poll is
1463 * required, bit 2^1 is set if the poll timer needs to get armed
1465 * Returns 0 if the device is still present, -ENODEV if not.
1467 static int ap_poll_read(struct ap_device
*ap_dev
, unsigned long *flags
)
1469 struct ap_queue_status status
;
1470 struct ap_message
*ap_msg
;
1472 if (ap_dev
->queue_count
<= 0)
1474 status
= __ap_recv(ap_dev
->qid
, &ap_dev
->reply
->psmid
,
1475 ap_dev
->reply
->message
, ap_dev
->reply
->length
);
1476 switch (status
.response_code
) {
1477 case AP_RESPONSE_NORMAL
:
1478 atomic_dec(&ap_poll_requests
);
1479 ap_decrease_queue_count(ap_dev
);
1480 list_for_each_entry(ap_msg
, &ap_dev
->pendingq
, list
) {
1481 if (ap_msg
->psmid
!= ap_dev
->reply
->psmid
)
1483 list_del_init(&ap_msg
->list
);
1484 ap_dev
->pendingq_count
--;
1485 ap_msg
->receive(ap_dev
, ap_msg
, ap_dev
->reply
);
1488 if (ap_dev
->queue_count
> 0)
1491 case AP_RESPONSE_NO_PENDING_REPLY
:
1492 if (status
.queue_empty
) {
1493 /* The card shouldn't forget requests but who knows. */
1494 atomic_sub(ap_dev
->queue_count
, &ap_poll_requests
);
1495 ap_dev
->queue_count
= 0;
1496 list_splice_init(&ap_dev
->pendingq
, &ap_dev
->requestq
);
1497 ap_dev
->requestq_count
+= ap_dev
->pendingq_count
;
1498 ap_dev
->pendingq_count
= 0;
1509 * ap_poll_write(): Send messages from the request queue to an AP device.
1510 * @ap_dev: pointer to the AP device
1511 * @flags: pointer to control flags, bit 2^0 is set if another poll is
1512 * required, bit 2^1 is set if the poll timer needs to get armed
1514 * Returns 0 if the device is still present, -ENODEV if not.
1516 static int ap_poll_write(struct ap_device
*ap_dev
, unsigned long *flags
)
1518 struct ap_queue_status status
;
1519 struct ap_message
*ap_msg
;
1521 if (ap_dev
->requestq_count
<= 0 ||
1522 ap_dev
->queue_count
>= ap_dev
->queue_depth
)
1524 /* Start the next request on the queue. */
1525 ap_msg
= list_entry(ap_dev
->requestq
.next
, struct ap_message
, list
);
1526 status
= __ap_send(ap_dev
->qid
, ap_msg
->psmid
,
1527 ap_msg
->message
, ap_msg
->length
, ap_msg
->special
);
1528 switch (status
.response_code
) {
1529 case AP_RESPONSE_NORMAL
:
1530 atomic_inc(&ap_poll_requests
);
1531 ap_increase_queue_count(ap_dev
);
1532 list_move_tail(&ap_msg
->list
, &ap_dev
->pendingq
);
1533 ap_dev
->requestq_count
--;
1534 ap_dev
->pendingq_count
++;
1535 if (ap_dev
->queue_count
< ap_dev
->queue_depth
&&
1536 ap_dev
->requestq_count
> 0)
1540 case AP_RESPONSE_RESET_IN_PROGRESS
:
1541 __ap_schedule_poll_timer();
1542 case AP_RESPONSE_Q_FULL
:
1545 case AP_RESPONSE_MESSAGE_TOO_BIG
:
1546 case AP_RESPONSE_REQ_FAC_NOT_INST
:
1555 * ap_poll_queue(): Poll AP device for pending replies and send new messages.
1556 * @ap_dev: pointer to the bus device
1557 * @flags: pointer to control flags, bit 2^0 is set if another poll is
1558 * required, bit 2^1 is set if the poll timer needs to get armed
1560 * Poll AP device for pending replies and send new messages. If either
1561 * ap_poll_read or ap_poll_write returns -ENODEV unregister the device.
1564 static inline int ap_poll_queue(struct ap_device
*ap_dev
, unsigned long *flags
)
1568 rc
= ap_poll_read(ap_dev
, flags
);
1571 return ap_poll_write(ap_dev
, flags
);
1575 * __ap_queue_message(): Queue a message to a device.
1576 * @ap_dev: pointer to the AP device
1577 * @ap_msg: the message to be queued
1579 * Queue a message to a device. Returns 0 if successful.
1581 static int __ap_queue_message(struct ap_device
*ap_dev
, struct ap_message
*ap_msg
)
1583 struct ap_queue_status status
;
1585 if (list_empty(&ap_dev
->requestq
) &&
1586 ap_dev
->queue_count
< ap_dev
->queue_depth
) {
1587 status
= __ap_send(ap_dev
->qid
, ap_msg
->psmid
,
1588 ap_msg
->message
, ap_msg
->length
,
1590 switch (status
.response_code
) {
1591 case AP_RESPONSE_NORMAL
:
1592 list_add_tail(&ap_msg
->list
, &ap_dev
->pendingq
);
1593 atomic_inc(&ap_poll_requests
);
1594 ap_dev
->pendingq_count
++;
1595 ap_increase_queue_count(ap_dev
);
1596 ap_dev
->total_request_count
++;
1598 case AP_RESPONSE_Q_FULL
:
1599 case AP_RESPONSE_RESET_IN_PROGRESS
:
1600 list_add_tail(&ap_msg
->list
, &ap_dev
->requestq
);
1601 ap_dev
->requestq_count
++;
1602 ap_dev
->total_request_count
++;
1604 case AP_RESPONSE_REQ_FAC_NOT_INST
:
1605 case AP_RESPONSE_MESSAGE_TOO_BIG
:
1606 ap_msg
->receive(ap_dev
, ap_msg
, ERR_PTR(-EINVAL
));
1608 default: /* Device is gone. */
1609 ap_msg
->receive(ap_dev
, ap_msg
, ERR_PTR(-ENODEV
));
1613 list_add_tail(&ap_msg
->list
, &ap_dev
->requestq
);
1614 ap_dev
->requestq_count
++;
1615 ap_dev
->total_request_count
++;
1618 ap_schedule_poll_timer();
1622 void ap_queue_message(struct ap_device
*ap_dev
, struct ap_message
*ap_msg
)
1624 unsigned long flags
;
1627 /* For asynchronous message handling a valid receive-callback
1629 BUG_ON(!ap_msg
->receive
);
1631 spin_lock_bh(&ap_dev
->lock
);
1632 if (!ap_dev
->unregistered
) {
1633 /* Make room on the queue by polling for finished requests. */
1634 rc
= ap_poll_queue(ap_dev
, &flags
);
1636 rc
= __ap_queue_message(ap_dev
, ap_msg
);
1638 wake_up(&ap_poll_wait
);
1640 ap_dev
->unregistered
= 1;
1642 ap_msg
->receive(ap_dev
, ap_msg
, ERR_PTR(-ENODEV
));
1645 spin_unlock_bh(&ap_dev
->lock
);
1647 device_unregister(&ap_dev
->device
);
1649 EXPORT_SYMBOL(ap_queue_message
);
1652 * ap_cancel_message(): Cancel a crypto request.
1653 * @ap_dev: The AP device that has the message queued
1654 * @ap_msg: The message that is to be removed
1656 * Cancel a crypto request. This is done by removing the request
1657 * from the device pending or request queue. Note that the
1658 * request stays on the AP queue. When it finishes the message
1659 * reply will be discarded because the psmid can't be found.
1661 void ap_cancel_message(struct ap_device
*ap_dev
, struct ap_message
*ap_msg
)
1663 struct ap_message
*tmp
;
1665 spin_lock_bh(&ap_dev
->lock
);
1666 if (!list_empty(&ap_msg
->list
)) {
1667 list_for_each_entry(tmp
, &ap_dev
->pendingq
, list
)
1668 if (tmp
->psmid
== ap_msg
->psmid
) {
1669 ap_dev
->pendingq_count
--;
1672 ap_dev
->requestq_count
--;
1674 list_del_init(&ap_msg
->list
);
1676 spin_unlock_bh(&ap_dev
->lock
);
1678 EXPORT_SYMBOL(ap_cancel_message
);
1681 * ap_poll_timeout(): AP receive polling for finished AP requests.
1682 * @unused: Unused pointer.
1684 * Schedules the AP tasklet using a high resolution timer.
1686 static enum hrtimer_restart
ap_poll_timeout(struct hrtimer
*unused
)
1688 tasklet_schedule(&ap_tasklet
);
1689 return HRTIMER_NORESTART
;
1693 * ap_reset(): Reset a not responding AP device.
1694 * @ap_dev: Pointer to the AP device
1696 * Reset a not responding AP device and move all requests from the
1697 * pending queue to the request queue.
1699 static void ap_reset(struct ap_device
*ap_dev
)
1703 ap_dev
->reset
= AP_RESET_IGNORE
;
1704 atomic_sub(ap_dev
->queue_count
, &ap_poll_requests
);
1705 ap_dev
->queue_count
= 0;
1706 list_splice_init(&ap_dev
->pendingq
, &ap_dev
->requestq
);
1707 ap_dev
->requestq_count
+= ap_dev
->pendingq_count
;
1708 ap_dev
->pendingq_count
= 0;
1709 rc
= ap_init_queue(ap_dev
->qid
);
1711 ap_dev
->unregistered
= 1;
1713 __ap_schedule_poll_timer();
1716 static int __ap_poll_device(struct ap_device
*ap_dev
, unsigned long *flags
)
1718 if (!ap_dev
->unregistered
) {
1719 if (ap_poll_queue(ap_dev
, flags
))
1720 ap_dev
->unregistered
= 1;
1721 if (ap_dev
->reset
== AP_RESET_DO
)
1728 * ap_poll_all(): Poll all AP devices.
1729 * @dummy: Unused variable
1731 * Poll all AP devices on the bus in a round robin fashion. Continue
1732 * polling until bit 2^0 of the control flags is not set. If bit 2^1
1733 * of the control flags has been set arm the poll timer.
1735 static void ap_poll_all(unsigned long dummy
)
1737 unsigned long flags
;
1738 struct ap_device
*ap_dev
;
1740 /* Reset the indicator if interrupts are used. Thus new interrupts can
1741 * be received. Doing it in the beginning of the tasklet is therefor
1742 * important that no requests on any AP get lost.
1744 if (ap_using_interrupts())
1745 xchg(ap_airq
.lsi_ptr
, 0);
1748 spin_lock(&ap_device_list_lock
);
1749 list_for_each_entry(ap_dev
, &ap_device_list
, list
) {
1750 spin_lock(&ap_dev
->lock
);
1751 __ap_poll_device(ap_dev
, &flags
);
1752 spin_unlock(&ap_dev
->lock
);
1754 spin_unlock(&ap_device_list_lock
);
1755 } while (flags
& 1);
1757 ap_schedule_poll_timer();
1761 * ap_poll_thread(): Thread that polls for finished requests.
1762 * @data: Unused pointer
1764 * AP bus poll thread. The purpose of this thread is to poll for
1765 * finished requests in a loop if there is a "free" cpu - that is
1766 * a cpu that doesn't have anything better to do. The polling stops
1767 * as soon as there is another task or if all messages have been
1770 static int ap_poll_thread(void *data
)
1772 DECLARE_WAITQUEUE(wait
, current
);
1773 unsigned long flags
;
1775 struct ap_device
*ap_dev
;
1777 set_user_nice(current
, 19);
1779 if (ap_suspend_flag
)
1781 if (need_resched()) {
1785 add_wait_queue(&ap_poll_wait
, &wait
);
1786 set_current_state(TASK_INTERRUPTIBLE
);
1787 if (kthread_should_stop())
1789 requests
= atomic_read(&ap_poll_requests
);
1792 set_current_state(TASK_RUNNING
);
1793 remove_wait_queue(&ap_poll_wait
, &wait
);
1796 spin_lock_bh(&ap_device_list_lock
);
1797 list_for_each_entry(ap_dev
, &ap_device_list
, list
) {
1798 spin_lock(&ap_dev
->lock
);
1799 __ap_poll_device(ap_dev
, &flags
);
1800 spin_unlock(&ap_dev
->lock
);
1802 spin_unlock_bh(&ap_device_list_lock
);
1804 set_current_state(TASK_RUNNING
);
1805 remove_wait_queue(&ap_poll_wait
, &wait
);
1809 static int ap_poll_thread_start(void)
1813 if (ap_using_interrupts() || ap_suspend_flag
)
1815 mutex_lock(&ap_poll_thread_mutex
);
1816 if (!ap_poll_kthread
) {
1817 ap_poll_kthread
= kthread_run(ap_poll_thread
, NULL
, "appoll");
1818 rc
= PTR_RET(ap_poll_kthread
);
1820 ap_poll_kthread
= NULL
;
1824 mutex_unlock(&ap_poll_thread_mutex
);
1828 static void ap_poll_thread_stop(void)
1830 mutex_lock(&ap_poll_thread_mutex
);
1831 if (ap_poll_kthread
) {
1832 kthread_stop(ap_poll_kthread
);
1833 ap_poll_kthread
= NULL
;
1835 mutex_unlock(&ap_poll_thread_mutex
);
1839 * ap_request_timeout(): Handling of request timeouts
1840 * @data: Holds the AP device.
1842 * Handles request timeouts.
1844 static void ap_request_timeout(unsigned long data
)
1846 struct ap_device
*ap_dev
= (struct ap_device
*) data
;
1848 if (ap_dev
->reset
== AP_RESET_ARMED
) {
1849 ap_dev
->reset
= AP_RESET_DO
;
1851 if (ap_using_interrupts())
1852 tasklet_schedule(&ap_tasklet
);
1856 static void ap_reset_domain(void)
1860 if (ap_domain_index
!= -1)
1861 for (i
= 0; i
< AP_DEVICES
; i
++)
1862 ap_reset_queue(AP_MKQID(i
, ap_domain_index
));
1865 static void ap_reset_all(void)
1869 for (i
= 0; i
< AP_DOMAINS
; i
++)
1870 for (j
= 0; j
< AP_DEVICES
; j
++)
1871 ap_reset_queue(AP_MKQID(j
, i
));
1874 static struct reset_call ap_reset_call
= {
1879 * ap_module_init(): The module initialization code.
1881 * Initializes the module.
1883 int __init
ap_module_init(void)
1887 if (ap_domain_index
< -1 || ap_domain_index
>= AP_DOMAINS
) {
1888 pr_warning("%d is not a valid cryptographic domain\n",
1892 /* In resume callback we need to know if the user had set the domain.
1893 * If so, we can not just reset it.
1895 if (ap_domain_index
>= 0)
1896 user_set_domain
= 1;
1898 if (ap_instructions_available() != 0) {
1899 pr_warning("The hardware system does not support "
1900 "AP instructions\n");
1903 if (ap_interrupts_available()) {
1904 rc
= register_adapter_interrupt(&ap_airq
);
1905 ap_airq_flag
= (rc
== 0);
1908 register_reset_call(&ap_reset_call
);
1910 /* Create /sys/bus/ap. */
1911 rc
= bus_register(&ap_bus_type
);
1914 for (i
= 0; ap_bus_attrs
[i
]; i
++) {
1915 rc
= bus_create_file(&ap_bus_type
, ap_bus_attrs
[i
]);
1920 /* Create /sys/devices/ap. */
1921 ap_root_device
= root_device_register("ap");
1922 rc
= PTR_RET(ap_root_device
);
1926 ap_work_queue
= create_singlethread_workqueue("kapwork");
1927 if (!ap_work_queue
) {
1932 ap_query_configuration();
1933 if (ap_select_domain() == 0)
1936 /* Setup the AP bus rescan timer. */
1937 init_timer(&ap_config_timer
);
1938 ap_config_timer
.function
= ap_config_timeout
;
1939 ap_config_timer
.data
= 0;
1940 ap_config_timer
.expires
= jiffies
+ ap_config_time
* HZ
;
1941 add_timer(&ap_config_timer
);
1943 /* Setup the high resultion poll timer.
1944 * If we are running under z/VM adjust polling to z/VM polling rate.
1947 poll_timeout
= 1500000;
1948 spin_lock_init(&ap_poll_timer_lock
);
1949 hrtimer_init(&ap_poll_timer
, CLOCK_MONOTONIC
, HRTIMER_MODE_ABS
);
1950 ap_poll_timer
.function
= ap_poll_timeout
;
1952 /* Start the low priority AP bus poll thread. */
1953 if (ap_thread_flag
) {
1954 rc
= ap_poll_thread_start();
1962 del_timer_sync(&ap_config_timer
);
1963 hrtimer_cancel(&ap_poll_timer
);
1964 destroy_workqueue(ap_work_queue
);
1966 root_device_unregister(ap_root_device
);
1969 bus_remove_file(&ap_bus_type
, ap_bus_attrs
[i
]);
1970 bus_unregister(&ap_bus_type
);
1972 unregister_reset_call(&ap_reset_call
);
1973 if (ap_using_interrupts())
1974 unregister_adapter_interrupt(&ap_airq
);
1978 static int __ap_match_all(struct device
*dev
, void *data
)
1984 * ap_modules_exit(): The module termination code
1986 * Terminates the module.
1988 void ap_module_exit(void)
1994 ap_poll_thread_stop();
1995 del_timer_sync(&ap_config_timer
);
1996 hrtimer_cancel(&ap_poll_timer
);
1997 destroy_workqueue(ap_work_queue
);
1998 tasklet_kill(&ap_tasklet
);
1999 root_device_unregister(ap_root_device
);
2000 while ((dev
= bus_find_device(&ap_bus_type
, NULL
, NULL
,
2003 device_unregister(dev
);
2006 for (i
= 0; ap_bus_attrs
[i
]; i
++)
2007 bus_remove_file(&ap_bus_type
, ap_bus_attrs
[i
]);
2008 bus_unregister(&ap_bus_type
);
2009 unregister_reset_call(&ap_reset_call
);
2010 if (ap_using_interrupts())
2011 unregister_adapter_interrupt(&ap_airq
);
2014 module_init(ap_module_init
);
2015 module_exit(ap_module_exit
);