xref: /openbmc/linux/drivers/s390/crypto/ap_bus.c (revision c819e2cf)
1 /*
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>
8  *
9  * Adjunct processor bus.
10  *
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)
14  * any later version.
15  *
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.
20  *
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.
24  */
25 
26 #define KMSG_COMPONENT "ap"
27 #define pr_fmt(fmt) KMSG_COMPONENT ": " fmt
28 
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>
41 #include <asm/airq.h>
42 #include <linux/atomic.h>
43 #include <asm/isc.h>
44 #include <linux/hrtimer.h>
45 #include <linux/ktime.h>
46 #include <asm/facility.h>
47 #include <linux/crypto.h>
48 
49 #include "ap_bus.h"
50 
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);
64 static void ap_config_timeout(unsigned long ptr);
65 static int ap_select_domain(void);
66 static void ap_query_configuration(void);
67 
68 /*
69  * Module description.
70  */
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");
76 
77 /*
78  * Module parameter
79  */
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);
84 
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).");
88 
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);
93 
94 /*
95  * Workqueue & timer for bus rescan.
96  */
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);
101 
102 /*
103  * Tasklet & timer for AP request polling and interrupts
104  */
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;
115 
116 /* Suspend flag */
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;
123 
124 /* Adapter interrupt definitions */
125 static int ap_airq_flag;
126 
127 static struct airq_struct ap_airq = {
128 	.handler = ap_interrupt_handler,
129 	.isc = AP_ISC,
130 };
131 
132 /**
133  * ap_using_interrupts() - Returns non-zero if interrupt support is
134  * available.
135  */
136 static inline int ap_using_interrupts(void)
137 {
138 	return ap_airq_flag;
139 }
140 
141 /**
142  * ap_intructions_available() - Test if AP instructions are available.
143  *
144  * Returns 0 if the AP instructions are installed.
145  */
146 static inline int ap_instructions_available(void)
147 {
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;
151 
152 	asm volatile(
153 		"   .long 0xb2af0000\n"		/* PQAP(TAPQ) */
154 		"0: la    %1,0\n"
155 		"1:\n"
156 		EX_TABLE(0b, 1b)
157 		: "+d" (reg0), "+d" (reg1), "+d" (reg2) : : "cc" );
158 	return reg1;
159 }
160 
161 /**
162  * ap_interrupts_available(): Test if AP interrupts are available.
163  *
164  * Returns 1 if AP interrupts are available.
165  */
166 static int ap_interrupts_available(void)
167 {
168 	return test_facility(2) && test_facility(65);
169 }
170 
171 /**
172  * ap_configuration_available(): Test if AP configuration
173  * information is available.
174  *
175  * Returns 1 if AP configuration information is available.
176  */
177 #ifdef CONFIG_64BIT
178 static int ap_configuration_available(void)
179 {
180 	return test_facility(2) && test_facility(12);
181 }
182 #endif
183 
184 /**
185  * ap_test_queue(): Test adjunct processor queue.
186  * @qid: The AP queue number
187  * @queue_depth: Pointer to queue depth value
188  * @device_type: Pointer to device type value
189  *
190  * Returns AP queue status structure.
191  */
192 static inline struct ap_queue_status
193 ap_test_queue(ap_qid_t qid, int *queue_depth, int *device_type)
194 {
195 	register unsigned long reg0 asm ("0") = qid;
196 	register struct ap_queue_status reg1 asm ("1");
197 	register unsigned long reg2 asm ("2") = 0UL;
198 
199 	asm volatile(".long 0xb2af0000"		/* PQAP(TAPQ) */
200 		     : "+d" (reg0), "=d" (reg1), "+d" (reg2) : : "cc");
201 	*device_type = (int) (reg2 >> 24);
202 	*queue_depth = (int) (reg2 & 0xff);
203 	return reg1;
204 }
205 
206 /**
207  * ap_reset_queue(): Reset adjunct processor queue.
208  * @qid: The AP queue number
209  *
210  * Returns AP queue status structure.
211  */
212 static inline struct ap_queue_status ap_reset_queue(ap_qid_t qid)
213 {
214 	register unsigned long reg0 asm ("0") = qid | 0x01000000UL;
215 	register struct ap_queue_status reg1 asm ("1");
216 	register unsigned long reg2 asm ("2") = 0UL;
217 
218 	asm volatile(
219 		".long 0xb2af0000"		/* PQAP(RAPQ) */
220 		: "+d" (reg0), "=d" (reg1), "+d" (reg2) : : "cc");
221 	return reg1;
222 }
223 
224 #ifdef CONFIG_64BIT
225 /**
226  * ap_queue_interruption_control(): Enable interruption for a specific AP.
227  * @qid: The AP queue number
228  * @ind: The notification indicator byte
229  *
230  * Returns AP queue status.
231  */
232 static inline struct ap_queue_status
233 ap_queue_interruption_control(ap_qid_t qid, void *ind)
234 {
235 	register unsigned long reg0 asm ("0") = qid | 0x03000000UL;
236 	register unsigned long reg1_in asm ("1") = 0x0000800000000000UL | AP_ISC;
237 	register struct ap_queue_status reg1_out asm ("1");
238 	register void *reg2 asm ("2") = ind;
239 	asm volatile(
240 		".long 0xb2af0000"		/* PQAP(AQIC) */
241 		: "+d" (reg0), "+d" (reg1_in), "=d" (reg1_out), "+d" (reg2)
242 		:
243 		: "cc" );
244 	return reg1_out;
245 }
246 #endif
247 
248 #ifdef CONFIG_64BIT
249 static inline struct ap_queue_status
250 __ap_query_functions(ap_qid_t qid, unsigned int *functions)
251 {
252 	register unsigned long reg0 asm ("0") = 0UL | qid | (1UL << 23);
253 	register struct ap_queue_status reg1 asm ("1") = AP_QUEUE_STATUS_INVALID;
254 	register unsigned long reg2 asm ("2");
255 
256 	asm volatile(
257 		".long 0xb2af0000\n"		/* PQAP(TAPQ) */
258 		"0:\n"
259 		EX_TABLE(0b, 0b)
260 		: "+d" (reg0), "+d" (reg1), "=d" (reg2)
261 		:
262 		: "cc");
263 
264 	*functions = (unsigned int)(reg2 >> 32);
265 	return reg1;
266 }
267 #endif
268 
269 #ifdef CONFIG_64BIT
270 static inline int __ap_query_configuration(struct ap_config_info *config)
271 {
272 	register unsigned long reg0 asm ("0") = 0x04000000UL;
273 	register unsigned long reg1 asm ("1") = -EINVAL;
274 	register unsigned char *reg2 asm ("2") = (unsigned char *)config;
275 
276 	asm volatile(
277 		".long 0xb2af0000\n"		/* PQAP(QCI) */
278 		"0: la    %1,0\n"
279 		"1:\n"
280 		EX_TABLE(0b, 1b)
281 		: "+d" (reg0), "+d" (reg1), "+d" (reg2)
282 		:
283 		: "cc");
284 
285 	return reg1;
286 }
287 #endif
288 
289 /**
290  * ap_query_functions(): Query supported functions.
291  * @qid: The AP queue number
292  * @functions: Pointer to functions field.
293  *
294  * Returns
295  *   0	     on success.
296  *   -ENODEV  if queue not valid.
297  *   -EBUSY   if device busy.
298  *   -EINVAL  if query function is not supported
299  */
300 static int ap_query_functions(ap_qid_t qid, unsigned int *functions)
301 {
302 #ifdef CONFIG_64BIT
303 	struct ap_queue_status status;
304 	int i;
305 	status = __ap_query_functions(qid, functions);
306 
307 	for (i = 0; i < AP_MAX_RESET; i++) {
308 		if (ap_queue_status_invalid_test(&status))
309 			return -ENODEV;
310 
311 		switch (status.response_code) {
312 		case AP_RESPONSE_NORMAL:
313 			return 0;
314 		case AP_RESPONSE_RESET_IN_PROGRESS:
315 		case AP_RESPONSE_BUSY:
316 			break;
317 		case AP_RESPONSE_Q_NOT_AVAIL:
318 		case AP_RESPONSE_DECONFIGURED:
319 		case AP_RESPONSE_CHECKSTOPPED:
320 		case AP_RESPONSE_INVALID_ADDRESS:
321 			return -ENODEV;
322 		case AP_RESPONSE_OTHERWISE_CHANGED:
323 			break;
324 		default:
325 			break;
326 		}
327 		if (i < AP_MAX_RESET - 1) {
328 			udelay(5);
329 			status = __ap_query_functions(qid, functions);
330 		}
331 	}
332 	return -EBUSY;
333 #else
334 	return -EINVAL;
335 #endif
336 }
337 
338 /**
339  * ap_queue_enable_interruption(): Enable interruption on an AP.
340  * @qid: The AP queue number
341  * @ind: the notification indicator byte
342  *
343  * Enables interruption on AP queue via ap_queue_interruption_control(). Based
344  * on the return value it waits a while and tests the AP queue if interrupts
345  * have been switched on using ap_test_queue().
346  */
347 static int ap_queue_enable_interruption(ap_qid_t qid, void *ind)
348 {
349 #ifdef CONFIG_64BIT
350 	struct ap_queue_status status;
351 	int t_depth, t_device_type, rc, i;
352 
353 	rc = -EBUSY;
354 	status = ap_queue_interruption_control(qid, ind);
355 
356 	for (i = 0; i < AP_MAX_RESET; i++) {
357 		switch (status.response_code) {
358 		case AP_RESPONSE_NORMAL:
359 			if (status.int_enabled)
360 				return 0;
361 			break;
362 		case AP_RESPONSE_RESET_IN_PROGRESS:
363 		case AP_RESPONSE_BUSY:
364 			if (i < AP_MAX_RESET - 1) {
365 				udelay(5);
366 				status = ap_queue_interruption_control(qid,
367 								       ind);
368 				continue;
369 			}
370 			break;
371 		case AP_RESPONSE_Q_NOT_AVAIL:
372 		case AP_RESPONSE_DECONFIGURED:
373 		case AP_RESPONSE_CHECKSTOPPED:
374 		case AP_RESPONSE_INVALID_ADDRESS:
375 			return -ENODEV;
376 		case AP_RESPONSE_OTHERWISE_CHANGED:
377 			if (status.int_enabled)
378 				return 0;
379 			break;
380 		default:
381 			break;
382 		}
383 		if (i < AP_MAX_RESET - 1) {
384 			udelay(5);
385 			status = ap_test_queue(qid, &t_depth, &t_device_type);
386 		}
387 	}
388 	return rc;
389 #else
390 	return -EINVAL;
391 #endif
392 }
393 
394 /**
395  * __ap_send(): Send message to adjunct processor queue.
396  * @qid: The AP queue number
397  * @psmid: The program supplied message identifier
398  * @msg: The message text
399  * @length: The message length
400  * @special: Special Bit
401  *
402  * Returns AP queue status structure.
403  * Condition code 1 on NQAP can't happen because the L bit is 1.
404  * Condition code 2 on NQAP also means the send is incomplete,
405  * because a segment boundary was reached. The NQAP is repeated.
406  */
407 static inline struct ap_queue_status
408 __ap_send(ap_qid_t qid, unsigned long long psmid, void *msg, size_t length,
409 	  unsigned int special)
410 {
411 	typedef struct { char _[length]; } msgblock;
412 	register unsigned long reg0 asm ("0") = qid | 0x40000000UL;
413 	register struct ap_queue_status reg1 asm ("1");
414 	register unsigned long reg2 asm ("2") = (unsigned long) msg;
415 	register unsigned long reg3 asm ("3") = (unsigned long) length;
416 	register unsigned long reg4 asm ("4") = (unsigned int) (psmid >> 32);
417 	register unsigned long reg5 asm ("5") = psmid & 0xffffffff;
418 
419 	if (special == 1)
420 		reg0 |= 0x400000UL;
421 
422 	asm volatile (
423 		"0: .long 0xb2ad0042\n"		/* NQAP */
424 		"   brc   2,0b"
425 		: "+d" (reg0), "=d" (reg1), "+d" (reg2), "+d" (reg3)
426 		: "d" (reg4), "d" (reg5), "m" (*(msgblock *) msg)
427 		: "cc" );
428 	return reg1;
429 }
430 
431 int ap_send(ap_qid_t qid, unsigned long long psmid, void *msg, size_t length)
432 {
433 	struct ap_queue_status status;
434 
435 	status = __ap_send(qid, psmid, msg, length, 0);
436 	switch (status.response_code) {
437 	case AP_RESPONSE_NORMAL:
438 		return 0;
439 	case AP_RESPONSE_Q_FULL:
440 	case AP_RESPONSE_RESET_IN_PROGRESS:
441 		return -EBUSY;
442 	case AP_RESPONSE_REQ_FAC_NOT_INST:
443 		return -EINVAL;
444 	default:	/* Device is gone. */
445 		return -ENODEV;
446 	}
447 }
448 EXPORT_SYMBOL(ap_send);
449 
450 /**
451  * __ap_recv(): Receive message from adjunct processor queue.
452  * @qid: The AP queue number
453  * @psmid: Pointer to program supplied message identifier
454  * @msg: The message text
455  * @length: The message length
456  *
457  * Returns AP queue status structure.
458  * Condition code 1 on DQAP means the receive has taken place
459  * but only partially.	The response is incomplete, hence the
460  * DQAP is repeated.
461  * Condition code 2 on DQAP also means the receive is incomplete,
462  * this time because a segment boundary was reached. Again, the
463  * DQAP is repeated.
464  * Note that gpr2 is used by the DQAP instruction to keep track of
465  * any 'residual' length, in case the instruction gets interrupted.
466  * Hence it gets zeroed before the instruction.
467  */
468 static inline struct ap_queue_status
469 __ap_recv(ap_qid_t qid, unsigned long long *psmid, void *msg, size_t length)
470 {
471 	typedef struct { char _[length]; } msgblock;
472 	register unsigned long reg0 asm("0") = qid | 0x80000000UL;
473 	register struct ap_queue_status reg1 asm ("1");
474 	register unsigned long reg2 asm("2") = 0UL;
475 	register unsigned long reg4 asm("4") = (unsigned long) msg;
476 	register unsigned long reg5 asm("5") = (unsigned long) length;
477 	register unsigned long reg6 asm("6") = 0UL;
478 	register unsigned long reg7 asm("7") = 0UL;
479 
480 
481 	asm volatile(
482 		"0: .long 0xb2ae0064\n"		/* DQAP */
483 		"   brc   6,0b\n"
484 		: "+d" (reg0), "=d" (reg1), "+d" (reg2),
485 		"+d" (reg4), "+d" (reg5), "+d" (reg6), "+d" (reg7),
486 		"=m" (*(msgblock *) msg) : : "cc" );
487 	*psmid = (((unsigned long long) reg6) << 32) + reg7;
488 	return reg1;
489 }
490 
491 int ap_recv(ap_qid_t qid, unsigned long long *psmid, void *msg, size_t length)
492 {
493 	struct ap_queue_status status;
494 
495 	status = __ap_recv(qid, psmid, msg, length);
496 	switch (status.response_code) {
497 	case AP_RESPONSE_NORMAL:
498 		return 0;
499 	case AP_RESPONSE_NO_PENDING_REPLY:
500 		if (status.queue_empty)
501 			return -ENOENT;
502 		return -EBUSY;
503 	case AP_RESPONSE_RESET_IN_PROGRESS:
504 		return -EBUSY;
505 	default:
506 		return -ENODEV;
507 	}
508 }
509 EXPORT_SYMBOL(ap_recv);
510 
511 /**
512  * ap_query_queue(): Check if an AP queue is available.
513  * @qid: The AP queue number
514  * @queue_depth: Pointer to queue depth value
515  * @device_type: Pointer to device type value
516  *
517  * The test is repeated for AP_MAX_RESET times.
518  */
519 static int ap_query_queue(ap_qid_t qid, int *queue_depth, int *device_type)
520 {
521 	struct ap_queue_status status;
522 	int t_depth, t_device_type, rc, i;
523 
524 	rc = -EBUSY;
525 	for (i = 0; i < AP_MAX_RESET; i++) {
526 		status = ap_test_queue(qid, &t_depth, &t_device_type);
527 		switch (status.response_code) {
528 		case AP_RESPONSE_NORMAL:
529 			*queue_depth = t_depth + 1;
530 			*device_type = t_device_type;
531 			rc = 0;
532 			break;
533 		case AP_RESPONSE_Q_NOT_AVAIL:
534 			rc = -ENODEV;
535 			break;
536 		case AP_RESPONSE_RESET_IN_PROGRESS:
537 			break;
538 		case AP_RESPONSE_DECONFIGURED:
539 			rc = -ENODEV;
540 			break;
541 		case AP_RESPONSE_CHECKSTOPPED:
542 			rc = -ENODEV;
543 			break;
544 		case AP_RESPONSE_INVALID_ADDRESS:
545 			rc = -ENODEV;
546 			break;
547 		case AP_RESPONSE_OTHERWISE_CHANGED:
548 			break;
549 		case AP_RESPONSE_BUSY:
550 			break;
551 		default:
552 			BUG();
553 		}
554 		if (rc != -EBUSY)
555 			break;
556 		if (i < AP_MAX_RESET - 1)
557 			udelay(5);
558 	}
559 	return rc;
560 }
561 
562 /**
563  * ap_init_queue(): Reset an AP queue.
564  * @qid: The AP queue number
565  *
566  * Reset an AP queue and wait for it to become available again.
567  */
568 static int ap_init_queue(ap_qid_t qid)
569 {
570 	struct ap_queue_status status;
571 	int rc, dummy, i;
572 
573 	rc = -ENODEV;
574 	status = ap_reset_queue(qid);
575 	for (i = 0; i < AP_MAX_RESET; i++) {
576 		switch (status.response_code) {
577 		case AP_RESPONSE_NORMAL:
578 			if (status.queue_empty)
579 				rc = 0;
580 			break;
581 		case AP_RESPONSE_Q_NOT_AVAIL:
582 		case AP_RESPONSE_DECONFIGURED:
583 		case AP_RESPONSE_CHECKSTOPPED:
584 			i = AP_MAX_RESET;	/* return with -ENODEV */
585 			break;
586 		case AP_RESPONSE_RESET_IN_PROGRESS:
587 			rc = -EBUSY;
588 		case AP_RESPONSE_BUSY:
589 		default:
590 			break;
591 		}
592 		if (rc != -ENODEV && rc != -EBUSY)
593 			break;
594 		if (i < AP_MAX_RESET - 1) {
595 			/* Time we are waiting until we give up (0.7sec * 90).
596 			 * Since the actual request (in progress) will not
597 			 * interrupted immediately for the reset command,
598 			 * we have to be patient. In worst case we have to
599 			 * wait 60sec + reset time (some msec).
600 			 */
601 			schedule_timeout(AP_RESET_TIMEOUT);
602 			status = ap_test_queue(qid, &dummy, &dummy);
603 		}
604 	}
605 	if (rc == 0 && ap_using_interrupts()) {
606 		rc = ap_queue_enable_interruption(qid, ap_airq.lsi_ptr);
607 		/* If interruption mode is supported by the machine,
608 		* but an AP can not be enabled for interruption then
609 		* the AP will be discarded.    */
610 		if (rc)
611 			pr_err("Registering adapter interrupts for "
612 			       "AP %d failed\n", AP_QID_DEVICE(qid));
613 	}
614 	return rc;
615 }
616 
617 /**
618  * ap_increase_queue_count(): Arm request timeout.
619  * @ap_dev: Pointer to an AP device.
620  *
621  * Arm request timeout if an AP device was idle and a new request is submitted.
622  */
623 static void ap_increase_queue_count(struct ap_device *ap_dev)
624 {
625 	int timeout = ap_dev->drv->request_timeout;
626 
627 	ap_dev->queue_count++;
628 	if (ap_dev->queue_count == 1) {
629 		mod_timer(&ap_dev->timeout, jiffies + timeout);
630 		ap_dev->reset = AP_RESET_ARMED;
631 	}
632 }
633 
634 /**
635  * ap_decrease_queue_count(): Decrease queue count.
636  * @ap_dev: Pointer to an AP device.
637  *
638  * If AP device is still alive, re-schedule request timeout if there are still
639  * pending requests.
640  */
641 static void ap_decrease_queue_count(struct ap_device *ap_dev)
642 {
643 	int timeout = ap_dev->drv->request_timeout;
644 
645 	ap_dev->queue_count--;
646 	if (ap_dev->queue_count > 0)
647 		mod_timer(&ap_dev->timeout, jiffies + timeout);
648 	else
649 		/*
650 		 * The timeout timer should to be disabled now - since
651 		 * del_timer_sync() is very expensive, we just tell via the
652 		 * reset flag to ignore the pending timeout timer.
653 		 */
654 		ap_dev->reset = AP_RESET_IGNORE;
655 }
656 
657 /*
658  * AP device related attributes.
659  */
660 static ssize_t ap_hwtype_show(struct device *dev,
661 			      struct device_attribute *attr, char *buf)
662 {
663 	struct ap_device *ap_dev = to_ap_dev(dev);
664 	return snprintf(buf, PAGE_SIZE, "%d\n", ap_dev->device_type);
665 }
666 
667 static DEVICE_ATTR(hwtype, 0444, ap_hwtype_show, NULL);
668 
669 static ssize_t ap_raw_hwtype_show(struct device *dev,
670 			      struct device_attribute *attr, char *buf)
671 {
672 	struct ap_device *ap_dev = to_ap_dev(dev);
673 
674 	return snprintf(buf, PAGE_SIZE, "%d\n", ap_dev->raw_hwtype);
675 }
676 
677 static DEVICE_ATTR(raw_hwtype, 0444, ap_raw_hwtype_show, NULL);
678 
679 static ssize_t ap_depth_show(struct device *dev, struct device_attribute *attr,
680 			     char *buf)
681 {
682 	struct ap_device *ap_dev = to_ap_dev(dev);
683 	return snprintf(buf, PAGE_SIZE, "%d\n", ap_dev->queue_depth);
684 }
685 
686 static DEVICE_ATTR(depth, 0444, ap_depth_show, NULL);
687 static ssize_t ap_request_count_show(struct device *dev,
688 				     struct device_attribute *attr,
689 				     char *buf)
690 {
691 	struct ap_device *ap_dev = to_ap_dev(dev);
692 	int rc;
693 
694 	spin_lock_bh(&ap_dev->lock);
695 	rc = snprintf(buf, PAGE_SIZE, "%d\n", ap_dev->total_request_count);
696 	spin_unlock_bh(&ap_dev->lock);
697 	return rc;
698 }
699 
700 static DEVICE_ATTR(request_count, 0444, ap_request_count_show, NULL);
701 
702 static ssize_t ap_requestq_count_show(struct device *dev,
703 				      struct device_attribute *attr, char *buf)
704 {
705 	struct ap_device *ap_dev = to_ap_dev(dev);
706 	int rc;
707 
708 	spin_lock_bh(&ap_dev->lock);
709 	rc = snprintf(buf, PAGE_SIZE, "%d\n", ap_dev->requestq_count);
710 	spin_unlock_bh(&ap_dev->lock);
711 	return rc;
712 }
713 
714 static DEVICE_ATTR(requestq_count, 0444, ap_requestq_count_show, NULL);
715 
716 static ssize_t ap_pendingq_count_show(struct device *dev,
717 				      struct device_attribute *attr, char *buf)
718 {
719 	struct ap_device *ap_dev = to_ap_dev(dev);
720 	int rc;
721 
722 	spin_lock_bh(&ap_dev->lock);
723 	rc = snprintf(buf, PAGE_SIZE, "%d\n", ap_dev->pendingq_count);
724 	spin_unlock_bh(&ap_dev->lock);
725 	return rc;
726 }
727 
728 static DEVICE_ATTR(pendingq_count, 0444, ap_pendingq_count_show, NULL);
729 
730 static ssize_t ap_modalias_show(struct device *dev,
731 				struct device_attribute *attr, char *buf)
732 {
733 	return sprintf(buf, "ap:t%02X", to_ap_dev(dev)->device_type);
734 }
735 
736 static DEVICE_ATTR(modalias, 0444, ap_modalias_show, NULL);
737 
738 static ssize_t ap_functions_show(struct device *dev,
739 				 struct device_attribute *attr, char *buf)
740 {
741 	struct ap_device *ap_dev = to_ap_dev(dev);
742 	return snprintf(buf, PAGE_SIZE, "0x%08X\n", ap_dev->functions);
743 }
744 
745 static DEVICE_ATTR(ap_functions, 0444, ap_functions_show, NULL);
746 
747 static struct attribute *ap_dev_attrs[] = {
748 	&dev_attr_hwtype.attr,
749 	&dev_attr_raw_hwtype.attr,
750 	&dev_attr_depth.attr,
751 	&dev_attr_request_count.attr,
752 	&dev_attr_requestq_count.attr,
753 	&dev_attr_pendingq_count.attr,
754 	&dev_attr_modalias.attr,
755 	&dev_attr_ap_functions.attr,
756 	NULL
757 };
758 static struct attribute_group ap_dev_attr_group = {
759 	.attrs = ap_dev_attrs
760 };
761 
762 /**
763  * ap_bus_match()
764  * @dev: Pointer to device
765  * @drv: Pointer to device_driver
766  *
767  * AP bus driver registration/unregistration.
768  */
769 static int ap_bus_match(struct device *dev, struct device_driver *drv)
770 {
771 	struct ap_device *ap_dev = to_ap_dev(dev);
772 	struct ap_driver *ap_drv = to_ap_drv(drv);
773 	struct ap_device_id *id;
774 
775 	/*
776 	 * Compare device type of the device with the list of
777 	 * supported types of the device_driver.
778 	 */
779 	for (id = ap_drv->ids; id->match_flags; id++) {
780 		if ((id->match_flags & AP_DEVICE_ID_MATCH_DEVICE_TYPE) &&
781 		    (id->dev_type != ap_dev->device_type))
782 			continue;
783 		return 1;
784 	}
785 	return 0;
786 }
787 
788 /**
789  * ap_uevent(): Uevent function for AP devices.
790  * @dev: Pointer to device
791  * @env: Pointer to kobj_uevent_env
792  *
793  * It sets up a single environment variable DEV_TYPE which contains the
794  * hardware device type.
795  */
796 static int ap_uevent (struct device *dev, struct kobj_uevent_env *env)
797 {
798 	struct ap_device *ap_dev = to_ap_dev(dev);
799 	int retval = 0;
800 
801 	if (!ap_dev)
802 		return -ENODEV;
803 
804 	/* Set up DEV_TYPE environment variable. */
805 	retval = add_uevent_var(env, "DEV_TYPE=%04X", ap_dev->device_type);
806 	if (retval)
807 		return retval;
808 
809 	/* Add MODALIAS= */
810 	retval = add_uevent_var(env, "MODALIAS=ap:t%02X", ap_dev->device_type);
811 
812 	return retval;
813 }
814 
815 static int ap_bus_suspend(struct device *dev, pm_message_t state)
816 {
817 	struct ap_device *ap_dev = to_ap_dev(dev);
818 	unsigned long flags;
819 
820 	if (!ap_suspend_flag) {
821 		ap_suspend_flag = 1;
822 
823 		/* Disable scanning for devices, thus we do not want to scan
824 		 * for them after removing.
825 		 */
826 		del_timer_sync(&ap_config_timer);
827 		if (ap_work_queue != NULL) {
828 			destroy_workqueue(ap_work_queue);
829 			ap_work_queue = NULL;
830 		}
831 
832 		tasklet_disable(&ap_tasklet);
833 	}
834 	/* Poll on the device until all requests are finished. */
835 	do {
836 		flags = 0;
837 		spin_lock_bh(&ap_dev->lock);
838 		__ap_poll_device(ap_dev, &flags);
839 		spin_unlock_bh(&ap_dev->lock);
840 	} while ((flags & 1) || (flags & 2));
841 
842 	spin_lock_bh(&ap_dev->lock);
843 	ap_dev->unregistered = 1;
844 	spin_unlock_bh(&ap_dev->lock);
845 
846 	return 0;
847 }
848 
849 static int ap_bus_resume(struct device *dev)
850 {
851 	struct ap_device *ap_dev = to_ap_dev(dev);
852 	int rc;
853 
854 	if (ap_suspend_flag) {
855 		ap_suspend_flag = 0;
856 		if (ap_interrupts_available()) {
857 			if (!ap_using_interrupts()) {
858 				rc = register_adapter_interrupt(&ap_airq);
859 				ap_airq_flag = (rc == 0);
860 			}
861 		} else {
862 			if (ap_using_interrupts()) {
863 				unregister_adapter_interrupt(&ap_airq);
864 				ap_airq_flag = 0;
865 			}
866 		}
867 		ap_query_configuration();
868 		if (!user_set_domain) {
869 			ap_domain_index = -1;
870 			ap_select_domain();
871 		}
872 		init_timer(&ap_config_timer);
873 		ap_config_timer.function = ap_config_timeout;
874 		ap_config_timer.data = 0;
875 		ap_config_timer.expires = jiffies + ap_config_time * HZ;
876 		add_timer(&ap_config_timer);
877 		ap_work_queue = create_singlethread_workqueue("kapwork");
878 		if (!ap_work_queue)
879 			return -ENOMEM;
880 		tasklet_enable(&ap_tasklet);
881 		if (!ap_using_interrupts())
882 			ap_schedule_poll_timer();
883 		else
884 			tasklet_schedule(&ap_tasklet);
885 		if (ap_thread_flag)
886 			rc = ap_poll_thread_start();
887 		else
888 			rc = 0;
889 	} else
890 		rc = 0;
891 	if (AP_QID_QUEUE(ap_dev->qid) != ap_domain_index) {
892 		spin_lock_bh(&ap_dev->lock);
893 		ap_dev->qid = AP_MKQID(AP_QID_DEVICE(ap_dev->qid),
894 				       ap_domain_index);
895 		spin_unlock_bh(&ap_dev->lock);
896 	}
897 	queue_work(ap_work_queue, &ap_config_work);
898 
899 	return rc;
900 }
901 
902 static struct bus_type ap_bus_type = {
903 	.name = "ap",
904 	.match = &ap_bus_match,
905 	.uevent = &ap_uevent,
906 	.suspend = ap_bus_suspend,
907 	.resume = ap_bus_resume
908 };
909 
910 static int ap_device_probe(struct device *dev)
911 {
912 	struct ap_device *ap_dev = to_ap_dev(dev);
913 	struct ap_driver *ap_drv = to_ap_drv(dev->driver);
914 	int rc;
915 
916 	ap_dev->drv = ap_drv;
917 
918 	spin_lock_bh(&ap_device_list_lock);
919 	list_add(&ap_dev->list, &ap_device_list);
920 	spin_unlock_bh(&ap_device_list_lock);
921 
922 	rc = ap_drv->probe ? ap_drv->probe(ap_dev) : -ENODEV;
923 	if (rc) {
924 		spin_lock_bh(&ap_device_list_lock);
925 		list_del_init(&ap_dev->list);
926 		spin_unlock_bh(&ap_device_list_lock);
927 	}
928 	return rc;
929 }
930 
931 /**
932  * __ap_flush_queue(): Flush requests.
933  * @ap_dev: Pointer to the AP device
934  *
935  * Flush all requests from the request/pending queue of an AP device.
936  */
937 static void __ap_flush_queue(struct ap_device *ap_dev)
938 {
939 	struct ap_message *ap_msg, *next;
940 
941 	list_for_each_entry_safe(ap_msg, next, &ap_dev->pendingq, list) {
942 		list_del_init(&ap_msg->list);
943 		ap_dev->pendingq_count--;
944 		ap_msg->receive(ap_dev, ap_msg, ERR_PTR(-ENODEV));
945 	}
946 	list_for_each_entry_safe(ap_msg, next, &ap_dev->requestq, list) {
947 		list_del_init(&ap_msg->list);
948 		ap_dev->requestq_count--;
949 		ap_msg->receive(ap_dev, ap_msg, ERR_PTR(-ENODEV));
950 	}
951 }
952 
953 void ap_flush_queue(struct ap_device *ap_dev)
954 {
955 	spin_lock_bh(&ap_dev->lock);
956 	__ap_flush_queue(ap_dev);
957 	spin_unlock_bh(&ap_dev->lock);
958 }
959 EXPORT_SYMBOL(ap_flush_queue);
960 
961 static int ap_device_remove(struct device *dev)
962 {
963 	struct ap_device *ap_dev = to_ap_dev(dev);
964 	struct ap_driver *ap_drv = ap_dev->drv;
965 
966 	ap_flush_queue(ap_dev);
967 	del_timer_sync(&ap_dev->timeout);
968 	spin_lock_bh(&ap_device_list_lock);
969 	list_del_init(&ap_dev->list);
970 	spin_unlock_bh(&ap_device_list_lock);
971 	if (ap_drv->remove)
972 		ap_drv->remove(ap_dev);
973 	spin_lock_bh(&ap_dev->lock);
974 	atomic_sub(ap_dev->queue_count, &ap_poll_requests);
975 	spin_unlock_bh(&ap_dev->lock);
976 	return 0;
977 }
978 
979 int ap_driver_register(struct ap_driver *ap_drv, struct module *owner,
980 		       char *name)
981 {
982 	struct device_driver *drv = &ap_drv->driver;
983 
984 	drv->bus = &ap_bus_type;
985 	drv->probe = ap_device_probe;
986 	drv->remove = ap_device_remove;
987 	drv->owner = owner;
988 	drv->name = name;
989 	return driver_register(drv);
990 }
991 EXPORT_SYMBOL(ap_driver_register);
992 
993 void ap_driver_unregister(struct ap_driver *ap_drv)
994 {
995 	driver_unregister(&ap_drv->driver);
996 }
997 EXPORT_SYMBOL(ap_driver_unregister);
998 
999 void ap_bus_force_rescan(void)
1000 {
1001 	/* reconfigure the AP bus rescan timer. */
1002 	mod_timer(&ap_config_timer, jiffies + ap_config_time * HZ);
1003 	/* processing a asynchronous bus rescan */
1004 	queue_work(ap_work_queue, &ap_config_work);
1005 	flush_work(&ap_config_work);
1006 }
1007 EXPORT_SYMBOL(ap_bus_force_rescan);
1008 
1009 /*
1010  * AP bus attributes.
1011  */
1012 static ssize_t ap_domain_show(struct bus_type *bus, char *buf)
1013 {
1014 	return snprintf(buf, PAGE_SIZE, "%d\n", ap_domain_index);
1015 }
1016 
1017 static BUS_ATTR(ap_domain, 0444, ap_domain_show, NULL);
1018 
1019 static ssize_t ap_control_domain_mask_show(struct bus_type *bus, char *buf)
1020 {
1021 	if (ap_configuration != NULL) { /* QCI not supported */
1022 		if (test_facility(76)) { /* format 1 - 256 bit domain field */
1023 			return snprintf(buf, PAGE_SIZE,
1024 				"0x%08x%08x%08x%08x%08x%08x%08x%08x\n",
1025 			ap_configuration->adm[0], ap_configuration->adm[1],
1026 			ap_configuration->adm[2], ap_configuration->adm[3],
1027 			ap_configuration->adm[4], ap_configuration->adm[5],
1028 			ap_configuration->adm[6], ap_configuration->adm[7]);
1029 		} else { /* format 0 - 16 bit domain field */
1030 			return snprintf(buf, PAGE_SIZE, "%08x%08x\n",
1031 			ap_configuration->adm[0], ap_configuration->adm[1]);
1032 		  }
1033 	} else {
1034 		return snprintf(buf, PAGE_SIZE, "not supported\n");
1035 	  }
1036 }
1037 
1038 static BUS_ATTR(ap_control_domain_mask, 0444,
1039 		ap_control_domain_mask_show, NULL);
1040 
1041 static ssize_t ap_config_time_show(struct bus_type *bus, char *buf)
1042 {
1043 	return snprintf(buf, PAGE_SIZE, "%d\n", ap_config_time);
1044 }
1045 
1046 static ssize_t ap_interrupts_show(struct bus_type *bus, char *buf)
1047 {
1048 	return snprintf(buf, PAGE_SIZE, "%d\n",
1049 			ap_using_interrupts() ? 1 : 0);
1050 }
1051 
1052 static BUS_ATTR(ap_interrupts, 0444, ap_interrupts_show, NULL);
1053 
1054 static ssize_t ap_config_time_store(struct bus_type *bus,
1055 				    const char *buf, size_t count)
1056 {
1057 	int time;
1058 
1059 	if (sscanf(buf, "%d\n", &time) != 1 || time < 5 || time > 120)
1060 		return -EINVAL;
1061 	ap_config_time = time;
1062 	if (!timer_pending(&ap_config_timer) ||
1063 	    !mod_timer(&ap_config_timer, jiffies + ap_config_time * HZ)) {
1064 		ap_config_timer.expires = jiffies + ap_config_time * HZ;
1065 		add_timer(&ap_config_timer);
1066 	}
1067 	return count;
1068 }
1069 
1070 static BUS_ATTR(config_time, 0644, ap_config_time_show, ap_config_time_store);
1071 
1072 static ssize_t ap_poll_thread_show(struct bus_type *bus, char *buf)
1073 {
1074 	return snprintf(buf, PAGE_SIZE, "%d\n", ap_poll_kthread ? 1 : 0);
1075 }
1076 
1077 static ssize_t ap_poll_thread_store(struct bus_type *bus,
1078 				    const char *buf, size_t count)
1079 {
1080 	int flag, rc;
1081 
1082 	if (sscanf(buf, "%d\n", &flag) != 1)
1083 		return -EINVAL;
1084 	if (flag) {
1085 		rc = ap_poll_thread_start();
1086 		if (rc)
1087 			return rc;
1088 	}
1089 	else
1090 		ap_poll_thread_stop();
1091 	return count;
1092 }
1093 
1094 static BUS_ATTR(poll_thread, 0644, ap_poll_thread_show, ap_poll_thread_store);
1095 
1096 static ssize_t poll_timeout_show(struct bus_type *bus, char *buf)
1097 {
1098 	return snprintf(buf, PAGE_SIZE, "%llu\n", poll_timeout);
1099 }
1100 
1101 static ssize_t poll_timeout_store(struct bus_type *bus, const char *buf,
1102 				  size_t count)
1103 {
1104 	unsigned long long time;
1105 	ktime_t hr_time;
1106 
1107 	/* 120 seconds = maximum poll interval */
1108 	if (sscanf(buf, "%llu\n", &time) != 1 || time < 1 ||
1109 	    time > 120000000000ULL)
1110 		return -EINVAL;
1111 	poll_timeout = time;
1112 	hr_time = ktime_set(0, poll_timeout);
1113 
1114 	if (!hrtimer_is_queued(&ap_poll_timer) ||
1115 	    !hrtimer_forward(&ap_poll_timer, hrtimer_get_expires(&ap_poll_timer), hr_time)) {
1116 		hrtimer_set_expires(&ap_poll_timer, hr_time);
1117 		hrtimer_start_expires(&ap_poll_timer, HRTIMER_MODE_ABS);
1118 	}
1119 	return count;
1120 }
1121 
1122 static BUS_ATTR(poll_timeout, 0644, poll_timeout_show, poll_timeout_store);
1123 
1124 static struct bus_attribute *const ap_bus_attrs[] = {
1125 	&bus_attr_ap_domain,
1126 	&bus_attr_ap_control_domain_mask,
1127 	&bus_attr_config_time,
1128 	&bus_attr_poll_thread,
1129 	&bus_attr_ap_interrupts,
1130 	&bus_attr_poll_timeout,
1131 	NULL,
1132 };
1133 
1134 static inline int ap_test_config(unsigned int *field, unsigned int nr)
1135 {
1136 	if (nr > 0xFFu)
1137 		return 0;
1138 	return ap_test_bit((field + (nr >> 5)), (nr & 0x1f));
1139 }
1140 
1141 /*
1142  * ap_test_config_card_id(): Test, whether an AP card ID is configured.
1143  * @id AP card ID
1144  *
1145  * Returns 0 if the card is not configured
1146  *	   1 if the card is configured or
1147  *	     if the configuration information is not available
1148  */
1149 static inline int ap_test_config_card_id(unsigned int id)
1150 {
1151 	if (!ap_configuration)
1152 		return 1;
1153 	return ap_test_config(ap_configuration->apm, id);
1154 }
1155 
1156 /*
1157  * ap_test_config_domain(): Test, whether an AP usage domain is configured.
1158  * @domain AP usage domain ID
1159  *
1160  * Returns 0 if the usage domain is not configured
1161  *	   1 if the usage domain is configured or
1162  *	     if the configuration information is not available
1163  */
1164 static inline int ap_test_config_domain(unsigned int domain)
1165 {
1166 	if (!ap_configuration)	  /* QCI not supported */
1167 		if (domain < 16)
1168 			return 1; /* then domains 0...15 are configured */
1169 		else
1170 			return 0;
1171 	else
1172 		return ap_test_config(ap_configuration->aqm, domain);
1173 }
1174 
1175 /**
1176  * ap_query_configuration(): Query AP configuration information.
1177  *
1178  * Query information of installed cards and configured domains from AP.
1179  */
1180 static void ap_query_configuration(void)
1181 {
1182 #ifdef CONFIG_64BIT
1183 	if (ap_configuration_available()) {
1184 		if (!ap_configuration)
1185 			ap_configuration =
1186 				kzalloc(sizeof(struct ap_config_info),
1187 					GFP_KERNEL);
1188 		if (ap_configuration)
1189 			__ap_query_configuration(ap_configuration);
1190 	} else
1191 		ap_configuration = NULL;
1192 #else
1193 	ap_configuration = NULL;
1194 #endif
1195 }
1196 
1197 /**
1198  * ap_select_domain(): Select an AP domain.
1199  *
1200  * Pick one of the 16 AP domains.
1201  */
1202 static int ap_select_domain(void)
1203 {
1204 	int queue_depth, device_type, count, max_count, best_domain;
1205 	ap_qid_t qid;
1206 	int rc, i, j;
1207 
1208 	/* IF APXA isn't installed, only 16 domains could be defined */
1209 	if (!ap_configuration->ap_extended && (ap_domain_index > 15))
1210 		return -EINVAL;
1211 
1212 	/*
1213 	 * We want to use a single domain. Either the one specified with
1214 	 * the "domain=" parameter or the domain with the maximum number
1215 	 * of devices.
1216 	 */
1217 	if (ap_domain_index >= 0 && ap_domain_index < AP_DOMAINS)
1218 		/* Domain has already been selected. */
1219 		return 0;
1220 	best_domain = -1;
1221 	max_count = 0;
1222 	for (i = 0; i < AP_DOMAINS; i++) {
1223 		if (!ap_test_config_domain(i))
1224 			continue;
1225 		count = 0;
1226 		for (j = 0; j < AP_DEVICES; j++) {
1227 			if (!ap_test_config_card_id(j))
1228 				continue;
1229 			qid = AP_MKQID(j, i);
1230 			rc = ap_query_queue(qid, &queue_depth, &device_type);
1231 			if (rc)
1232 				continue;
1233 			count++;
1234 		}
1235 		if (count > max_count) {
1236 			max_count = count;
1237 			best_domain = i;
1238 		}
1239 	}
1240 	if (best_domain >= 0){
1241 		ap_domain_index = best_domain;
1242 		return 0;
1243 	}
1244 	return -ENODEV;
1245 }
1246 
1247 /**
1248  * ap_probe_device_type(): Find the device type of an AP.
1249  * @ap_dev: pointer to the AP device.
1250  *
1251  * Find the device type if query queue returned a device type of 0.
1252  */
1253 static int ap_probe_device_type(struct ap_device *ap_dev)
1254 {
1255 	static unsigned char msg[] = {
1256 		0x00,0x06,0x00,0x00,0x00,0x00,0x00,0x00,
1257 		0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
1258 		0x00,0x00,0x00,0x58,0x00,0x00,0x00,0x00,
1259 		0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
1260 		0x01,0x00,0x43,0x43,0x41,0x2d,0x41,0x50,
1261 		0x50,0x4c,0x20,0x20,0x20,0x01,0x01,0x01,
1262 		0x00,0x00,0x00,0x00,0x50,0x4b,0x00,0x00,
1263 		0x00,0x00,0x01,0x1c,0x00,0x00,0x00,0x00,
1264 		0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
1265 		0x00,0x00,0x05,0xb8,0x00,0x00,0x00,0x00,
1266 		0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
1267 		0x70,0x00,0x41,0x00,0x00,0x00,0x00,0x00,
1268 		0x00,0x00,0x54,0x32,0x01,0x00,0xa0,0x00,
1269 		0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
1270 		0x00,0x00,0x00,0x00,0xb8,0x05,0x00,0x00,
1271 		0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
1272 		0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
1273 		0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
1274 		0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
1275 		0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
1276 		0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
1277 		0x00,0x00,0x0a,0x00,0x00,0x00,0x00,0x00,
1278 		0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
1279 		0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,
1280 		0x49,0x43,0x53,0x46,0x20,0x20,0x20,0x20,
1281 		0x50,0x4b,0x0a,0x00,0x50,0x4b,0x43,0x53,
1282 		0x2d,0x31,0x2e,0x32,0x37,0x00,0x11,0x22,
1283 		0x33,0x44,0x55,0x66,0x77,0x88,0x99,0x00,
1284 		0x11,0x22,0x33,0x44,0x55,0x66,0x77,0x88,
1285 		0x99,0x00,0x11,0x22,0x33,0x44,0x55,0x66,
1286 		0x77,0x88,0x99,0x00,0x11,0x22,0x33,0x44,
1287 		0x55,0x66,0x77,0x88,0x99,0x00,0x11,0x22,
1288 		0x33,0x44,0x55,0x66,0x77,0x88,0x99,0x00,
1289 		0x11,0x22,0x33,0x5d,0x00,0x5b,0x00,0x77,
1290 		0x88,0x1e,0x00,0x00,0x57,0x00,0x00,0x00,
1291 		0x00,0x04,0x00,0x00,0x4f,0x00,0x00,0x00,
1292 		0x03,0x02,0x00,0x00,0x40,0x01,0x00,0x01,
1293 		0xce,0x02,0x68,0x2d,0x5f,0xa9,0xde,0x0c,
1294 		0xf6,0xd2,0x7b,0x58,0x4b,0xf9,0x28,0x68,
1295 		0x3d,0xb4,0xf4,0xef,0x78,0xd5,0xbe,0x66,
1296 		0x63,0x42,0xef,0xf8,0xfd,0xa4,0xf8,0xb0,
1297 		0x8e,0x29,0xc2,0xc9,0x2e,0xd8,0x45,0xb8,
1298 		0x53,0x8c,0x6f,0x4e,0x72,0x8f,0x6c,0x04,
1299 		0x9c,0x88,0xfc,0x1e,0xc5,0x83,0x55,0x57,
1300 		0xf7,0xdd,0xfd,0x4f,0x11,0x36,0x95,0x5d,
1301 	};
1302 	struct ap_queue_status status;
1303 	unsigned long long psmid;
1304 	char *reply;
1305 	int rc, i;
1306 
1307 	reply = (void *) get_zeroed_page(GFP_KERNEL);
1308 	if (!reply) {
1309 		rc = -ENOMEM;
1310 		goto out;
1311 	}
1312 
1313 	status = __ap_send(ap_dev->qid, 0x0102030405060708ULL,
1314 			   msg, sizeof(msg), 0);
1315 	if (status.response_code != AP_RESPONSE_NORMAL) {
1316 		rc = -ENODEV;
1317 		goto out_free;
1318 	}
1319 
1320 	/* Wait for the test message to complete. */
1321 	for (i = 0; i < 6; i++) {
1322 		mdelay(300);
1323 		status = __ap_recv(ap_dev->qid, &psmid, reply, 4096);
1324 		if (status.response_code == AP_RESPONSE_NORMAL &&
1325 		    psmid == 0x0102030405060708ULL)
1326 			break;
1327 	}
1328 	if (i < 6) {
1329 		/* Got an answer. */
1330 		if (reply[0] == 0x00 && reply[1] == 0x86)
1331 			ap_dev->device_type = AP_DEVICE_TYPE_PCICC;
1332 		else
1333 			ap_dev->device_type = AP_DEVICE_TYPE_PCICA;
1334 		rc = 0;
1335 	} else
1336 		rc = -ENODEV;
1337 
1338 out_free:
1339 	free_page((unsigned long) reply);
1340 out:
1341 	return rc;
1342 }
1343 
1344 static void ap_interrupt_handler(struct airq_struct *airq)
1345 {
1346 	inc_irq_stat(IRQIO_APB);
1347 	tasklet_schedule(&ap_tasklet);
1348 }
1349 
1350 /**
1351  * __ap_scan_bus(): Scan the AP bus.
1352  * @dev: Pointer to device
1353  * @data: Pointer to data
1354  *
1355  * Scan the AP bus for new devices.
1356  */
1357 static int __ap_scan_bus(struct device *dev, void *data)
1358 {
1359 	return to_ap_dev(dev)->qid == (ap_qid_t)(unsigned long) data;
1360 }
1361 
1362 static void ap_device_release(struct device *dev)
1363 {
1364 	struct ap_device *ap_dev = to_ap_dev(dev);
1365 
1366 	kfree(ap_dev);
1367 }
1368 
1369 static void ap_scan_bus(struct work_struct *unused)
1370 {
1371 	struct ap_device *ap_dev;
1372 	struct device *dev;
1373 	ap_qid_t qid;
1374 	int queue_depth, device_type;
1375 	unsigned int device_functions;
1376 	int rc, i;
1377 
1378 	ap_query_configuration();
1379 	if (ap_select_domain() != 0) {
1380 		return;
1381 	}
1382 	for (i = 0; i < AP_DEVICES; i++) {
1383 		qid = AP_MKQID(i, ap_domain_index);
1384 		dev = bus_find_device(&ap_bus_type, NULL,
1385 				      (void *)(unsigned long)qid,
1386 				      __ap_scan_bus);
1387 		if (ap_test_config_card_id(i))
1388 			rc = ap_query_queue(qid, &queue_depth, &device_type);
1389 		else
1390 			rc = -ENODEV;
1391 		if (dev) {
1392 			if (rc == -EBUSY) {
1393 				set_current_state(TASK_UNINTERRUPTIBLE);
1394 				schedule_timeout(AP_RESET_TIMEOUT);
1395 				rc = ap_query_queue(qid, &queue_depth,
1396 						    &device_type);
1397 			}
1398 			ap_dev = to_ap_dev(dev);
1399 			spin_lock_bh(&ap_dev->lock);
1400 			if (rc || ap_dev->unregistered) {
1401 				spin_unlock_bh(&ap_dev->lock);
1402 				if (ap_dev->unregistered)
1403 					i--;
1404 				device_unregister(dev);
1405 				put_device(dev);
1406 				continue;
1407 			}
1408 			spin_unlock_bh(&ap_dev->lock);
1409 			put_device(dev);
1410 			continue;
1411 		}
1412 		if (rc)
1413 			continue;
1414 		rc = ap_init_queue(qid);
1415 		if (rc)
1416 			continue;
1417 		ap_dev = kzalloc(sizeof(*ap_dev), GFP_KERNEL);
1418 		if (!ap_dev)
1419 			break;
1420 		ap_dev->qid = qid;
1421 		ap_dev->queue_depth = queue_depth;
1422 		ap_dev->unregistered = 1;
1423 		spin_lock_init(&ap_dev->lock);
1424 		INIT_LIST_HEAD(&ap_dev->pendingq);
1425 		INIT_LIST_HEAD(&ap_dev->requestq);
1426 		INIT_LIST_HEAD(&ap_dev->list);
1427 		setup_timer(&ap_dev->timeout, ap_request_timeout,
1428 			    (unsigned long) ap_dev);
1429 		switch (device_type) {
1430 		case 0:
1431 			/* device type probing for old cards */
1432 			if (ap_probe_device_type(ap_dev)) {
1433 				kfree(ap_dev);
1434 				continue;
1435 			}
1436 			break;
1437 		case 11:
1438 			ap_dev->device_type = 10;
1439 			break;
1440 		default:
1441 			ap_dev->device_type = device_type;
1442 		}
1443 		ap_dev->raw_hwtype = device_type;
1444 
1445 		rc = ap_query_functions(qid, &device_functions);
1446 		if (!rc)
1447 			ap_dev->functions = device_functions;
1448 		else
1449 			ap_dev->functions = 0u;
1450 
1451 		ap_dev->device.bus = &ap_bus_type;
1452 		ap_dev->device.parent = ap_root_device;
1453 		if (dev_set_name(&ap_dev->device, "card%02x",
1454 				 AP_QID_DEVICE(ap_dev->qid))) {
1455 			kfree(ap_dev);
1456 			continue;
1457 		}
1458 		ap_dev->device.release = ap_device_release;
1459 		rc = device_register(&ap_dev->device);
1460 		if (rc) {
1461 			put_device(&ap_dev->device);
1462 			continue;
1463 		}
1464 		/* Add device attributes. */
1465 		rc = sysfs_create_group(&ap_dev->device.kobj,
1466 					&ap_dev_attr_group);
1467 		if (!rc) {
1468 			spin_lock_bh(&ap_dev->lock);
1469 			ap_dev->unregistered = 0;
1470 			spin_unlock_bh(&ap_dev->lock);
1471 		}
1472 		else
1473 			device_unregister(&ap_dev->device);
1474 	}
1475 }
1476 
1477 static void
1478 ap_config_timeout(unsigned long ptr)
1479 {
1480 	queue_work(ap_work_queue, &ap_config_work);
1481 	ap_config_timer.expires = jiffies + ap_config_time * HZ;
1482 	add_timer(&ap_config_timer);
1483 }
1484 
1485 /**
1486  * __ap_schedule_poll_timer(): Schedule poll timer.
1487  *
1488  * Set up the timer to run the poll tasklet
1489  */
1490 static inline void __ap_schedule_poll_timer(void)
1491 {
1492 	ktime_t hr_time;
1493 
1494 	spin_lock_bh(&ap_poll_timer_lock);
1495 	if (hrtimer_is_queued(&ap_poll_timer) || ap_suspend_flag)
1496 		goto out;
1497 	if (ktime_to_ns(hrtimer_expires_remaining(&ap_poll_timer)) <= 0) {
1498 		hr_time = ktime_set(0, poll_timeout);
1499 		hrtimer_forward_now(&ap_poll_timer, hr_time);
1500 		hrtimer_restart(&ap_poll_timer);
1501 	}
1502 out:
1503 	spin_unlock_bh(&ap_poll_timer_lock);
1504 }
1505 
1506 /**
1507  * ap_schedule_poll_timer(): Schedule poll timer.
1508  *
1509  * Set up the timer to run the poll tasklet
1510  */
1511 static inline void ap_schedule_poll_timer(void)
1512 {
1513 	if (ap_using_interrupts())
1514 		return;
1515 	__ap_schedule_poll_timer();
1516 }
1517 
1518 /**
1519  * ap_poll_read(): Receive pending reply messages from an AP device.
1520  * @ap_dev: pointer to the AP device
1521  * @flags: pointer to control flags, bit 2^0 is set if another poll is
1522  *	   required, bit 2^1 is set if the poll timer needs to get armed
1523  *
1524  * Returns 0 if the device is still present, -ENODEV if not.
1525  */
1526 static int ap_poll_read(struct ap_device *ap_dev, unsigned long *flags)
1527 {
1528 	struct ap_queue_status status;
1529 	struct ap_message *ap_msg;
1530 
1531 	if (ap_dev->queue_count <= 0)
1532 		return 0;
1533 	status = __ap_recv(ap_dev->qid, &ap_dev->reply->psmid,
1534 			   ap_dev->reply->message, ap_dev->reply->length);
1535 	switch (status.response_code) {
1536 	case AP_RESPONSE_NORMAL:
1537 		atomic_dec(&ap_poll_requests);
1538 		ap_decrease_queue_count(ap_dev);
1539 		list_for_each_entry(ap_msg, &ap_dev->pendingq, list) {
1540 			if (ap_msg->psmid != ap_dev->reply->psmid)
1541 				continue;
1542 			list_del_init(&ap_msg->list);
1543 			ap_dev->pendingq_count--;
1544 			ap_msg->receive(ap_dev, ap_msg, ap_dev->reply);
1545 			break;
1546 		}
1547 		if (ap_dev->queue_count > 0)
1548 			*flags |= 1;
1549 		break;
1550 	case AP_RESPONSE_NO_PENDING_REPLY:
1551 		if (status.queue_empty) {
1552 			/* The card shouldn't forget requests but who knows. */
1553 			atomic_sub(ap_dev->queue_count, &ap_poll_requests);
1554 			ap_dev->queue_count = 0;
1555 			list_splice_init(&ap_dev->pendingq, &ap_dev->requestq);
1556 			ap_dev->requestq_count += ap_dev->pendingq_count;
1557 			ap_dev->pendingq_count = 0;
1558 		} else
1559 			*flags |= 2;
1560 		break;
1561 	default:
1562 		return -ENODEV;
1563 	}
1564 	return 0;
1565 }
1566 
1567 /**
1568  * ap_poll_write(): Send messages from the request queue to an AP device.
1569  * @ap_dev: pointer to the AP device
1570  * @flags: pointer to control flags, bit 2^0 is set if another poll is
1571  *	   required, bit 2^1 is set if the poll timer needs to get armed
1572  *
1573  * Returns 0 if the device is still present, -ENODEV if not.
1574  */
1575 static int ap_poll_write(struct ap_device *ap_dev, unsigned long *flags)
1576 {
1577 	struct ap_queue_status status;
1578 	struct ap_message *ap_msg;
1579 
1580 	if (ap_dev->requestq_count <= 0 ||
1581 	    ap_dev->queue_count >= ap_dev->queue_depth)
1582 		return 0;
1583 	/* Start the next request on the queue. */
1584 	ap_msg = list_entry(ap_dev->requestq.next, struct ap_message, list);
1585 	status = __ap_send(ap_dev->qid, ap_msg->psmid,
1586 			   ap_msg->message, ap_msg->length, ap_msg->special);
1587 	switch (status.response_code) {
1588 	case AP_RESPONSE_NORMAL:
1589 		atomic_inc(&ap_poll_requests);
1590 		ap_increase_queue_count(ap_dev);
1591 		list_move_tail(&ap_msg->list, &ap_dev->pendingq);
1592 		ap_dev->requestq_count--;
1593 		ap_dev->pendingq_count++;
1594 		if (ap_dev->queue_count < ap_dev->queue_depth &&
1595 		    ap_dev->requestq_count > 0)
1596 			*flags |= 1;
1597 		*flags |= 2;
1598 		break;
1599 	case AP_RESPONSE_RESET_IN_PROGRESS:
1600 		__ap_schedule_poll_timer();
1601 	case AP_RESPONSE_Q_FULL:
1602 		*flags |= 2;
1603 		break;
1604 	case AP_RESPONSE_MESSAGE_TOO_BIG:
1605 	case AP_RESPONSE_REQ_FAC_NOT_INST:
1606 		return -EINVAL;
1607 	default:
1608 		return -ENODEV;
1609 	}
1610 	return 0;
1611 }
1612 
1613 /**
1614  * ap_poll_queue(): Poll AP device for pending replies and send new messages.
1615  * @ap_dev: pointer to the bus device
1616  * @flags: pointer to control flags, bit 2^0 is set if another poll is
1617  *	   required, bit 2^1 is set if the poll timer needs to get armed
1618  *
1619  * Poll AP device for pending replies and send new messages. If either
1620  * ap_poll_read or ap_poll_write returns -ENODEV unregister the device.
1621  * Returns 0.
1622  */
1623 static inline int ap_poll_queue(struct ap_device *ap_dev, unsigned long *flags)
1624 {
1625 	int rc;
1626 
1627 	rc = ap_poll_read(ap_dev, flags);
1628 	if (rc)
1629 		return rc;
1630 	return ap_poll_write(ap_dev, flags);
1631 }
1632 
1633 /**
1634  * __ap_queue_message(): Queue a message to a device.
1635  * @ap_dev: pointer to the AP device
1636  * @ap_msg: the message to be queued
1637  *
1638  * Queue a message to a device. Returns 0 if successful.
1639  */
1640 static int __ap_queue_message(struct ap_device *ap_dev, struct ap_message *ap_msg)
1641 {
1642 	struct ap_queue_status status;
1643 
1644 	if (list_empty(&ap_dev->requestq) &&
1645 	    ap_dev->queue_count < ap_dev->queue_depth) {
1646 		status = __ap_send(ap_dev->qid, ap_msg->psmid,
1647 				   ap_msg->message, ap_msg->length,
1648 				   ap_msg->special);
1649 		switch (status.response_code) {
1650 		case AP_RESPONSE_NORMAL:
1651 			list_add_tail(&ap_msg->list, &ap_dev->pendingq);
1652 			atomic_inc(&ap_poll_requests);
1653 			ap_dev->pendingq_count++;
1654 			ap_increase_queue_count(ap_dev);
1655 			ap_dev->total_request_count++;
1656 			break;
1657 		case AP_RESPONSE_Q_FULL:
1658 		case AP_RESPONSE_RESET_IN_PROGRESS:
1659 			list_add_tail(&ap_msg->list, &ap_dev->requestq);
1660 			ap_dev->requestq_count++;
1661 			ap_dev->total_request_count++;
1662 			return -EBUSY;
1663 		case AP_RESPONSE_REQ_FAC_NOT_INST:
1664 		case AP_RESPONSE_MESSAGE_TOO_BIG:
1665 			ap_msg->receive(ap_dev, ap_msg, ERR_PTR(-EINVAL));
1666 			return -EINVAL;
1667 		default:	/* Device is gone. */
1668 			ap_msg->receive(ap_dev, ap_msg, ERR_PTR(-ENODEV));
1669 			return -ENODEV;
1670 		}
1671 	} else {
1672 		list_add_tail(&ap_msg->list, &ap_dev->requestq);
1673 		ap_dev->requestq_count++;
1674 		ap_dev->total_request_count++;
1675 		return -EBUSY;
1676 	}
1677 	ap_schedule_poll_timer();
1678 	return 0;
1679 }
1680 
1681 void ap_queue_message(struct ap_device *ap_dev, struct ap_message *ap_msg)
1682 {
1683 	unsigned long flags;
1684 	int rc;
1685 
1686 	/* For asynchronous message handling a valid receive-callback
1687 	 * is required. */
1688 	BUG_ON(!ap_msg->receive);
1689 
1690 	spin_lock_bh(&ap_dev->lock);
1691 	if (!ap_dev->unregistered) {
1692 		/* Make room on the queue by polling for finished requests. */
1693 		rc = ap_poll_queue(ap_dev, &flags);
1694 		if (!rc)
1695 			rc = __ap_queue_message(ap_dev, ap_msg);
1696 		if (!rc)
1697 			wake_up(&ap_poll_wait);
1698 		if (rc == -ENODEV)
1699 			ap_dev->unregistered = 1;
1700 	} else {
1701 		ap_msg->receive(ap_dev, ap_msg, ERR_PTR(-ENODEV));
1702 		rc = -ENODEV;
1703 	}
1704 	spin_unlock_bh(&ap_dev->lock);
1705 	if (rc == -ENODEV)
1706 		device_unregister(&ap_dev->device);
1707 }
1708 EXPORT_SYMBOL(ap_queue_message);
1709 
1710 /**
1711  * ap_cancel_message(): Cancel a crypto request.
1712  * @ap_dev: The AP device that has the message queued
1713  * @ap_msg: The message that is to be removed
1714  *
1715  * Cancel a crypto request. This is done by removing the request
1716  * from the device pending or request queue. Note that the
1717  * request stays on the AP queue. When it finishes the message
1718  * reply will be discarded because the psmid can't be found.
1719  */
1720 void ap_cancel_message(struct ap_device *ap_dev, struct ap_message *ap_msg)
1721 {
1722 	struct ap_message *tmp;
1723 
1724 	spin_lock_bh(&ap_dev->lock);
1725 	if (!list_empty(&ap_msg->list)) {
1726 		list_for_each_entry(tmp, &ap_dev->pendingq, list)
1727 			if (tmp->psmid == ap_msg->psmid) {
1728 				ap_dev->pendingq_count--;
1729 				goto found;
1730 			}
1731 		ap_dev->requestq_count--;
1732 	found:
1733 		list_del_init(&ap_msg->list);
1734 	}
1735 	spin_unlock_bh(&ap_dev->lock);
1736 }
1737 EXPORT_SYMBOL(ap_cancel_message);
1738 
1739 /**
1740  * ap_poll_timeout(): AP receive polling for finished AP requests.
1741  * @unused: Unused pointer.
1742  *
1743  * Schedules the AP tasklet using a high resolution timer.
1744  */
1745 static enum hrtimer_restart ap_poll_timeout(struct hrtimer *unused)
1746 {
1747 	tasklet_schedule(&ap_tasklet);
1748 	return HRTIMER_NORESTART;
1749 }
1750 
1751 /**
1752  * ap_reset(): Reset a not responding AP device.
1753  * @ap_dev: Pointer to the AP device
1754  *
1755  * Reset a not responding AP device and move all requests from the
1756  * pending queue to the request queue.
1757  */
1758 static void ap_reset(struct ap_device *ap_dev)
1759 {
1760 	int rc;
1761 
1762 	ap_dev->reset = AP_RESET_IGNORE;
1763 	atomic_sub(ap_dev->queue_count, &ap_poll_requests);
1764 	ap_dev->queue_count = 0;
1765 	list_splice_init(&ap_dev->pendingq, &ap_dev->requestq);
1766 	ap_dev->requestq_count += ap_dev->pendingq_count;
1767 	ap_dev->pendingq_count = 0;
1768 	rc = ap_init_queue(ap_dev->qid);
1769 	if (rc == -ENODEV)
1770 		ap_dev->unregistered = 1;
1771 	else
1772 		__ap_schedule_poll_timer();
1773 }
1774 
1775 static int __ap_poll_device(struct ap_device *ap_dev, unsigned long *flags)
1776 {
1777 	if (!ap_dev->unregistered) {
1778 		if (ap_poll_queue(ap_dev, flags))
1779 			ap_dev->unregistered = 1;
1780 		if (ap_dev->reset == AP_RESET_DO)
1781 			ap_reset(ap_dev);
1782 	}
1783 	return 0;
1784 }
1785 
1786 /**
1787  * ap_poll_all(): Poll all AP devices.
1788  * @dummy: Unused variable
1789  *
1790  * Poll all AP devices on the bus in a round robin fashion. Continue
1791  * polling until bit 2^0 of the control flags is not set. If bit 2^1
1792  * of the control flags has been set arm the poll timer.
1793  */
1794 static void ap_poll_all(unsigned long dummy)
1795 {
1796 	unsigned long flags;
1797 	struct ap_device *ap_dev;
1798 
1799 	/* Reset the indicator if interrupts are used. Thus new interrupts can
1800 	 * be received. Doing it in the beginning of the tasklet is therefor
1801 	 * important that no requests on any AP get lost.
1802 	 */
1803 	if (ap_using_interrupts())
1804 		xchg(ap_airq.lsi_ptr, 0);
1805 	do {
1806 		flags = 0;
1807 		spin_lock(&ap_device_list_lock);
1808 		list_for_each_entry(ap_dev, &ap_device_list, list) {
1809 			spin_lock(&ap_dev->lock);
1810 			__ap_poll_device(ap_dev, &flags);
1811 			spin_unlock(&ap_dev->lock);
1812 		}
1813 		spin_unlock(&ap_device_list_lock);
1814 	} while (flags & 1);
1815 	if (flags & 2)
1816 		ap_schedule_poll_timer();
1817 }
1818 
1819 /**
1820  * ap_poll_thread(): Thread that polls for finished requests.
1821  * @data: Unused pointer
1822  *
1823  * AP bus poll thread. The purpose of this thread is to poll for
1824  * finished requests in a loop if there is a "free" cpu - that is
1825  * a cpu that doesn't have anything better to do. The polling stops
1826  * as soon as there is another task or if all messages have been
1827  * delivered.
1828  */
1829 static int ap_poll_thread(void *data)
1830 {
1831 	DECLARE_WAITQUEUE(wait, current);
1832 	unsigned long flags;
1833 	int requests;
1834 	struct ap_device *ap_dev;
1835 
1836 	set_user_nice(current, MAX_NICE);
1837 	while (1) {
1838 		if (ap_suspend_flag)
1839 			return 0;
1840 		if (need_resched()) {
1841 			schedule();
1842 			continue;
1843 		}
1844 		add_wait_queue(&ap_poll_wait, &wait);
1845 		set_current_state(TASK_INTERRUPTIBLE);
1846 		if (kthread_should_stop())
1847 			break;
1848 		requests = atomic_read(&ap_poll_requests);
1849 		if (requests <= 0)
1850 			schedule();
1851 		set_current_state(TASK_RUNNING);
1852 		remove_wait_queue(&ap_poll_wait, &wait);
1853 
1854 		flags = 0;
1855 		spin_lock_bh(&ap_device_list_lock);
1856 		list_for_each_entry(ap_dev, &ap_device_list, list) {
1857 			spin_lock(&ap_dev->lock);
1858 			__ap_poll_device(ap_dev, &flags);
1859 			spin_unlock(&ap_dev->lock);
1860 		}
1861 		spin_unlock_bh(&ap_device_list_lock);
1862 	}
1863 	set_current_state(TASK_RUNNING);
1864 	remove_wait_queue(&ap_poll_wait, &wait);
1865 	return 0;
1866 }
1867 
1868 static int ap_poll_thread_start(void)
1869 {
1870 	int rc;
1871 
1872 	if (ap_using_interrupts() || ap_suspend_flag)
1873 		return 0;
1874 	mutex_lock(&ap_poll_thread_mutex);
1875 	if (!ap_poll_kthread) {
1876 		ap_poll_kthread = kthread_run(ap_poll_thread, NULL, "appoll");
1877 		rc = PTR_RET(ap_poll_kthread);
1878 		if (rc)
1879 			ap_poll_kthread = NULL;
1880 	}
1881 	else
1882 		rc = 0;
1883 	mutex_unlock(&ap_poll_thread_mutex);
1884 	return rc;
1885 }
1886 
1887 static void ap_poll_thread_stop(void)
1888 {
1889 	mutex_lock(&ap_poll_thread_mutex);
1890 	if (ap_poll_kthread) {
1891 		kthread_stop(ap_poll_kthread);
1892 		ap_poll_kthread = NULL;
1893 	}
1894 	mutex_unlock(&ap_poll_thread_mutex);
1895 }
1896 
1897 /**
1898  * ap_request_timeout(): Handling of request timeouts
1899  * @data: Holds the AP device.
1900  *
1901  * Handles request timeouts.
1902  */
1903 static void ap_request_timeout(unsigned long data)
1904 {
1905 	struct ap_device *ap_dev = (struct ap_device *) data;
1906 
1907 	if (ap_dev->reset == AP_RESET_ARMED) {
1908 		ap_dev->reset = AP_RESET_DO;
1909 
1910 		if (ap_using_interrupts())
1911 			tasklet_schedule(&ap_tasklet);
1912 	}
1913 }
1914 
1915 static void ap_reset_domain(void)
1916 {
1917 	int i;
1918 
1919 	if (ap_domain_index != -1)
1920 		for (i = 0; i < AP_DEVICES; i++)
1921 			ap_reset_queue(AP_MKQID(i, ap_domain_index));
1922 }
1923 
1924 static void ap_reset_all(void)
1925 {
1926 	int i, j;
1927 
1928 	for (i = 0; i < AP_DOMAINS; i++) {
1929 		if (!ap_test_config_domain(i))
1930 			continue;
1931 		for (j = 0; j < AP_DEVICES; j++) {
1932 			if (!ap_test_config_card_id(j))
1933 				continue;
1934 			ap_reset_queue(AP_MKQID(j, i));
1935 		}
1936 	}
1937 }
1938 
1939 static struct reset_call ap_reset_call = {
1940 	.fn = ap_reset_all,
1941 };
1942 
1943 /**
1944  * ap_module_init(): The module initialization code.
1945  *
1946  * Initializes the module.
1947  */
1948 int __init ap_module_init(void)
1949 {
1950 	int rc, i;
1951 
1952 	if (ap_domain_index < -1 || ap_domain_index >= AP_DOMAINS) {
1953 		pr_warning("%d is not a valid cryptographic domain\n",
1954 			   ap_domain_index);
1955 		return -EINVAL;
1956 	}
1957 	/* In resume callback we need to know if the user had set the domain.
1958 	 * If so, we can not just reset it.
1959 	 */
1960 	if (ap_domain_index >= 0)
1961 		user_set_domain = 1;
1962 
1963 	if (ap_instructions_available() != 0) {
1964 		pr_warning("The hardware system does not support "
1965 			   "AP instructions\n");
1966 		return -ENODEV;
1967 	}
1968 	if (ap_interrupts_available()) {
1969 		rc = register_adapter_interrupt(&ap_airq);
1970 		ap_airq_flag = (rc == 0);
1971 	}
1972 
1973 	register_reset_call(&ap_reset_call);
1974 
1975 	/* Create /sys/bus/ap. */
1976 	rc = bus_register(&ap_bus_type);
1977 	if (rc)
1978 		goto out;
1979 	for (i = 0; ap_bus_attrs[i]; i++) {
1980 		rc = bus_create_file(&ap_bus_type, ap_bus_attrs[i]);
1981 		if (rc)
1982 			goto out_bus;
1983 	}
1984 
1985 	/* Create /sys/devices/ap. */
1986 	ap_root_device = root_device_register("ap");
1987 	rc = PTR_RET(ap_root_device);
1988 	if (rc)
1989 		goto out_bus;
1990 
1991 	ap_work_queue = create_singlethread_workqueue("kapwork");
1992 	if (!ap_work_queue) {
1993 		rc = -ENOMEM;
1994 		goto out_root;
1995 	}
1996 
1997 	ap_query_configuration();
1998 	if (ap_select_domain() == 0)
1999 		ap_scan_bus(NULL);
2000 
2001 	/* Setup the AP bus rescan timer. */
2002 	init_timer(&ap_config_timer);
2003 	ap_config_timer.function = ap_config_timeout;
2004 	ap_config_timer.data = 0;
2005 	ap_config_timer.expires = jiffies + ap_config_time * HZ;
2006 	add_timer(&ap_config_timer);
2007 
2008 	/* Setup the high resultion poll timer.
2009 	 * If we are running under z/VM adjust polling to z/VM polling rate.
2010 	 */
2011 	if (MACHINE_IS_VM)
2012 		poll_timeout = 1500000;
2013 	spin_lock_init(&ap_poll_timer_lock);
2014 	hrtimer_init(&ap_poll_timer, CLOCK_MONOTONIC, HRTIMER_MODE_ABS);
2015 	ap_poll_timer.function = ap_poll_timeout;
2016 
2017 	/* Start the low priority AP bus poll thread. */
2018 	if (ap_thread_flag) {
2019 		rc = ap_poll_thread_start();
2020 		if (rc)
2021 			goto out_work;
2022 	}
2023 
2024 	return 0;
2025 
2026 out_work:
2027 	del_timer_sync(&ap_config_timer);
2028 	hrtimer_cancel(&ap_poll_timer);
2029 	destroy_workqueue(ap_work_queue);
2030 out_root:
2031 	root_device_unregister(ap_root_device);
2032 out_bus:
2033 	while (i--)
2034 		bus_remove_file(&ap_bus_type, ap_bus_attrs[i]);
2035 	bus_unregister(&ap_bus_type);
2036 out:
2037 	unregister_reset_call(&ap_reset_call);
2038 	if (ap_using_interrupts())
2039 		unregister_adapter_interrupt(&ap_airq);
2040 	return rc;
2041 }
2042 
2043 static int __ap_match_all(struct device *dev, void *data)
2044 {
2045 	return 1;
2046 }
2047 
2048 /**
2049  * ap_modules_exit(): The module termination code
2050  *
2051  * Terminates the module.
2052  */
2053 void ap_module_exit(void)
2054 {
2055 	int i;
2056 	struct device *dev;
2057 
2058 	ap_reset_domain();
2059 	ap_poll_thread_stop();
2060 	del_timer_sync(&ap_config_timer);
2061 	hrtimer_cancel(&ap_poll_timer);
2062 	destroy_workqueue(ap_work_queue);
2063 	tasklet_kill(&ap_tasklet);
2064 	root_device_unregister(ap_root_device);
2065 	while ((dev = bus_find_device(&ap_bus_type, NULL, NULL,
2066 		    __ap_match_all)))
2067 	{
2068 		device_unregister(dev);
2069 		put_device(dev);
2070 	}
2071 	for (i = 0; ap_bus_attrs[i]; i++)
2072 		bus_remove_file(&ap_bus_type, ap_bus_attrs[i]);
2073 	bus_unregister(&ap_bus_type);
2074 	unregister_reset_call(&ap_reset_call);
2075 	if (ap_using_interrupts())
2076 		unregister_adapter_interrupt(&ap_airq);
2077 }
2078 
2079 module_init(ap_module_init);
2080 module_exit(ap_module_exit);
2081