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>
47 #include <linux/crypto.h>
51 /* Some prototypes. */
52 static void ap_scan_bus(struct work_struct
*);
53 static void ap_poll_all(unsigned long);
54 static enum hrtimer_restart
ap_poll_timeout(struct hrtimer
*);
55 static int ap_poll_thread_start(void);
56 static void ap_poll_thread_stop(void);
57 static void ap_request_timeout(unsigned long);
58 static inline void ap_schedule_poll_timer(void);
59 static int __ap_poll_device(struct ap_device
*ap_dev
, unsigned long *flags
);
60 static int ap_device_remove(struct device
*dev
);
61 static int ap_device_probe(struct device
*dev
);
62 static void ap_interrupt_handler(struct airq_struct
*airq
);
63 static void ap_reset(struct ap_device
*ap_dev
, unsigned long *flags
);
64 static void ap_config_timeout(unsigned long ptr
);
65 static int ap_select_domain(void);
66 static void ap_query_configuration(void);
71 MODULE_AUTHOR("IBM Corporation");
72 MODULE_DESCRIPTION("Adjunct Processor Bus driver, " \
73 "Copyright IBM Corp. 2006, 2012");
74 MODULE_LICENSE("GPL");
75 MODULE_ALIAS_CRYPTO("z90crypt");
80 int ap_domain_index
= -1; /* Adjunct Processor Domain Index */
81 module_param_named(domain
, ap_domain_index
, int, S_IRUSR
|S_IRGRP
);
82 MODULE_PARM_DESC(domain
, "domain index for ap devices");
83 EXPORT_SYMBOL(ap_domain_index
);
85 static int ap_thread_flag
= 0;
86 module_param_named(poll_thread
, ap_thread_flag
, int, S_IRUSR
|S_IRGRP
);
87 MODULE_PARM_DESC(poll_thread
, "Turn on/off poll thread, default is 0 (off).");
89 static struct device
*ap_root_device
= NULL
;
90 static struct ap_config_info
*ap_configuration
;
91 static DEFINE_SPINLOCK(ap_device_list_lock
);
92 static LIST_HEAD(ap_device_list
);
95 * Workqueue & timer for bus rescan.
97 static struct workqueue_struct
*ap_work_queue
;
98 static struct timer_list ap_config_timer
;
99 static int ap_config_time
= AP_CONFIG_TIME
;
100 static DECLARE_WORK(ap_config_work
, ap_scan_bus
);
103 * Tasklet & timer for AP request polling and interrupts
105 static DECLARE_TASKLET(ap_tasklet
, ap_poll_all
, 0);
106 static atomic_t ap_poll_requests
= ATOMIC_INIT(0);
107 static DECLARE_WAIT_QUEUE_HEAD(ap_poll_wait
);
108 static struct task_struct
*ap_poll_kthread
= NULL
;
109 static DEFINE_MUTEX(ap_poll_thread_mutex
);
110 static DEFINE_SPINLOCK(ap_poll_timer_lock
);
111 static struct hrtimer ap_poll_timer
;
112 /* In LPAR poll with 4kHz frequency. Poll every 250000 nanoseconds.
113 * If z/VM change to 1500000 nanoseconds to adjust to z/VM polling.*/
114 static unsigned long long poll_timeout
= 250000;
117 static int ap_suspend_flag
;
118 /* Flag to check if domain was set through module parameter domain=. This is
119 * important when supsend and resume is done in a z/VM environment where the
120 * domain might change. */
121 static int user_set_domain
= 0;
122 static struct bus_type ap_bus_type
;
124 /* Adapter interrupt definitions */
125 static int ap_airq_flag
;
127 static struct airq_struct ap_airq
= {
128 .handler
= ap_interrupt_handler
,
133 * ap_using_interrupts() - Returns non-zero if interrupt support is
136 static inline int ap_using_interrupts(void)
142 * ap_intructions_available() - Test if AP instructions are available.
144 * Returns 0 if the AP instructions are installed.
146 static inline int ap_instructions_available(void)
148 register unsigned long reg0
asm ("0") = AP_MKQID(0,0);
149 register unsigned long reg1
asm ("1") = -ENODEV
;
150 register unsigned long reg2
asm ("2") = 0UL;
153 " .long 0xb2af0000\n" /* PQAP(TAPQ) */
157 : "+d" (reg0
), "+d" (reg1
), "+d" (reg2
) : : "cc" );
162 * ap_interrupts_available(): Test if AP interrupts are available.
164 * Returns 1 if AP interrupts are available.
166 static int ap_interrupts_available(void)
168 return test_facility(65);
172 * ap_configuration_available(): Test if AP configuration
173 * information is available.
175 * Returns 1 if AP configuration information is available.
177 static int ap_configuration_available(void)
179 return test_facility(12);
183 * ap_test_queue(): Test adjunct processor queue.
184 * @qid: The AP queue number
185 * @queue_depth: Pointer to queue depth value
186 * @device_type: Pointer to device type value
188 * Returns AP queue status structure.
190 static inline struct ap_queue_status
191 ap_test_queue(ap_qid_t qid
, int *queue_depth
, int *device_type
)
193 register unsigned long reg0
asm ("0") = qid
;
194 register struct ap_queue_status reg1
asm ("1");
195 register unsigned long reg2
asm ("2") = 0UL;
197 asm volatile(".long 0xb2af0000" /* PQAP(TAPQ) */
198 : "+d" (reg0
), "=d" (reg1
), "+d" (reg2
) : : "cc");
199 *device_type
= (int) (reg2
>> 24);
200 *queue_depth
= (int) (reg2
& 0xff);
205 * ap_query_facilities(): PQAP(TAPQ) query facilities.
206 * @qid: The AP queue number
208 * Returns content of general register 2 after the PQAP(TAPQ)
209 * instruction was called.
211 static inline unsigned long ap_query_facilities(ap_qid_t qid
)
213 register unsigned long reg0
asm ("0") = qid
| 0x00800000UL
;
214 register unsigned long reg1
asm ("1");
215 register unsigned long reg2
asm ("2") = 0UL;
217 asm volatile(".long 0xb2af0000" /* PQAP(TAPQ) */
218 : "+d" (reg0
), "=d" (reg1
), "+d" (reg2
) : : "cc");
223 * ap_reset_queue(): Reset adjunct processor queue.
224 * @qid: The AP queue number
226 * Returns AP queue status structure.
228 static inline struct ap_queue_status
ap_reset_queue(ap_qid_t qid
)
230 register unsigned long reg0
asm ("0") = qid
| 0x01000000UL
;
231 register struct ap_queue_status reg1
asm ("1");
232 register unsigned long reg2
asm ("2") = 0UL;
235 ".long 0xb2af0000" /* PQAP(RAPQ) */
236 : "+d" (reg0
), "=d" (reg1
), "+d" (reg2
) : : "cc");
241 * ap_queue_interruption_control(): Enable interruption for a specific AP.
242 * @qid: The AP queue number
243 * @ind: The notification indicator byte
245 * Returns AP queue status.
247 static inline struct ap_queue_status
248 ap_queue_interruption_control(ap_qid_t qid
, void *ind
)
250 register unsigned long reg0
asm ("0") = qid
| 0x03000000UL
;
251 register unsigned long reg1_in
asm ("1") = 0x0000800000000000UL
| AP_ISC
;
252 register struct ap_queue_status reg1_out
asm ("1");
253 register void *reg2
asm ("2") = ind
;
255 ".long 0xb2af0000" /* PQAP(AQIC) */
256 : "+d" (reg0
), "+d" (reg1_in
), "=d" (reg1_out
), "+d" (reg2
)
262 static inline struct ap_queue_status
263 __ap_query_functions(ap_qid_t qid
, unsigned int *functions
)
265 register unsigned long reg0
asm ("0") = 0UL | qid
| (1UL << 23);
266 register struct ap_queue_status reg1
asm ("1") = AP_QUEUE_STATUS_INVALID
;
267 register unsigned long reg2
asm ("2");
270 ".long 0xb2af0000\n" /* PQAP(TAPQ) */
273 : "+d" (reg0
), "+d" (reg1
), "=d" (reg2
)
277 *functions
= (unsigned int)(reg2
>> 32);
281 static inline int __ap_query_configuration(struct ap_config_info
*config
)
283 register unsigned long reg0
asm ("0") = 0x04000000UL
;
284 register unsigned long reg1
asm ("1") = -EINVAL
;
285 register unsigned char *reg2
asm ("2") = (unsigned char *)config
;
288 ".long 0xb2af0000\n" /* PQAP(QCI) */
292 : "+d" (reg0
), "+d" (reg1
), "+d" (reg2
)
300 * ap_query_functions(): Query supported functions.
301 * @qid: The AP queue number
302 * @functions: Pointer to functions field.
306 * -ENODEV if queue not valid.
307 * -EBUSY if device busy.
308 * -EINVAL if query function is not supported
310 static int ap_query_functions(ap_qid_t qid
, unsigned int *functions
)
312 struct ap_queue_status status
;
314 status
= __ap_query_functions(qid
, functions
);
316 if (ap_queue_status_invalid_test(&status
))
319 switch (status
.response_code
) {
320 case AP_RESPONSE_NORMAL
:
322 case AP_RESPONSE_Q_NOT_AVAIL
:
323 case AP_RESPONSE_DECONFIGURED
:
324 case AP_RESPONSE_CHECKSTOPPED
:
325 case AP_RESPONSE_INVALID_ADDRESS
:
327 case AP_RESPONSE_RESET_IN_PROGRESS
:
328 case AP_RESPONSE_BUSY
:
329 case AP_RESPONSE_OTHERWISE_CHANGED
:
336 * ap_queue_enable_interruption(): Enable interruption on an AP.
337 * @qid: The AP queue number
338 * @ind: the notification indicator byte
340 * Enables interruption on AP queue via ap_queue_interruption_control(). Based
341 * on the return value it waits a while and tests the AP queue if interrupts
342 * have been switched on using ap_test_queue().
344 static int ap_queue_enable_interruption(struct ap_device
*ap_dev
, void *ind
)
346 struct ap_queue_status status
;
348 status
= ap_queue_interruption_control(ap_dev
->qid
, ind
);
349 switch (status
.response_code
) {
350 case AP_RESPONSE_NORMAL
:
351 case AP_RESPONSE_OTHERWISE_CHANGED
:
353 case AP_RESPONSE_Q_NOT_AVAIL
:
354 case AP_RESPONSE_DECONFIGURED
:
355 case AP_RESPONSE_CHECKSTOPPED
:
356 case AP_RESPONSE_INVALID_ADDRESS
:
358 case AP_RESPONSE_RESET_IN_PROGRESS
:
359 case AP_RESPONSE_BUSY
:
366 * __ap_send(): Send message to adjunct processor queue.
367 * @qid: The AP queue number
368 * @psmid: The program supplied message identifier
369 * @msg: The message text
370 * @length: The message length
371 * @special: Special Bit
373 * Returns AP queue status structure.
374 * Condition code 1 on NQAP can't happen because the L bit is 1.
375 * Condition code 2 on NQAP also means the send is incomplete,
376 * because a segment boundary was reached. The NQAP is repeated.
378 static inline struct ap_queue_status
379 __ap_send(ap_qid_t qid
, unsigned long long psmid
, void *msg
, size_t length
,
380 unsigned int special
)
382 typedef struct { char _
[length
]; } msgblock
;
383 register unsigned long reg0
asm ("0") = qid
| 0x40000000UL
;
384 register struct ap_queue_status reg1
asm ("1");
385 register unsigned long reg2
asm ("2") = (unsigned long) msg
;
386 register unsigned long reg3
asm ("3") = (unsigned long) length
;
387 register unsigned long reg4
asm ("4") = (unsigned int) (psmid
>> 32);
388 register unsigned long reg5
asm ("5") = psmid
& 0xffffffff;
394 "0: .long 0xb2ad0042\n" /* NQAP */
396 : "+d" (reg0
), "=d" (reg1
), "+d" (reg2
), "+d" (reg3
)
397 : "d" (reg4
), "d" (reg5
), "m" (*(msgblock
*) msg
)
402 int ap_send(ap_qid_t qid
, unsigned long long psmid
, void *msg
, size_t length
)
404 struct ap_queue_status status
;
406 status
= __ap_send(qid
, psmid
, msg
, length
, 0);
407 switch (status
.response_code
) {
408 case AP_RESPONSE_NORMAL
:
410 case AP_RESPONSE_Q_FULL
:
411 case AP_RESPONSE_RESET_IN_PROGRESS
:
413 case AP_RESPONSE_REQ_FAC_NOT_INST
:
415 default: /* Device is gone. */
419 EXPORT_SYMBOL(ap_send
);
422 * __ap_recv(): Receive message from adjunct processor queue.
423 * @qid: The AP queue number
424 * @psmid: Pointer to program supplied message identifier
425 * @msg: The message text
426 * @length: The message length
428 * Returns AP queue status structure.
429 * Condition code 1 on DQAP means the receive has taken place
430 * but only partially. The response is incomplete, hence the
432 * Condition code 2 on DQAP also means the receive is incomplete,
433 * this time because a segment boundary was reached. Again, the
435 * Note that gpr2 is used by the DQAP instruction to keep track of
436 * any 'residual' length, in case the instruction gets interrupted.
437 * Hence it gets zeroed before the instruction.
439 static inline struct ap_queue_status
440 __ap_recv(ap_qid_t qid
, unsigned long long *psmid
, void *msg
, size_t length
)
442 typedef struct { char _
[length
]; } msgblock
;
443 register unsigned long reg0
asm("0") = qid
| 0x80000000UL
;
444 register struct ap_queue_status reg1
asm ("1");
445 register unsigned long reg2
asm("2") = 0UL;
446 register unsigned long reg4
asm("4") = (unsigned long) msg
;
447 register unsigned long reg5
asm("5") = (unsigned long) length
;
448 register unsigned long reg6
asm("6") = 0UL;
449 register unsigned long reg7
asm("7") = 0UL;
453 "0: .long 0xb2ae0064\n" /* DQAP */
455 : "+d" (reg0
), "=d" (reg1
), "+d" (reg2
),
456 "+d" (reg4
), "+d" (reg5
), "+d" (reg6
), "+d" (reg7
),
457 "=m" (*(msgblock
*) msg
) : : "cc" );
458 *psmid
= (((unsigned long long) reg6
) << 32) + reg7
;
462 int ap_recv(ap_qid_t qid
, unsigned long long *psmid
, void *msg
, size_t length
)
464 struct ap_queue_status status
;
466 status
= __ap_recv(qid
, psmid
, msg
, length
);
467 switch (status
.response_code
) {
468 case AP_RESPONSE_NORMAL
:
470 case AP_RESPONSE_NO_PENDING_REPLY
:
471 if (status
.queue_empty
)
474 case AP_RESPONSE_RESET_IN_PROGRESS
:
480 EXPORT_SYMBOL(ap_recv
);
483 * __ap_schedule_poll_timer(): Schedule poll timer.
485 * Set up the timer to run the poll tasklet
487 static inline void __ap_schedule_poll_timer(void)
491 spin_lock_bh(&ap_poll_timer_lock
);
492 if (!hrtimer_is_queued(&ap_poll_timer
) && !ap_suspend_flag
) {
493 hr_time
= ktime_set(0, poll_timeout
);
494 hrtimer_forward_now(&ap_poll_timer
, hr_time
);
495 hrtimer_restart(&ap_poll_timer
);
497 spin_unlock_bh(&ap_poll_timer_lock
);
501 * ap_schedule_poll_timer(): Schedule poll timer.
503 * Set up the timer to run the poll tasklet
505 static inline void ap_schedule_poll_timer(void)
507 if (ap_using_interrupts())
509 __ap_schedule_poll_timer();
514 * ap_query_queue(): Check if an AP queue is available.
515 * @qid: The AP queue number
516 * @queue_depth: Pointer to queue depth value
517 * @device_type: Pointer to device type value
519 static int ap_query_queue(ap_qid_t qid
, int *queue_depth
, int *device_type
)
521 struct ap_queue_status status
;
522 int t_depth
, t_device_type
;
524 status
= ap_test_queue(qid
, &t_depth
, &t_device_type
);
525 switch (status
.response_code
) {
526 case AP_RESPONSE_NORMAL
:
527 *queue_depth
= t_depth
+ 1;
528 *device_type
= t_device_type
;
530 case AP_RESPONSE_Q_NOT_AVAIL
:
531 case AP_RESPONSE_DECONFIGURED
:
532 case AP_RESPONSE_CHECKSTOPPED
:
533 case AP_RESPONSE_INVALID_ADDRESS
:
535 case AP_RESPONSE_RESET_IN_PROGRESS
:
536 case AP_RESPONSE_OTHERWISE_CHANGED
:
537 case AP_RESPONSE_BUSY
:
545 * ap_init_queue(): Reset an AP queue.
546 * @qid: The AP queue number
548 * Submit the Reset command to an AP queue.
549 * Since the reset is asynchron set the state to 'RESET_IN_PROGRESS'
550 * and check later via ap_poll_queue() if the reset is done.
552 static int ap_init_queue(struct ap_device
*ap_dev
)
554 struct ap_queue_status status
;
556 status
= ap_reset_queue(ap_dev
->qid
);
557 switch (status
.response_code
) {
558 case AP_RESPONSE_NORMAL
:
559 ap_dev
->interrupt
= AP_INTR_DISABLED
;
560 ap_dev
->reset
= AP_RESET_IN_PROGRESS
;
562 case AP_RESPONSE_RESET_IN_PROGRESS
:
563 case AP_RESPONSE_BUSY
:
565 case AP_RESPONSE_Q_NOT_AVAIL
:
566 case AP_RESPONSE_DECONFIGURED
:
567 case AP_RESPONSE_CHECKSTOPPED
:
574 * ap_increase_queue_count(): Arm request timeout.
575 * @ap_dev: Pointer to an AP device.
577 * Arm request timeout if an AP device was idle and a new request is submitted.
579 static void ap_increase_queue_count(struct ap_device
*ap_dev
)
581 int timeout
= ap_dev
->drv
->request_timeout
;
583 ap_dev
->queue_count
++;
584 if (ap_dev
->queue_count
== 1) {
585 mod_timer(&ap_dev
->timeout
, jiffies
+ timeout
);
586 ap_dev
->reset
= AP_RESET_ARMED
;
591 * ap_decrease_queue_count(): Decrease queue count.
592 * @ap_dev: Pointer to an AP device.
594 * If AP device is still alive, re-schedule request timeout if there are still
597 static void ap_decrease_queue_count(struct ap_device
*ap_dev
)
599 int timeout
= ap_dev
->drv
->request_timeout
;
601 ap_dev
->queue_count
--;
602 if (ap_dev
->queue_count
> 0)
603 mod_timer(&ap_dev
->timeout
, jiffies
+ timeout
);
606 * The timeout timer should to be disabled now - since
607 * del_timer_sync() is very expensive, we just tell via the
608 * reset flag to ignore the pending timeout timer.
610 ap_dev
->reset
= AP_RESET_IGNORE
;
614 * AP device related attributes.
616 static ssize_t
ap_hwtype_show(struct device
*dev
,
617 struct device_attribute
*attr
, char *buf
)
619 struct ap_device
*ap_dev
= to_ap_dev(dev
);
620 return snprintf(buf
, PAGE_SIZE
, "%d\n", ap_dev
->device_type
);
623 static DEVICE_ATTR(hwtype
, 0444, ap_hwtype_show
, NULL
);
625 static ssize_t
ap_raw_hwtype_show(struct device
*dev
,
626 struct device_attribute
*attr
, char *buf
)
628 struct ap_device
*ap_dev
= to_ap_dev(dev
);
630 return snprintf(buf
, PAGE_SIZE
, "%d\n", ap_dev
->raw_hwtype
);
633 static DEVICE_ATTR(raw_hwtype
, 0444, ap_raw_hwtype_show
, NULL
);
635 static ssize_t
ap_depth_show(struct device
*dev
, struct device_attribute
*attr
,
638 struct ap_device
*ap_dev
= to_ap_dev(dev
);
639 return snprintf(buf
, PAGE_SIZE
, "%d\n", ap_dev
->queue_depth
);
642 static DEVICE_ATTR(depth
, 0444, ap_depth_show
, NULL
);
643 static ssize_t
ap_request_count_show(struct device
*dev
,
644 struct device_attribute
*attr
,
647 struct ap_device
*ap_dev
= to_ap_dev(dev
);
650 spin_lock_bh(&ap_dev
->lock
);
651 rc
= snprintf(buf
, PAGE_SIZE
, "%d\n", ap_dev
->total_request_count
);
652 spin_unlock_bh(&ap_dev
->lock
);
656 static DEVICE_ATTR(request_count
, 0444, ap_request_count_show
, NULL
);
658 static ssize_t
ap_requestq_count_show(struct device
*dev
,
659 struct device_attribute
*attr
, char *buf
)
661 struct ap_device
*ap_dev
= to_ap_dev(dev
);
664 spin_lock_bh(&ap_dev
->lock
);
665 rc
= snprintf(buf
, PAGE_SIZE
, "%d\n", ap_dev
->requestq_count
);
666 spin_unlock_bh(&ap_dev
->lock
);
670 static DEVICE_ATTR(requestq_count
, 0444, ap_requestq_count_show
, NULL
);
672 static ssize_t
ap_pendingq_count_show(struct device
*dev
,
673 struct device_attribute
*attr
, char *buf
)
675 struct ap_device
*ap_dev
= to_ap_dev(dev
);
678 spin_lock_bh(&ap_dev
->lock
);
679 rc
= snprintf(buf
, PAGE_SIZE
, "%d\n", ap_dev
->pendingq_count
);
680 spin_unlock_bh(&ap_dev
->lock
);
684 static DEVICE_ATTR(pendingq_count
, 0444, ap_pendingq_count_show
, NULL
);
686 static ssize_t
ap_reset_show(struct device
*dev
,
687 struct device_attribute
*attr
, char *buf
)
689 struct ap_device
*ap_dev
= to_ap_dev(dev
);
692 spin_lock_bh(&ap_dev
->lock
);
693 switch (ap_dev
->reset
) {
694 case AP_RESET_IGNORE
:
695 rc
= snprintf(buf
, PAGE_SIZE
, "No Reset Timer set.\n");
698 rc
= snprintf(buf
, PAGE_SIZE
, "Reset Timer armed.\n");
701 rc
= snprintf(buf
, PAGE_SIZE
, "Reset Timer expired.\n");
703 case AP_RESET_IN_PROGRESS
:
704 rc
= snprintf(buf
, PAGE_SIZE
, "Reset in progress.\n");
709 spin_unlock_bh(&ap_dev
->lock
);
713 static DEVICE_ATTR(reset
, 0444, ap_reset_show
, NULL
);
715 static ssize_t
ap_interrupt_show(struct device
*dev
,
716 struct device_attribute
*attr
, char *buf
)
718 struct ap_device
*ap_dev
= to_ap_dev(dev
);
721 spin_lock_bh(&ap_dev
->lock
);
722 switch (ap_dev
->interrupt
) {
723 case AP_INTR_DISABLED
:
724 rc
= snprintf(buf
, PAGE_SIZE
, "Interrupts disabled.\n");
726 case AP_INTR_ENABLED
:
727 rc
= snprintf(buf
, PAGE_SIZE
, "Interrupts enabled.\n");
729 case AP_INTR_IN_PROGRESS
:
730 rc
= snprintf(buf
, PAGE_SIZE
, "Enable Interrupt pending.\n");
733 spin_unlock_bh(&ap_dev
->lock
);
737 static DEVICE_ATTR(interrupt
, 0444, ap_interrupt_show
, NULL
);
739 static ssize_t
ap_modalias_show(struct device
*dev
,
740 struct device_attribute
*attr
, char *buf
)
742 return sprintf(buf
, "ap:t%02X\n", to_ap_dev(dev
)->device_type
);
745 static DEVICE_ATTR(modalias
, 0444, ap_modalias_show
, NULL
);
747 static ssize_t
ap_functions_show(struct device
*dev
,
748 struct device_attribute
*attr
, char *buf
)
750 struct ap_device
*ap_dev
= to_ap_dev(dev
);
751 return snprintf(buf
, PAGE_SIZE
, "0x%08X\n", ap_dev
->functions
);
754 static DEVICE_ATTR(ap_functions
, 0444, ap_functions_show
, NULL
);
756 static struct attribute
*ap_dev_attrs
[] = {
757 &dev_attr_hwtype
.attr
,
758 &dev_attr_raw_hwtype
.attr
,
759 &dev_attr_depth
.attr
,
760 &dev_attr_request_count
.attr
,
761 &dev_attr_requestq_count
.attr
,
762 &dev_attr_pendingq_count
.attr
,
763 &dev_attr_reset
.attr
,
764 &dev_attr_interrupt
.attr
,
765 &dev_attr_modalias
.attr
,
766 &dev_attr_ap_functions
.attr
,
769 static struct attribute_group ap_dev_attr_group
= {
770 .attrs
= ap_dev_attrs
775 * @dev: Pointer to device
776 * @drv: Pointer to device_driver
778 * AP bus driver registration/unregistration.
780 static int ap_bus_match(struct device
*dev
, struct device_driver
*drv
)
782 struct ap_device
*ap_dev
= to_ap_dev(dev
);
783 struct ap_driver
*ap_drv
= to_ap_drv(drv
);
784 struct ap_device_id
*id
;
787 * Compare device type of the device with the list of
788 * supported types of the device_driver.
790 for (id
= ap_drv
->ids
; id
->match_flags
; id
++) {
791 if ((id
->match_flags
& AP_DEVICE_ID_MATCH_DEVICE_TYPE
) &&
792 (id
->dev_type
!= ap_dev
->device_type
))
800 * ap_uevent(): Uevent function for AP devices.
801 * @dev: Pointer to device
802 * @env: Pointer to kobj_uevent_env
804 * It sets up a single environment variable DEV_TYPE which contains the
805 * hardware device type.
807 static int ap_uevent (struct device
*dev
, struct kobj_uevent_env
*env
)
809 struct ap_device
*ap_dev
= to_ap_dev(dev
);
815 /* Set up DEV_TYPE environment variable. */
816 retval
= add_uevent_var(env
, "DEV_TYPE=%04X", ap_dev
->device_type
);
821 retval
= add_uevent_var(env
, "MODALIAS=ap:t%02X", ap_dev
->device_type
);
826 static int ap_bus_suspend(struct device
*dev
, pm_message_t state
)
828 struct ap_device
*ap_dev
= to_ap_dev(dev
);
831 if (!ap_suspend_flag
) {
834 /* Disable scanning for devices, thus we do not want to scan
835 * for them after removing.
837 del_timer_sync(&ap_config_timer
);
838 if (ap_work_queue
!= NULL
) {
839 destroy_workqueue(ap_work_queue
);
840 ap_work_queue
= NULL
;
843 tasklet_disable(&ap_tasklet
);
845 /* Poll on the device until all requests are finished. */
848 spin_lock_bh(&ap_dev
->lock
);
849 __ap_poll_device(ap_dev
, &flags
);
850 spin_unlock_bh(&ap_dev
->lock
);
851 } while ((flags
& 1) || (flags
& 2));
853 spin_lock_bh(&ap_dev
->lock
);
854 ap_dev
->unregistered
= 1;
855 spin_unlock_bh(&ap_dev
->lock
);
860 static int ap_bus_resume(struct device
*dev
)
862 struct ap_device
*ap_dev
= to_ap_dev(dev
);
865 if (ap_suspend_flag
) {
867 if (ap_interrupts_available()) {
868 if (!ap_using_interrupts()) {
869 rc
= register_adapter_interrupt(&ap_airq
);
870 ap_airq_flag
= (rc
== 0);
873 if (ap_using_interrupts()) {
874 unregister_adapter_interrupt(&ap_airq
);
878 ap_query_configuration();
879 if (!user_set_domain
) {
880 ap_domain_index
= -1;
883 init_timer(&ap_config_timer
);
884 ap_config_timer
.function
= ap_config_timeout
;
885 ap_config_timer
.data
= 0;
886 ap_config_timer
.expires
= jiffies
+ ap_config_time
* HZ
;
887 add_timer(&ap_config_timer
);
888 ap_work_queue
= create_singlethread_workqueue("kapwork");
891 tasklet_enable(&ap_tasklet
);
892 if (!ap_using_interrupts())
893 ap_schedule_poll_timer();
895 tasklet_schedule(&ap_tasklet
);
897 rc
= ap_poll_thread_start();
902 if (AP_QID_QUEUE(ap_dev
->qid
) != ap_domain_index
) {
903 spin_lock_bh(&ap_dev
->lock
);
904 ap_dev
->qid
= AP_MKQID(AP_QID_DEVICE(ap_dev
->qid
),
906 spin_unlock_bh(&ap_dev
->lock
);
908 queue_work(ap_work_queue
, &ap_config_work
);
913 static struct bus_type ap_bus_type
= {
915 .match
= &ap_bus_match
,
916 .uevent
= &ap_uevent
,
917 .suspend
= ap_bus_suspend
,
918 .resume
= ap_bus_resume
921 static int ap_device_probe(struct device
*dev
)
923 struct ap_device
*ap_dev
= to_ap_dev(dev
);
924 struct ap_driver
*ap_drv
= to_ap_drv(dev
->driver
);
927 ap_dev
->drv
= ap_drv
;
929 spin_lock_bh(&ap_device_list_lock
);
930 list_add(&ap_dev
->list
, &ap_device_list
);
931 spin_unlock_bh(&ap_device_list_lock
);
933 rc
= ap_drv
->probe
? ap_drv
->probe(ap_dev
) : -ENODEV
;
935 spin_lock_bh(&ap_device_list_lock
);
936 list_del_init(&ap_dev
->list
);
937 spin_unlock_bh(&ap_device_list_lock
);
939 if (ap_dev
->reset
== AP_RESET_IN_PROGRESS
||
940 ap_dev
->interrupt
== AP_INTR_IN_PROGRESS
)
941 __ap_schedule_poll_timer();
947 * __ap_flush_queue(): Flush requests.
948 * @ap_dev: Pointer to the AP device
950 * Flush all requests from the request/pending queue of an AP device.
952 static void __ap_flush_queue(struct ap_device
*ap_dev
)
954 struct ap_message
*ap_msg
, *next
;
956 list_for_each_entry_safe(ap_msg
, next
, &ap_dev
->pendingq
, list
) {
957 list_del_init(&ap_msg
->list
);
958 ap_dev
->pendingq_count
--;
959 ap_msg
->receive(ap_dev
, ap_msg
, ERR_PTR(-ENODEV
));
961 list_for_each_entry_safe(ap_msg
, next
, &ap_dev
->requestq
, list
) {
962 list_del_init(&ap_msg
->list
);
963 ap_dev
->requestq_count
--;
964 ap_msg
->receive(ap_dev
, ap_msg
, ERR_PTR(-ENODEV
));
968 void ap_flush_queue(struct ap_device
*ap_dev
)
970 spin_lock_bh(&ap_dev
->lock
);
971 __ap_flush_queue(ap_dev
);
972 spin_unlock_bh(&ap_dev
->lock
);
974 EXPORT_SYMBOL(ap_flush_queue
);
976 static int ap_device_remove(struct device
*dev
)
978 struct ap_device
*ap_dev
= to_ap_dev(dev
);
979 struct ap_driver
*ap_drv
= ap_dev
->drv
;
981 ap_flush_queue(ap_dev
);
982 del_timer_sync(&ap_dev
->timeout
);
983 spin_lock_bh(&ap_device_list_lock
);
984 list_del_init(&ap_dev
->list
);
985 spin_unlock_bh(&ap_device_list_lock
);
987 ap_drv
->remove(ap_dev
);
988 spin_lock_bh(&ap_dev
->lock
);
989 atomic_sub(ap_dev
->queue_count
, &ap_poll_requests
);
990 spin_unlock_bh(&ap_dev
->lock
);
994 int ap_driver_register(struct ap_driver
*ap_drv
, struct module
*owner
,
997 struct device_driver
*drv
= &ap_drv
->driver
;
999 drv
->bus
= &ap_bus_type
;
1000 drv
->probe
= ap_device_probe
;
1001 drv
->remove
= ap_device_remove
;
1004 return driver_register(drv
);
1006 EXPORT_SYMBOL(ap_driver_register
);
1008 void ap_driver_unregister(struct ap_driver
*ap_drv
)
1010 driver_unregister(&ap_drv
->driver
);
1012 EXPORT_SYMBOL(ap_driver_unregister
);
1014 void ap_bus_force_rescan(void)
1016 /* reconfigure the AP bus rescan timer. */
1017 mod_timer(&ap_config_timer
, jiffies
+ ap_config_time
* HZ
);
1018 /* processing a asynchronous bus rescan */
1019 queue_work(ap_work_queue
, &ap_config_work
);
1020 flush_work(&ap_config_work
);
1022 EXPORT_SYMBOL(ap_bus_force_rescan
);
1025 * ap_test_config(): helper function to extract the nrth bit
1026 * within the unsigned int array field.
1028 static inline int ap_test_config(unsigned int *field
, unsigned int nr
)
1032 return ap_test_bit((field
+ (nr
>> 5)), (nr
& 0x1f));
1036 * ap_test_config_card_id(): Test, whether an AP card ID is configured.
1039 * Returns 0 if the card is not configured
1040 * 1 if the card is configured or
1041 * if the configuration information is not available
1043 static inline int ap_test_config_card_id(unsigned int id
)
1045 if (!ap_configuration
)
1047 return ap_test_config(ap_configuration
->apm
, id
);
1051 * ap_test_config_domain(): Test, whether an AP usage domain is configured.
1052 * @domain AP usage domain ID
1054 * Returns 0 if the usage domain is not configured
1055 * 1 if the usage domain is configured or
1056 * if the configuration information is not available
1058 static inline int ap_test_config_domain(unsigned int domain
)
1060 if (!ap_configuration
) /* QCI not supported */
1062 return 1; /* then domains 0...15 are configured */
1066 return ap_test_config(ap_configuration
->aqm
, domain
);
1070 * AP bus attributes.
1072 static ssize_t
ap_domain_show(struct bus_type
*bus
, char *buf
)
1074 return snprintf(buf
, PAGE_SIZE
, "%d\n", ap_domain_index
);
1077 static BUS_ATTR(ap_domain
, 0444, ap_domain_show
, NULL
);
1079 static ssize_t
ap_control_domain_mask_show(struct bus_type
*bus
, char *buf
)
1081 if (ap_configuration
!= NULL
) { /* QCI not supported */
1082 if (test_facility(76)) { /* format 1 - 256 bit domain field */
1083 return snprintf(buf
, PAGE_SIZE
,
1084 "0x%08x%08x%08x%08x%08x%08x%08x%08x\n",
1085 ap_configuration
->adm
[0], ap_configuration
->adm
[1],
1086 ap_configuration
->adm
[2], ap_configuration
->adm
[3],
1087 ap_configuration
->adm
[4], ap_configuration
->adm
[5],
1088 ap_configuration
->adm
[6], ap_configuration
->adm
[7]);
1089 } else { /* format 0 - 16 bit domain field */
1090 return snprintf(buf
, PAGE_SIZE
, "%08x%08x\n",
1091 ap_configuration
->adm
[0], ap_configuration
->adm
[1]);
1094 return snprintf(buf
, PAGE_SIZE
, "not supported\n");
1098 static BUS_ATTR(ap_control_domain_mask
, 0444,
1099 ap_control_domain_mask_show
, NULL
);
1101 static ssize_t
ap_config_time_show(struct bus_type
*bus
, char *buf
)
1103 return snprintf(buf
, PAGE_SIZE
, "%d\n", ap_config_time
);
1106 static ssize_t
ap_interrupts_show(struct bus_type
*bus
, char *buf
)
1108 return snprintf(buf
, PAGE_SIZE
, "%d\n",
1109 ap_using_interrupts() ? 1 : 0);
1112 static BUS_ATTR(ap_interrupts
, 0444, ap_interrupts_show
, NULL
);
1114 static ssize_t
ap_config_time_store(struct bus_type
*bus
,
1115 const char *buf
, size_t count
)
1119 if (sscanf(buf
, "%d\n", &time
) != 1 || time
< 5 || time
> 120)
1121 ap_config_time
= time
;
1122 if (!timer_pending(&ap_config_timer
) ||
1123 !mod_timer(&ap_config_timer
, jiffies
+ ap_config_time
* HZ
)) {
1124 ap_config_timer
.expires
= jiffies
+ ap_config_time
* HZ
;
1125 add_timer(&ap_config_timer
);
1130 static BUS_ATTR(config_time
, 0644, ap_config_time_show
, ap_config_time_store
);
1132 static ssize_t
ap_poll_thread_show(struct bus_type
*bus
, char *buf
)
1134 return snprintf(buf
, PAGE_SIZE
, "%d\n", ap_poll_kthread
? 1 : 0);
1137 static ssize_t
ap_poll_thread_store(struct bus_type
*bus
,
1138 const char *buf
, size_t count
)
1142 if (sscanf(buf
, "%d\n", &flag
) != 1)
1145 rc
= ap_poll_thread_start();
1150 ap_poll_thread_stop();
1154 static BUS_ATTR(poll_thread
, 0644, ap_poll_thread_show
, ap_poll_thread_store
);
1156 static ssize_t
poll_timeout_show(struct bus_type
*bus
, char *buf
)
1158 return snprintf(buf
, PAGE_SIZE
, "%llu\n", poll_timeout
);
1161 static ssize_t
poll_timeout_store(struct bus_type
*bus
, const char *buf
,
1164 unsigned long long time
;
1167 /* 120 seconds = maximum poll interval */
1168 if (sscanf(buf
, "%llu\n", &time
) != 1 || time
< 1 ||
1169 time
> 120000000000ULL)
1171 poll_timeout
= time
;
1172 hr_time
= ktime_set(0, poll_timeout
);
1174 spin_lock_bh(&ap_poll_timer_lock
);
1175 hrtimer_cancel(&ap_poll_timer
);
1176 hrtimer_set_expires(&ap_poll_timer
, hr_time
);
1177 hrtimer_start_expires(&ap_poll_timer
, HRTIMER_MODE_ABS
);
1178 spin_unlock_bh(&ap_poll_timer_lock
);
1183 static BUS_ATTR(poll_timeout
, 0644, poll_timeout_show
, poll_timeout_store
);
1185 static ssize_t
ap_max_domain_id_show(struct bus_type
*bus
, char *buf
)
1188 int i
, nd
, max_domain_id
= -1;
1189 unsigned long fbits
;
1191 if (ap_configuration
) {
1192 if (ap_domain_index
>= 0 && ap_domain_index
< AP_DOMAINS
) {
1193 for (i
= 0; i
< AP_DEVICES
; i
++) {
1194 if (!ap_test_config_card_id(i
))
1196 qid
= AP_MKQID(i
, ap_domain_index
);
1197 fbits
= ap_query_facilities(qid
);
1198 if (fbits
& (1UL << 57)) {
1199 /* the N bit is 0, Nd field is filled */
1200 nd
= (int)((fbits
& 0x00FF0000UL
)>>16);
1206 /* N bit is 1, max 16 domains */
1213 /* no APXA support, older machines with max 16 domains */
1216 return snprintf(buf
, PAGE_SIZE
, "%d\n", max_domain_id
);
1219 static BUS_ATTR(ap_max_domain_id
, 0444, ap_max_domain_id_show
, NULL
);
1221 static struct bus_attribute
*const ap_bus_attrs
[] = {
1222 &bus_attr_ap_domain
,
1223 &bus_attr_ap_control_domain_mask
,
1224 &bus_attr_config_time
,
1225 &bus_attr_poll_thread
,
1226 &bus_attr_ap_interrupts
,
1227 &bus_attr_poll_timeout
,
1228 &bus_attr_ap_max_domain_id
,
1233 * ap_query_configuration(): Query AP configuration information.
1235 * Query information of installed cards and configured domains from AP.
1237 static void ap_query_configuration(void)
1239 if (ap_configuration_available()) {
1240 if (!ap_configuration
)
1242 kzalloc(sizeof(struct ap_config_info
),
1244 if (ap_configuration
)
1245 __ap_query_configuration(ap_configuration
);
1247 ap_configuration
= NULL
;
1251 * ap_select_domain(): Select an AP domain.
1253 * Pick one of the 16 AP domains.
1255 static int ap_select_domain(void)
1257 int queue_depth
, device_type
, count
, max_count
, best_domain
;
1261 /* IF APXA isn't installed, only 16 domains could be defined */
1262 if (!ap_configuration
->ap_extended
&& (ap_domain_index
> 15))
1266 * We want to use a single domain. Either the one specified with
1267 * the "domain=" parameter or the domain with the maximum number
1270 if (ap_domain_index
>= 0 && ap_domain_index
< AP_DOMAINS
)
1271 /* Domain has already been selected. */
1275 for (i
= 0; i
< AP_DOMAINS
; i
++) {
1276 if (!ap_test_config_domain(i
))
1279 for (j
= 0; j
< AP_DEVICES
; j
++) {
1280 if (!ap_test_config_card_id(j
))
1282 qid
= AP_MKQID(j
, i
);
1283 rc
= ap_query_queue(qid
, &queue_depth
, &device_type
);
1288 if (count
> max_count
) {
1293 if (best_domain
>= 0){
1294 ap_domain_index
= best_domain
;
1301 * ap_probe_device_type(): Find the device type of an AP.
1302 * @ap_dev: pointer to the AP device.
1304 * Find the device type if query queue returned a device type of 0.
1306 static int ap_probe_device_type(struct ap_device
*ap_dev
)
1308 static unsigned char msg
[] = {
1309 0x00,0x06,0x00,0x00,0x00,0x00,0x00,0x00,
1310 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
1311 0x00,0x00,0x00,0x58,0x00,0x00,0x00,0x00,
1312 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
1313 0x01,0x00,0x43,0x43,0x41,0x2d,0x41,0x50,
1314 0x50,0x4c,0x20,0x20,0x20,0x01,0x01,0x01,
1315 0x00,0x00,0x00,0x00,0x50,0x4b,0x00,0x00,
1316 0x00,0x00,0x01,0x1c,0x00,0x00,0x00,0x00,
1317 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
1318 0x00,0x00,0x05,0xb8,0x00,0x00,0x00,0x00,
1319 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
1320 0x70,0x00,0x41,0x00,0x00,0x00,0x00,0x00,
1321 0x00,0x00,0x54,0x32,0x01,0x00,0xa0,0x00,
1322 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
1323 0x00,0x00,0x00,0x00,0xb8,0x05,0x00,0x00,
1324 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
1325 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
1326 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
1327 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
1328 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
1329 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
1330 0x00,0x00,0x0a,0x00,0x00,0x00,0x00,0x00,
1331 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
1332 0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,
1333 0x49,0x43,0x53,0x46,0x20,0x20,0x20,0x20,
1334 0x50,0x4b,0x0a,0x00,0x50,0x4b,0x43,0x53,
1335 0x2d,0x31,0x2e,0x32,0x37,0x00,0x11,0x22,
1336 0x33,0x44,0x55,0x66,0x77,0x88,0x99,0x00,
1337 0x11,0x22,0x33,0x44,0x55,0x66,0x77,0x88,
1338 0x99,0x00,0x11,0x22,0x33,0x44,0x55,0x66,
1339 0x77,0x88,0x99,0x00,0x11,0x22,0x33,0x44,
1340 0x55,0x66,0x77,0x88,0x99,0x00,0x11,0x22,
1341 0x33,0x44,0x55,0x66,0x77,0x88,0x99,0x00,
1342 0x11,0x22,0x33,0x5d,0x00,0x5b,0x00,0x77,
1343 0x88,0x1e,0x00,0x00,0x57,0x00,0x00,0x00,
1344 0x00,0x04,0x00,0x00,0x4f,0x00,0x00,0x00,
1345 0x03,0x02,0x00,0x00,0x40,0x01,0x00,0x01,
1346 0xce,0x02,0x68,0x2d,0x5f,0xa9,0xde,0x0c,
1347 0xf6,0xd2,0x7b,0x58,0x4b,0xf9,0x28,0x68,
1348 0x3d,0xb4,0xf4,0xef,0x78,0xd5,0xbe,0x66,
1349 0x63,0x42,0xef,0xf8,0xfd,0xa4,0xf8,0xb0,
1350 0x8e,0x29,0xc2,0xc9,0x2e,0xd8,0x45,0xb8,
1351 0x53,0x8c,0x6f,0x4e,0x72,0x8f,0x6c,0x04,
1352 0x9c,0x88,0xfc,0x1e,0xc5,0x83,0x55,0x57,
1353 0xf7,0xdd,0xfd,0x4f,0x11,0x36,0x95,0x5d,
1355 struct ap_queue_status status
;
1356 unsigned long long psmid
;
1360 reply
= (void *) get_zeroed_page(GFP_KERNEL
);
1366 status
= __ap_send(ap_dev
->qid
, 0x0102030405060708ULL
,
1367 msg
, sizeof(msg
), 0);
1368 if (status
.response_code
!= AP_RESPONSE_NORMAL
) {
1373 /* Wait for the test message to complete. */
1374 for (i
= 0; i
< 6; i
++) {
1376 status
= __ap_recv(ap_dev
->qid
, &psmid
, reply
, 4096);
1377 if (status
.response_code
== AP_RESPONSE_NORMAL
&&
1378 psmid
== 0x0102030405060708ULL
)
1382 /* Got an answer. */
1383 if (reply
[0] == 0x00 && reply
[1] == 0x86)
1384 ap_dev
->device_type
= AP_DEVICE_TYPE_PCICC
;
1386 ap_dev
->device_type
= AP_DEVICE_TYPE_PCICA
;
1392 free_page((unsigned long) reply
);
1397 static void ap_interrupt_handler(struct airq_struct
*airq
)
1399 inc_irq_stat(IRQIO_APB
);
1400 tasklet_schedule(&ap_tasklet
);
1404 * __ap_scan_bus(): Scan the AP bus.
1405 * @dev: Pointer to device
1406 * @data: Pointer to data
1408 * Scan the AP bus for new devices.
1410 static int __ap_scan_bus(struct device
*dev
, void *data
)
1412 return to_ap_dev(dev
)->qid
== (ap_qid_t
)(unsigned long) data
;
1415 static void ap_device_release(struct device
*dev
)
1417 struct ap_device
*ap_dev
= to_ap_dev(dev
);
1422 static void ap_scan_bus(struct work_struct
*unused
)
1424 struct ap_device
*ap_dev
;
1427 int queue_depth
= 0, device_type
= 0;
1428 unsigned int device_functions
;
1431 ap_query_configuration();
1432 if (ap_select_domain() != 0) {
1435 for (i
= 0; i
< AP_DEVICES
; i
++) {
1436 qid
= AP_MKQID(i
, ap_domain_index
);
1437 dev
= bus_find_device(&ap_bus_type
, NULL
,
1438 (void *)(unsigned long)qid
,
1440 if (ap_test_config_card_id(i
))
1441 rc
= ap_query_queue(qid
, &queue_depth
, &device_type
);
1445 ap_dev
= to_ap_dev(dev
);
1446 spin_lock_bh(&ap_dev
->lock
);
1447 if (rc
== -ENODEV
|| ap_dev
->unregistered
) {
1448 spin_unlock_bh(&ap_dev
->lock
);
1449 if (ap_dev
->unregistered
)
1451 device_unregister(dev
);
1455 spin_unlock_bh(&ap_dev
->lock
);
1461 ap_dev
= kzalloc(sizeof(*ap_dev
), GFP_KERNEL
);
1465 rc
= ap_init_queue(ap_dev
);
1466 if ((rc
!= 0) && (rc
!= -EBUSY
)) {
1470 ap_dev
->queue_depth
= queue_depth
;
1471 ap_dev
->unregistered
= 1;
1472 spin_lock_init(&ap_dev
->lock
);
1473 INIT_LIST_HEAD(&ap_dev
->pendingq
);
1474 INIT_LIST_HEAD(&ap_dev
->requestq
);
1475 INIT_LIST_HEAD(&ap_dev
->list
);
1476 setup_timer(&ap_dev
->timeout
, ap_request_timeout
,
1477 (unsigned long) ap_dev
);
1478 switch (device_type
) {
1480 /* device type probing for old cards */
1481 if (ap_probe_device_type(ap_dev
)) {
1487 ap_dev
->device_type
= device_type
;
1489 ap_dev
->raw_hwtype
= device_type
;
1491 rc
= ap_query_functions(qid
, &device_functions
);
1493 ap_dev
->functions
= device_functions
;
1495 ap_dev
->functions
= 0u;
1497 ap_dev
->device
.bus
= &ap_bus_type
;
1498 ap_dev
->device
.parent
= ap_root_device
;
1499 if (dev_set_name(&ap_dev
->device
, "card%02x",
1500 AP_QID_DEVICE(ap_dev
->qid
))) {
1504 ap_dev
->device
.release
= ap_device_release
;
1505 rc
= device_register(&ap_dev
->device
);
1507 put_device(&ap_dev
->device
);
1510 /* Add device attributes. */
1511 rc
= sysfs_create_group(&ap_dev
->device
.kobj
,
1512 &ap_dev_attr_group
);
1514 spin_lock_bh(&ap_dev
->lock
);
1515 ap_dev
->unregistered
= 0;
1516 spin_unlock_bh(&ap_dev
->lock
);
1519 device_unregister(&ap_dev
->device
);
1524 ap_config_timeout(unsigned long ptr
)
1526 queue_work(ap_work_queue
, &ap_config_work
);
1527 ap_config_timer
.expires
= jiffies
+ ap_config_time
* HZ
;
1528 add_timer(&ap_config_timer
);
1532 * ap_poll_read(): Receive pending reply messages from an AP device.
1533 * @ap_dev: pointer to the AP device
1534 * @flags: pointer to control flags, bit 2^0 is set if another poll is
1535 * required, bit 2^1 is set if the poll timer needs to get armed
1537 * Returns 0 if the device is still present, -ENODEV if not.
1539 static int ap_poll_read(struct ap_device
*ap_dev
, unsigned long *flags
)
1541 struct ap_queue_status status
;
1542 struct ap_message
*ap_msg
;
1544 if (ap_dev
->queue_count
<= 0)
1546 status
= __ap_recv(ap_dev
->qid
, &ap_dev
->reply
->psmid
,
1547 ap_dev
->reply
->message
, ap_dev
->reply
->length
);
1548 switch (status
.response_code
) {
1549 case AP_RESPONSE_NORMAL
:
1550 ap_dev
->interrupt
= status
.int_enabled
;
1551 atomic_dec(&ap_poll_requests
);
1552 ap_decrease_queue_count(ap_dev
);
1553 list_for_each_entry(ap_msg
, &ap_dev
->pendingq
, list
) {
1554 if (ap_msg
->psmid
!= ap_dev
->reply
->psmid
)
1556 list_del_init(&ap_msg
->list
);
1557 ap_dev
->pendingq_count
--;
1558 ap_msg
->receive(ap_dev
, ap_msg
, ap_dev
->reply
);
1561 if (ap_dev
->queue_count
> 0)
1564 case AP_RESPONSE_NO_PENDING_REPLY
:
1565 ap_dev
->interrupt
= status
.int_enabled
;
1566 if (status
.queue_empty
) {
1567 /* The card shouldn't forget requests but who knows. */
1568 atomic_sub(ap_dev
->queue_count
, &ap_poll_requests
);
1569 ap_dev
->queue_count
= 0;
1570 list_splice_init(&ap_dev
->pendingq
, &ap_dev
->requestq
);
1571 ap_dev
->requestq_count
+= ap_dev
->pendingq_count
;
1572 ap_dev
->pendingq_count
= 0;
1583 * ap_poll_write(): Send messages from the request queue to an AP device.
1584 * @ap_dev: pointer to the AP device
1585 * @flags: pointer to control flags, bit 2^0 is set if another poll is
1586 * required, bit 2^1 is set if the poll timer needs to get armed
1588 * Returns 0 if the device is still present, -ENODEV if not.
1590 static int ap_poll_write(struct ap_device
*ap_dev
, unsigned long *flags
)
1592 struct ap_queue_status status
;
1593 struct ap_message
*ap_msg
;
1595 if (ap_dev
->requestq_count
<= 0 ||
1596 (ap_dev
->queue_count
>= ap_dev
->queue_depth
) ||
1597 (ap_dev
->reset
== AP_RESET_IN_PROGRESS
))
1599 /* Start the next request on the queue. */
1600 ap_msg
= list_entry(ap_dev
->requestq
.next
, struct ap_message
, list
);
1601 status
= __ap_send(ap_dev
->qid
, ap_msg
->psmid
,
1602 ap_msg
->message
, ap_msg
->length
, ap_msg
->special
);
1603 switch (status
.response_code
) {
1604 case AP_RESPONSE_NORMAL
:
1605 atomic_inc(&ap_poll_requests
);
1606 ap_increase_queue_count(ap_dev
);
1607 list_move_tail(&ap_msg
->list
, &ap_dev
->pendingq
);
1608 ap_dev
->requestq_count
--;
1609 ap_dev
->pendingq_count
++;
1610 if (ap_dev
->queue_count
< ap_dev
->queue_depth
&&
1611 ap_dev
->requestq_count
> 0)
1615 case AP_RESPONSE_RESET_IN_PROGRESS
:
1616 __ap_schedule_poll_timer();
1617 case AP_RESPONSE_Q_FULL
:
1620 case AP_RESPONSE_MESSAGE_TOO_BIG
:
1621 case AP_RESPONSE_REQ_FAC_NOT_INST
:
1630 * ap_poll_queue(): Poll AP device for pending replies and send new messages.
1631 * Check if the queue has a pending reset. In case it's done re-enable
1632 * interrupts, otherwise reschedule the poll_timer for another attempt.
1633 * @ap_dev: pointer to the bus device
1634 * @flags: pointer to control flags, bit 2^0 is set if another poll is
1635 * required, bit 2^1 is set if the poll timer needs to get armed
1637 * Poll AP device for pending replies and send new messages. If either
1638 * ap_poll_read or ap_poll_write returns -ENODEV unregister the device.
1641 static inline int ap_poll_queue(struct ap_device
*ap_dev
, unsigned long *flags
)
1643 int rc
, depth
, type
;
1644 struct ap_queue_status status
;
1647 if (ap_dev
->reset
== AP_RESET_IN_PROGRESS
) {
1648 status
= ap_test_queue(ap_dev
->qid
, &depth
, &type
);
1649 switch (status
.response_code
) {
1650 case AP_RESPONSE_NORMAL
:
1651 ap_dev
->reset
= AP_RESET_IGNORE
;
1652 if (ap_using_interrupts()) {
1653 rc
= ap_queue_enable_interruption(
1654 ap_dev
, ap_airq
.lsi_ptr
);
1656 ap_dev
->interrupt
= AP_INTR_IN_PROGRESS
;
1657 else if (rc
== -ENODEV
) {
1658 pr_err("Registering adapter interrupts for "
1659 "AP %d failed\n", AP_QID_DEVICE(ap_dev
->qid
));
1664 case AP_RESPONSE_BUSY
:
1665 case AP_RESPONSE_RESET_IN_PROGRESS
:
1666 *flags
|= AP_POLL_AFTER_TIMEOUT
;
1668 case AP_RESPONSE_Q_NOT_AVAIL
:
1669 case AP_RESPONSE_DECONFIGURED
:
1670 case AP_RESPONSE_CHECKSTOPPED
:
1677 if ((ap_dev
->reset
!= AP_RESET_IN_PROGRESS
) &&
1678 (ap_dev
->interrupt
== AP_INTR_IN_PROGRESS
)) {
1679 status
= ap_test_queue(ap_dev
->qid
, &depth
, &type
);
1680 if (ap_using_interrupts()) {
1681 if (status
.int_enabled
== 1)
1682 ap_dev
->interrupt
= AP_INTR_ENABLED
;
1684 *flags
|= AP_POLL_AFTER_TIMEOUT
;
1686 ap_dev
->interrupt
= AP_INTR_DISABLED
;
1689 rc
= ap_poll_read(ap_dev
, flags
);
1692 return ap_poll_write(ap_dev
, flags
);
1696 * __ap_queue_message(): Queue a message to a device.
1697 * @ap_dev: pointer to the AP device
1698 * @ap_msg: the message to be queued
1700 * Queue a message to a device. Returns 0 if successful.
1702 static int __ap_queue_message(struct ap_device
*ap_dev
, struct ap_message
*ap_msg
)
1704 struct ap_queue_status status
;
1706 if (list_empty(&ap_dev
->requestq
) &&
1707 (ap_dev
->queue_count
< ap_dev
->queue_depth
) &&
1708 (ap_dev
->reset
!= AP_RESET_IN_PROGRESS
)) {
1709 status
= __ap_send(ap_dev
->qid
, ap_msg
->psmid
,
1710 ap_msg
->message
, ap_msg
->length
,
1712 switch (status
.response_code
) {
1713 case AP_RESPONSE_NORMAL
:
1714 list_add_tail(&ap_msg
->list
, &ap_dev
->pendingq
);
1715 atomic_inc(&ap_poll_requests
);
1716 ap_dev
->pendingq_count
++;
1717 ap_increase_queue_count(ap_dev
);
1718 ap_dev
->total_request_count
++;
1720 case AP_RESPONSE_Q_FULL
:
1721 case AP_RESPONSE_RESET_IN_PROGRESS
:
1722 list_add_tail(&ap_msg
->list
, &ap_dev
->requestq
);
1723 ap_dev
->requestq_count
++;
1724 ap_dev
->total_request_count
++;
1726 case AP_RESPONSE_REQ_FAC_NOT_INST
:
1727 case AP_RESPONSE_MESSAGE_TOO_BIG
:
1728 ap_msg
->receive(ap_dev
, ap_msg
, ERR_PTR(-EINVAL
));
1730 default: /* Device is gone. */
1731 ap_msg
->receive(ap_dev
, ap_msg
, ERR_PTR(-ENODEV
));
1735 list_add_tail(&ap_msg
->list
, &ap_dev
->requestq
);
1736 ap_dev
->requestq_count
++;
1737 ap_dev
->total_request_count
++;
1740 ap_schedule_poll_timer();
1744 void ap_queue_message(struct ap_device
*ap_dev
, struct ap_message
*ap_msg
)
1746 unsigned long flags
;
1749 /* For asynchronous message handling a valid receive-callback
1751 BUG_ON(!ap_msg
->receive
);
1753 spin_lock_bh(&ap_dev
->lock
);
1754 if (!ap_dev
->unregistered
) {
1755 /* Make room on the queue by polling for finished requests. */
1756 rc
= ap_poll_queue(ap_dev
, &flags
);
1758 rc
= __ap_queue_message(ap_dev
, ap_msg
);
1760 wake_up(&ap_poll_wait
);
1762 ap_dev
->unregistered
= 1;
1764 ap_msg
->receive(ap_dev
, ap_msg
, ERR_PTR(-ENODEV
));
1767 spin_unlock_bh(&ap_dev
->lock
);
1769 device_unregister(&ap_dev
->device
);
1771 EXPORT_SYMBOL(ap_queue_message
);
1774 * ap_cancel_message(): Cancel a crypto request.
1775 * @ap_dev: The AP device that has the message queued
1776 * @ap_msg: The message that is to be removed
1778 * Cancel a crypto request. This is done by removing the request
1779 * from the device pending or request queue. Note that the
1780 * request stays on the AP queue. When it finishes the message
1781 * reply will be discarded because the psmid can't be found.
1783 void ap_cancel_message(struct ap_device
*ap_dev
, struct ap_message
*ap_msg
)
1785 struct ap_message
*tmp
;
1787 spin_lock_bh(&ap_dev
->lock
);
1788 if (!list_empty(&ap_msg
->list
)) {
1789 list_for_each_entry(tmp
, &ap_dev
->pendingq
, list
)
1790 if (tmp
->psmid
== ap_msg
->psmid
) {
1791 ap_dev
->pendingq_count
--;
1794 ap_dev
->requestq_count
--;
1796 list_del_init(&ap_msg
->list
);
1798 spin_unlock_bh(&ap_dev
->lock
);
1800 EXPORT_SYMBOL(ap_cancel_message
);
1803 * ap_poll_timeout(): AP receive polling for finished AP requests.
1804 * @unused: Unused pointer.
1806 * Schedules the AP tasklet using a high resolution timer.
1808 static enum hrtimer_restart
ap_poll_timeout(struct hrtimer
*unused
)
1810 tasklet_schedule(&ap_tasklet
);
1811 return HRTIMER_NORESTART
;
1815 * ap_reset(): Reset a not responding AP device.
1816 * @ap_dev: Pointer to the AP device
1818 * Reset a not responding AP device and move all requests from the
1819 * pending queue to the request queue.
1821 static void ap_reset(struct ap_device
*ap_dev
, unsigned long *flags
)
1825 atomic_sub(ap_dev
->queue_count
, &ap_poll_requests
);
1826 ap_dev
->queue_count
= 0;
1827 list_splice_init(&ap_dev
->pendingq
, &ap_dev
->requestq
);
1828 ap_dev
->requestq_count
+= ap_dev
->pendingq_count
;
1829 ap_dev
->pendingq_count
= 0;
1830 rc
= ap_init_queue(ap_dev
);
1832 ap_dev
->unregistered
= 1;
1834 *flags
|= AP_POLL_AFTER_TIMEOUT
;
1837 static int __ap_poll_device(struct ap_device
*ap_dev
, unsigned long *flags
)
1839 if (!ap_dev
->unregistered
) {
1840 if (ap_poll_queue(ap_dev
, flags
))
1841 ap_dev
->unregistered
= 1;
1842 if (ap_dev
->reset
== AP_RESET_DO
)
1843 ap_reset(ap_dev
, flags
);
1849 * ap_poll_all(): Poll all AP devices.
1850 * @dummy: Unused variable
1852 * Poll all AP devices on the bus in a round robin fashion. Continue
1853 * polling until bit 2^0 of the control flags is not set. If bit 2^1
1854 * of the control flags has been set arm the poll timer.
1856 static void ap_poll_all(unsigned long dummy
)
1858 unsigned long flags
;
1859 struct ap_device
*ap_dev
;
1861 /* Reset the indicator if interrupts are used. Thus new interrupts can
1862 * be received. Doing it in the beginning of the tasklet is therefor
1863 * important that no requests on any AP get lost.
1865 if (ap_using_interrupts())
1866 xchg(ap_airq
.lsi_ptr
, 0);
1869 spin_lock(&ap_device_list_lock
);
1870 list_for_each_entry(ap_dev
, &ap_device_list
, list
) {
1871 spin_lock(&ap_dev
->lock
);
1872 __ap_poll_device(ap_dev
, &flags
);
1873 spin_unlock(&ap_dev
->lock
);
1875 spin_unlock(&ap_device_list_lock
);
1876 } while (flags
& AP_POLL_IMMEDIATELY
);
1877 if (flags
& AP_POLL_AFTER_TIMEOUT
)
1878 __ap_schedule_poll_timer();
1882 * ap_poll_thread(): Thread that polls for finished requests.
1883 * @data: Unused pointer
1885 * AP bus poll thread. The purpose of this thread is to poll for
1886 * finished requests in a loop if there is a "free" cpu - that is
1887 * a cpu that doesn't have anything better to do. The polling stops
1888 * as soon as there is another task or if all messages have been
1891 static int ap_poll_thread(void *data
)
1893 DECLARE_WAITQUEUE(wait
, current
);
1894 unsigned long flags
;
1896 struct ap_device
*ap_dev
;
1898 set_user_nice(current
, MAX_NICE
);
1900 if (ap_suspend_flag
)
1902 if (need_resched()) {
1906 add_wait_queue(&ap_poll_wait
, &wait
);
1907 set_current_state(TASK_INTERRUPTIBLE
);
1908 if (kthread_should_stop())
1910 requests
= atomic_read(&ap_poll_requests
);
1913 set_current_state(TASK_RUNNING
);
1914 remove_wait_queue(&ap_poll_wait
, &wait
);
1917 spin_lock_bh(&ap_device_list_lock
);
1918 list_for_each_entry(ap_dev
, &ap_device_list
, list
) {
1919 spin_lock(&ap_dev
->lock
);
1920 __ap_poll_device(ap_dev
, &flags
);
1921 spin_unlock(&ap_dev
->lock
);
1923 spin_unlock_bh(&ap_device_list_lock
);
1925 set_current_state(TASK_RUNNING
);
1926 remove_wait_queue(&ap_poll_wait
, &wait
);
1930 static int ap_poll_thread_start(void)
1934 if (ap_using_interrupts() || ap_suspend_flag
)
1936 mutex_lock(&ap_poll_thread_mutex
);
1937 if (!ap_poll_kthread
) {
1938 ap_poll_kthread
= kthread_run(ap_poll_thread
, NULL
, "appoll");
1939 rc
= PTR_RET(ap_poll_kthread
);
1941 ap_poll_kthread
= NULL
;
1945 mutex_unlock(&ap_poll_thread_mutex
);
1949 static void ap_poll_thread_stop(void)
1951 mutex_lock(&ap_poll_thread_mutex
);
1952 if (ap_poll_kthread
) {
1953 kthread_stop(ap_poll_kthread
);
1954 ap_poll_kthread
= NULL
;
1956 mutex_unlock(&ap_poll_thread_mutex
);
1960 * ap_request_timeout(): Handling of request timeouts
1961 * @data: Holds the AP device.
1963 * Handles request timeouts.
1965 static void ap_request_timeout(unsigned long data
)
1967 struct ap_device
*ap_dev
= (struct ap_device
*) data
;
1969 if (ap_dev
->reset
== AP_RESET_ARMED
) {
1970 ap_dev
->reset
= AP_RESET_DO
;
1972 if (ap_using_interrupts())
1973 tasklet_schedule(&ap_tasklet
);
1977 static void ap_reset_domain(void)
1981 if ((ap_domain_index
!= -1) && (ap_test_config_domain(ap_domain_index
)))
1982 for (i
= 0; i
< AP_DEVICES
; i
++)
1983 ap_reset_queue(AP_MKQID(i
, ap_domain_index
));
1986 static void ap_reset_all(void)
1990 for (i
= 0; i
< AP_DOMAINS
; i
++) {
1991 if (!ap_test_config_domain(i
))
1993 for (j
= 0; j
< AP_DEVICES
; j
++) {
1994 if (!ap_test_config_card_id(j
))
1996 ap_reset_queue(AP_MKQID(j
, i
));
2001 static struct reset_call ap_reset_call
= {
2006 * ap_module_init(): The module initialization code.
2008 * Initializes the module.
2010 int __init
ap_module_init(void)
2014 if (ap_domain_index
< -1 || ap_domain_index
>= AP_DOMAINS
) {
2015 pr_warning("%d is not a valid cryptographic domain\n",
2019 /* In resume callback we need to know if the user had set the domain.
2020 * If so, we can not just reset it.
2022 if (ap_domain_index
>= 0)
2023 user_set_domain
= 1;
2025 if (ap_instructions_available() != 0) {
2026 pr_warning("The hardware system does not support "
2027 "AP instructions\n");
2030 if (ap_interrupts_available()) {
2031 rc
= register_adapter_interrupt(&ap_airq
);
2032 ap_airq_flag
= (rc
== 0);
2035 register_reset_call(&ap_reset_call
);
2037 /* Create /sys/bus/ap. */
2038 rc
= bus_register(&ap_bus_type
);
2041 for (i
= 0; ap_bus_attrs
[i
]; i
++) {
2042 rc
= bus_create_file(&ap_bus_type
, ap_bus_attrs
[i
]);
2047 /* Create /sys/devices/ap. */
2048 ap_root_device
= root_device_register("ap");
2049 rc
= PTR_RET(ap_root_device
);
2053 ap_work_queue
= create_singlethread_workqueue("kapwork");
2054 if (!ap_work_queue
) {
2059 ap_query_configuration();
2060 if (ap_select_domain() == 0)
2063 /* Setup the AP bus rescan timer. */
2064 init_timer(&ap_config_timer
);
2065 ap_config_timer
.function
= ap_config_timeout
;
2066 ap_config_timer
.data
= 0;
2067 ap_config_timer
.expires
= jiffies
+ ap_config_time
* HZ
;
2068 add_timer(&ap_config_timer
);
2070 /* Setup the high resultion poll timer.
2071 * If we are running under z/VM adjust polling to z/VM polling rate.
2074 poll_timeout
= 1500000;
2075 spin_lock_init(&ap_poll_timer_lock
);
2076 hrtimer_init(&ap_poll_timer
, CLOCK_MONOTONIC
, HRTIMER_MODE_ABS
);
2077 ap_poll_timer
.function
= ap_poll_timeout
;
2079 /* Start the low priority AP bus poll thread. */
2080 if (ap_thread_flag
) {
2081 rc
= ap_poll_thread_start();
2089 del_timer_sync(&ap_config_timer
);
2090 hrtimer_cancel(&ap_poll_timer
);
2091 destroy_workqueue(ap_work_queue
);
2093 root_device_unregister(ap_root_device
);
2096 bus_remove_file(&ap_bus_type
, ap_bus_attrs
[i
]);
2097 bus_unregister(&ap_bus_type
);
2099 unregister_reset_call(&ap_reset_call
);
2100 if (ap_using_interrupts())
2101 unregister_adapter_interrupt(&ap_airq
);
2105 static int __ap_match_all(struct device
*dev
, void *data
)
2111 * ap_modules_exit(): The module termination code
2113 * Terminates the module.
2115 void ap_module_exit(void)
2121 ap_poll_thread_stop();
2122 del_timer_sync(&ap_config_timer
);
2123 hrtimer_cancel(&ap_poll_timer
);
2124 destroy_workqueue(ap_work_queue
);
2125 tasklet_kill(&ap_tasklet
);
2126 while ((dev
= bus_find_device(&ap_bus_type
, NULL
, NULL
,
2129 device_unregister(dev
);
2132 for (i
= 0; ap_bus_attrs
[i
]; i
++)
2133 bus_remove_file(&ap_bus_type
, ap_bus_attrs
[i
]);
2134 root_device_unregister(ap_root_device
);
2135 bus_unregister(&ap_bus_type
);
2136 unregister_reset_call(&ap_reset_call
);
2137 if (ap_using_interrupts())
2138 unregister_adapter_interrupt(&ap_airq
);
2141 module_init(ap_module_init
);
2142 module_exit(ap_module_exit
);