xref: /openbmc/linux/drivers/s390/crypto/ap_bus.c (revision f35e839a)
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 	/* reconfigure the AP bus rescan timer. */
958 	mod_timer(&ap_config_timer, jiffies + ap_config_time * HZ);
959 	/* processing a asynchronous bus rescan */
960 	queue_work(ap_work_queue, &ap_config_work);
961 	flush_work(&ap_config_work);
962 }
963 EXPORT_SYMBOL(ap_bus_force_rescan);
964 
965 /*
966  * AP bus attributes.
967  */
968 static ssize_t ap_domain_show(struct bus_type *bus, char *buf)
969 {
970 	return snprintf(buf, PAGE_SIZE, "%d\n", ap_domain_index);
971 }
972 
973 static BUS_ATTR(ap_domain, 0444, ap_domain_show, NULL);
974 
975 static ssize_t ap_config_time_show(struct bus_type *bus, char *buf)
976 {
977 	return snprintf(buf, PAGE_SIZE, "%d\n", ap_config_time);
978 }
979 
980 static ssize_t ap_interrupts_show(struct bus_type *bus, char *buf)
981 {
982 	return snprintf(buf, PAGE_SIZE, "%d\n",
983 			ap_using_interrupts() ? 1 : 0);
984 }
985 
986 static BUS_ATTR(ap_interrupts, 0444, ap_interrupts_show, NULL);
987 
988 static ssize_t ap_config_time_store(struct bus_type *bus,
989 				    const char *buf, size_t count)
990 {
991 	int time;
992 
993 	if (sscanf(buf, "%d\n", &time) != 1 || time < 5 || time > 120)
994 		return -EINVAL;
995 	ap_config_time = time;
996 	if (!timer_pending(&ap_config_timer) ||
997 	    !mod_timer(&ap_config_timer, jiffies + ap_config_time * HZ)) {
998 		ap_config_timer.expires = jiffies + ap_config_time * HZ;
999 		add_timer(&ap_config_timer);
1000 	}
1001 	return count;
1002 }
1003 
1004 static BUS_ATTR(config_time, 0644, ap_config_time_show, ap_config_time_store);
1005 
1006 static ssize_t ap_poll_thread_show(struct bus_type *bus, char *buf)
1007 {
1008 	return snprintf(buf, PAGE_SIZE, "%d\n", ap_poll_kthread ? 1 : 0);
1009 }
1010 
1011 static ssize_t ap_poll_thread_store(struct bus_type *bus,
1012 				    const char *buf, size_t count)
1013 {
1014 	int flag, rc;
1015 
1016 	if (sscanf(buf, "%d\n", &flag) != 1)
1017 		return -EINVAL;
1018 	if (flag) {
1019 		rc = ap_poll_thread_start();
1020 		if (rc)
1021 			return rc;
1022 	}
1023 	else
1024 		ap_poll_thread_stop();
1025 	return count;
1026 }
1027 
1028 static BUS_ATTR(poll_thread, 0644, ap_poll_thread_show, ap_poll_thread_store);
1029 
1030 static ssize_t poll_timeout_show(struct bus_type *bus, char *buf)
1031 {
1032 	return snprintf(buf, PAGE_SIZE, "%llu\n", poll_timeout);
1033 }
1034 
1035 static ssize_t poll_timeout_store(struct bus_type *bus, const char *buf,
1036 				  size_t count)
1037 {
1038 	unsigned long long time;
1039 	ktime_t hr_time;
1040 
1041 	/* 120 seconds = maximum poll interval */
1042 	if (sscanf(buf, "%llu\n", &time) != 1 || time < 1 ||
1043 	    time > 120000000000ULL)
1044 		return -EINVAL;
1045 	poll_timeout = time;
1046 	hr_time = ktime_set(0, poll_timeout);
1047 
1048 	if (!hrtimer_is_queued(&ap_poll_timer) ||
1049 	    !hrtimer_forward(&ap_poll_timer, hrtimer_get_expires(&ap_poll_timer), hr_time)) {
1050 		hrtimer_set_expires(&ap_poll_timer, hr_time);
1051 		hrtimer_start_expires(&ap_poll_timer, HRTIMER_MODE_ABS);
1052 	}
1053 	return count;
1054 }
1055 
1056 static BUS_ATTR(poll_timeout, 0644, poll_timeout_show, poll_timeout_store);
1057 
1058 static struct bus_attribute *const ap_bus_attrs[] = {
1059 	&bus_attr_ap_domain,
1060 	&bus_attr_config_time,
1061 	&bus_attr_poll_thread,
1062 	&bus_attr_ap_interrupts,
1063 	&bus_attr_poll_timeout,
1064 	NULL,
1065 };
1066 
1067 static inline int ap_test_config(unsigned int *field, unsigned int nr)
1068 {
1069 	if (nr > 0xFFu)
1070 		return 0;
1071 	return ap_test_bit((field + (nr >> 5)), (nr & 0x1f));
1072 }
1073 
1074 /*
1075  * ap_test_config_card_id(): Test, whether an AP card ID is configured.
1076  * @id AP card ID
1077  *
1078  * Returns 0 if the card is not configured
1079  *	   1 if the card is configured or
1080  *	     if the configuration information is not available
1081  */
1082 static inline int ap_test_config_card_id(unsigned int id)
1083 {
1084 	if (!ap_configuration)
1085 		return 1;
1086 	return ap_test_config(ap_configuration->apm, id);
1087 }
1088 
1089 /*
1090  * ap_test_config_domain(): Test, whether an AP usage domain is configured.
1091  * @domain AP usage domain ID
1092  *
1093  * Returns 0 if the usage domain is not configured
1094  *	   1 if the usage domain is configured or
1095  *	     if the configuration information is not available
1096  */
1097 static inline int ap_test_config_domain(unsigned int domain)
1098 {
1099 	if (!ap_configuration)
1100 		return 1;
1101 	return ap_test_config(ap_configuration->aqm, domain);
1102 }
1103 
1104 /**
1105  * ap_query_configuration(): Query AP configuration information.
1106  *
1107  * Query information of installed cards and configured domains from AP.
1108  */
1109 static void ap_query_configuration(void)
1110 {
1111 #ifdef CONFIG_64BIT
1112 	if (ap_configuration_available()) {
1113 		if (!ap_configuration)
1114 			ap_configuration =
1115 				kzalloc(sizeof(struct ap_config_info),
1116 					GFP_KERNEL);
1117 		if (ap_configuration)
1118 			__ap_query_configuration(ap_configuration);
1119 	} else
1120 		ap_configuration = NULL;
1121 #else
1122 	ap_configuration = NULL;
1123 #endif
1124 }
1125 
1126 /**
1127  * ap_select_domain(): Select an AP domain.
1128  *
1129  * Pick one of the 16 AP domains.
1130  */
1131 static int ap_select_domain(void)
1132 {
1133 	int queue_depth, device_type, count, max_count, best_domain;
1134 	ap_qid_t qid;
1135 	int rc, i, j;
1136 
1137 	/*
1138 	 * We want to use a single domain. Either the one specified with
1139 	 * the "domain=" parameter or the domain with the maximum number
1140 	 * of devices.
1141 	 */
1142 	if (ap_domain_index >= 0 && ap_domain_index < AP_DOMAINS)
1143 		/* Domain has already been selected. */
1144 		return 0;
1145 	best_domain = -1;
1146 	max_count = 0;
1147 	for (i = 0; i < AP_DOMAINS; i++) {
1148 		if (!ap_test_config_domain(i))
1149 			continue;
1150 		count = 0;
1151 		for (j = 0; j < AP_DEVICES; j++) {
1152 			if (!ap_test_config_card_id(j))
1153 				continue;
1154 			qid = AP_MKQID(j, i);
1155 			rc = ap_query_queue(qid, &queue_depth, &device_type);
1156 			if (rc)
1157 				continue;
1158 			count++;
1159 		}
1160 		if (count > max_count) {
1161 			max_count = count;
1162 			best_domain = i;
1163 		}
1164 	}
1165 	if (best_domain >= 0){
1166 		ap_domain_index = best_domain;
1167 		return 0;
1168 	}
1169 	return -ENODEV;
1170 }
1171 
1172 /**
1173  * ap_probe_device_type(): Find the device type of an AP.
1174  * @ap_dev: pointer to the AP device.
1175  *
1176  * Find the device type if query queue returned a device type of 0.
1177  */
1178 static int ap_probe_device_type(struct ap_device *ap_dev)
1179 {
1180 	static unsigned char msg[] = {
1181 		0x00,0x06,0x00,0x00,0x00,0x00,0x00,0x00,
1182 		0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
1183 		0x00,0x00,0x00,0x58,0x00,0x00,0x00,0x00,
1184 		0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
1185 		0x01,0x00,0x43,0x43,0x41,0x2d,0x41,0x50,
1186 		0x50,0x4c,0x20,0x20,0x20,0x01,0x01,0x01,
1187 		0x00,0x00,0x00,0x00,0x50,0x4b,0x00,0x00,
1188 		0x00,0x00,0x01,0x1c,0x00,0x00,0x00,0x00,
1189 		0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
1190 		0x00,0x00,0x05,0xb8,0x00,0x00,0x00,0x00,
1191 		0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
1192 		0x70,0x00,0x41,0x00,0x00,0x00,0x00,0x00,
1193 		0x00,0x00,0x54,0x32,0x01,0x00,0xa0,0x00,
1194 		0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
1195 		0x00,0x00,0x00,0x00,0xb8,0x05,0x00,0x00,
1196 		0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
1197 		0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
1198 		0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
1199 		0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
1200 		0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
1201 		0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
1202 		0x00,0x00,0x0a,0x00,0x00,0x00,0x00,0x00,
1203 		0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
1204 		0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,
1205 		0x49,0x43,0x53,0x46,0x20,0x20,0x20,0x20,
1206 		0x50,0x4b,0x0a,0x00,0x50,0x4b,0x43,0x53,
1207 		0x2d,0x31,0x2e,0x32,0x37,0x00,0x11,0x22,
1208 		0x33,0x44,0x55,0x66,0x77,0x88,0x99,0x00,
1209 		0x11,0x22,0x33,0x44,0x55,0x66,0x77,0x88,
1210 		0x99,0x00,0x11,0x22,0x33,0x44,0x55,0x66,
1211 		0x77,0x88,0x99,0x00,0x11,0x22,0x33,0x44,
1212 		0x55,0x66,0x77,0x88,0x99,0x00,0x11,0x22,
1213 		0x33,0x44,0x55,0x66,0x77,0x88,0x99,0x00,
1214 		0x11,0x22,0x33,0x5d,0x00,0x5b,0x00,0x77,
1215 		0x88,0x1e,0x00,0x00,0x57,0x00,0x00,0x00,
1216 		0x00,0x04,0x00,0x00,0x4f,0x00,0x00,0x00,
1217 		0x03,0x02,0x00,0x00,0x40,0x01,0x00,0x01,
1218 		0xce,0x02,0x68,0x2d,0x5f,0xa9,0xde,0x0c,
1219 		0xf6,0xd2,0x7b,0x58,0x4b,0xf9,0x28,0x68,
1220 		0x3d,0xb4,0xf4,0xef,0x78,0xd5,0xbe,0x66,
1221 		0x63,0x42,0xef,0xf8,0xfd,0xa4,0xf8,0xb0,
1222 		0x8e,0x29,0xc2,0xc9,0x2e,0xd8,0x45,0xb8,
1223 		0x53,0x8c,0x6f,0x4e,0x72,0x8f,0x6c,0x04,
1224 		0x9c,0x88,0xfc,0x1e,0xc5,0x83,0x55,0x57,
1225 		0xf7,0xdd,0xfd,0x4f,0x11,0x36,0x95,0x5d,
1226 	};
1227 	struct ap_queue_status status;
1228 	unsigned long long psmid;
1229 	char *reply;
1230 	int rc, i;
1231 
1232 	reply = (void *) get_zeroed_page(GFP_KERNEL);
1233 	if (!reply) {
1234 		rc = -ENOMEM;
1235 		goto out;
1236 	}
1237 
1238 	status = __ap_send(ap_dev->qid, 0x0102030405060708ULL,
1239 			   msg, sizeof(msg), 0);
1240 	if (status.response_code != AP_RESPONSE_NORMAL) {
1241 		rc = -ENODEV;
1242 		goto out_free;
1243 	}
1244 
1245 	/* Wait for the test message to complete. */
1246 	for (i = 0; i < 6; i++) {
1247 		mdelay(300);
1248 		status = __ap_recv(ap_dev->qid, &psmid, reply, 4096);
1249 		if (status.response_code == AP_RESPONSE_NORMAL &&
1250 		    psmid == 0x0102030405060708ULL)
1251 			break;
1252 	}
1253 	if (i < 6) {
1254 		/* Got an answer. */
1255 		if (reply[0] == 0x00 && reply[1] == 0x86)
1256 			ap_dev->device_type = AP_DEVICE_TYPE_PCICC;
1257 		else
1258 			ap_dev->device_type = AP_DEVICE_TYPE_PCICA;
1259 		rc = 0;
1260 	} else
1261 		rc = -ENODEV;
1262 
1263 out_free:
1264 	free_page((unsigned long) reply);
1265 out:
1266 	return rc;
1267 }
1268 
1269 static void ap_interrupt_handler(void *unused1, void *unused2)
1270 {
1271 	inc_irq_stat(IRQIO_APB);
1272 	tasklet_schedule(&ap_tasklet);
1273 }
1274 
1275 /**
1276  * __ap_scan_bus(): Scan the AP bus.
1277  * @dev: Pointer to device
1278  * @data: Pointer to data
1279  *
1280  * Scan the AP bus for new devices.
1281  */
1282 static int __ap_scan_bus(struct device *dev, void *data)
1283 {
1284 	return to_ap_dev(dev)->qid == (ap_qid_t)(unsigned long) data;
1285 }
1286 
1287 static void ap_device_release(struct device *dev)
1288 {
1289 	struct ap_device *ap_dev = to_ap_dev(dev);
1290 
1291 	kfree(ap_dev);
1292 }
1293 
1294 static void ap_scan_bus(struct work_struct *unused)
1295 {
1296 	struct ap_device *ap_dev;
1297 	struct device *dev;
1298 	ap_qid_t qid;
1299 	int queue_depth, device_type;
1300 	unsigned int device_functions;
1301 	int rc, i;
1302 
1303 	ap_query_configuration();
1304 	if (ap_select_domain() != 0) {
1305 		return;
1306 	}
1307 	for (i = 0; i < AP_DEVICES; i++) {
1308 		qid = AP_MKQID(i, ap_domain_index);
1309 		dev = bus_find_device(&ap_bus_type, NULL,
1310 				      (void *)(unsigned long)qid,
1311 				      __ap_scan_bus);
1312 		if (ap_test_config_card_id(i))
1313 			rc = ap_query_queue(qid, &queue_depth, &device_type);
1314 		else
1315 			rc = -ENODEV;
1316 		if (dev) {
1317 			if (rc == -EBUSY) {
1318 				set_current_state(TASK_UNINTERRUPTIBLE);
1319 				schedule_timeout(AP_RESET_TIMEOUT);
1320 				rc = ap_query_queue(qid, &queue_depth,
1321 						    &device_type);
1322 			}
1323 			ap_dev = to_ap_dev(dev);
1324 			spin_lock_bh(&ap_dev->lock);
1325 			if (rc || ap_dev->unregistered) {
1326 				spin_unlock_bh(&ap_dev->lock);
1327 				if (ap_dev->unregistered)
1328 					i--;
1329 				device_unregister(dev);
1330 				put_device(dev);
1331 				continue;
1332 			}
1333 			spin_unlock_bh(&ap_dev->lock);
1334 			put_device(dev);
1335 			continue;
1336 		}
1337 		if (rc)
1338 			continue;
1339 		rc = ap_init_queue(qid);
1340 		if (rc)
1341 			continue;
1342 		ap_dev = kzalloc(sizeof(*ap_dev), GFP_KERNEL);
1343 		if (!ap_dev)
1344 			break;
1345 		ap_dev->qid = qid;
1346 		ap_dev->queue_depth = queue_depth;
1347 		ap_dev->unregistered = 1;
1348 		spin_lock_init(&ap_dev->lock);
1349 		INIT_LIST_HEAD(&ap_dev->pendingq);
1350 		INIT_LIST_HEAD(&ap_dev->requestq);
1351 		INIT_LIST_HEAD(&ap_dev->list);
1352 		setup_timer(&ap_dev->timeout, ap_request_timeout,
1353 			    (unsigned long) ap_dev);
1354 		switch (device_type) {
1355 		case 0:
1356 			/* device type probing for old cards */
1357 			if (ap_probe_device_type(ap_dev)) {
1358 				kfree(ap_dev);
1359 				continue;
1360 			}
1361 			break;
1362 		default:
1363 			ap_dev->device_type = device_type;
1364 		}
1365 
1366 		rc = ap_query_functions(qid, &device_functions);
1367 		if (!rc)
1368 			ap_dev->functions = device_functions;
1369 		else
1370 			ap_dev->functions = 0u;
1371 
1372 		ap_dev->device.bus = &ap_bus_type;
1373 		ap_dev->device.parent = ap_root_device;
1374 		if (dev_set_name(&ap_dev->device, "card%02x",
1375 				 AP_QID_DEVICE(ap_dev->qid))) {
1376 			kfree(ap_dev);
1377 			continue;
1378 		}
1379 		ap_dev->device.release = ap_device_release;
1380 		rc = device_register(&ap_dev->device);
1381 		if (rc) {
1382 			put_device(&ap_dev->device);
1383 			continue;
1384 		}
1385 		/* Add device attributes. */
1386 		rc = sysfs_create_group(&ap_dev->device.kobj,
1387 					&ap_dev_attr_group);
1388 		if (!rc) {
1389 			spin_lock_bh(&ap_dev->lock);
1390 			ap_dev->unregistered = 0;
1391 			spin_unlock_bh(&ap_dev->lock);
1392 		}
1393 		else
1394 			device_unregister(&ap_dev->device);
1395 	}
1396 }
1397 
1398 static void
1399 ap_config_timeout(unsigned long ptr)
1400 {
1401 	queue_work(ap_work_queue, &ap_config_work);
1402 	ap_config_timer.expires = jiffies + ap_config_time * HZ;
1403 	add_timer(&ap_config_timer);
1404 }
1405 
1406 /**
1407  * __ap_schedule_poll_timer(): Schedule poll timer.
1408  *
1409  * Set up the timer to run the poll tasklet
1410  */
1411 static inline void __ap_schedule_poll_timer(void)
1412 {
1413 	ktime_t hr_time;
1414 
1415 	spin_lock_bh(&ap_poll_timer_lock);
1416 	if (hrtimer_is_queued(&ap_poll_timer) || ap_suspend_flag)
1417 		goto out;
1418 	if (ktime_to_ns(hrtimer_expires_remaining(&ap_poll_timer)) <= 0) {
1419 		hr_time = ktime_set(0, poll_timeout);
1420 		hrtimer_forward_now(&ap_poll_timer, hr_time);
1421 		hrtimer_restart(&ap_poll_timer);
1422 	}
1423 out:
1424 	spin_unlock_bh(&ap_poll_timer_lock);
1425 }
1426 
1427 /**
1428  * ap_schedule_poll_timer(): Schedule poll timer.
1429  *
1430  * Set up the timer to run the poll tasklet
1431  */
1432 static inline void ap_schedule_poll_timer(void)
1433 {
1434 	if (ap_using_interrupts())
1435 		return;
1436 	__ap_schedule_poll_timer();
1437 }
1438 
1439 /**
1440  * ap_poll_read(): Receive pending reply messages from an AP device.
1441  * @ap_dev: pointer to the AP device
1442  * @flags: pointer to control flags, bit 2^0 is set if another poll is
1443  *	   required, bit 2^1 is set if the poll timer needs to get armed
1444  *
1445  * Returns 0 if the device is still present, -ENODEV if not.
1446  */
1447 static int ap_poll_read(struct ap_device *ap_dev, unsigned long *flags)
1448 {
1449 	struct ap_queue_status status;
1450 	struct ap_message *ap_msg;
1451 
1452 	if (ap_dev->queue_count <= 0)
1453 		return 0;
1454 	status = __ap_recv(ap_dev->qid, &ap_dev->reply->psmid,
1455 			   ap_dev->reply->message, ap_dev->reply->length);
1456 	switch (status.response_code) {
1457 	case AP_RESPONSE_NORMAL:
1458 		atomic_dec(&ap_poll_requests);
1459 		ap_decrease_queue_count(ap_dev);
1460 		list_for_each_entry(ap_msg, &ap_dev->pendingq, list) {
1461 			if (ap_msg->psmid != ap_dev->reply->psmid)
1462 				continue;
1463 			list_del_init(&ap_msg->list);
1464 			ap_dev->pendingq_count--;
1465 			ap_msg->receive(ap_dev, ap_msg, ap_dev->reply);
1466 			break;
1467 		}
1468 		if (ap_dev->queue_count > 0)
1469 			*flags |= 1;
1470 		break;
1471 	case AP_RESPONSE_NO_PENDING_REPLY:
1472 		if (status.queue_empty) {
1473 			/* The card shouldn't forget requests but who knows. */
1474 			atomic_sub(ap_dev->queue_count, &ap_poll_requests);
1475 			ap_dev->queue_count = 0;
1476 			list_splice_init(&ap_dev->pendingq, &ap_dev->requestq);
1477 			ap_dev->requestq_count += ap_dev->pendingq_count;
1478 			ap_dev->pendingq_count = 0;
1479 		} else
1480 			*flags |= 2;
1481 		break;
1482 	default:
1483 		return -ENODEV;
1484 	}
1485 	return 0;
1486 }
1487 
1488 /**
1489  * ap_poll_write(): Send messages from the request queue to an AP device.
1490  * @ap_dev: pointer to the AP device
1491  * @flags: pointer to control flags, bit 2^0 is set if another poll is
1492  *	   required, bit 2^1 is set if the poll timer needs to get armed
1493  *
1494  * Returns 0 if the device is still present, -ENODEV if not.
1495  */
1496 static int ap_poll_write(struct ap_device *ap_dev, unsigned long *flags)
1497 {
1498 	struct ap_queue_status status;
1499 	struct ap_message *ap_msg;
1500 
1501 	if (ap_dev->requestq_count <= 0 ||
1502 	    ap_dev->queue_count >= ap_dev->queue_depth)
1503 		return 0;
1504 	/* Start the next request on the queue. */
1505 	ap_msg = list_entry(ap_dev->requestq.next, struct ap_message, list);
1506 	status = __ap_send(ap_dev->qid, ap_msg->psmid,
1507 			   ap_msg->message, ap_msg->length, ap_msg->special);
1508 	switch (status.response_code) {
1509 	case AP_RESPONSE_NORMAL:
1510 		atomic_inc(&ap_poll_requests);
1511 		ap_increase_queue_count(ap_dev);
1512 		list_move_tail(&ap_msg->list, &ap_dev->pendingq);
1513 		ap_dev->requestq_count--;
1514 		ap_dev->pendingq_count++;
1515 		if (ap_dev->queue_count < ap_dev->queue_depth &&
1516 		    ap_dev->requestq_count > 0)
1517 			*flags |= 1;
1518 		*flags |= 2;
1519 		break;
1520 	case AP_RESPONSE_RESET_IN_PROGRESS:
1521 		__ap_schedule_poll_timer();
1522 	case AP_RESPONSE_Q_FULL:
1523 		*flags |= 2;
1524 		break;
1525 	case AP_RESPONSE_MESSAGE_TOO_BIG:
1526 	case AP_RESPONSE_REQ_FAC_NOT_INST:
1527 		return -EINVAL;
1528 	default:
1529 		return -ENODEV;
1530 	}
1531 	return 0;
1532 }
1533 
1534 /**
1535  * ap_poll_queue(): Poll AP device for pending replies and send new messages.
1536  * @ap_dev: pointer to the bus device
1537  * @flags: pointer to control flags, bit 2^0 is set if another poll is
1538  *	   required, bit 2^1 is set if the poll timer needs to get armed
1539  *
1540  * Poll AP device for pending replies and send new messages. If either
1541  * ap_poll_read or ap_poll_write returns -ENODEV unregister the device.
1542  * Returns 0.
1543  */
1544 static inline int ap_poll_queue(struct ap_device *ap_dev, unsigned long *flags)
1545 {
1546 	int rc;
1547 
1548 	rc = ap_poll_read(ap_dev, flags);
1549 	if (rc)
1550 		return rc;
1551 	return ap_poll_write(ap_dev, flags);
1552 }
1553 
1554 /**
1555  * __ap_queue_message(): Queue a message to a device.
1556  * @ap_dev: pointer to the AP device
1557  * @ap_msg: the message to be queued
1558  *
1559  * Queue a message to a device. Returns 0 if successful.
1560  */
1561 static int __ap_queue_message(struct ap_device *ap_dev, struct ap_message *ap_msg)
1562 {
1563 	struct ap_queue_status status;
1564 
1565 	if (list_empty(&ap_dev->requestq) &&
1566 	    ap_dev->queue_count < ap_dev->queue_depth) {
1567 		status = __ap_send(ap_dev->qid, ap_msg->psmid,
1568 				   ap_msg->message, ap_msg->length,
1569 				   ap_msg->special);
1570 		switch (status.response_code) {
1571 		case AP_RESPONSE_NORMAL:
1572 			list_add_tail(&ap_msg->list, &ap_dev->pendingq);
1573 			atomic_inc(&ap_poll_requests);
1574 			ap_dev->pendingq_count++;
1575 			ap_increase_queue_count(ap_dev);
1576 			ap_dev->total_request_count++;
1577 			break;
1578 		case AP_RESPONSE_Q_FULL:
1579 		case AP_RESPONSE_RESET_IN_PROGRESS:
1580 			list_add_tail(&ap_msg->list, &ap_dev->requestq);
1581 			ap_dev->requestq_count++;
1582 			ap_dev->total_request_count++;
1583 			return -EBUSY;
1584 		case AP_RESPONSE_REQ_FAC_NOT_INST:
1585 		case AP_RESPONSE_MESSAGE_TOO_BIG:
1586 			ap_msg->receive(ap_dev, ap_msg, ERR_PTR(-EINVAL));
1587 			return -EINVAL;
1588 		default:	/* Device is gone. */
1589 			ap_msg->receive(ap_dev, ap_msg, ERR_PTR(-ENODEV));
1590 			return -ENODEV;
1591 		}
1592 	} else {
1593 		list_add_tail(&ap_msg->list, &ap_dev->requestq);
1594 		ap_dev->requestq_count++;
1595 		ap_dev->total_request_count++;
1596 		return -EBUSY;
1597 	}
1598 	ap_schedule_poll_timer();
1599 	return 0;
1600 }
1601 
1602 void ap_queue_message(struct ap_device *ap_dev, struct ap_message *ap_msg)
1603 {
1604 	unsigned long flags;
1605 	int rc;
1606 
1607 	/* For asynchronous message handling a valid receive-callback
1608 	 * is required. */
1609 	BUG_ON(!ap_msg->receive);
1610 
1611 	spin_lock_bh(&ap_dev->lock);
1612 	if (!ap_dev->unregistered) {
1613 		/* Make room on the queue by polling for finished requests. */
1614 		rc = ap_poll_queue(ap_dev, &flags);
1615 		if (!rc)
1616 			rc = __ap_queue_message(ap_dev, ap_msg);
1617 		if (!rc)
1618 			wake_up(&ap_poll_wait);
1619 		if (rc == -ENODEV)
1620 			ap_dev->unregistered = 1;
1621 	} else {
1622 		ap_msg->receive(ap_dev, ap_msg, ERR_PTR(-ENODEV));
1623 		rc = -ENODEV;
1624 	}
1625 	spin_unlock_bh(&ap_dev->lock);
1626 	if (rc == -ENODEV)
1627 		device_unregister(&ap_dev->device);
1628 }
1629 EXPORT_SYMBOL(ap_queue_message);
1630 
1631 /**
1632  * ap_cancel_message(): Cancel a crypto request.
1633  * @ap_dev: The AP device that has the message queued
1634  * @ap_msg: The message that is to be removed
1635  *
1636  * Cancel a crypto request. This is done by removing the request
1637  * from the device pending or request queue. Note that the
1638  * request stays on the AP queue. When it finishes the message
1639  * reply will be discarded because the psmid can't be found.
1640  */
1641 void ap_cancel_message(struct ap_device *ap_dev, struct ap_message *ap_msg)
1642 {
1643 	struct ap_message *tmp;
1644 
1645 	spin_lock_bh(&ap_dev->lock);
1646 	if (!list_empty(&ap_msg->list)) {
1647 		list_for_each_entry(tmp, &ap_dev->pendingq, list)
1648 			if (tmp->psmid == ap_msg->psmid) {
1649 				ap_dev->pendingq_count--;
1650 				goto found;
1651 			}
1652 		ap_dev->requestq_count--;
1653 	found:
1654 		list_del_init(&ap_msg->list);
1655 	}
1656 	spin_unlock_bh(&ap_dev->lock);
1657 }
1658 EXPORT_SYMBOL(ap_cancel_message);
1659 
1660 /**
1661  * ap_poll_timeout(): AP receive polling for finished AP requests.
1662  * @unused: Unused pointer.
1663  *
1664  * Schedules the AP tasklet using a high resolution timer.
1665  */
1666 static enum hrtimer_restart ap_poll_timeout(struct hrtimer *unused)
1667 {
1668 	tasklet_schedule(&ap_tasklet);
1669 	return HRTIMER_NORESTART;
1670 }
1671 
1672 /**
1673  * ap_reset(): Reset a not responding AP device.
1674  * @ap_dev: Pointer to the AP device
1675  *
1676  * Reset a not responding AP device and move all requests from the
1677  * pending queue to the request queue.
1678  */
1679 static void ap_reset(struct ap_device *ap_dev)
1680 {
1681 	int rc;
1682 
1683 	ap_dev->reset = AP_RESET_IGNORE;
1684 	atomic_sub(ap_dev->queue_count, &ap_poll_requests);
1685 	ap_dev->queue_count = 0;
1686 	list_splice_init(&ap_dev->pendingq, &ap_dev->requestq);
1687 	ap_dev->requestq_count += ap_dev->pendingq_count;
1688 	ap_dev->pendingq_count = 0;
1689 	rc = ap_init_queue(ap_dev->qid);
1690 	if (rc == -ENODEV)
1691 		ap_dev->unregistered = 1;
1692 	else
1693 		__ap_schedule_poll_timer();
1694 }
1695 
1696 static int __ap_poll_device(struct ap_device *ap_dev, unsigned long *flags)
1697 {
1698 	if (!ap_dev->unregistered) {
1699 		if (ap_poll_queue(ap_dev, flags))
1700 			ap_dev->unregistered = 1;
1701 		if (ap_dev->reset == AP_RESET_DO)
1702 			ap_reset(ap_dev);
1703 	}
1704 	return 0;
1705 }
1706 
1707 /**
1708  * ap_poll_all(): Poll all AP devices.
1709  * @dummy: Unused variable
1710  *
1711  * Poll all AP devices on the bus in a round robin fashion. Continue
1712  * polling until bit 2^0 of the control flags is not set. If bit 2^1
1713  * of the control flags has been set arm the poll timer.
1714  */
1715 static void ap_poll_all(unsigned long dummy)
1716 {
1717 	unsigned long flags;
1718 	struct ap_device *ap_dev;
1719 
1720 	/* Reset the indicator if interrupts are used. Thus new interrupts can
1721 	 * be received. Doing it in the beginning of the tasklet is therefor
1722 	 * important that no requests on any AP get lost.
1723 	 */
1724 	if (ap_using_interrupts())
1725 		xchg((u8 *)ap_interrupt_indicator, 0);
1726 	do {
1727 		flags = 0;
1728 		spin_lock(&ap_device_list_lock);
1729 		list_for_each_entry(ap_dev, &ap_device_list, list) {
1730 			spin_lock(&ap_dev->lock);
1731 			__ap_poll_device(ap_dev, &flags);
1732 			spin_unlock(&ap_dev->lock);
1733 		}
1734 		spin_unlock(&ap_device_list_lock);
1735 	} while (flags & 1);
1736 	if (flags & 2)
1737 		ap_schedule_poll_timer();
1738 }
1739 
1740 /**
1741  * ap_poll_thread(): Thread that polls for finished requests.
1742  * @data: Unused pointer
1743  *
1744  * AP bus poll thread. The purpose of this thread is to poll for
1745  * finished requests in a loop if there is a "free" cpu - that is
1746  * a cpu that doesn't have anything better to do. The polling stops
1747  * as soon as there is another task or if all messages have been
1748  * delivered.
1749  */
1750 static int ap_poll_thread(void *data)
1751 {
1752 	DECLARE_WAITQUEUE(wait, current);
1753 	unsigned long flags;
1754 	int requests;
1755 	struct ap_device *ap_dev;
1756 
1757 	set_user_nice(current, 19);
1758 	while (1) {
1759 		if (ap_suspend_flag)
1760 			return 0;
1761 		if (need_resched()) {
1762 			schedule();
1763 			continue;
1764 		}
1765 		add_wait_queue(&ap_poll_wait, &wait);
1766 		set_current_state(TASK_INTERRUPTIBLE);
1767 		if (kthread_should_stop())
1768 			break;
1769 		requests = atomic_read(&ap_poll_requests);
1770 		if (requests <= 0)
1771 			schedule();
1772 		set_current_state(TASK_RUNNING);
1773 		remove_wait_queue(&ap_poll_wait, &wait);
1774 
1775 		flags = 0;
1776 		spin_lock_bh(&ap_device_list_lock);
1777 		list_for_each_entry(ap_dev, &ap_device_list, list) {
1778 			spin_lock(&ap_dev->lock);
1779 			__ap_poll_device(ap_dev, &flags);
1780 			spin_unlock(&ap_dev->lock);
1781 		}
1782 		spin_unlock_bh(&ap_device_list_lock);
1783 	}
1784 	set_current_state(TASK_RUNNING);
1785 	remove_wait_queue(&ap_poll_wait, &wait);
1786 	return 0;
1787 }
1788 
1789 static int ap_poll_thread_start(void)
1790 {
1791 	int rc;
1792 
1793 	if (ap_using_interrupts() || ap_suspend_flag)
1794 		return 0;
1795 	mutex_lock(&ap_poll_thread_mutex);
1796 	if (!ap_poll_kthread) {
1797 		ap_poll_kthread = kthread_run(ap_poll_thread, NULL, "appoll");
1798 		rc = IS_ERR(ap_poll_kthread) ? PTR_ERR(ap_poll_kthread) : 0;
1799 		if (rc)
1800 			ap_poll_kthread = NULL;
1801 	}
1802 	else
1803 		rc = 0;
1804 	mutex_unlock(&ap_poll_thread_mutex);
1805 	return rc;
1806 }
1807 
1808 static void ap_poll_thread_stop(void)
1809 {
1810 	mutex_lock(&ap_poll_thread_mutex);
1811 	if (ap_poll_kthread) {
1812 		kthread_stop(ap_poll_kthread);
1813 		ap_poll_kthread = NULL;
1814 	}
1815 	mutex_unlock(&ap_poll_thread_mutex);
1816 }
1817 
1818 /**
1819  * ap_request_timeout(): Handling of request timeouts
1820  * @data: Holds the AP device.
1821  *
1822  * Handles request timeouts.
1823  */
1824 static void ap_request_timeout(unsigned long data)
1825 {
1826 	struct ap_device *ap_dev = (struct ap_device *) data;
1827 
1828 	if (ap_dev->reset == AP_RESET_ARMED) {
1829 		ap_dev->reset = AP_RESET_DO;
1830 
1831 		if (ap_using_interrupts())
1832 			tasklet_schedule(&ap_tasklet);
1833 	}
1834 }
1835 
1836 static void ap_reset_domain(void)
1837 {
1838 	int i;
1839 
1840 	if (ap_domain_index != -1)
1841 		for (i = 0; i < AP_DEVICES; i++)
1842 			ap_reset_queue(AP_MKQID(i, ap_domain_index));
1843 }
1844 
1845 static void ap_reset_all(void)
1846 {
1847 	int i, j;
1848 
1849 	for (i = 0; i < AP_DOMAINS; i++)
1850 		for (j = 0; j < AP_DEVICES; j++)
1851 			ap_reset_queue(AP_MKQID(j, i));
1852 }
1853 
1854 static struct reset_call ap_reset_call = {
1855 	.fn = ap_reset_all,
1856 };
1857 
1858 /**
1859  * ap_module_init(): The module initialization code.
1860  *
1861  * Initializes the module.
1862  */
1863 int __init ap_module_init(void)
1864 {
1865 	int rc, i;
1866 
1867 	if (ap_domain_index < -1 || ap_domain_index >= AP_DOMAINS) {
1868 		pr_warning("%d is not a valid cryptographic domain\n",
1869 			   ap_domain_index);
1870 		return -EINVAL;
1871 	}
1872 	/* In resume callback we need to know if the user had set the domain.
1873 	 * If so, we can not just reset it.
1874 	 */
1875 	if (ap_domain_index >= 0)
1876 		user_set_domain = 1;
1877 
1878 	if (ap_instructions_available() != 0) {
1879 		pr_warning("The hardware system does not support "
1880 			   "AP instructions\n");
1881 		return -ENODEV;
1882 	}
1883 	if (ap_interrupts_available()) {
1884 		isc_register(AP_ISC);
1885 		ap_interrupt_indicator = s390_register_adapter_interrupt(
1886 			&ap_interrupt_handler, NULL, AP_ISC);
1887 		if (IS_ERR(ap_interrupt_indicator)) {
1888 			ap_interrupt_indicator = NULL;
1889 			isc_unregister(AP_ISC);
1890 		}
1891 	}
1892 
1893 	register_reset_call(&ap_reset_call);
1894 
1895 	/* Create /sys/bus/ap. */
1896 	rc = bus_register(&ap_bus_type);
1897 	if (rc)
1898 		goto out;
1899 	for (i = 0; ap_bus_attrs[i]; i++) {
1900 		rc = bus_create_file(&ap_bus_type, ap_bus_attrs[i]);
1901 		if (rc)
1902 			goto out_bus;
1903 	}
1904 
1905 	/* Create /sys/devices/ap. */
1906 	ap_root_device = root_device_register("ap");
1907 	rc = IS_ERR(ap_root_device) ? PTR_ERR(ap_root_device) : 0;
1908 	if (rc)
1909 		goto out_bus;
1910 
1911 	ap_work_queue = create_singlethread_workqueue("kapwork");
1912 	if (!ap_work_queue) {
1913 		rc = -ENOMEM;
1914 		goto out_root;
1915 	}
1916 
1917 	ap_query_configuration();
1918 	if (ap_select_domain() == 0)
1919 		ap_scan_bus(NULL);
1920 
1921 	/* Setup the AP bus rescan timer. */
1922 	init_timer(&ap_config_timer);
1923 	ap_config_timer.function = ap_config_timeout;
1924 	ap_config_timer.data = 0;
1925 	ap_config_timer.expires = jiffies + ap_config_time * HZ;
1926 	add_timer(&ap_config_timer);
1927 
1928 	/* Setup the high resultion poll timer.
1929 	 * If we are running under z/VM adjust polling to z/VM polling rate.
1930 	 */
1931 	if (MACHINE_IS_VM)
1932 		poll_timeout = 1500000;
1933 	spin_lock_init(&ap_poll_timer_lock);
1934 	hrtimer_init(&ap_poll_timer, CLOCK_MONOTONIC, HRTIMER_MODE_ABS);
1935 	ap_poll_timer.function = ap_poll_timeout;
1936 
1937 	/* Start the low priority AP bus poll thread. */
1938 	if (ap_thread_flag) {
1939 		rc = ap_poll_thread_start();
1940 		if (rc)
1941 			goto out_work;
1942 	}
1943 
1944 	return 0;
1945 
1946 out_work:
1947 	del_timer_sync(&ap_config_timer);
1948 	hrtimer_cancel(&ap_poll_timer);
1949 	destroy_workqueue(ap_work_queue);
1950 out_root:
1951 	root_device_unregister(ap_root_device);
1952 out_bus:
1953 	while (i--)
1954 		bus_remove_file(&ap_bus_type, ap_bus_attrs[i]);
1955 	bus_unregister(&ap_bus_type);
1956 out:
1957 	unregister_reset_call(&ap_reset_call);
1958 	if (ap_using_interrupts()) {
1959 		s390_unregister_adapter_interrupt(ap_interrupt_indicator, AP_ISC);
1960 		isc_unregister(AP_ISC);
1961 	}
1962 	return rc;
1963 }
1964 
1965 static int __ap_match_all(struct device *dev, void *data)
1966 {
1967 	return 1;
1968 }
1969 
1970 /**
1971  * ap_modules_exit(): The module termination code
1972  *
1973  * Terminates the module.
1974  */
1975 void ap_module_exit(void)
1976 {
1977 	int i;
1978 	struct device *dev;
1979 
1980 	ap_reset_domain();
1981 	ap_poll_thread_stop();
1982 	del_timer_sync(&ap_config_timer);
1983 	hrtimer_cancel(&ap_poll_timer);
1984 	destroy_workqueue(ap_work_queue);
1985 	tasklet_kill(&ap_tasklet);
1986 	root_device_unregister(ap_root_device);
1987 	while ((dev = bus_find_device(&ap_bus_type, NULL, NULL,
1988 		    __ap_match_all)))
1989 	{
1990 		device_unregister(dev);
1991 		put_device(dev);
1992 	}
1993 	for (i = 0; ap_bus_attrs[i]; i++)
1994 		bus_remove_file(&ap_bus_type, ap_bus_attrs[i]);
1995 	bus_unregister(&ap_bus_type);
1996 	unregister_reset_call(&ap_reset_call);
1997 	if (ap_using_interrupts()) {
1998 		s390_unregister_adapter_interrupt(ap_interrupt_indicator, AP_ISC);
1999 		isc_unregister(AP_ISC);
2000 	}
2001 }
2002 
2003 module_init(ap_module_init);
2004 module_exit(ap_module_exit);
2005