Merge branch 'core-debug-for-linus' of git://git.kernel.org/pub/scm/linux/kernel...
[pandora-kernel.git] / drivers / s390 / crypto / ap_bus.c
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                 spin_lock_bh(&ap_dev->lock);
652                 __ap_poll_device(ap_dev, &flags);
653                 spin_unlock_bh(&ap_dev->lock);
654         } while ((flags & 1) || (flags & 2));
655
656         ap_device_remove(dev);
657         return 0;
658 }
659
660 static int ap_bus_resume(struct device *dev)
661 {
662         int rc = 0;
663         struct ap_device *ap_dev = to_ap_dev(dev);
664
665         if (ap_suspend_flag) {
666                 ap_suspend_flag = 0;
667                 if (!ap_interrupts_available())
668                         ap_interrupt_indicator = NULL;
669                 ap_device_probe(dev);
670                 ap_reset(ap_dev);
671                 setup_timer(&ap_dev->timeout, ap_request_timeout,
672                             (unsigned long) ap_dev);
673                 ap_scan_bus(NULL);
674                 init_timer(&ap_config_timer);
675                 ap_config_timer.function = ap_config_timeout;
676                 ap_config_timer.data = 0;
677                 ap_config_timer.expires = jiffies + ap_config_time * HZ;
678                 add_timer(&ap_config_timer);
679                 ap_work_queue = create_singlethread_workqueue("kapwork");
680                 if (!ap_work_queue)
681                         return -ENOMEM;
682                 tasklet_enable(&ap_tasklet);
683                 if (!ap_using_interrupts())
684                         ap_schedule_poll_timer();
685                 else
686                         tasklet_schedule(&ap_tasklet);
687                 if (ap_thread_flag)
688                         rc = ap_poll_thread_start();
689         } else {
690                 ap_device_probe(dev);
691                 ap_reset(ap_dev);
692                 setup_timer(&ap_dev->timeout, ap_request_timeout,
693                             (unsigned long) ap_dev);
694         }
695
696         return rc;
697 }
698
699 static struct bus_type ap_bus_type = {
700         .name = "ap",
701         .match = &ap_bus_match,
702         .uevent = &ap_uevent,
703         .suspend = ap_bus_suspend,
704         .resume = ap_bus_resume
705 };
706
707 static int ap_device_probe(struct device *dev)
708 {
709         struct ap_device *ap_dev = to_ap_dev(dev);
710         struct ap_driver *ap_drv = to_ap_drv(dev->driver);
711         int rc;
712
713         ap_dev->drv = ap_drv;
714         rc = ap_drv->probe ? ap_drv->probe(ap_dev) : -ENODEV;
715         if (!rc) {
716                 spin_lock_bh(&ap_device_list_lock);
717                 list_add(&ap_dev->list, &ap_device_list);
718                 spin_unlock_bh(&ap_device_list_lock);
719         }
720         return rc;
721 }
722
723 /**
724  * __ap_flush_queue(): Flush requests.
725  * @ap_dev: Pointer to the AP device
726  *
727  * Flush all requests from the request/pending queue of an AP device.
728  */
729 static void __ap_flush_queue(struct ap_device *ap_dev)
730 {
731         struct ap_message *ap_msg, *next;
732
733         list_for_each_entry_safe(ap_msg, next, &ap_dev->pendingq, list) {
734                 list_del_init(&ap_msg->list);
735                 ap_dev->pendingq_count--;
736                 ap_dev->drv->receive(ap_dev, ap_msg, ERR_PTR(-ENODEV));
737         }
738         list_for_each_entry_safe(ap_msg, next, &ap_dev->requestq, list) {
739                 list_del_init(&ap_msg->list);
740                 ap_dev->requestq_count--;
741                 ap_dev->drv->receive(ap_dev, ap_msg, ERR_PTR(-ENODEV));
742         }
743 }
744
745 void ap_flush_queue(struct ap_device *ap_dev)
746 {
747         spin_lock_bh(&ap_dev->lock);
748         __ap_flush_queue(ap_dev);
749         spin_unlock_bh(&ap_dev->lock);
750 }
751 EXPORT_SYMBOL(ap_flush_queue);
752
753 static int ap_device_remove(struct device *dev)
754 {
755         struct ap_device *ap_dev = to_ap_dev(dev);
756         struct ap_driver *ap_drv = ap_dev->drv;
757
758         ap_flush_queue(ap_dev);
759         del_timer_sync(&ap_dev->timeout);
760         spin_lock_bh(&ap_device_list_lock);
761         list_del_init(&ap_dev->list);
762         spin_unlock_bh(&ap_device_list_lock);
763         if (ap_drv->remove)
764                 ap_drv->remove(ap_dev);
765         spin_lock_bh(&ap_dev->lock);
766         atomic_sub(ap_dev->queue_count, &ap_poll_requests);
767         spin_unlock_bh(&ap_dev->lock);
768         return 0;
769 }
770
771 int ap_driver_register(struct ap_driver *ap_drv, struct module *owner,
772                        char *name)
773 {
774         struct device_driver *drv = &ap_drv->driver;
775
776         drv->bus = &ap_bus_type;
777         drv->probe = ap_device_probe;
778         drv->remove = ap_device_remove;
779         drv->owner = owner;
780         drv->name = name;
781         return driver_register(drv);
782 }
783 EXPORT_SYMBOL(ap_driver_register);
784
785 void ap_driver_unregister(struct ap_driver *ap_drv)
786 {
787         driver_unregister(&ap_drv->driver);
788 }
789 EXPORT_SYMBOL(ap_driver_unregister);
790
791 /*
792  * AP bus attributes.
793  */
794 static ssize_t ap_domain_show(struct bus_type *bus, char *buf)
795 {
796         return snprintf(buf, PAGE_SIZE, "%d\n", ap_domain_index);
797 }
798
799 static BUS_ATTR(ap_domain, 0444, ap_domain_show, NULL);
800
801 static ssize_t ap_config_time_show(struct bus_type *bus, char *buf)
802 {
803         return snprintf(buf, PAGE_SIZE, "%d\n", ap_config_time);
804 }
805
806 static ssize_t ap_interrupts_show(struct bus_type *bus, char *buf)
807 {
808         return snprintf(buf, PAGE_SIZE, "%d\n",
809                         ap_using_interrupts() ? 1 : 0);
810 }
811
812 static BUS_ATTR(ap_interrupts, 0444, ap_interrupts_show, NULL);
813
814 static ssize_t ap_config_time_store(struct bus_type *bus,
815                                     const char *buf, size_t count)
816 {
817         int time;
818
819         if (sscanf(buf, "%d\n", &time) != 1 || time < 5 || time > 120)
820                 return -EINVAL;
821         ap_config_time = time;
822         if (!timer_pending(&ap_config_timer) ||
823             !mod_timer(&ap_config_timer, jiffies + ap_config_time * HZ)) {
824                 ap_config_timer.expires = jiffies + ap_config_time * HZ;
825                 add_timer(&ap_config_timer);
826         }
827         return count;
828 }
829
830 static BUS_ATTR(config_time, 0644, ap_config_time_show, ap_config_time_store);
831
832 static ssize_t ap_poll_thread_show(struct bus_type *bus, char *buf)
833 {
834         return snprintf(buf, PAGE_SIZE, "%d\n", ap_poll_kthread ? 1 : 0);
835 }
836
837 static ssize_t ap_poll_thread_store(struct bus_type *bus,
838                                     const char *buf, size_t count)
839 {
840         int flag, rc;
841
842         if (sscanf(buf, "%d\n", &flag) != 1)
843                 return -EINVAL;
844         if (flag) {
845                 rc = ap_poll_thread_start();
846                 if (rc)
847                         return rc;
848         }
849         else
850                 ap_poll_thread_stop();
851         return count;
852 }
853
854 static BUS_ATTR(poll_thread, 0644, ap_poll_thread_show, ap_poll_thread_store);
855
856 static ssize_t poll_timeout_show(struct bus_type *bus, char *buf)
857 {
858         return snprintf(buf, PAGE_SIZE, "%llu\n", poll_timeout);
859 }
860
861 static ssize_t poll_timeout_store(struct bus_type *bus, const char *buf,
862                                   size_t count)
863 {
864         unsigned long long time;
865         ktime_t hr_time;
866
867         /* 120 seconds = maximum poll interval */
868         if (sscanf(buf, "%llu\n", &time) != 1 || time < 1 ||
869             time > 120000000000ULL)
870                 return -EINVAL;
871         poll_timeout = time;
872         hr_time = ktime_set(0, poll_timeout);
873
874         if (!hrtimer_is_queued(&ap_poll_timer) ||
875             !hrtimer_forward(&ap_poll_timer, hrtimer_get_expires(&ap_poll_timer), hr_time)) {
876                 hrtimer_set_expires(&ap_poll_timer, hr_time);
877                 hrtimer_start_expires(&ap_poll_timer, HRTIMER_MODE_ABS);
878         }
879         return count;
880 }
881
882 static BUS_ATTR(poll_timeout, 0644, poll_timeout_show, poll_timeout_store);
883
884 static struct bus_attribute *const ap_bus_attrs[] = {
885         &bus_attr_ap_domain,
886         &bus_attr_config_time,
887         &bus_attr_poll_thread,
888         &bus_attr_ap_interrupts,
889         &bus_attr_poll_timeout,
890         NULL,
891 };
892
893 /**
894  * ap_select_domain(): Select an AP domain.
895  *
896  * Pick one of the 16 AP domains.
897  */
898 static int ap_select_domain(void)
899 {
900         int queue_depth, device_type, count, max_count, best_domain;
901         int rc, i, j;
902
903         /*
904          * We want to use a single domain. Either the one specified with
905          * the "domain=" parameter or the domain with the maximum number
906          * of devices.
907          */
908         if (ap_domain_index >= 0 && ap_domain_index < AP_DOMAINS)
909                 /* Domain has already been selected. */
910                 return 0;
911         best_domain = -1;
912         max_count = 0;
913         for (i = 0; i < AP_DOMAINS; i++) {
914                 count = 0;
915                 for (j = 0; j < AP_DEVICES; j++) {
916                         ap_qid_t qid = AP_MKQID(j, i);
917                         rc = ap_query_queue(qid, &queue_depth, &device_type);
918                         if (rc)
919                                 continue;
920                         count++;
921                 }
922                 if (count > max_count) {
923                         max_count = count;
924                         best_domain = i;
925                 }
926         }
927         if (best_domain >= 0){
928                 ap_domain_index = best_domain;
929                 return 0;
930         }
931         return -ENODEV;
932 }
933
934 /**
935  * ap_probe_device_type(): Find the device type of an AP.
936  * @ap_dev: pointer to the AP device.
937  *
938  * Find the device type if query queue returned a device type of 0.
939  */
940 static int ap_probe_device_type(struct ap_device *ap_dev)
941 {
942         static unsigned char msg[] = {
943                 0x00,0x06,0x00,0x00,0x00,0x00,0x00,0x00,
944                 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
945                 0x00,0x00,0x00,0x58,0x00,0x00,0x00,0x00,
946                 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
947                 0x01,0x00,0x43,0x43,0x41,0x2d,0x41,0x50,
948                 0x50,0x4c,0x20,0x20,0x20,0x01,0x01,0x01,
949                 0x00,0x00,0x00,0x00,0x50,0x4b,0x00,0x00,
950                 0x00,0x00,0x01,0x1c,0x00,0x00,0x00,0x00,
951                 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
952                 0x00,0x00,0x05,0xb8,0x00,0x00,0x00,0x00,
953                 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
954                 0x70,0x00,0x41,0x00,0x00,0x00,0x00,0x00,
955                 0x00,0x00,0x54,0x32,0x01,0x00,0xa0,0x00,
956                 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
957                 0x00,0x00,0x00,0x00,0xb8,0x05,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,0x00,0x00,0x00,0x00,0x00,0x00,
963                 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
964                 0x00,0x00,0x0a,0x00,0x00,0x00,0x00,0x00,
965                 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
966                 0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,
967                 0x49,0x43,0x53,0x46,0x20,0x20,0x20,0x20,
968                 0x50,0x4b,0x0a,0x00,0x50,0x4b,0x43,0x53,
969                 0x2d,0x31,0x2e,0x32,0x37,0x00,0x11,0x22,
970                 0x33,0x44,0x55,0x66,0x77,0x88,0x99,0x00,
971                 0x11,0x22,0x33,0x44,0x55,0x66,0x77,0x88,
972                 0x99,0x00,0x11,0x22,0x33,0x44,0x55,0x66,
973                 0x77,0x88,0x99,0x00,0x11,0x22,0x33,0x44,
974                 0x55,0x66,0x77,0x88,0x99,0x00,0x11,0x22,
975                 0x33,0x44,0x55,0x66,0x77,0x88,0x99,0x00,
976                 0x11,0x22,0x33,0x5d,0x00,0x5b,0x00,0x77,
977                 0x88,0x1e,0x00,0x00,0x57,0x00,0x00,0x00,
978                 0x00,0x04,0x00,0x00,0x4f,0x00,0x00,0x00,
979                 0x03,0x02,0x00,0x00,0x40,0x01,0x00,0x01,
980                 0xce,0x02,0x68,0x2d,0x5f,0xa9,0xde,0x0c,
981                 0xf6,0xd2,0x7b,0x58,0x4b,0xf9,0x28,0x68,
982                 0x3d,0xb4,0xf4,0xef,0x78,0xd5,0xbe,0x66,
983                 0x63,0x42,0xef,0xf8,0xfd,0xa4,0xf8,0xb0,
984                 0x8e,0x29,0xc2,0xc9,0x2e,0xd8,0x45,0xb8,
985                 0x53,0x8c,0x6f,0x4e,0x72,0x8f,0x6c,0x04,
986                 0x9c,0x88,0xfc,0x1e,0xc5,0x83,0x55,0x57,
987                 0xf7,0xdd,0xfd,0x4f,0x11,0x36,0x95,0x5d,
988         };
989         struct ap_queue_status status;
990         unsigned long long psmid;
991         char *reply;
992         int rc, i;
993
994         reply = (void *) get_zeroed_page(GFP_KERNEL);
995         if (!reply) {
996                 rc = -ENOMEM;
997                 goto out;
998         }
999
1000         status = __ap_send(ap_dev->qid, 0x0102030405060708ULL,
1001                            msg, sizeof(msg));
1002         if (status.response_code != AP_RESPONSE_NORMAL) {
1003                 rc = -ENODEV;
1004                 goto out_free;
1005         }
1006
1007         /* Wait for the test message to complete. */
1008         for (i = 0; i < 6; i++) {
1009                 mdelay(300);
1010                 status = __ap_recv(ap_dev->qid, &psmid, reply, 4096);
1011                 if (status.response_code == AP_RESPONSE_NORMAL &&
1012                     psmid == 0x0102030405060708ULL)
1013                         break;
1014         }
1015         if (i < 6) {
1016                 /* Got an answer. */
1017                 if (reply[0] == 0x00 && reply[1] == 0x86)
1018                         ap_dev->device_type = AP_DEVICE_TYPE_PCICC;
1019                 else
1020                         ap_dev->device_type = AP_DEVICE_TYPE_PCICA;
1021                 rc = 0;
1022         } else
1023                 rc = -ENODEV;
1024
1025 out_free:
1026         free_page((unsigned long) reply);
1027 out:
1028         return rc;
1029 }
1030
1031 static void ap_interrupt_handler(void *unused1, void *unused2)
1032 {
1033         tasklet_schedule(&ap_tasklet);
1034 }
1035
1036 /**
1037  * __ap_scan_bus(): Scan the AP bus.
1038  * @dev: Pointer to device
1039  * @data: Pointer to data
1040  *
1041  * Scan the AP bus for new devices.
1042  */
1043 static int __ap_scan_bus(struct device *dev, void *data)
1044 {
1045         return to_ap_dev(dev)->qid == (ap_qid_t)(unsigned long) data;
1046 }
1047
1048 static void ap_device_release(struct device *dev)
1049 {
1050         struct ap_device *ap_dev = to_ap_dev(dev);
1051
1052         kfree(ap_dev);
1053 }
1054
1055 static void ap_scan_bus(struct work_struct *unused)
1056 {
1057         struct ap_device *ap_dev;
1058         struct device *dev;
1059         ap_qid_t qid;
1060         int queue_depth, device_type;
1061         int rc, i;
1062
1063         if (ap_select_domain() != 0)
1064                 return;
1065         for (i = 0; i < AP_DEVICES; i++) {
1066                 qid = AP_MKQID(i, ap_domain_index);
1067                 dev = bus_find_device(&ap_bus_type, NULL,
1068                                       (void *)(unsigned long)qid,
1069                                       __ap_scan_bus);
1070                 rc = ap_query_queue(qid, &queue_depth, &device_type);
1071                 if (dev) {
1072                         if (rc == -EBUSY) {
1073                                 set_current_state(TASK_UNINTERRUPTIBLE);
1074                                 schedule_timeout(AP_RESET_TIMEOUT);
1075                                 rc = ap_query_queue(qid, &queue_depth,
1076                                                     &device_type);
1077                         }
1078                         ap_dev = to_ap_dev(dev);
1079                         spin_lock_bh(&ap_dev->lock);
1080                         if (rc || ap_dev->unregistered) {
1081                                 spin_unlock_bh(&ap_dev->lock);
1082                                 device_unregister(dev);
1083                                 put_device(dev);
1084                                 continue;
1085                         }
1086                         spin_unlock_bh(&ap_dev->lock);
1087                         put_device(dev);
1088                         continue;
1089                 }
1090                 if (rc)
1091                         continue;
1092                 rc = ap_init_queue(qid);
1093                 if (rc)
1094                         continue;
1095                 ap_dev = kzalloc(sizeof(*ap_dev), GFP_KERNEL);
1096                 if (!ap_dev)
1097                         break;
1098                 ap_dev->qid = qid;
1099                 ap_dev->queue_depth = queue_depth;
1100                 ap_dev->unregistered = 1;
1101                 spin_lock_init(&ap_dev->lock);
1102                 INIT_LIST_HEAD(&ap_dev->pendingq);
1103                 INIT_LIST_HEAD(&ap_dev->requestq);
1104                 INIT_LIST_HEAD(&ap_dev->list);
1105                 setup_timer(&ap_dev->timeout, ap_request_timeout,
1106                             (unsigned long) ap_dev);
1107                 if (device_type == 0)
1108                         ap_probe_device_type(ap_dev);
1109                 else
1110                         ap_dev->device_type = device_type;
1111
1112                 ap_dev->device.bus = &ap_bus_type;
1113                 ap_dev->device.parent = ap_root_device;
1114                 if (dev_set_name(&ap_dev->device, "card%02x",
1115                                  AP_QID_DEVICE(ap_dev->qid))) {
1116                         kfree(ap_dev);
1117                         continue;
1118                 }
1119                 ap_dev->device.release = ap_device_release;
1120                 rc = device_register(&ap_dev->device);
1121                 if (rc) {
1122                         put_device(&ap_dev->device);
1123                         continue;
1124                 }
1125                 /* Add device attributes. */
1126                 rc = sysfs_create_group(&ap_dev->device.kobj,
1127                                         &ap_dev_attr_group);
1128                 if (!rc) {
1129                         spin_lock_bh(&ap_dev->lock);
1130                         ap_dev->unregistered = 0;
1131                         spin_unlock_bh(&ap_dev->lock);
1132                 }
1133                 else
1134                         device_unregister(&ap_dev->device);
1135         }
1136 }
1137
1138 static void
1139 ap_config_timeout(unsigned long ptr)
1140 {
1141         queue_work(ap_work_queue, &ap_config_work);
1142         ap_config_timer.expires = jiffies + ap_config_time * HZ;
1143         add_timer(&ap_config_timer);
1144 }
1145
1146 /**
1147  * ap_schedule_poll_timer(): Schedule poll timer.
1148  *
1149  * Set up the timer to run the poll tasklet
1150  */
1151 static inline void ap_schedule_poll_timer(void)
1152 {
1153         ktime_t hr_time;
1154         if (ap_using_interrupts() || ap_suspend_flag)
1155                 return;
1156         if (hrtimer_is_queued(&ap_poll_timer))
1157                 return;
1158         if (ktime_to_ns(hrtimer_expires_remaining(&ap_poll_timer)) <= 0) {
1159                 hr_time = ktime_set(0, poll_timeout);
1160                 hrtimer_forward_now(&ap_poll_timer, hr_time);
1161                 hrtimer_restart(&ap_poll_timer);
1162         }
1163         return;
1164 }
1165
1166 /**
1167  * ap_poll_read(): Receive pending reply messages from an AP device.
1168  * @ap_dev: pointer to the AP device
1169  * @flags: pointer to control flags, bit 2^0 is set if another poll is
1170  *         required, bit 2^1 is set if the poll timer needs to get armed
1171  *
1172  * Returns 0 if the device is still present, -ENODEV if not.
1173  */
1174 static int ap_poll_read(struct ap_device *ap_dev, unsigned long *flags)
1175 {
1176         struct ap_queue_status status;
1177         struct ap_message *ap_msg;
1178
1179         if (ap_dev->queue_count <= 0)
1180                 return 0;
1181         status = __ap_recv(ap_dev->qid, &ap_dev->reply->psmid,
1182                            ap_dev->reply->message, ap_dev->reply->length);
1183         switch (status.response_code) {
1184         case AP_RESPONSE_NORMAL:
1185                 atomic_dec(&ap_poll_requests);
1186                 ap_decrease_queue_count(ap_dev);
1187                 list_for_each_entry(ap_msg, &ap_dev->pendingq, list) {
1188                         if (ap_msg->psmid != ap_dev->reply->psmid)
1189                                 continue;
1190                         list_del_init(&ap_msg->list);
1191                         ap_dev->pendingq_count--;
1192                         ap_dev->drv->receive(ap_dev, ap_msg, ap_dev->reply);
1193                         break;
1194                 }
1195                 if (ap_dev->queue_count > 0)
1196                         *flags |= 1;
1197                 break;
1198         case AP_RESPONSE_NO_PENDING_REPLY:
1199                 if (status.queue_empty) {
1200                         /* The card shouldn't forget requests but who knows. */
1201                         atomic_sub(ap_dev->queue_count, &ap_poll_requests);
1202                         ap_dev->queue_count = 0;
1203                         list_splice_init(&ap_dev->pendingq, &ap_dev->requestq);
1204                         ap_dev->requestq_count += ap_dev->pendingq_count;
1205                         ap_dev->pendingq_count = 0;
1206                 } else
1207                         *flags |= 2;
1208                 break;
1209         default:
1210                 return -ENODEV;
1211         }
1212         return 0;
1213 }
1214
1215 /**
1216  * ap_poll_write(): Send messages from the request queue to an AP device.
1217  * @ap_dev: pointer to the AP device
1218  * @flags: pointer to control flags, bit 2^0 is set if another poll is
1219  *         required, bit 2^1 is set if the poll timer needs to get armed
1220  *
1221  * Returns 0 if the device is still present, -ENODEV if not.
1222  */
1223 static int ap_poll_write(struct ap_device *ap_dev, unsigned long *flags)
1224 {
1225         struct ap_queue_status status;
1226         struct ap_message *ap_msg;
1227
1228         if (ap_dev->requestq_count <= 0 ||
1229             ap_dev->queue_count >= ap_dev->queue_depth)
1230                 return 0;
1231         /* Start the next request on the queue. */
1232         ap_msg = list_entry(ap_dev->requestq.next, struct ap_message, list);
1233         status = __ap_send(ap_dev->qid, ap_msg->psmid,
1234                            ap_msg->message, ap_msg->length);
1235         switch (status.response_code) {
1236         case AP_RESPONSE_NORMAL:
1237                 atomic_inc(&ap_poll_requests);
1238                 ap_increase_queue_count(ap_dev);
1239                 list_move_tail(&ap_msg->list, &ap_dev->pendingq);
1240                 ap_dev->requestq_count--;
1241                 ap_dev->pendingq_count++;
1242                 if (ap_dev->queue_count < ap_dev->queue_depth &&
1243                     ap_dev->requestq_count > 0)
1244                         *flags |= 1;
1245                 *flags |= 2;
1246                 break;
1247         case AP_RESPONSE_Q_FULL:
1248         case AP_RESPONSE_RESET_IN_PROGRESS:
1249                 *flags |= 2;
1250                 break;
1251         case AP_RESPONSE_MESSAGE_TOO_BIG:
1252                 return -EINVAL;
1253         default:
1254                 return -ENODEV;
1255         }
1256         return 0;
1257 }
1258
1259 /**
1260  * ap_poll_queue(): Poll AP device for pending replies and send new messages.
1261  * @ap_dev: pointer to the bus device
1262  * @flags: pointer to control flags, bit 2^0 is set if another poll is
1263  *         required, bit 2^1 is set if the poll timer needs to get armed
1264  *
1265  * Poll AP device for pending replies and send new messages. If either
1266  * ap_poll_read or ap_poll_write returns -ENODEV unregister the device.
1267  * Returns 0.
1268  */
1269 static inline int ap_poll_queue(struct ap_device *ap_dev, unsigned long *flags)
1270 {
1271         int rc;
1272
1273         rc = ap_poll_read(ap_dev, flags);
1274         if (rc)
1275                 return rc;
1276         return ap_poll_write(ap_dev, flags);
1277 }
1278
1279 /**
1280  * __ap_queue_message(): Queue a message to a device.
1281  * @ap_dev: pointer to the AP device
1282  * @ap_msg: the message to be queued
1283  *
1284  * Queue a message to a device. Returns 0 if successful.
1285  */
1286 static int __ap_queue_message(struct ap_device *ap_dev, struct ap_message *ap_msg)
1287 {
1288         struct ap_queue_status status;
1289
1290         if (list_empty(&ap_dev->requestq) &&
1291             ap_dev->queue_count < ap_dev->queue_depth) {
1292                 status = __ap_send(ap_dev->qid, ap_msg->psmid,
1293                                    ap_msg->message, ap_msg->length);
1294                 switch (status.response_code) {
1295                 case AP_RESPONSE_NORMAL:
1296                         list_add_tail(&ap_msg->list, &ap_dev->pendingq);
1297                         atomic_inc(&ap_poll_requests);
1298                         ap_dev->pendingq_count++;
1299                         ap_increase_queue_count(ap_dev);
1300                         ap_dev->total_request_count++;
1301                         break;
1302                 case AP_RESPONSE_Q_FULL:
1303                 case AP_RESPONSE_RESET_IN_PROGRESS:
1304                         list_add_tail(&ap_msg->list, &ap_dev->requestq);
1305                         ap_dev->requestq_count++;
1306                         ap_dev->total_request_count++;
1307                         return -EBUSY;
1308                 case AP_RESPONSE_MESSAGE_TOO_BIG:
1309                         ap_dev->drv->receive(ap_dev, ap_msg, ERR_PTR(-EINVAL));
1310                         return -EINVAL;
1311                 default:        /* Device is gone. */
1312                         ap_dev->drv->receive(ap_dev, ap_msg, ERR_PTR(-ENODEV));
1313                         return -ENODEV;
1314                 }
1315         } else {
1316                 list_add_tail(&ap_msg->list, &ap_dev->requestq);
1317                 ap_dev->requestq_count++;
1318                 ap_dev->total_request_count++;
1319                 return -EBUSY;
1320         }
1321         ap_schedule_poll_timer();
1322         return 0;
1323 }
1324
1325 void ap_queue_message(struct ap_device *ap_dev, struct ap_message *ap_msg)
1326 {
1327         unsigned long flags;
1328         int rc;
1329
1330         spin_lock_bh(&ap_dev->lock);
1331         if (!ap_dev->unregistered) {
1332                 /* Make room on the queue by polling for finished requests. */
1333                 rc = ap_poll_queue(ap_dev, &flags);
1334                 if (!rc)
1335                         rc = __ap_queue_message(ap_dev, ap_msg);
1336                 if (!rc)
1337                         wake_up(&ap_poll_wait);
1338                 if (rc == -ENODEV)
1339                         ap_dev->unregistered = 1;
1340         } else {
1341                 ap_dev->drv->receive(ap_dev, ap_msg, ERR_PTR(-ENODEV));
1342                 rc = -ENODEV;
1343         }
1344         spin_unlock_bh(&ap_dev->lock);
1345         if (rc == -ENODEV)
1346                 device_unregister(&ap_dev->device);
1347 }
1348 EXPORT_SYMBOL(ap_queue_message);
1349
1350 /**
1351  * ap_cancel_message(): Cancel a crypto request.
1352  * @ap_dev: The AP device that has the message queued
1353  * @ap_msg: The message that is to be removed
1354  *
1355  * Cancel a crypto request. This is done by removing the request
1356  * from the device pending or request queue. Note that the
1357  * request stays on the AP queue. When it finishes the message
1358  * reply will be discarded because the psmid can't be found.
1359  */
1360 void ap_cancel_message(struct ap_device *ap_dev, struct ap_message *ap_msg)
1361 {
1362         struct ap_message *tmp;
1363
1364         spin_lock_bh(&ap_dev->lock);
1365         if (!list_empty(&ap_msg->list)) {
1366                 list_for_each_entry(tmp, &ap_dev->pendingq, list)
1367                         if (tmp->psmid == ap_msg->psmid) {
1368                                 ap_dev->pendingq_count--;
1369                                 goto found;
1370                         }
1371                 ap_dev->requestq_count--;
1372         found:
1373                 list_del_init(&ap_msg->list);
1374         }
1375         spin_unlock_bh(&ap_dev->lock);
1376 }
1377 EXPORT_SYMBOL(ap_cancel_message);
1378
1379 /**
1380  * ap_poll_timeout(): AP receive polling for finished AP requests.
1381  * @unused: Unused pointer.
1382  *
1383  * Schedules the AP tasklet using a high resolution timer.
1384  */
1385 static enum hrtimer_restart ap_poll_timeout(struct hrtimer *unused)
1386 {
1387         tasklet_schedule(&ap_tasklet);
1388         return HRTIMER_NORESTART;
1389 }
1390
1391 /**
1392  * ap_reset(): Reset a not responding AP device.
1393  * @ap_dev: Pointer to the AP device
1394  *
1395  * Reset a not responding AP device and move all requests from the
1396  * pending queue to the request queue.
1397  */
1398 static void ap_reset(struct ap_device *ap_dev)
1399 {
1400         int rc;
1401
1402         ap_dev->reset = AP_RESET_IGNORE;
1403         atomic_sub(ap_dev->queue_count, &ap_poll_requests);
1404         ap_dev->queue_count = 0;
1405         list_splice_init(&ap_dev->pendingq, &ap_dev->requestq);
1406         ap_dev->requestq_count += ap_dev->pendingq_count;
1407         ap_dev->pendingq_count = 0;
1408         rc = ap_init_queue(ap_dev->qid);
1409         if (rc == -ENODEV)
1410                 ap_dev->unregistered = 1;
1411 }
1412
1413 static int __ap_poll_device(struct ap_device *ap_dev, unsigned long *flags)
1414 {
1415         if (!ap_dev->unregistered) {
1416                 if (ap_poll_queue(ap_dev, flags))
1417                         ap_dev->unregistered = 1;
1418                 if (ap_dev->reset == AP_RESET_DO)
1419                         ap_reset(ap_dev);
1420         }
1421         return 0;
1422 }
1423
1424 /**
1425  * ap_poll_all(): Poll all AP devices.
1426  * @dummy: Unused variable
1427  *
1428  * Poll all AP devices on the bus in a round robin fashion. Continue
1429  * polling until bit 2^0 of the control flags is not set. If bit 2^1
1430  * of the control flags has been set arm the poll timer.
1431  */
1432 static void ap_poll_all(unsigned long dummy)
1433 {
1434         unsigned long flags;
1435         struct ap_device *ap_dev;
1436
1437         /* Reset the indicator if interrupts are used. Thus new interrupts can
1438          * be received. Doing it in the beginning of the tasklet is therefor
1439          * important that no requests on any AP get lost.
1440          */
1441         if (ap_using_interrupts())
1442                 xchg((u8 *)ap_interrupt_indicator, 0);
1443         do {
1444                 flags = 0;
1445                 spin_lock(&ap_device_list_lock);
1446                 list_for_each_entry(ap_dev, &ap_device_list, list) {
1447                         spin_lock(&ap_dev->lock);
1448                         __ap_poll_device(ap_dev, &flags);
1449                         spin_unlock(&ap_dev->lock);
1450                 }
1451                 spin_unlock(&ap_device_list_lock);
1452         } while (flags & 1);
1453         if (flags & 2)
1454                 ap_schedule_poll_timer();
1455 }
1456
1457 /**
1458  * ap_poll_thread(): Thread that polls for finished requests.
1459  * @data: Unused pointer
1460  *
1461  * AP bus poll thread. The purpose of this thread is to poll for
1462  * finished requests in a loop if there is a "free" cpu - that is
1463  * a cpu that doesn't have anything better to do. The polling stops
1464  * as soon as there is another task or if all messages have been
1465  * delivered.
1466  */
1467 static int ap_poll_thread(void *data)
1468 {
1469         DECLARE_WAITQUEUE(wait, current);
1470         unsigned long flags;
1471         int requests;
1472         struct ap_device *ap_dev;
1473
1474         set_user_nice(current, 19);
1475         while (1) {
1476                 if (ap_suspend_flag)
1477                         return 0;
1478                 if (need_resched()) {
1479                         schedule();
1480                         continue;
1481                 }
1482                 add_wait_queue(&ap_poll_wait, &wait);
1483                 set_current_state(TASK_INTERRUPTIBLE);
1484                 if (kthread_should_stop())
1485                         break;
1486                 requests = atomic_read(&ap_poll_requests);
1487                 if (requests <= 0)
1488                         schedule();
1489                 set_current_state(TASK_RUNNING);
1490                 remove_wait_queue(&ap_poll_wait, &wait);
1491
1492                 flags = 0;
1493                 spin_lock_bh(&ap_device_list_lock);
1494                 list_for_each_entry(ap_dev, &ap_device_list, list) {
1495                         spin_lock(&ap_dev->lock);
1496                         __ap_poll_device(ap_dev, &flags);
1497                         spin_unlock(&ap_dev->lock);
1498                 }
1499                 spin_unlock_bh(&ap_device_list_lock);
1500         }
1501         set_current_state(TASK_RUNNING);
1502         remove_wait_queue(&ap_poll_wait, &wait);
1503         return 0;
1504 }
1505
1506 static int ap_poll_thread_start(void)
1507 {
1508         int rc;
1509
1510         if (ap_using_interrupts() || ap_suspend_flag)
1511                 return 0;
1512         mutex_lock(&ap_poll_thread_mutex);
1513         if (!ap_poll_kthread) {
1514                 ap_poll_kthread = kthread_run(ap_poll_thread, NULL, "appoll");
1515                 rc = IS_ERR(ap_poll_kthread) ? PTR_ERR(ap_poll_kthread) : 0;
1516                 if (rc)
1517                         ap_poll_kthread = NULL;
1518         }
1519         else
1520                 rc = 0;
1521         mutex_unlock(&ap_poll_thread_mutex);
1522         return rc;
1523 }
1524
1525 static void ap_poll_thread_stop(void)
1526 {
1527         mutex_lock(&ap_poll_thread_mutex);
1528         if (ap_poll_kthread) {
1529                 kthread_stop(ap_poll_kthread);
1530                 ap_poll_kthread = NULL;
1531         }
1532         mutex_unlock(&ap_poll_thread_mutex);
1533 }
1534
1535 /**
1536  * ap_request_timeout(): Handling of request timeouts
1537  * @data: Holds the AP device.
1538  *
1539  * Handles request timeouts.
1540  */
1541 static void ap_request_timeout(unsigned long data)
1542 {
1543         struct ap_device *ap_dev = (struct ap_device *) data;
1544
1545         if (ap_dev->reset == AP_RESET_ARMED) {
1546                 ap_dev->reset = AP_RESET_DO;
1547
1548                 if (ap_using_interrupts())
1549                         tasklet_schedule(&ap_tasklet);
1550         }
1551 }
1552
1553 static void ap_reset_domain(void)
1554 {
1555         int i;
1556
1557         if (ap_domain_index != -1)
1558                 for (i = 0; i < AP_DEVICES; i++)
1559                         ap_reset_queue(AP_MKQID(i, ap_domain_index));
1560 }
1561
1562 static void ap_reset_all(void)
1563 {
1564         int i, j;
1565
1566         for (i = 0; i < AP_DOMAINS; i++)
1567                 for (j = 0; j < AP_DEVICES; j++)
1568                         ap_reset_queue(AP_MKQID(j, i));
1569 }
1570
1571 static struct reset_call ap_reset_call = {
1572         .fn = ap_reset_all,
1573 };
1574
1575 /**
1576  * ap_module_init(): The module initialization code.
1577  *
1578  * Initializes the module.
1579  */
1580 int __init ap_module_init(void)
1581 {
1582         int rc, i;
1583
1584         if (ap_domain_index < -1 || ap_domain_index >= AP_DOMAINS) {
1585                 pr_warning("%d is not a valid cryptographic domain\n",
1586                            ap_domain_index);
1587                 return -EINVAL;
1588         }
1589         if (ap_instructions_available() != 0) {
1590                 pr_warning("The hardware system does not support "
1591                            "AP instructions\n");
1592                 return -ENODEV;
1593         }
1594         if (ap_interrupts_available()) {
1595                 isc_register(AP_ISC);
1596                 ap_interrupt_indicator = s390_register_adapter_interrupt(
1597                         &ap_interrupt_handler, NULL, AP_ISC);
1598                 if (IS_ERR(ap_interrupt_indicator)) {
1599                         ap_interrupt_indicator = NULL;
1600                         isc_unregister(AP_ISC);
1601                 }
1602         }
1603
1604         register_reset_call(&ap_reset_call);
1605
1606         /* Create /sys/bus/ap. */
1607         rc = bus_register(&ap_bus_type);
1608         if (rc)
1609                 goto out;
1610         for (i = 0; ap_bus_attrs[i]; i++) {
1611                 rc = bus_create_file(&ap_bus_type, ap_bus_attrs[i]);
1612                 if (rc)
1613                         goto out_bus;
1614         }
1615
1616         /* Create /sys/devices/ap. */
1617         ap_root_device = root_device_register("ap");
1618         rc = IS_ERR(ap_root_device) ? PTR_ERR(ap_root_device) : 0;
1619         if (rc)
1620                 goto out_bus;
1621
1622         ap_work_queue = create_singlethread_workqueue("kapwork");
1623         if (!ap_work_queue) {
1624                 rc = -ENOMEM;
1625                 goto out_root;
1626         }
1627
1628         if (ap_select_domain() == 0)
1629                 ap_scan_bus(NULL);
1630
1631         /* Setup the AP bus rescan timer. */
1632         init_timer(&ap_config_timer);
1633         ap_config_timer.function = ap_config_timeout;
1634         ap_config_timer.data = 0;
1635         ap_config_timer.expires = jiffies + ap_config_time * HZ;
1636         add_timer(&ap_config_timer);
1637
1638         /* Setup the high resultion poll timer.
1639          * If we are running under z/VM adjust polling to z/VM polling rate.
1640          */
1641         if (MACHINE_IS_VM)
1642                 poll_timeout = 1500000;
1643         hrtimer_init(&ap_poll_timer, CLOCK_MONOTONIC, HRTIMER_MODE_ABS);
1644         ap_poll_timer.function = ap_poll_timeout;
1645
1646         /* Start the low priority AP bus poll thread. */
1647         if (ap_thread_flag) {
1648                 rc = ap_poll_thread_start();
1649                 if (rc)
1650                         goto out_work;
1651         }
1652
1653         return 0;
1654
1655 out_work:
1656         del_timer_sync(&ap_config_timer);
1657         hrtimer_cancel(&ap_poll_timer);
1658         destroy_workqueue(ap_work_queue);
1659 out_root:
1660         root_device_unregister(ap_root_device);
1661 out_bus:
1662         while (i--)
1663                 bus_remove_file(&ap_bus_type, ap_bus_attrs[i]);
1664         bus_unregister(&ap_bus_type);
1665 out:
1666         unregister_reset_call(&ap_reset_call);
1667         if (ap_using_interrupts()) {
1668                 s390_unregister_adapter_interrupt(ap_interrupt_indicator, AP_ISC);
1669                 isc_unregister(AP_ISC);
1670         }
1671         return rc;
1672 }
1673
1674 static int __ap_match_all(struct device *dev, void *data)
1675 {
1676         return 1;
1677 }
1678
1679 /**
1680  * ap_modules_exit(): The module termination code
1681  *
1682  * Terminates the module.
1683  */
1684 void ap_module_exit(void)
1685 {
1686         int i;
1687         struct device *dev;
1688
1689         ap_reset_domain();
1690         ap_poll_thread_stop();
1691         del_timer_sync(&ap_config_timer);
1692         hrtimer_cancel(&ap_poll_timer);
1693         destroy_workqueue(ap_work_queue);
1694         tasklet_kill(&ap_tasklet);
1695         root_device_unregister(ap_root_device);
1696         while ((dev = bus_find_device(&ap_bus_type, NULL, NULL,
1697                     __ap_match_all)))
1698         {
1699                 device_unregister(dev);
1700                 put_device(dev);
1701         }
1702         for (i = 0; ap_bus_attrs[i]; i++)
1703                 bus_remove_file(&ap_bus_type, ap_bus_attrs[i]);
1704         bus_unregister(&ap_bus_type);
1705         unregister_reset_call(&ap_reset_call);
1706         if (ap_using_interrupts()) {
1707                 s390_unregister_adapter_interrupt(ap_interrupt_indicator, AP_ISC);
1708                 isc_unregister(AP_ISC);
1709         }
1710 }
1711
1712 #ifndef CONFIG_ZCRYPT_MONOLITHIC
1713 module_init(ap_module_init);
1714 module_exit(ap_module_exit);
1715 #endif