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