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