hrtimer: convert s390 to the new hrtimer apis
[linux-2.6/mini2440.git] / drivers / s390 / crypto / ap_bus.c
blob6f02f1e674d4ca9438315d07e4fb110b329c965b
1 /*
2 * linux/drivers/s390/crypto/ap_bus.c
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>
9 * Adjunct processor bus.
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.
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.
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.
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>
40 #include "ap_bus.h"
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);
51 * Module description.
53 MODULE_AUTHOR("IBM Corporation");
54 MODULE_DESCRIPTION("Adjunct Processor Bus driver, "
55 "Copyright 2006 IBM Corporation");
56 MODULE_LICENSE("GPL");
59 * Module parameter
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);
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).");
70 static struct device *ap_root_device = NULL;
71 static DEFINE_SPINLOCK(ap_device_lock);
72 static LIST_HEAD(ap_device_list);
75 * Workqueue & timer for bus rescan.
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);
83 * Tasklet & timer for AP request polling.
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;
95 /**
96 * ap_intructions_available() - Test if AP instructions are available.
98 * Returns 0 if the AP instructions are installed.
100 static inline int ap_instructions_available(void)
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;
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;
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
121 * Returns AP queue status structure.
123 static inline struct ap_queue_status
124 ap_test_queue(ap_qid_t qid, int *queue_depth, int *device_type)
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;
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;
138 * ap_reset_queue(): Reset adjunct processor queue.
139 * @qid: The AP queue number
141 * Returns AP queue status structure.
143 static inline struct ap_queue_status ap_reset_queue(ap_qid_t qid)
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;
149 asm volatile(
150 ".long 0xb2af0000" /* PQAP(RAPQ) */
151 : "+d" (reg0), "=d" (reg1), "+d" (reg2) : : "cc");
152 return reg1;
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
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.
167 static inline struct ap_queue_status
168 __ap_send(ap_qid_t qid, unsigned long long psmid, void *msg, size_t length)
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;
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;
187 int ap_send(ap_qid_t qid, unsigned long long psmid, void *msg, size_t length)
189 struct ap_queue_status status;
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;
202 EXPORT_SYMBOL(ap_send);
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
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.
222 static inline struct ap_queue_status
223 __ap_recv(ap_qid_t qid, unsigned long long *psmid, void *msg, size_t length)
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;
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;
245 int ap_recv(ap_qid_t qid, unsigned long long *psmid, void *msg, size_t length)
247 struct ap_queue_status status;
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;
263 EXPORT_SYMBOL(ap_recv);
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
271 * The test is repeated for AP_MAX_RESET times.
273 static int ap_query_queue(ap_qid_t qid, int *queue_depth, int *device_type)
275 struct ap_queue_status status;
276 int t_depth, t_device_type, rc, i;
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();
303 if (rc != -EBUSY)
304 break;
305 if (i < AP_MAX_RESET - 1)
306 udelay(5);
308 return rc;
312 * ap_init_queue(): Reset an AP queue.
313 * @qid: The AP queue number
315 * Reset an AP queue and wait for it to become available again.
317 static int ap_init_queue(ap_qid_t qid)
319 struct ap_queue_status status;
320 int rc, dummy, i;
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;
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);
348 return rc;
352 * ap_increase_queue_count(): Arm request timeout.
353 * @ap_dev: Pointer to an AP device.
355 * Arm request timeout if an AP device was idle and a new request is submitted.
357 static void ap_increase_queue_count(struct ap_device *ap_dev)
359 int timeout = ap_dev->drv->request_timeout;
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;
369 * ap_decrease_queue_count(): Decrease queue count.
370 * @ap_dev: Pointer to an AP device.
372 * If AP device is still alive, re-schedule request timeout if there are still
373 * pending requests.
375 static void ap_decrease_queue_count(struct ap_device *ap_dev)
377 int timeout = ap_dev->drv->request_timeout;
379 ap_dev->queue_count--;
380 if (ap_dev->queue_count > 0)
381 mod_timer(&ap_dev->timeout, jiffies + timeout);
382 else
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.
388 ap_dev->reset = AP_RESET_IGNORE;
392 * AP device related attributes.
394 static ssize_t ap_hwtype_show(struct device *dev,
395 struct device_attribute *attr, char *buf)
397 struct ap_device *ap_dev = to_ap_dev(dev);
398 return snprintf(buf, PAGE_SIZE, "%d\n", ap_dev->device_type);
400 static DEVICE_ATTR(hwtype, 0444, ap_hwtype_show, NULL);
402 static ssize_t ap_depth_show(struct device *dev, struct device_attribute *attr,
403 char *buf)
405 struct ap_device *ap_dev = to_ap_dev(dev);
406 return snprintf(buf, PAGE_SIZE, "%d\n", ap_dev->queue_depth);
408 static DEVICE_ATTR(depth, 0444, ap_depth_show, NULL);
410 static ssize_t ap_request_count_show(struct device *dev,
411 struct device_attribute *attr,
412 char *buf)
414 struct ap_device *ap_dev = to_ap_dev(dev);
415 int rc;
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;
423 static DEVICE_ATTR(request_count, 0444, ap_request_count_show, NULL);
425 static ssize_t ap_modalias_show(struct device *dev,
426 struct device_attribute *attr, char *buf)
428 return sprintf(buf, "ap:t%02X", to_ap_dev(dev)->device_type);
431 static DEVICE_ATTR(modalias, 0444, ap_modalias_show, NULL);
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
440 static struct attribute_group ap_dev_attr_group = {
441 .attrs = ap_dev_attrs
445 * ap_bus_match()
446 * @dev: Pointer to device
447 * @drv: Pointer to device_driver
449 * AP bus driver registration/unregistration.
451 static int ap_bus_match(struct device *dev, struct device_driver *drv)
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;
458 * Compare device type of the device with the list of
459 * supported types of the device_driver.
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;
467 return 0;
471 * ap_uevent(): Uevent function for AP devices.
472 * @dev: Pointer to device
473 * @env: Pointer to kobj_uevent_env
475 * It sets up a single environment variable DEV_TYPE which contains the
476 * hardware device type.
478 static int ap_uevent (struct device *dev, struct kobj_uevent_env *env)
480 struct ap_device *ap_dev = to_ap_dev(dev);
481 int retval = 0;
483 if (!ap_dev)
484 return -ENODEV;
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;
491 /* Add MODALIAS= */
492 retval = add_uevent_var(env, "MODALIAS=ap:t%02X", ap_dev->device_type);
494 return retval;
497 static struct bus_type ap_bus_type = {
498 .name = "ap",
499 .match = &ap_bus_match,
500 .uevent = &ap_uevent,
503 static int ap_device_probe(struct device *dev)
505 struct ap_device *ap_dev = to_ap_dev(dev);
506 struct ap_driver *ap_drv = to_ap_drv(dev->driver);
507 int rc;
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);
516 return rc;
520 * __ap_flush_queue(): Flush requests.
521 * @ap_dev: Pointer to the AP device
523 * Flush all requests from the request/pending queue of an AP device.
525 static void __ap_flush_queue(struct ap_device *ap_dev)
527 struct ap_message *ap_msg, *next;
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));
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));
541 void ap_flush_queue(struct ap_device *ap_dev)
543 spin_lock_bh(&ap_dev->lock);
544 __ap_flush_queue(ap_dev);
545 spin_unlock_bh(&ap_dev->lock);
547 EXPORT_SYMBOL(ap_flush_queue);
549 static int ap_device_remove(struct device *dev)
551 struct ap_device *ap_dev = to_ap_dev(dev);
552 struct ap_driver *ap_drv = ap_dev->drv;
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;
567 int ap_driver_register(struct ap_driver *ap_drv, struct module *owner,
568 char *name)
570 struct device_driver *drv = &ap_drv->driver;
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);
579 EXPORT_SYMBOL(ap_driver_register);
581 void ap_driver_unregister(struct ap_driver *ap_drv)
583 driver_unregister(&ap_drv->driver);
585 EXPORT_SYMBOL(ap_driver_unregister);
588 * AP bus attributes.
590 static ssize_t ap_domain_show(struct bus_type *bus, char *buf)
592 return snprintf(buf, PAGE_SIZE, "%d\n", ap_domain_index);
595 static BUS_ATTR(ap_domain, 0444, ap_domain_show, NULL);
597 static ssize_t ap_config_time_show(struct bus_type *bus, char *buf)
599 return snprintf(buf, PAGE_SIZE, "%d\n", ap_config_time);
602 static ssize_t ap_config_time_store(struct bus_type *bus,
603 const char *buf, size_t count)
605 int time;
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);
615 return count;
618 static BUS_ATTR(config_time, 0644, ap_config_time_show, ap_config_time_store);
620 static ssize_t ap_poll_thread_show(struct bus_type *bus, char *buf)
622 return snprintf(buf, PAGE_SIZE, "%d\n", ap_poll_kthread ? 1 : 0);
625 static ssize_t ap_poll_thread_store(struct bus_type *bus,
626 const char *buf, size_t count)
628 int flag, rc;
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;
637 else
638 ap_poll_thread_stop();
639 return count;
642 static BUS_ATTR(poll_thread, 0644, ap_poll_thread_show, ap_poll_thread_store);
644 static ssize_t poll_timeout_show(struct bus_type *bus, char *buf)
646 return snprintf(buf, PAGE_SIZE, "%llu\n", poll_timeout);
649 static ssize_t poll_timeout_store(struct bus_type *bus, const char *buf,
650 size_t count)
652 unsigned long long time;
653 ktime_t hr_time;
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);
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);
666 return count;
669 static BUS_ATTR(poll_timeout, 0644, poll_timeout_show, poll_timeout_store);
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,
680 * ap_select_domain(): Select an AP domain.
682 * Pick one of the 16 AP domains.
684 static int ap_select_domain(void)
686 int queue_depth, device_type, count, max_count, best_domain;
687 int rc, i, j;
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.
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++;
708 if (count > max_count) {
709 max_count = count;
710 best_domain = i;
713 if (best_domain >= 0){
714 ap_domain_index = best_domain;
715 return 0;
717 return -ENODEV;
721 * ap_probe_device_type(): Find the device type of an AP.
722 * @ap_dev: pointer to the AP device.
724 * Find the device type if query queue returned a device type of 0.
726 static int ap_probe_device_type(struct ap_device *ap_dev)
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,
775 struct ap_queue_status status;
776 unsigned long long psmid;
777 char *reply;
778 int rc, i;
780 reply = (void *) get_zeroed_page(GFP_KERNEL);
781 if (!reply) {
782 rc = -ENOMEM;
783 goto out;
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;
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;
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;
811 out_free:
812 free_page((unsigned long) reply);
813 out:
814 return rc;
818 * __ap_scan_bus(): Scan the AP bus.
819 * @dev: Pointer to device
820 * @data: Pointer to data
822 * Scan the AP bus for new devices.
824 static int __ap_scan_bus(struct device *dev, void *data)
826 return to_ap_dev(dev)->qid == (ap_qid_t)(unsigned long) data;
829 static void ap_device_release(struct device *dev)
831 struct ap_device *ap_dev = to_ap_dev(dev);
833 kfree(ap_dev);
836 static void ap_scan_bus(struct work_struct *unused)
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;
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);
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;
867 spin_unlock_bh(&ap_dev->lock);
868 put_device(dev);
869 continue;
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;
893 ap_dev->device.bus = &ap_bus_type;
894 ap_dev->device.parent = ap_root_device;
895 snprintf(ap_dev->device.bus_id, BUS_ID_SIZE, "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;
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);
911 else
912 device_unregister(&ap_dev->device);
916 static void
917 ap_config_timeout(unsigned long ptr)
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);
925 * ap_schedule_poll_timer(): Schedule poll timer.
927 * Set up the timer to run the poll tasklet
929 static inline void ap_schedule_poll_timer(void)
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);
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
943 * Returns 0 if the device is still present, -ENODEV if not.
945 static int ap_poll_read(struct ap_device *ap_dev, unsigned long *flags)
947 struct ap_queue_status status;
948 struct ap_message *ap_msg;
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;
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;
983 return 0;
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
992 * Returns 0 if the device is still present, -ENODEV if not.
994 static int ap_poll_write(struct ap_device *ap_dev, unsigned long *flags)
996 struct ap_queue_status status;
997 struct ap_message *ap_msg;
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;
1027 return 0;
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
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.
1040 static inline int ap_poll_queue(struct ap_device *ap_dev, unsigned long *flags)
1042 int rc;
1044 rc = ap_poll_read(ap_dev, flags);
1045 if (rc)
1046 return rc;
1047 return ap_poll_write(ap_dev, flags);
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
1055 * Queue a message to a device. Returns 0 if successful.
1057 static int __ap_queue_message(struct ap_device *ap_dev, struct ap_message *ap_msg)
1059 struct ap_queue_status status;
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;
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;
1092 ap_schedule_poll_timer();
1093 return 0;
1096 void ap_queue_message(struct ap_device *ap_dev, struct ap_message *ap_msg)
1098 unsigned long flags;
1099 int rc;
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;
1115 spin_unlock_bh(&ap_dev->lock);
1116 if (rc == -ENODEV)
1117 device_unregister(&ap_dev->device);
1119 EXPORT_SYMBOL(ap_queue_message);
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
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.
1131 void ap_cancel_message(struct ap_device *ap_dev, struct ap_message *ap_msg)
1133 struct ap_message *tmp;
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;
1142 ap_dev->requestq_count--;
1143 found:
1144 list_del_init(&ap_msg->list);
1146 spin_unlock_bh(&ap_dev->lock);
1148 EXPORT_SYMBOL(ap_cancel_message);
1151 * ap_poll_timeout(): AP receive polling for finished AP requests.
1152 * @unused: Unused pointer.
1154 * Schedules the AP tasklet using a high resolution timer.
1156 static enum hrtimer_restart ap_poll_timeout(struct hrtimer *unused)
1158 tasklet_schedule(&ap_tasklet);
1159 return HRTIMER_NORESTART;
1163 * ap_reset(): Reset a not responding AP device.
1164 * @ap_dev: Pointer to the AP device
1166 * Reset a not responding AP device and move all requests from the
1167 * pending queue to the request queue.
1169 static void ap_reset(struct ap_device *ap_dev)
1171 int rc;
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;
1184 static int __ap_poll_all(struct ap_device *ap_dev, unsigned long *flags)
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);
1193 spin_unlock(&ap_dev->lock);
1194 return 0;
1198 * ap_poll_all(): Poll all AP devices.
1199 * @dummy: Unused variable
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.
1205 static void ap_poll_all(unsigned long dummy)
1207 unsigned long flags;
1208 struct ap_device *ap_dev;
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);
1216 spin_unlock(&ap_device_lock);
1217 } while (flags & 1);
1218 if (flags & 2)
1219 ap_schedule_poll_timer();
1223 * ap_poll_thread(): Thread that polls for finished requests.
1224 * @data: Unused pointer
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.
1232 static int ap_poll_thread(void *data)
1234 DECLARE_WAITQUEUE(wait, current);
1235 unsigned long flags;
1236 int requests;
1237 struct ap_device *ap_dev;
1239 set_user_nice(current, 19);
1240 while (1) {
1241 if (need_resched()) {
1242 schedule();
1243 continue;
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);
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);
1260 spin_unlock_bh(&ap_device_lock);
1262 set_current_state(TASK_RUNNING);
1263 remove_wait_queue(&ap_poll_wait, &wait);
1264 return 0;
1267 static int ap_poll_thread_start(void)
1269 int rc;
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;
1278 else
1279 rc = 0;
1280 mutex_unlock(&ap_poll_thread_mutex);
1281 return rc;
1284 static void ap_poll_thread_stop(void)
1286 mutex_lock(&ap_poll_thread_mutex);
1287 if (ap_poll_kthread) {
1288 kthread_stop(ap_poll_kthread);
1289 ap_poll_kthread = NULL;
1291 mutex_unlock(&ap_poll_thread_mutex);
1295 * ap_request_timeout(): Handling of request timeouts
1296 * @data: Holds the AP device.
1298 * Handles request timeouts.
1300 static void ap_request_timeout(unsigned long data)
1302 struct ap_device *ap_dev = (struct ap_device *) data;
1304 if (ap_dev->reset == AP_RESET_ARMED)
1305 ap_dev->reset = AP_RESET_DO;
1308 static void ap_reset_domain(void)
1310 int i;
1312 if (ap_domain_index != -1)
1313 for (i = 0; i < AP_DEVICES; i++)
1314 ap_reset_queue(AP_MKQID(i, ap_domain_index));
1317 static void ap_reset_all(void)
1319 int i, j;
1321 for (i = 0; i < AP_DOMAINS; i++)
1322 for (j = 0; j < AP_DEVICES; j++)
1323 ap_reset_queue(AP_MKQID(j, i));
1326 static struct reset_call ap_reset_call = {
1327 .fn = ap_reset_all,
1331 * ap_module_init(): The module initialization code.
1333 * Initializes the module.
1335 int __init ap_module_init(void)
1337 int rc, i;
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;
1344 if (ap_instructions_available() != 0) {
1345 printk(KERN_WARNING "AP instructions not installed.\n");
1346 return -ENODEV;
1348 register_reset_call(&ap_reset_call);
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;
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;
1366 ap_work_queue = create_singlethread_workqueue("kapwork");
1367 if (!ap_work_queue) {
1368 rc = -ENOMEM;
1369 goto out_root;
1372 if (ap_select_domain() == 0)
1373 ap_scan_bus(NULL);
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);
1382 /* Setup the high resultion poll timer.
1383 * If we are running under z/VM adjust polling to z/VM polling rate.
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;
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;
1397 return 0;
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;
1414 static int __ap_match_all(struct device *dev, void *data)
1416 return 1;
1420 * ap_modules_exit(): The module termination code
1422 * Terminates the module.
1424 void ap_module_exit(void)
1426 int i;
1427 struct device *dev;
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)))
1439 device_unregister(dev);
1440 put_device(dev);
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);
1448 #ifndef CONFIG_ZCRYPT_MONOLITHIC
1449 module_init(ap_module_init);
1450 module_exit(ap_module_exit);
1451 #endif