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