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 <linux/suspend.h> 41 #include <asm/reset.h> 42 #include <asm/airq.h> 43 #include <linux/atomic.h> 44 #include <asm/isc.h> 45 #include <linux/hrtimer.h> 46 #include <linux/ktime.h> 47 #include <asm/facility.h> 48 #include <linux/crypto.h> 49 50 #include "ap_bus.h" 51 52 /* 53 * Module description. 54 */ 55 MODULE_AUTHOR("IBM Corporation"); 56 MODULE_DESCRIPTION("Adjunct Processor Bus driver, " \ 57 "Copyright IBM Corp. 2006, 2012"); 58 MODULE_LICENSE("GPL"); 59 MODULE_ALIAS_CRYPTO("z90crypt"); 60 61 /* 62 * Module parameter 63 */ 64 int ap_domain_index = -1; /* Adjunct Processor Domain Index */ 65 module_param_named(domain, ap_domain_index, int, S_IRUSR|S_IRGRP); 66 MODULE_PARM_DESC(domain, "domain index for ap devices"); 67 EXPORT_SYMBOL(ap_domain_index); 68 69 static int ap_thread_flag = 0; 70 module_param_named(poll_thread, ap_thread_flag, int, S_IRUSR|S_IRGRP); 71 MODULE_PARM_DESC(poll_thread, "Turn on/off poll thread, default is 0 (off)."); 72 73 static struct device *ap_root_device = NULL; 74 static struct ap_config_info *ap_configuration; 75 static DEFINE_SPINLOCK(ap_device_list_lock); 76 static LIST_HEAD(ap_device_list); 77 static bool initialised; 78 79 /* 80 * Workqueue timer for bus rescan. 81 */ 82 static struct timer_list ap_config_timer; 83 static int ap_config_time = AP_CONFIG_TIME; 84 static void ap_scan_bus(struct work_struct *); 85 static DECLARE_WORK(ap_scan_work, ap_scan_bus); 86 87 /* 88 * Tasklet & timer for AP request polling and interrupts 89 */ 90 static void ap_tasklet_fn(unsigned long); 91 static DECLARE_TASKLET(ap_tasklet, ap_tasklet_fn, 0); 92 static atomic_t ap_poll_requests = ATOMIC_INIT(0); 93 static DECLARE_WAIT_QUEUE_HEAD(ap_poll_wait); 94 static struct task_struct *ap_poll_kthread = NULL; 95 static DEFINE_MUTEX(ap_poll_thread_mutex); 96 static DEFINE_SPINLOCK(ap_poll_timer_lock); 97 static struct hrtimer ap_poll_timer; 98 /* In LPAR poll with 4kHz frequency. Poll every 250000 nanoseconds. 99 * If z/VM change to 1500000 nanoseconds to adjust to z/VM polling.*/ 100 static unsigned long long poll_timeout = 250000; 101 102 /* Suspend flag */ 103 static int ap_suspend_flag; 104 /* Maximum domain id */ 105 static int ap_max_domain_id; 106 /* Flag to check if domain was set through module parameter domain=. This is 107 * important when supsend and resume is done in a z/VM environment where the 108 * domain might change. */ 109 static int user_set_domain = 0; 110 static struct bus_type ap_bus_type; 111 112 /* Adapter interrupt definitions */ 113 static void ap_interrupt_handler(struct airq_struct *airq); 114 115 static int ap_airq_flag; 116 117 static struct airq_struct ap_airq = { 118 .handler = ap_interrupt_handler, 119 .isc = AP_ISC, 120 }; 121 122 /** 123 * ap_using_interrupts() - Returns non-zero if interrupt support is 124 * available. 125 */ 126 static inline int ap_using_interrupts(void) 127 { 128 return ap_airq_flag; 129 } 130 131 /** 132 * ap_intructions_available() - Test if AP instructions are available. 133 * 134 * Returns 0 if the AP instructions are installed. 135 */ 136 static inline int ap_instructions_available(void) 137 { 138 register unsigned long reg0 asm ("0") = AP_MKQID(0,0); 139 register unsigned long reg1 asm ("1") = -ENODEV; 140 register unsigned long reg2 asm ("2") = 0UL; 141 142 asm volatile( 143 " .long 0xb2af0000\n" /* PQAP(TAPQ) */ 144 "0: la %1,0\n" 145 "1:\n" 146 EX_TABLE(0b, 1b) 147 : "+d" (reg0), "+d" (reg1), "+d" (reg2) : : "cc" ); 148 return reg1; 149 } 150 151 /** 152 * ap_interrupts_available(): Test if AP interrupts are available. 153 * 154 * Returns 1 if AP interrupts are available. 155 */ 156 static int ap_interrupts_available(void) 157 { 158 return test_facility(65); 159 } 160 161 /** 162 * ap_configuration_available(): Test if AP configuration 163 * information is available. 164 * 165 * Returns 1 if AP configuration information is available. 166 */ 167 static int ap_configuration_available(void) 168 { 169 return test_facility(12); 170 } 171 172 /** 173 * ap_test_queue(): Test adjunct processor queue. 174 * @qid: The AP queue number 175 * @info: Pointer to queue descriptor 176 * 177 * Returns AP queue status structure. 178 */ 179 static inline struct ap_queue_status 180 ap_test_queue(ap_qid_t qid, unsigned long *info) 181 { 182 register unsigned long reg0 asm ("0") = qid; 183 register struct ap_queue_status reg1 asm ("1"); 184 register unsigned long reg2 asm ("2") = 0UL; 185 186 if (test_facility(15)) 187 reg0 |= 1UL << 23; /* set APFT T bit*/ 188 asm volatile(".long 0xb2af0000" /* PQAP(TAPQ) */ 189 : "+d" (reg0), "=d" (reg1), "+d" (reg2) : : "cc"); 190 if (info) 191 *info = reg2; 192 return reg1; 193 } 194 195 /** 196 * ap_reset_queue(): Reset adjunct processor queue. 197 * @qid: The AP queue number 198 * 199 * Returns AP queue status structure. 200 */ 201 static inline struct ap_queue_status ap_reset_queue(ap_qid_t qid) 202 { 203 register unsigned long reg0 asm ("0") = qid | 0x01000000UL; 204 register struct ap_queue_status reg1 asm ("1"); 205 register unsigned long reg2 asm ("2") = 0UL; 206 207 asm volatile( 208 ".long 0xb2af0000" /* PQAP(RAPQ) */ 209 : "+d" (reg0), "=d" (reg1), "+d" (reg2) : : "cc"); 210 return reg1; 211 } 212 213 /** 214 * ap_queue_interruption_control(): Enable interruption for a specific AP. 215 * @qid: The AP queue number 216 * @ind: The notification indicator byte 217 * 218 * Returns AP queue status. 219 */ 220 static inline struct ap_queue_status 221 ap_queue_interruption_control(ap_qid_t qid, void *ind) 222 { 223 register unsigned long reg0 asm ("0") = qid | 0x03000000UL; 224 register unsigned long reg1_in asm ("1") = 0x0000800000000000UL | AP_ISC; 225 register struct ap_queue_status reg1_out asm ("1"); 226 register void *reg2 asm ("2") = ind; 227 asm volatile( 228 ".long 0xb2af0000" /* PQAP(AQIC) */ 229 : "+d" (reg0), "+d" (reg1_in), "=d" (reg1_out), "+d" (reg2) 230 : 231 : "cc" ); 232 return reg1_out; 233 } 234 235 /** 236 * ap_query_configuration(): Get AP configuration data 237 * 238 * Returns 0 on success, or -EOPNOTSUPP. 239 */ 240 static inline int ap_query_configuration(void) 241 { 242 register unsigned long reg0 asm ("0") = 0x04000000UL; 243 register unsigned long reg1 asm ("1") = -EINVAL; 244 register void *reg2 asm ("2") = (void *) ap_configuration; 245 246 if (!ap_configuration) 247 return -EOPNOTSUPP; 248 asm volatile( 249 ".long 0xb2af0000\n" /* PQAP(QCI) */ 250 "0: la %1,0\n" 251 "1:\n" 252 EX_TABLE(0b, 1b) 253 : "+d" (reg0), "+d" (reg1), "+d" (reg2) 254 : 255 : "cc"); 256 257 return reg1; 258 } 259 260 /** 261 * ap_init_configuration(): Allocate and query configuration array. 262 */ 263 static void ap_init_configuration(void) 264 { 265 if (!ap_configuration_available()) 266 return; 267 268 ap_configuration = kzalloc(sizeof(*ap_configuration), GFP_KERNEL); 269 if (!ap_configuration) 270 return; 271 if (ap_query_configuration() != 0) { 272 kfree(ap_configuration); 273 ap_configuration = NULL; 274 return; 275 } 276 } 277 278 /* 279 * ap_test_config(): helper function to extract the nrth bit 280 * within the unsigned int array field. 281 */ 282 static inline int ap_test_config(unsigned int *field, unsigned int nr) 283 { 284 return ap_test_bit((field + (nr >> 5)), (nr & 0x1f)); 285 } 286 287 /* 288 * ap_test_config_card_id(): Test, whether an AP card ID is configured. 289 * @id AP card ID 290 * 291 * Returns 0 if the card is not configured 292 * 1 if the card is configured or 293 * if the configuration information is not available 294 */ 295 static inline int ap_test_config_card_id(unsigned int id) 296 { 297 if (!ap_configuration) /* QCI not supported */ 298 return 1; 299 return ap_test_config(ap_configuration->apm, id); 300 } 301 302 /* 303 * ap_test_config_domain(): Test, whether an AP usage domain is configured. 304 * @domain AP usage domain ID 305 * 306 * Returns 0 if the usage domain is not configured 307 * 1 if the usage domain is configured or 308 * if the configuration information is not available 309 */ 310 static inline int ap_test_config_domain(unsigned int domain) 311 { 312 if (!ap_configuration) /* QCI not supported */ 313 return domain < 16; 314 return ap_test_config(ap_configuration->aqm, domain); 315 } 316 317 /** 318 * ap_queue_enable_interruption(): Enable interruption on an AP. 319 * @qid: The AP queue number 320 * @ind: the notification indicator byte 321 * 322 * Enables interruption on AP queue via ap_queue_interruption_control(). Based 323 * on the return value it waits a while and tests the AP queue if interrupts 324 * have been switched on using ap_test_queue(). 325 */ 326 static int ap_queue_enable_interruption(struct ap_device *ap_dev, void *ind) 327 { 328 struct ap_queue_status status; 329 330 status = ap_queue_interruption_control(ap_dev->qid, ind); 331 switch (status.response_code) { 332 case AP_RESPONSE_NORMAL: 333 case AP_RESPONSE_OTHERWISE_CHANGED: 334 return 0; 335 case AP_RESPONSE_Q_NOT_AVAIL: 336 case AP_RESPONSE_DECONFIGURED: 337 case AP_RESPONSE_CHECKSTOPPED: 338 case AP_RESPONSE_INVALID_ADDRESS: 339 pr_err("Registering adapter interrupts for AP %d failed\n", 340 AP_QID_DEVICE(ap_dev->qid)); 341 return -EOPNOTSUPP; 342 case AP_RESPONSE_RESET_IN_PROGRESS: 343 case AP_RESPONSE_BUSY: 344 default: 345 return -EBUSY; 346 } 347 } 348 349 /** 350 * __ap_send(): Send message to adjunct processor queue. 351 * @qid: The AP queue number 352 * @psmid: The program supplied message identifier 353 * @msg: The message text 354 * @length: The message length 355 * @special: Special Bit 356 * 357 * Returns AP queue status structure. 358 * Condition code 1 on NQAP can't happen because the L bit is 1. 359 * Condition code 2 on NQAP also means the send is incomplete, 360 * because a segment boundary was reached. The NQAP is repeated. 361 */ 362 static inline struct ap_queue_status 363 __ap_send(ap_qid_t qid, unsigned long long psmid, void *msg, size_t length, 364 unsigned int special) 365 { 366 typedef struct { char _[length]; } msgblock; 367 register unsigned long reg0 asm ("0") = qid | 0x40000000UL; 368 register struct ap_queue_status reg1 asm ("1"); 369 register unsigned long reg2 asm ("2") = (unsigned long) msg; 370 register unsigned long reg3 asm ("3") = (unsigned long) length; 371 register unsigned long reg4 asm ("4") = (unsigned int) (psmid >> 32); 372 register unsigned long reg5 asm ("5") = psmid & 0xffffffff; 373 374 if (special == 1) 375 reg0 |= 0x400000UL; 376 377 asm volatile ( 378 "0: .long 0xb2ad0042\n" /* NQAP */ 379 " brc 2,0b" 380 : "+d" (reg0), "=d" (reg1), "+d" (reg2), "+d" (reg3) 381 : "d" (reg4), "d" (reg5), "m" (*(msgblock *) msg) 382 : "cc" ); 383 return reg1; 384 } 385 386 int ap_send(ap_qid_t qid, unsigned long long psmid, void *msg, size_t length) 387 { 388 struct ap_queue_status status; 389 390 status = __ap_send(qid, psmid, msg, length, 0); 391 switch (status.response_code) { 392 case AP_RESPONSE_NORMAL: 393 return 0; 394 case AP_RESPONSE_Q_FULL: 395 case AP_RESPONSE_RESET_IN_PROGRESS: 396 return -EBUSY; 397 case AP_RESPONSE_REQ_FAC_NOT_INST: 398 return -EINVAL; 399 default: /* Device is gone. */ 400 return -ENODEV; 401 } 402 } 403 EXPORT_SYMBOL(ap_send); 404 405 /** 406 * __ap_recv(): Receive message from adjunct processor queue. 407 * @qid: The AP queue number 408 * @psmid: Pointer to program supplied message identifier 409 * @msg: The message text 410 * @length: The message length 411 * 412 * Returns AP queue status structure. 413 * Condition code 1 on DQAP means the receive has taken place 414 * but only partially. The response is incomplete, hence the 415 * DQAP is repeated. 416 * Condition code 2 on DQAP also means the receive is incomplete, 417 * this time because a segment boundary was reached. Again, the 418 * DQAP is repeated. 419 * Note that gpr2 is used by the DQAP instruction to keep track of 420 * any 'residual' length, in case the instruction gets interrupted. 421 * Hence it gets zeroed before the instruction. 422 */ 423 static inline struct ap_queue_status 424 __ap_recv(ap_qid_t qid, unsigned long long *psmid, void *msg, size_t length) 425 { 426 typedef struct { char _[length]; } msgblock; 427 register unsigned long reg0 asm("0") = qid | 0x80000000UL; 428 register struct ap_queue_status reg1 asm ("1"); 429 register unsigned long reg2 asm("2") = 0UL; 430 register unsigned long reg4 asm("4") = (unsigned long) msg; 431 register unsigned long reg5 asm("5") = (unsigned long) length; 432 register unsigned long reg6 asm("6") = 0UL; 433 register unsigned long reg7 asm("7") = 0UL; 434 435 436 asm volatile( 437 "0: .long 0xb2ae0064\n" /* DQAP */ 438 " brc 6,0b\n" 439 : "+d" (reg0), "=d" (reg1), "+d" (reg2), 440 "+d" (reg4), "+d" (reg5), "+d" (reg6), "+d" (reg7), 441 "=m" (*(msgblock *) msg) : : "cc" ); 442 *psmid = (((unsigned long long) reg6) << 32) + reg7; 443 return reg1; 444 } 445 446 int ap_recv(ap_qid_t qid, unsigned long long *psmid, void *msg, size_t length) 447 { 448 struct ap_queue_status status; 449 450 status = __ap_recv(qid, psmid, msg, length); 451 switch (status.response_code) { 452 case AP_RESPONSE_NORMAL: 453 return 0; 454 case AP_RESPONSE_NO_PENDING_REPLY: 455 if (status.queue_empty) 456 return -ENOENT; 457 return -EBUSY; 458 case AP_RESPONSE_RESET_IN_PROGRESS: 459 return -EBUSY; 460 default: 461 return -ENODEV; 462 } 463 } 464 EXPORT_SYMBOL(ap_recv); 465 466 /** 467 * ap_query_queue(): Check if an AP queue is available. 468 * @qid: The AP queue number 469 * @queue_depth: Pointer to queue depth value 470 * @device_type: Pointer to device type value 471 * @facilities: Pointer to facility indicator 472 */ 473 static int ap_query_queue(ap_qid_t qid, int *queue_depth, int *device_type, 474 unsigned int *facilities) 475 { 476 struct ap_queue_status status; 477 unsigned long info; 478 int nd; 479 480 if (!ap_test_config_card_id(AP_QID_DEVICE(qid))) 481 return -ENODEV; 482 483 status = ap_test_queue(qid, &info); 484 switch (status.response_code) { 485 case AP_RESPONSE_NORMAL: 486 *queue_depth = (int)(info & 0xff); 487 *device_type = (int)((info >> 24) & 0xff); 488 *facilities = (unsigned int)(info >> 32); 489 /* Update maximum domain id */ 490 nd = (info >> 16) & 0xff; 491 if ((info & (1UL << 57)) && nd > 0) 492 ap_max_domain_id = nd; 493 return 0; 494 case AP_RESPONSE_Q_NOT_AVAIL: 495 case AP_RESPONSE_DECONFIGURED: 496 case AP_RESPONSE_CHECKSTOPPED: 497 case AP_RESPONSE_INVALID_ADDRESS: 498 return -ENODEV; 499 case AP_RESPONSE_RESET_IN_PROGRESS: 500 case AP_RESPONSE_OTHERWISE_CHANGED: 501 case AP_RESPONSE_BUSY: 502 return -EBUSY; 503 default: 504 BUG(); 505 } 506 } 507 508 /* State machine definitions and helpers */ 509 510 static void ap_sm_wait(enum ap_wait wait) 511 { 512 ktime_t hr_time; 513 514 switch (wait) { 515 case AP_WAIT_AGAIN: 516 case AP_WAIT_INTERRUPT: 517 if (ap_using_interrupts()) 518 break; 519 if (ap_poll_kthread) { 520 wake_up(&ap_poll_wait); 521 break; 522 } 523 /* Fall through */ 524 case AP_WAIT_TIMEOUT: 525 spin_lock_bh(&ap_poll_timer_lock); 526 if (!hrtimer_is_queued(&ap_poll_timer)) { 527 hr_time = ktime_set(0, poll_timeout); 528 hrtimer_forward_now(&ap_poll_timer, hr_time); 529 hrtimer_restart(&ap_poll_timer); 530 } 531 spin_unlock_bh(&ap_poll_timer_lock); 532 break; 533 case AP_WAIT_NONE: 534 default: 535 break; 536 } 537 } 538 539 static enum ap_wait ap_sm_nop(struct ap_device *ap_dev) 540 { 541 return AP_WAIT_NONE; 542 } 543 544 /** 545 * ap_sm_recv(): Receive pending reply messages from an AP device but do 546 * not change the state of the device. 547 * @ap_dev: pointer to the AP device 548 * 549 * Returns AP_WAIT_NONE, AP_WAIT_AGAIN, or AP_WAIT_INTERRUPT 550 */ 551 static struct ap_queue_status ap_sm_recv(struct ap_device *ap_dev) 552 { 553 struct ap_queue_status status; 554 struct ap_message *ap_msg; 555 556 status = __ap_recv(ap_dev->qid, &ap_dev->reply->psmid, 557 ap_dev->reply->message, ap_dev->reply->length); 558 switch (status.response_code) { 559 case AP_RESPONSE_NORMAL: 560 atomic_dec(&ap_poll_requests); 561 ap_dev->queue_count--; 562 if (ap_dev->queue_count > 0) 563 mod_timer(&ap_dev->timeout, 564 jiffies + ap_dev->drv->request_timeout); 565 list_for_each_entry(ap_msg, &ap_dev->pendingq, list) { 566 if (ap_msg->psmid != ap_dev->reply->psmid) 567 continue; 568 list_del_init(&ap_msg->list); 569 ap_dev->pendingq_count--; 570 ap_msg->receive(ap_dev, ap_msg, ap_dev->reply); 571 break; 572 } 573 case AP_RESPONSE_NO_PENDING_REPLY: 574 if (!status.queue_empty || ap_dev->queue_count <= 0) 575 break; 576 /* The card shouldn't forget requests but who knows. */ 577 atomic_sub(ap_dev->queue_count, &ap_poll_requests); 578 ap_dev->queue_count = 0; 579 list_splice_init(&ap_dev->pendingq, &ap_dev->requestq); 580 ap_dev->requestq_count += ap_dev->pendingq_count; 581 ap_dev->pendingq_count = 0; 582 break; 583 default: 584 break; 585 } 586 return status; 587 } 588 589 /** 590 * ap_sm_read(): Receive pending reply messages from an AP device. 591 * @ap_dev: pointer to the AP device 592 * 593 * Returns AP_WAIT_NONE, AP_WAIT_AGAIN, or AP_WAIT_INTERRUPT 594 */ 595 static enum ap_wait ap_sm_read(struct ap_device *ap_dev) 596 { 597 struct ap_queue_status status; 598 599 status = ap_sm_recv(ap_dev); 600 switch (status.response_code) { 601 case AP_RESPONSE_NORMAL: 602 if (ap_dev->queue_count > 0) 603 return AP_WAIT_AGAIN; 604 ap_dev->state = AP_STATE_IDLE; 605 return AP_WAIT_NONE; 606 case AP_RESPONSE_NO_PENDING_REPLY: 607 if (ap_dev->queue_count > 0) 608 return AP_WAIT_INTERRUPT; 609 ap_dev->state = AP_STATE_IDLE; 610 return AP_WAIT_NONE; 611 default: 612 ap_dev->state = AP_STATE_BORKED; 613 return AP_WAIT_NONE; 614 } 615 } 616 617 /** 618 * ap_sm_write(): Send messages from the request queue to an AP device. 619 * @ap_dev: pointer to the AP device 620 * 621 * Returns AP_WAIT_NONE, AP_WAIT_AGAIN, or AP_WAIT_INTERRUPT 622 */ 623 static enum ap_wait ap_sm_write(struct ap_device *ap_dev) 624 { 625 struct ap_queue_status status; 626 struct ap_message *ap_msg; 627 628 if (ap_dev->requestq_count <= 0) 629 return AP_WAIT_NONE; 630 /* Start the next request on the queue. */ 631 ap_msg = list_entry(ap_dev->requestq.next, struct ap_message, list); 632 status = __ap_send(ap_dev->qid, ap_msg->psmid, 633 ap_msg->message, ap_msg->length, ap_msg->special); 634 switch (status.response_code) { 635 case AP_RESPONSE_NORMAL: 636 atomic_inc(&ap_poll_requests); 637 ap_dev->queue_count++; 638 if (ap_dev->queue_count == 1) 639 mod_timer(&ap_dev->timeout, 640 jiffies + ap_dev->drv->request_timeout); 641 list_move_tail(&ap_msg->list, &ap_dev->pendingq); 642 ap_dev->requestq_count--; 643 ap_dev->pendingq_count++; 644 if (ap_dev->queue_count < ap_dev->queue_depth) { 645 ap_dev->state = AP_STATE_WORKING; 646 return AP_WAIT_AGAIN; 647 } 648 /* fall through */ 649 case AP_RESPONSE_Q_FULL: 650 ap_dev->state = AP_STATE_QUEUE_FULL; 651 return AP_WAIT_INTERRUPT; 652 case AP_RESPONSE_RESET_IN_PROGRESS: 653 ap_dev->state = AP_STATE_RESET_WAIT; 654 return AP_WAIT_TIMEOUT; 655 case AP_RESPONSE_MESSAGE_TOO_BIG: 656 case AP_RESPONSE_REQ_FAC_NOT_INST: 657 list_del_init(&ap_msg->list); 658 ap_dev->requestq_count--; 659 ap_msg->rc = -EINVAL; 660 ap_msg->receive(ap_dev, ap_msg, NULL); 661 return AP_WAIT_AGAIN; 662 default: 663 ap_dev->state = AP_STATE_BORKED; 664 return AP_WAIT_NONE; 665 } 666 } 667 668 /** 669 * ap_sm_read_write(): Send and receive messages to/from an AP device. 670 * @ap_dev: pointer to the AP device 671 * 672 * Returns AP_WAIT_NONE, AP_WAIT_AGAIN, or AP_WAIT_INTERRUPT 673 */ 674 static enum ap_wait ap_sm_read_write(struct ap_device *ap_dev) 675 { 676 return min(ap_sm_read(ap_dev), ap_sm_write(ap_dev)); 677 } 678 679 /** 680 * ap_sm_reset(): Reset an AP queue. 681 * @qid: The AP queue number 682 * 683 * Submit the Reset command to an AP queue. 684 */ 685 static enum ap_wait ap_sm_reset(struct ap_device *ap_dev) 686 { 687 struct ap_queue_status status; 688 689 status = ap_reset_queue(ap_dev->qid); 690 switch (status.response_code) { 691 case AP_RESPONSE_NORMAL: 692 case AP_RESPONSE_RESET_IN_PROGRESS: 693 ap_dev->state = AP_STATE_RESET_WAIT; 694 ap_dev->interrupt = AP_INTR_DISABLED; 695 return AP_WAIT_TIMEOUT; 696 case AP_RESPONSE_BUSY: 697 return AP_WAIT_TIMEOUT; 698 case AP_RESPONSE_Q_NOT_AVAIL: 699 case AP_RESPONSE_DECONFIGURED: 700 case AP_RESPONSE_CHECKSTOPPED: 701 default: 702 ap_dev->state = AP_STATE_BORKED; 703 return AP_WAIT_NONE; 704 } 705 } 706 707 /** 708 * ap_sm_reset_wait(): Test queue for completion of the reset operation 709 * @ap_dev: pointer to the AP device 710 * 711 * Returns AP_POLL_IMMEDIATELY, AP_POLL_AFTER_TIMEROUT or 0. 712 */ 713 static enum ap_wait ap_sm_reset_wait(struct ap_device *ap_dev) 714 { 715 struct ap_queue_status status; 716 unsigned long info; 717 718 if (ap_dev->queue_count > 0) 719 /* Try to read a completed message and get the status */ 720 status = ap_sm_recv(ap_dev); 721 else 722 /* Get the status with TAPQ */ 723 status = ap_test_queue(ap_dev->qid, &info); 724 725 switch (status.response_code) { 726 case AP_RESPONSE_NORMAL: 727 if (ap_using_interrupts() && 728 ap_queue_enable_interruption(ap_dev, 729 ap_airq.lsi_ptr) == 0) 730 ap_dev->state = AP_STATE_SETIRQ_WAIT; 731 else 732 ap_dev->state = (ap_dev->queue_count > 0) ? 733 AP_STATE_WORKING : AP_STATE_IDLE; 734 return AP_WAIT_AGAIN; 735 case AP_RESPONSE_BUSY: 736 case AP_RESPONSE_RESET_IN_PROGRESS: 737 return AP_WAIT_TIMEOUT; 738 case AP_RESPONSE_Q_NOT_AVAIL: 739 case AP_RESPONSE_DECONFIGURED: 740 case AP_RESPONSE_CHECKSTOPPED: 741 default: 742 ap_dev->state = AP_STATE_BORKED; 743 return AP_WAIT_NONE; 744 } 745 } 746 747 /** 748 * ap_sm_setirq_wait(): Test queue for completion of the irq enablement 749 * @ap_dev: pointer to the AP device 750 * 751 * Returns AP_POLL_IMMEDIATELY, AP_POLL_AFTER_TIMEROUT or 0. 752 */ 753 static enum ap_wait ap_sm_setirq_wait(struct ap_device *ap_dev) 754 { 755 struct ap_queue_status status; 756 unsigned long info; 757 758 if (ap_dev->queue_count > 0) 759 /* Try to read a completed message and get the status */ 760 status = ap_sm_recv(ap_dev); 761 else 762 /* Get the status with TAPQ */ 763 status = ap_test_queue(ap_dev->qid, &info); 764 765 if (status.int_enabled == 1) { 766 /* Irqs are now enabled */ 767 ap_dev->interrupt = AP_INTR_ENABLED; 768 ap_dev->state = (ap_dev->queue_count > 0) ? 769 AP_STATE_WORKING : AP_STATE_IDLE; 770 } 771 772 switch (status.response_code) { 773 case AP_RESPONSE_NORMAL: 774 if (ap_dev->queue_count > 0) 775 return AP_WAIT_AGAIN; 776 /* fallthrough */ 777 case AP_RESPONSE_NO_PENDING_REPLY: 778 return AP_WAIT_TIMEOUT; 779 default: 780 ap_dev->state = AP_STATE_BORKED; 781 return AP_WAIT_NONE; 782 } 783 } 784 785 /* 786 * AP state machine jump table 787 */ 788 ap_func_t *ap_jumptable[NR_AP_STATES][NR_AP_EVENTS] = { 789 [AP_STATE_RESET_START] = { 790 [AP_EVENT_POLL] = ap_sm_reset, 791 [AP_EVENT_TIMEOUT] = ap_sm_nop, 792 }, 793 [AP_STATE_RESET_WAIT] = { 794 [AP_EVENT_POLL] = ap_sm_reset_wait, 795 [AP_EVENT_TIMEOUT] = ap_sm_nop, 796 }, 797 [AP_STATE_SETIRQ_WAIT] = { 798 [AP_EVENT_POLL] = ap_sm_setirq_wait, 799 [AP_EVENT_TIMEOUT] = ap_sm_nop, 800 }, 801 [AP_STATE_IDLE] = { 802 [AP_EVENT_POLL] = ap_sm_write, 803 [AP_EVENT_TIMEOUT] = ap_sm_nop, 804 }, 805 [AP_STATE_WORKING] = { 806 [AP_EVENT_POLL] = ap_sm_read_write, 807 [AP_EVENT_TIMEOUT] = ap_sm_reset, 808 }, 809 [AP_STATE_QUEUE_FULL] = { 810 [AP_EVENT_POLL] = ap_sm_read, 811 [AP_EVENT_TIMEOUT] = ap_sm_reset, 812 }, 813 [AP_STATE_SUSPEND_WAIT] = { 814 [AP_EVENT_POLL] = ap_sm_read, 815 [AP_EVENT_TIMEOUT] = ap_sm_nop, 816 }, 817 [AP_STATE_BORKED] = { 818 [AP_EVENT_POLL] = ap_sm_nop, 819 [AP_EVENT_TIMEOUT] = ap_sm_nop, 820 }, 821 }; 822 823 static inline enum ap_wait ap_sm_event(struct ap_device *ap_dev, 824 enum ap_event event) 825 { 826 return ap_jumptable[ap_dev->state][event](ap_dev); 827 } 828 829 static inline enum ap_wait ap_sm_event_loop(struct ap_device *ap_dev, 830 enum ap_event event) 831 { 832 enum ap_wait wait; 833 834 while ((wait = ap_sm_event(ap_dev, event)) == AP_WAIT_AGAIN) 835 ; 836 return wait; 837 } 838 839 /** 840 * ap_request_timeout(): Handling of request timeouts 841 * @data: Holds the AP device. 842 * 843 * Handles request timeouts. 844 */ 845 static void ap_request_timeout(unsigned long data) 846 { 847 struct ap_device *ap_dev = (struct ap_device *) data; 848 849 if (ap_suspend_flag) 850 return; 851 spin_lock_bh(&ap_dev->lock); 852 ap_sm_wait(ap_sm_event(ap_dev, AP_EVENT_TIMEOUT)); 853 spin_unlock_bh(&ap_dev->lock); 854 } 855 856 /** 857 * ap_poll_timeout(): AP receive polling for finished AP requests. 858 * @unused: Unused pointer. 859 * 860 * Schedules the AP tasklet using a high resolution timer. 861 */ 862 static enum hrtimer_restart ap_poll_timeout(struct hrtimer *unused) 863 { 864 if (!ap_suspend_flag) 865 tasklet_schedule(&ap_tasklet); 866 return HRTIMER_NORESTART; 867 } 868 869 /** 870 * ap_interrupt_handler() - Schedule ap_tasklet on interrupt 871 * @airq: pointer to adapter interrupt descriptor 872 */ 873 static void ap_interrupt_handler(struct airq_struct *airq) 874 { 875 inc_irq_stat(IRQIO_APB); 876 if (!ap_suspend_flag) 877 tasklet_schedule(&ap_tasklet); 878 } 879 880 /** 881 * ap_tasklet_fn(): Tasklet to poll all AP devices. 882 * @dummy: Unused variable 883 * 884 * Poll all AP devices on the bus. 885 */ 886 static void ap_tasklet_fn(unsigned long dummy) 887 { 888 struct ap_device *ap_dev; 889 enum ap_wait wait = AP_WAIT_NONE; 890 891 /* Reset the indicator if interrupts are used. Thus new interrupts can 892 * be received. Doing it in the beginning of the tasklet is therefor 893 * important that no requests on any AP get lost. 894 */ 895 if (ap_using_interrupts()) 896 xchg(ap_airq.lsi_ptr, 0); 897 898 spin_lock(&ap_device_list_lock); 899 list_for_each_entry(ap_dev, &ap_device_list, list) { 900 spin_lock_bh(&ap_dev->lock); 901 wait = min(wait, ap_sm_event_loop(ap_dev, AP_EVENT_POLL)); 902 spin_unlock_bh(&ap_dev->lock); 903 } 904 spin_unlock(&ap_device_list_lock); 905 ap_sm_wait(wait); 906 } 907 908 /** 909 * ap_poll_thread(): Thread that polls for finished requests. 910 * @data: Unused pointer 911 * 912 * AP bus poll thread. The purpose of this thread is to poll for 913 * finished requests in a loop if there is a "free" cpu - that is 914 * a cpu that doesn't have anything better to do. The polling stops 915 * as soon as there is another task or if all messages have been 916 * delivered. 917 */ 918 static int ap_poll_thread(void *data) 919 { 920 DECLARE_WAITQUEUE(wait, current); 921 922 set_user_nice(current, MAX_NICE); 923 set_freezable(); 924 while (!kthread_should_stop()) { 925 add_wait_queue(&ap_poll_wait, &wait); 926 set_current_state(TASK_INTERRUPTIBLE); 927 if (ap_suspend_flag || 928 atomic_read(&ap_poll_requests) <= 0) { 929 schedule(); 930 try_to_freeze(); 931 } 932 set_current_state(TASK_RUNNING); 933 remove_wait_queue(&ap_poll_wait, &wait); 934 if (need_resched()) { 935 schedule(); 936 try_to_freeze(); 937 continue; 938 } 939 ap_tasklet_fn(0); 940 } while (!kthread_should_stop()); 941 return 0; 942 } 943 944 static int ap_poll_thread_start(void) 945 { 946 int rc; 947 948 if (ap_using_interrupts() || ap_poll_kthread) 949 return 0; 950 mutex_lock(&ap_poll_thread_mutex); 951 ap_poll_kthread = kthread_run(ap_poll_thread, NULL, "appoll"); 952 rc = PTR_RET(ap_poll_kthread); 953 if (rc) 954 ap_poll_kthread = NULL; 955 mutex_unlock(&ap_poll_thread_mutex); 956 return rc; 957 } 958 959 static void ap_poll_thread_stop(void) 960 { 961 if (!ap_poll_kthread) 962 return; 963 mutex_lock(&ap_poll_thread_mutex); 964 kthread_stop(ap_poll_kthread); 965 ap_poll_kthread = NULL; 966 mutex_unlock(&ap_poll_thread_mutex); 967 } 968 969 /** 970 * ap_queue_message(): Queue a request to an AP device. 971 * @ap_dev: The AP device to queue the message to 972 * @ap_msg: The message that is to be added 973 */ 974 void ap_queue_message(struct ap_device *ap_dev, struct ap_message *ap_msg) 975 { 976 /* For asynchronous message handling a valid receive-callback 977 * is required. */ 978 BUG_ON(!ap_msg->receive); 979 980 spin_lock_bh(&ap_dev->lock); 981 /* Queue the message. */ 982 list_add_tail(&ap_msg->list, &ap_dev->requestq); 983 ap_dev->requestq_count++; 984 ap_dev->total_request_count++; 985 /* Send/receive as many request from the queue as possible. */ 986 ap_sm_wait(ap_sm_event_loop(ap_dev, AP_EVENT_POLL)); 987 spin_unlock_bh(&ap_dev->lock); 988 } 989 EXPORT_SYMBOL(ap_queue_message); 990 991 /** 992 * ap_cancel_message(): Cancel a crypto request. 993 * @ap_dev: The AP device that has the message queued 994 * @ap_msg: The message that is to be removed 995 * 996 * Cancel a crypto request. This is done by removing the request 997 * from the device pending or request queue. Note that the 998 * request stays on the AP queue. When it finishes the message 999 * reply will be discarded because the psmid can't be found. 1000 */ 1001 void ap_cancel_message(struct ap_device *ap_dev, struct ap_message *ap_msg) 1002 { 1003 struct ap_message *tmp; 1004 1005 spin_lock_bh(&ap_dev->lock); 1006 if (!list_empty(&ap_msg->list)) { 1007 list_for_each_entry(tmp, &ap_dev->pendingq, list) 1008 if (tmp->psmid == ap_msg->psmid) { 1009 ap_dev->pendingq_count--; 1010 goto found; 1011 } 1012 ap_dev->requestq_count--; 1013 found: 1014 list_del_init(&ap_msg->list); 1015 } 1016 spin_unlock_bh(&ap_dev->lock); 1017 } 1018 EXPORT_SYMBOL(ap_cancel_message); 1019 1020 /* 1021 * AP device related attributes. 1022 */ 1023 static ssize_t ap_hwtype_show(struct device *dev, 1024 struct device_attribute *attr, char *buf) 1025 { 1026 struct ap_device *ap_dev = to_ap_dev(dev); 1027 return snprintf(buf, PAGE_SIZE, "%d\n", ap_dev->device_type); 1028 } 1029 1030 static DEVICE_ATTR(hwtype, 0444, ap_hwtype_show, NULL); 1031 1032 static ssize_t ap_raw_hwtype_show(struct device *dev, 1033 struct device_attribute *attr, char *buf) 1034 { 1035 struct ap_device *ap_dev = to_ap_dev(dev); 1036 1037 return snprintf(buf, PAGE_SIZE, "%d\n", ap_dev->raw_hwtype); 1038 } 1039 1040 static DEVICE_ATTR(raw_hwtype, 0444, ap_raw_hwtype_show, NULL); 1041 1042 static ssize_t ap_depth_show(struct device *dev, struct device_attribute *attr, 1043 char *buf) 1044 { 1045 struct ap_device *ap_dev = to_ap_dev(dev); 1046 return snprintf(buf, PAGE_SIZE, "%d\n", ap_dev->queue_depth); 1047 } 1048 1049 static DEVICE_ATTR(depth, 0444, ap_depth_show, NULL); 1050 static ssize_t ap_request_count_show(struct device *dev, 1051 struct device_attribute *attr, 1052 char *buf) 1053 { 1054 struct ap_device *ap_dev = to_ap_dev(dev); 1055 int rc; 1056 1057 spin_lock_bh(&ap_dev->lock); 1058 rc = snprintf(buf, PAGE_SIZE, "%d\n", ap_dev->total_request_count); 1059 spin_unlock_bh(&ap_dev->lock); 1060 return rc; 1061 } 1062 1063 static DEVICE_ATTR(request_count, 0444, ap_request_count_show, NULL); 1064 1065 static ssize_t ap_requestq_count_show(struct device *dev, 1066 struct device_attribute *attr, char *buf) 1067 { 1068 struct ap_device *ap_dev = to_ap_dev(dev); 1069 int rc; 1070 1071 spin_lock_bh(&ap_dev->lock); 1072 rc = snprintf(buf, PAGE_SIZE, "%d\n", ap_dev->requestq_count); 1073 spin_unlock_bh(&ap_dev->lock); 1074 return rc; 1075 } 1076 1077 static DEVICE_ATTR(requestq_count, 0444, ap_requestq_count_show, NULL); 1078 1079 static ssize_t ap_pendingq_count_show(struct device *dev, 1080 struct device_attribute *attr, char *buf) 1081 { 1082 struct ap_device *ap_dev = to_ap_dev(dev); 1083 int rc; 1084 1085 spin_lock_bh(&ap_dev->lock); 1086 rc = snprintf(buf, PAGE_SIZE, "%d\n", ap_dev->pendingq_count); 1087 spin_unlock_bh(&ap_dev->lock); 1088 return rc; 1089 } 1090 1091 static DEVICE_ATTR(pendingq_count, 0444, ap_pendingq_count_show, NULL); 1092 1093 static ssize_t ap_reset_show(struct device *dev, 1094 struct device_attribute *attr, char *buf) 1095 { 1096 struct ap_device *ap_dev = to_ap_dev(dev); 1097 int rc = 0; 1098 1099 spin_lock_bh(&ap_dev->lock); 1100 switch (ap_dev->state) { 1101 case AP_STATE_RESET_START: 1102 case AP_STATE_RESET_WAIT: 1103 rc = snprintf(buf, PAGE_SIZE, "Reset in progress.\n"); 1104 break; 1105 case AP_STATE_WORKING: 1106 case AP_STATE_QUEUE_FULL: 1107 rc = snprintf(buf, PAGE_SIZE, "Reset Timer armed.\n"); 1108 break; 1109 default: 1110 rc = snprintf(buf, PAGE_SIZE, "No Reset Timer set.\n"); 1111 } 1112 spin_unlock_bh(&ap_dev->lock); 1113 return rc; 1114 } 1115 1116 static DEVICE_ATTR(reset, 0444, ap_reset_show, NULL); 1117 1118 static ssize_t ap_interrupt_show(struct device *dev, 1119 struct device_attribute *attr, char *buf) 1120 { 1121 struct ap_device *ap_dev = to_ap_dev(dev); 1122 int rc = 0; 1123 1124 spin_lock_bh(&ap_dev->lock); 1125 if (ap_dev->state == AP_STATE_SETIRQ_WAIT) 1126 rc = snprintf(buf, PAGE_SIZE, "Enable Interrupt pending.\n"); 1127 else if (ap_dev->interrupt == AP_INTR_ENABLED) 1128 rc = snprintf(buf, PAGE_SIZE, "Interrupts enabled.\n"); 1129 else 1130 rc = snprintf(buf, PAGE_SIZE, "Interrupts disabled.\n"); 1131 spin_unlock_bh(&ap_dev->lock); 1132 return rc; 1133 } 1134 1135 static DEVICE_ATTR(interrupt, 0444, ap_interrupt_show, NULL); 1136 1137 static ssize_t ap_modalias_show(struct device *dev, 1138 struct device_attribute *attr, char *buf) 1139 { 1140 return sprintf(buf, "ap:t%02X\n", to_ap_dev(dev)->device_type); 1141 } 1142 1143 static DEVICE_ATTR(modalias, 0444, ap_modalias_show, NULL); 1144 1145 static ssize_t ap_functions_show(struct device *dev, 1146 struct device_attribute *attr, char *buf) 1147 { 1148 struct ap_device *ap_dev = to_ap_dev(dev); 1149 return snprintf(buf, PAGE_SIZE, "0x%08X\n", ap_dev->functions); 1150 } 1151 1152 static DEVICE_ATTR(ap_functions, 0444, ap_functions_show, NULL); 1153 1154 static struct attribute *ap_dev_attrs[] = { 1155 &dev_attr_hwtype.attr, 1156 &dev_attr_raw_hwtype.attr, 1157 &dev_attr_depth.attr, 1158 &dev_attr_request_count.attr, 1159 &dev_attr_requestq_count.attr, 1160 &dev_attr_pendingq_count.attr, 1161 &dev_attr_reset.attr, 1162 &dev_attr_interrupt.attr, 1163 &dev_attr_modalias.attr, 1164 &dev_attr_ap_functions.attr, 1165 NULL 1166 }; 1167 static struct attribute_group ap_dev_attr_group = { 1168 .attrs = ap_dev_attrs 1169 }; 1170 1171 /** 1172 * ap_bus_match() 1173 * @dev: Pointer to device 1174 * @drv: Pointer to device_driver 1175 * 1176 * AP bus driver registration/unregistration. 1177 */ 1178 static int ap_bus_match(struct device *dev, struct device_driver *drv) 1179 { 1180 struct ap_device *ap_dev = to_ap_dev(dev); 1181 struct ap_driver *ap_drv = to_ap_drv(drv); 1182 struct ap_device_id *id; 1183 1184 /* 1185 * Compare device type of the device with the list of 1186 * supported types of the device_driver. 1187 */ 1188 for (id = ap_drv->ids; id->match_flags; id++) { 1189 if ((id->match_flags & AP_DEVICE_ID_MATCH_DEVICE_TYPE) && 1190 (id->dev_type != ap_dev->device_type)) 1191 continue; 1192 return 1; 1193 } 1194 return 0; 1195 } 1196 1197 /** 1198 * ap_uevent(): Uevent function for AP devices. 1199 * @dev: Pointer to device 1200 * @env: Pointer to kobj_uevent_env 1201 * 1202 * It sets up a single environment variable DEV_TYPE which contains the 1203 * hardware device type. 1204 */ 1205 static int ap_uevent (struct device *dev, struct kobj_uevent_env *env) 1206 { 1207 struct ap_device *ap_dev = to_ap_dev(dev); 1208 int retval = 0; 1209 1210 if (!ap_dev) 1211 return -ENODEV; 1212 1213 /* Set up DEV_TYPE environment variable. */ 1214 retval = add_uevent_var(env, "DEV_TYPE=%04X", ap_dev->device_type); 1215 if (retval) 1216 return retval; 1217 1218 /* Add MODALIAS= */ 1219 retval = add_uevent_var(env, "MODALIAS=ap:t%02X", ap_dev->device_type); 1220 1221 return retval; 1222 } 1223 1224 static int ap_dev_suspend(struct device *dev, pm_message_t state) 1225 { 1226 struct ap_device *ap_dev = to_ap_dev(dev); 1227 1228 /* Poll on the device until all requests are finished. */ 1229 spin_lock_bh(&ap_dev->lock); 1230 ap_dev->state = AP_STATE_SUSPEND_WAIT; 1231 while (ap_sm_event(ap_dev, AP_EVENT_POLL) != AP_WAIT_NONE) 1232 ; 1233 ap_dev->state = AP_STATE_BORKED; 1234 spin_unlock_bh(&ap_dev->lock); 1235 return 0; 1236 } 1237 1238 static int ap_dev_resume(struct device *dev) 1239 { 1240 return 0; 1241 } 1242 1243 static void ap_bus_suspend(void) 1244 { 1245 ap_suspend_flag = 1; 1246 /* 1247 * Disable scanning for devices, thus we do not want to scan 1248 * for them after removing. 1249 */ 1250 flush_work(&ap_scan_work); 1251 tasklet_disable(&ap_tasklet); 1252 } 1253 1254 static int __ap_devices_unregister(struct device *dev, void *dummy) 1255 { 1256 device_unregister(dev); 1257 return 0; 1258 } 1259 1260 static void ap_bus_resume(void) 1261 { 1262 int rc; 1263 1264 /* Unconditionally remove all AP devices */ 1265 bus_for_each_dev(&ap_bus_type, NULL, NULL, __ap_devices_unregister); 1266 /* Reset thin interrupt setting */ 1267 if (ap_interrupts_available() && !ap_using_interrupts()) { 1268 rc = register_adapter_interrupt(&ap_airq); 1269 ap_airq_flag = (rc == 0); 1270 } 1271 if (!ap_interrupts_available() && ap_using_interrupts()) { 1272 unregister_adapter_interrupt(&ap_airq); 1273 ap_airq_flag = 0; 1274 } 1275 /* Reset domain */ 1276 if (!user_set_domain) 1277 ap_domain_index = -1; 1278 /* Get things going again */ 1279 ap_suspend_flag = 0; 1280 if (ap_airq_flag) 1281 xchg(ap_airq.lsi_ptr, 0); 1282 tasklet_enable(&ap_tasklet); 1283 queue_work(system_long_wq, &ap_scan_work); 1284 } 1285 1286 static int ap_power_event(struct notifier_block *this, unsigned long event, 1287 void *ptr) 1288 { 1289 switch (event) { 1290 case PM_HIBERNATION_PREPARE: 1291 case PM_SUSPEND_PREPARE: 1292 ap_bus_suspend(); 1293 break; 1294 case PM_POST_HIBERNATION: 1295 case PM_POST_SUSPEND: 1296 ap_bus_resume(); 1297 break; 1298 default: 1299 break; 1300 } 1301 return NOTIFY_DONE; 1302 } 1303 static struct notifier_block ap_power_notifier = { 1304 .notifier_call = ap_power_event, 1305 }; 1306 1307 static struct bus_type ap_bus_type = { 1308 .name = "ap", 1309 .match = &ap_bus_match, 1310 .uevent = &ap_uevent, 1311 .suspend = ap_dev_suspend, 1312 .resume = ap_dev_resume, 1313 }; 1314 1315 static int ap_device_probe(struct device *dev) 1316 { 1317 struct ap_device *ap_dev = to_ap_dev(dev); 1318 struct ap_driver *ap_drv = to_ap_drv(dev->driver); 1319 int rc; 1320 1321 ap_dev->drv = ap_drv; 1322 rc = ap_drv->probe ? ap_drv->probe(ap_dev) : -ENODEV; 1323 if (rc) 1324 ap_dev->drv = NULL; 1325 return rc; 1326 } 1327 1328 /** 1329 * __ap_flush_queue(): Flush requests. 1330 * @ap_dev: Pointer to the AP device 1331 * 1332 * Flush all requests from the request/pending queue of an AP device. 1333 */ 1334 static void __ap_flush_queue(struct ap_device *ap_dev) 1335 { 1336 struct ap_message *ap_msg, *next; 1337 1338 list_for_each_entry_safe(ap_msg, next, &ap_dev->pendingq, list) { 1339 list_del_init(&ap_msg->list); 1340 ap_dev->pendingq_count--; 1341 ap_msg->rc = -EAGAIN; 1342 ap_msg->receive(ap_dev, ap_msg, NULL); 1343 } 1344 list_for_each_entry_safe(ap_msg, next, &ap_dev->requestq, list) { 1345 list_del_init(&ap_msg->list); 1346 ap_dev->requestq_count--; 1347 ap_msg->rc = -EAGAIN; 1348 ap_msg->receive(ap_dev, ap_msg, NULL); 1349 } 1350 } 1351 1352 void ap_flush_queue(struct ap_device *ap_dev) 1353 { 1354 spin_lock_bh(&ap_dev->lock); 1355 __ap_flush_queue(ap_dev); 1356 spin_unlock_bh(&ap_dev->lock); 1357 } 1358 EXPORT_SYMBOL(ap_flush_queue); 1359 1360 static int ap_device_remove(struct device *dev) 1361 { 1362 struct ap_device *ap_dev = to_ap_dev(dev); 1363 struct ap_driver *ap_drv = ap_dev->drv; 1364 1365 ap_flush_queue(ap_dev); 1366 del_timer_sync(&ap_dev->timeout); 1367 spin_lock_bh(&ap_device_list_lock); 1368 list_del_init(&ap_dev->list); 1369 spin_unlock_bh(&ap_device_list_lock); 1370 if (ap_drv->remove) 1371 ap_drv->remove(ap_dev); 1372 spin_lock_bh(&ap_dev->lock); 1373 atomic_sub(ap_dev->queue_count, &ap_poll_requests); 1374 spin_unlock_bh(&ap_dev->lock); 1375 return 0; 1376 } 1377 1378 static void ap_device_release(struct device *dev) 1379 { 1380 kfree(to_ap_dev(dev)); 1381 } 1382 1383 int ap_driver_register(struct ap_driver *ap_drv, struct module *owner, 1384 char *name) 1385 { 1386 struct device_driver *drv = &ap_drv->driver; 1387 1388 if (!initialised) 1389 return -ENODEV; 1390 1391 drv->bus = &ap_bus_type; 1392 drv->probe = ap_device_probe; 1393 drv->remove = ap_device_remove; 1394 drv->owner = owner; 1395 drv->name = name; 1396 return driver_register(drv); 1397 } 1398 EXPORT_SYMBOL(ap_driver_register); 1399 1400 void ap_driver_unregister(struct ap_driver *ap_drv) 1401 { 1402 driver_unregister(&ap_drv->driver); 1403 } 1404 EXPORT_SYMBOL(ap_driver_unregister); 1405 1406 void ap_bus_force_rescan(void) 1407 { 1408 if (ap_suspend_flag) 1409 return; 1410 /* processing a asynchronous bus rescan */ 1411 del_timer(&ap_config_timer); 1412 queue_work(system_long_wq, &ap_scan_work); 1413 flush_work(&ap_scan_work); 1414 } 1415 EXPORT_SYMBOL(ap_bus_force_rescan); 1416 1417 /* 1418 * AP bus attributes. 1419 */ 1420 static ssize_t ap_domain_show(struct bus_type *bus, char *buf) 1421 { 1422 return snprintf(buf, PAGE_SIZE, "%d\n", ap_domain_index); 1423 } 1424 1425 static BUS_ATTR(ap_domain, 0444, ap_domain_show, NULL); 1426 1427 static ssize_t ap_control_domain_mask_show(struct bus_type *bus, char *buf) 1428 { 1429 if (!ap_configuration) /* QCI not supported */ 1430 return snprintf(buf, PAGE_SIZE, "not supported\n"); 1431 if (!test_facility(76)) 1432 /* format 0 - 16 bit domain field */ 1433 return snprintf(buf, PAGE_SIZE, "%08x%08x\n", 1434 ap_configuration->adm[0], 1435 ap_configuration->adm[1]); 1436 /* format 1 - 256 bit domain field */ 1437 return snprintf(buf, PAGE_SIZE, 1438 "0x%08x%08x%08x%08x%08x%08x%08x%08x\n", 1439 ap_configuration->adm[0], ap_configuration->adm[1], 1440 ap_configuration->adm[2], ap_configuration->adm[3], 1441 ap_configuration->adm[4], ap_configuration->adm[5], 1442 ap_configuration->adm[6], ap_configuration->adm[7]); 1443 } 1444 1445 static BUS_ATTR(ap_control_domain_mask, 0444, 1446 ap_control_domain_mask_show, NULL); 1447 1448 static ssize_t ap_config_time_show(struct bus_type *bus, char *buf) 1449 { 1450 return snprintf(buf, PAGE_SIZE, "%d\n", ap_config_time); 1451 } 1452 1453 static ssize_t ap_interrupts_show(struct bus_type *bus, char *buf) 1454 { 1455 return snprintf(buf, PAGE_SIZE, "%d\n", 1456 ap_using_interrupts() ? 1 : 0); 1457 } 1458 1459 static BUS_ATTR(ap_interrupts, 0444, ap_interrupts_show, NULL); 1460 1461 static ssize_t ap_config_time_store(struct bus_type *bus, 1462 const char *buf, size_t count) 1463 { 1464 int time; 1465 1466 if (sscanf(buf, "%d\n", &time) != 1 || time < 5 || time > 120) 1467 return -EINVAL; 1468 ap_config_time = time; 1469 mod_timer(&ap_config_timer, jiffies + ap_config_time * HZ); 1470 return count; 1471 } 1472 1473 static BUS_ATTR(config_time, 0644, ap_config_time_show, ap_config_time_store); 1474 1475 static ssize_t ap_poll_thread_show(struct bus_type *bus, char *buf) 1476 { 1477 return snprintf(buf, PAGE_SIZE, "%d\n", ap_poll_kthread ? 1 : 0); 1478 } 1479 1480 static ssize_t ap_poll_thread_store(struct bus_type *bus, 1481 const char *buf, size_t count) 1482 { 1483 int flag, rc; 1484 1485 if (sscanf(buf, "%d\n", &flag) != 1) 1486 return -EINVAL; 1487 if (flag) { 1488 rc = ap_poll_thread_start(); 1489 if (rc) 1490 count = rc; 1491 } else 1492 ap_poll_thread_stop(); 1493 return count; 1494 } 1495 1496 static BUS_ATTR(poll_thread, 0644, ap_poll_thread_show, ap_poll_thread_store); 1497 1498 static ssize_t poll_timeout_show(struct bus_type *bus, char *buf) 1499 { 1500 return snprintf(buf, PAGE_SIZE, "%llu\n", poll_timeout); 1501 } 1502 1503 static ssize_t poll_timeout_store(struct bus_type *bus, const char *buf, 1504 size_t count) 1505 { 1506 unsigned long long time; 1507 ktime_t hr_time; 1508 1509 /* 120 seconds = maximum poll interval */ 1510 if (sscanf(buf, "%llu\n", &time) != 1 || time < 1 || 1511 time > 120000000000ULL) 1512 return -EINVAL; 1513 poll_timeout = time; 1514 hr_time = ktime_set(0, poll_timeout); 1515 1516 spin_lock_bh(&ap_poll_timer_lock); 1517 hrtimer_cancel(&ap_poll_timer); 1518 hrtimer_set_expires(&ap_poll_timer, hr_time); 1519 hrtimer_start_expires(&ap_poll_timer, HRTIMER_MODE_ABS); 1520 spin_unlock_bh(&ap_poll_timer_lock); 1521 1522 return count; 1523 } 1524 1525 static BUS_ATTR(poll_timeout, 0644, poll_timeout_show, poll_timeout_store); 1526 1527 static ssize_t ap_max_domain_id_show(struct bus_type *bus, char *buf) 1528 { 1529 int max_domain_id; 1530 1531 if (ap_configuration) 1532 max_domain_id = ap_max_domain_id ? : -1; 1533 else 1534 max_domain_id = 15; 1535 return snprintf(buf, PAGE_SIZE, "%d\n", max_domain_id); 1536 } 1537 1538 static BUS_ATTR(ap_max_domain_id, 0444, ap_max_domain_id_show, NULL); 1539 1540 static struct bus_attribute *const ap_bus_attrs[] = { 1541 &bus_attr_ap_domain, 1542 &bus_attr_ap_control_domain_mask, 1543 &bus_attr_config_time, 1544 &bus_attr_poll_thread, 1545 &bus_attr_ap_interrupts, 1546 &bus_attr_poll_timeout, 1547 &bus_attr_ap_max_domain_id, 1548 NULL, 1549 }; 1550 1551 /** 1552 * ap_select_domain(): Select an AP domain. 1553 * 1554 * Pick one of the 16 AP domains. 1555 */ 1556 static int ap_select_domain(void) 1557 { 1558 int count, max_count, best_domain; 1559 struct ap_queue_status status; 1560 int i, j; 1561 1562 /* 1563 * We want to use a single domain. Either the one specified with 1564 * the "domain=" parameter or the domain with the maximum number 1565 * of devices. 1566 */ 1567 if (ap_domain_index >= 0) 1568 /* Domain has already been selected. */ 1569 return 0; 1570 best_domain = -1; 1571 max_count = 0; 1572 for (i = 0; i < AP_DOMAINS; i++) { 1573 if (!ap_test_config_domain(i)) 1574 continue; 1575 count = 0; 1576 for (j = 0; j < AP_DEVICES; j++) { 1577 if (!ap_test_config_card_id(j)) 1578 continue; 1579 status = ap_test_queue(AP_MKQID(j, i), NULL); 1580 if (status.response_code != AP_RESPONSE_NORMAL) 1581 continue; 1582 count++; 1583 } 1584 if (count > max_count) { 1585 max_count = count; 1586 best_domain = i; 1587 } 1588 } 1589 if (best_domain >= 0){ 1590 ap_domain_index = best_domain; 1591 return 0; 1592 } 1593 return -ENODEV; 1594 } 1595 1596 /** 1597 * __ap_scan_bus(): Scan the AP bus. 1598 * @dev: Pointer to device 1599 * @data: Pointer to data 1600 * 1601 * Scan the AP bus for new devices. 1602 */ 1603 static int __ap_scan_bus(struct device *dev, void *data) 1604 { 1605 return to_ap_dev(dev)->qid == (ap_qid_t)(unsigned long) data; 1606 } 1607 1608 static void ap_scan_bus(struct work_struct *unused) 1609 { 1610 struct ap_device *ap_dev; 1611 struct device *dev; 1612 ap_qid_t qid; 1613 int queue_depth = 0, device_type = 0; 1614 unsigned int device_functions = 0; 1615 int rc, i, borked; 1616 1617 ap_query_configuration(); 1618 if (ap_select_domain() != 0) 1619 goto out; 1620 1621 for (i = 0; i < AP_DEVICES; i++) { 1622 qid = AP_MKQID(i, ap_domain_index); 1623 dev = bus_find_device(&ap_bus_type, NULL, 1624 (void *)(unsigned long)qid, 1625 __ap_scan_bus); 1626 rc = ap_query_queue(qid, &queue_depth, &device_type, 1627 &device_functions); 1628 if (dev) { 1629 ap_dev = to_ap_dev(dev); 1630 spin_lock_bh(&ap_dev->lock); 1631 if (rc == -ENODEV) 1632 ap_dev->state = AP_STATE_BORKED; 1633 borked = ap_dev->state == AP_STATE_BORKED; 1634 spin_unlock_bh(&ap_dev->lock); 1635 if (borked) /* Remove broken device */ 1636 device_unregister(dev); 1637 put_device(dev); 1638 if (!borked) 1639 continue; 1640 } 1641 if (rc) 1642 continue; 1643 ap_dev = kzalloc(sizeof(*ap_dev), GFP_KERNEL); 1644 if (!ap_dev) 1645 break; 1646 ap_dev->qid = qid; 1647 ap_dev->state = AP_STATE_RESET_START; 1648 ap_dev->interrupt = AP_INTR_DISABLED; 1649 ap_dev->queue_depth = queue_depth; 1650 ap_dev->raw_hwtype = device_type; 1651 ap_dev->device_type = device_type; 1652 ap_dev->functions = device_functions; 1653 spin_lock_init(&ap_dev->lock); 1654 INIT_LIST_HEAD(&ap_dev->pendingq); 1655 INIT_LIST_HEAD(&ap_dev->requestq); 1656 INIT_LIST_HEAD(&ap_dev->list); 1657 setup_timer(&ap_dev->timeout, ap_request_timeout, 1658 (unsigned long) ap_dev); 1659 1660 ap_dev->device.bus = &ap_bus_type; 1661 ap_dev->device.parent = ap_root_device; 1662 rc = dev_set_name(&ap_dev->device, "card%02x", 1663 AP_QID_DEVICE(ap_dev->qid)); 1664 if (rc) { 1665 kfree(ap_dev); 1666 continue; 1667 } 1668 /* Add to list of devices */ 1669 spin_lock_bh(&ap_device_list_lock); 1670 list_add(&ap_dev->list, &ap_device_list); 1671 spin_unlock_bh(&ap_device_list_lock); 1672 /* Start with a device reset */ 1673 spin_lock_bh(&ap_dev->lock); 1674 ap_sm_wait(ap_sm_event(ap_dev, AP_EVENT_POLL)); 1675 spin_unlock_bh(&ap_dev->lock); 1676 /* Register device */ 1677 ap_dev->device.release = ap_device_release; 1678 rc = device_register(&ap_dev->device); 1679 if (rc) { 1680 spin_lock_bh(&ap_dev->lock); 1681 list_del_init(&ap_dev->list); 1682 spin_unlock_bh(&ap_dev->lock); 1683 put_device(&ap_dev->device); 1684 continue; 1685 } 1686 /* Add device attributes. */ 1687 rc = sysfs_create_group(&ap_dev->device.kobj, 1688 &ap_dev_attr_group); 1689 if (rc) { 1690 device_unregister(&ap_dev->device); 1691 continue; 1692 } 1693 } 1694 out: 1695 mod_timer(&ap_config_timer, jiffies + ap_config_time * HZ); 1696 } 1697 1698 static void ap_config_timeout(unsigned long ptr) 1699 { 1700 if (ap_suspend_flag) 1701 return; 1702 queue_work(system_long_wq, &ap_scan_work); 1703 } 1704 1705 static void ap_reset_domain(void) 1706 { 1707 int i; 1708 1709 if (ap_domain_index == -1 || !ap_test_config_domain(ap_domain_index)) 1710 return; 1711 for (i = 0; i < AP_DEVICES; i++) 1712 ap_reset_queue(AP_MKQID(i, ap_domain_index)); 1713 } 1714 1715 static void ap_reset_all(void) 1716 { 1717 int i, j; 1718 1719 for (i = 0; i < AP_DOMAINS; i++) { 1720 if (!ap_test_config_domain(i)) 1721 continue; 1722 for (j = 0; j < AP_DEVICES; j++) { 1723 if (!ap_test_config_card_id(j)) 1724 continue; 1725 ap_reset_queue(AP_MKQID(j, i)); 1726 } 1727 } 1728 } 1729 1730 static struct reset_call ap_reset_call = { 1731 .fn = ap_reset_all, 1732 }; 1733 1734 /** 1735 * ap_module_init(): The module initialization code. 1736 * 1737 * Initializes the module. 1738 */ 1739 int __init ap_module_init(void) 1740 { 1741 int max_domain_id; 1742 int rc, i; 1743 1744 if (ap_instructions_available() != 0) { 1745 pr_warn("The hardware system does not support AP instructions\n"); 1746 return -ENODEV; 1747 } 1748 1749 /* Get AP configuration data if available */ 1750 ap_init_configuration(); 1751 1752 if (ap_configuration) 1753 max_domain_id = ap_max_domain_id ? : (AP_DOMAINS - 1); 1754 else 1755 max_domain_id = 15; 1756 if (ap_domain_index < -1 || ap_domain_index > max_domain_id) { 1757 pr_warn("%d is not a valid cryptographic domain\n", 1758 ap_domain_index); 1759 return -EINVAL; 1760 } 1761 /* In resume callback we need to know if the user had set the domain. 1762 * If so, we can not just reset it. 1763 */ 1764 if (ap_domain_index >= 0) 1765 user_set_domain = 1; 1766 1767 if (ap_interrupts_available()) { 1768 rc = register_adapter_interrupt(&ap_airq); 1769 ap_airq_flag = (rc == 0); 1770 } 1771 1772 register_reset_call(&ap_reset_call); 1773 1774 /* Create /sys/bus/ap. */ 1775 rc = bus_register(&ap_bus_type); 1776 if (rc) 1777 goto out; 1778 for (i = 0; ap_bus_attrs[i]; i++) { 1779 rc = bus_create_file(&ap_bus_type, ap_bus_attrs[i]); 1780 if (rc) 1781 goto out_bus; 1782 } 1783 1784 /* Create /sys/devices/ap. */ 1785 ap_root_device = root_device_register("ap"); 1786 rc = PTR_RET(ap_root_device); 1787 if (rc) 1788 goto out_bus; 1789 1790 /* Setup the AP bus rescan timer. */ 1791 setup_timer(&ap_config_timer, ap_config_timeout, 0); 1792 1793 /* 1794 * Setup the high resultion poll timer. 1795 * If we are running under z/VM adjust polling to z/VM polling rate. 1796 */ 1797 if (MACHINE_IS_VM) 1798 poll_timeout = 1500000; 1799 spin_lock_init(&ap_poll_timer_lock); 1800 hrtimer_init(&ap_poll_timer, CLOCK_MONOTONIC, HRTIMER_MODE_ABS); 1801 ap_poll_timer.function = ap_poll_timeout; 1802 1803 /* Start the low priority AP bus poll thread. */ 1804 if (ap_thread_flag) { 1805 rc = ap_poll_thread_start(); 1806 if (rc) 1807 goto out_work; 1808 } 1809 1810 rc = register_pm_notifier(&ap_power_notifier); 1811 if (rc) 1812 goto out_pm; 1813 1814 queue_work(system_long_wq, &ap_scan_work); 1815 initialised = true; 1816 1817 return 0; 1818 1819 out_pm: 1820 ap_poll_thread_stop(); 1821 out_work: 1822 hrtimer_cancel(&ap_poll_timer); 1823 root_device_unregister(ap_root_device); 1824 out_bus: 1825 while (i--) 1826 bus_remove_file(&ap_bus_type, ap_bus_attrs[i]); 1827 bus_unregister(&ap_bus_type); 1828 out: 1829 unregister_reset_call(&ap_reset_call); 1830 if (ap_using_interrupts()) 1831 unregister_adapter_interrupt(&ap_airq); 1832 kfree(ap_configuration); 1833 return rc; 1834 } 1835 1836 /** 1837 * ap_modules_exit(): The module termination code 1838 * 1839 * Terminates the module. 1840 */ 1841 void ap_module_exit(void) 1842 { 1843 int i; 1844 1845 initialised = false; 1846 ap_reset_domain(); 1847 ap_poll_thread_stop(); 1848 del_timer_sync(&ap_config_timer); 1849 hrtimer_cancel(&ap_poll_timer); 1850 tasklet_kill(&ap_tasklet); 1851 bus_for_each_dev(&ap_bus_type, NULL, NULL, __ap_devices_unregister); 1852 for (i = 0; ap_bus_attrs[i]; i++) 1853 bus_remove_file(&ap_bus_type, ap_bus_attrs[i]); 1854 unregister_pm_notifier(&ap_power_notifier); 1855 root_device_unregister(ap_root_device); 1856 bus_unregister(&ap_bus_type); 1857 kfree(ap_configuration); 1858 unregister_reset_call(&ap_reset_call); 1859 if (ap_using_interrupts()) 1860 unregister_adapter_interrupt(&ap_airq); 1861 } 1862 1863 module_init(ap_module_init); 1864 module_exit(ap_module_exit); 1865