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