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