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