1 // SPDX-License-Identifier: GPL-2.0 2 /* 3 * Copyright IBM Corp. 2016 4 * Author(s): Martin Schwidefsky <schwidefsky@de.ibm.com> 5 * 6 * Adjunct processor bus, queue related code. 7 */ 8 9 #define KMSG_COMPONENT "ap" 10 #define pr_fmt(fmt) KMSG_COMPONENT ": " fmt 11 12 #include <linux/init.h> 13 #include <linux/slab.h> 14 #include <asm/facility.h> 15 16 #include "ap_bus.h" 17 #include "ap_debug.h" 18 19 static void __ap_flush_queue(struct ap_queue *aq); 20 21 /* 22 * some AP queue helper functions 23 */ 24 25 static inline bool ap_q_supports_bind(struct ap_queue *aq) 26 { 27 return ap_test_bit(&aq->card->functions, AP_FUNC_EP11) || 28 ap_test_bit(&aq->card->functions, AP_FUNC_ACCEL); 29 } 30 31 static inline bool ap_q_supports_assoc(struct ap_queue *aq) 32 { 33 return ap_test_bit(&aq->card->functions, AP_FUNC_EP11); 34 } 35 36 /** 37 * ap_queue_enable_irq(): Enable interrupt support on this AP queue. 38 * @aq: The AP queue 39 * @ind: the notification indicator byte 40 * 41 * Enables interruption on AP queue via ap_aqic(). Based on the return 42 * value it waits a while and tests the AP queue if interrupts 43 * have been switched on using ap_test_queue(). 44 */ 45 static int ap_queue_enable_irq(struct ap_queue *aq, void *ind) 46 { 47 union ap_qirq_ctrl qirqctrl = { .value = 0 }; 48 struct ap_queue_status status; 49 50 qirqctrl.ir = 1; 51 qirqctrl.isc = AP_ISC; 52 status = ap_aqic(aq->qid, qirqctrl, virt_to_phys(ind)); 53 if (status.async) 54 return -EPERM; 55 switch (status.response_code) { 56 case AP_RESPONSE_NORMAL: 57 case AP_RESPONSE_OTHERWISE_CHANGED: 58 return 0; 59 case AP_RESPONSE_Q_NOT_AVAIL: 60 case AP_RESPONSE_DECONFIGURED: 61 case AP_RESPONSE_CHECKSTOPPED: 62 case AP_RESPONSE_INVALID_ADDRESS: 63 pr_err("Registering adapter interrupts for AP device %02x.%04x failed\n", 64 AP_QID_CARD(aq->qid), 65 AP_QID_QUEUE(aq->qid)); 66 return -EOPNOTSUPP; 67 case AP_RESPONSE_RESET_IN_PROGRESS: 68 case AP_RESPONSE_BUSY: 69 default: 70 return -EBUSY; 71 } 72 } 73 74 /** 75 * __ap_send(): Send message to adjunct processor queue. 76 * @qid: The AP queue number 77 * @psmid: The program supplied message identifier 78 * @msg: The message text 79 * @msglen: The message length 80 * @special: Special Bit 81 * 82 * Returns AP queue status structure. 83 * Condition code 1 on NQAP can't happen because the L bit is 1. 84 * Condition code 2 on NQAP also means the send is incomplete, 85 * because a segment boundary was reached. The NQAP is repeated. 86 */ 87 static inline struct ap_queue_status 88 __ap_send(ap_qid_t qid, unsigned long psmid, void *msg, size_t msglen, 89 int special) 90 { 91 if (special) 92 qid |= 0x400000UL; 93 return ap_nqap(qid, psmid, msg, msglen); 94 } 95 96 int ap_send(ap_qid_t qid, unsigned long psmid, void *msg, size_t msglen) 97 { 98 struct ap_queue_status status; 99 100 status = __ap_send(qid, psmid, msg, msglen, 0); 101 if (status.async) 102 return -EPERM; 103 switch (status.response_code) { 104 case AP_RESPONSE_NORMAL: 105 return 0; 106 case AP_RESPONSE_Q_FULL: 107 case AP_RESPONSE_RESET_IN_PROGRESS: 108 return -EBUSY; 109 case AP_RESPONSE_REQ_FAC_NOT_INST: 110 return -EINVAL; 111 default: /* Device is gone. */ 112 return -ENODEV; 113 } 114 } 115 EXPORT_SYMBOL(ap_send); 116 117 int ap_recv(ap_qid_t qid, unsigned long *psmid, void *msg, size_t msglen) 118 { 119 struct ap_queue_status status; 120 121 if (!msg) 122 return -EINVAL; 123 status = ap_dqap(qid, psmid, msg, msglen, NULL, NULL, NULL); 124 if (status.async) 125 return -EPERM; 126 switch (status.response_code) { 127 case AP_RESPONSE_NORMAL: 128 return 0; 129 case AP_RESPONSE_NO_PENDING_REPLY: 130 if (status.queue_empty) 131 return -ENOENT; 132 return -EBUSY; 133 case AP_RESPONSE_RESET_IN_PROGRESS: 134 return -EBUSY; 135 default: 136 return -ENODEV; 137 } 138 } 139 EXPORT_SYMBOL(ap_recv); 140 141 /* State machine definitions and helpers */ 142 143 static enum ap_sm_wait ap_sm_nop(struct ap_queue *aq) 144 { 145 return AP_SM_WAIT_NONE; 146 } 147 148 /** 149 * ap_sm_recv(): Receive pending reply messages from an AP queue but do 150 * not change the state of the device. 151 * @aq: pointer to the AP queue 152 * 153 * Returns AP_SM_WAIT_NONE, AP_SM_WAIT_AGAIN, or AP_SM_WAIT_INTERRUPT 154 */ 155 static struct ap_queue_status ap_sm_recv(struct ap_queue *aq) 156 { 157 struct ap_queue_status status; 158 struct ap_message *ap_msg; 159 bool found = false; 160 size_t reslen; 161 unsigned long resgr0 = 0; 162 int parts = 0; 163 164 /* 165 * DQAP loop until response code and resgr0 indicate that 166 * the msg is totally received. As we use the very same buffer 167 * the msg is overwritten with each invocation. That's intended 168 * and the receiver of the msg is informed with a msg rc code 169 * of EMSGSIZE in such a case. 170 */ 171 do { 172 status = ap_dqap(aq->qid, &aq->reply->psmid, 173 aq->reply->msg, aq->reply->bufsize, 174 &aq->reply->len, &reslen, &resgr0); 175 parts++; 176 } while (status.response_code == 0xFF && resgr0 != 0); 177 178 switch (status.response_code) { 179 case AP_RESPONSE_NORMAL: 180 aq->queue_count = max_t(int, 0, aq->queue_count - 1); 181 if (!status.queue_empty && !aq->queue_count) 182 aq->queue_count++; 183 if (aq->queue_count > 0) 184 mod_timer(&aq->timeout, 185 jiffies + aq->request_timeout); 186 list_for_each_entry(ap_msg, &aq->pendingq, list) { 187 if (ap_msg->psmid != aq->reply->psmid) 188 continue; 189 list_del_init(&ap_msg->list); 190 aq->pendingq_count--; 191 if (parts > 1) { 192 ap_msg->rc = -EMSGSIZE; 193 ap_msg->receive(aq, ap_msg, NULL); 194 } else { 195 ap_msg->receive(aq, ap_msg, aq->reply); 196 } 197 found = true; 198 break; 199 } 200 if (!found) { 201 AP_DBF_WARN("%s unassociated reply psmid=0x%016lx on 0x%02x.%04x\n", 202 __func__, aq->reply->psmid, 203 AP_QID_CARD(aq->qid), AP_QID_QUEUE(aq->qid)); 204 } 205 fallthrough; 206 case AP_RESPONSE_NO_PENDING_REPLY: 207 if (!status.queue_empty || aq->queue_count <= 0) 208 break; 209 /* The card shouldn't forget requests but who knows. */ 210 aq->queue_count = 0; 211 list_splice_init(&aq->pendingq, &aq->requestq); 212 aq->requestq_count += aq->pendingq_count; 213 aq->pendingq_count = 0; 214 break; 215 default: 216 break; 217 } 218 return status; 219 } 220 221 /** 222 * ap_sm_read(): Receive pending reply messages from an AP queue. 223 * @aq: pointer to the AP queue 224 * 225 * Returns AP_SM_WAIT_NONE, AP_SM_WAIT_AGAIN, or AP_SM_WAIT_INTERRUPT 226 */ 227 static enum ap_sm_wait ap_sm_read(struct ap_queue *aq) 228 { 229 struct ap_queue_status status; 230 231 if (!aq->reply) 232 return AP_SM_WAIT_NONE; 233 status = ap_sm_recv(aq); 234 if (status.async) 235 return AP_SM_WAIT_NONE; 236 switch (status.response_code) { 237 case AP_RESPONSE_NORMAL: 238 if (aq->queue_count > 0) { 239 aq->sm_state = AP_SM_STATE_WORKING; 240 return AP_SM_WAIT_AGAIN; 241 } 242 aq->sm_state = AP_SM_STATE_IDLE; 243 return AP_SM_WAIT_NONE; 244 case AP_RESPONSE_NO_PENDING_REPLY: 245 if (aq->queue_count > 0) 246 return aq->interrupt ? 247 AP_SM_WAIT_INTERRUPT : AP_SM_WAIT_HIGH_TIMEOUT; 248 aq->sm_state = AP_SM_STATE_IDLE; 249 return AP_SM_WAIT_NONE; 250 default: 251 aq->dev_state = AP_DEV_STATE_ERROR; 252 aq->last_err_rc = status.response_code; 253 AP_DBF_WARN("%s RC 0x%02x on 0x%02x.%04x -> AP_DEV_STATE_ERROR\n", 254 __func__, status.response_code, 255 AP_QID_CARD(aq->qid), AP_QID_QUEUE(aq->qid)); 256 return AP_SM_WAIT_NONE; 257 } 258 } 259 260 /** 261 * ap_sm_write(): Send messages from the request queue to an AP queue. 262 * @aq: pointer to the AP queue 263 * 264 * Returns AP_SM_WAIT_NONE, AP_SM_WAIT_AGAIN, or AP_SM_WAIT_INTERRUPT 265 */ 266 static enum ap_sm_wait ap_sm_write(struct ap_queue *aq) 267 { 268 struct ap_queue_status status; 269 struct ap_message *ap_msg; 270 ap_qid_t qid = aq->qid; 271 272 if (aq->requestq_count <= 0) 273 return AP_SM_WAIT_NONE; 274 275 /* Start the next request on the queue. */ 276 ap_msg = list_entry(aq->requestq.next, struct ap_message, list); 277 #ifdef CONFIG_ZCRYPT_DEBUG 278 if (ap_msg->fi.action == AP_FI_ACTION_NQAP_QID_INVAL) { 279 AP_DBF_WARN("%s fi cmd 0x%04x: forcing invalid qid 0xFF00\n", 280 __func__, ap_msg->fi.cmd); 281 qid = 0xFF00; 282 } 283 #endif 284 status = __ap_send(qid, ap_msg->psmid, 285 ap_msg->msg, ap_msg->len, 286 ap_msg->flags & AP_MSG_FLAG_SPECIAL); 287 if (status.async) 288 return AP_SM_WAIT_NONE; 289 switch (status.response_code) { 290 case AP_RESPONSE_NORMAL: 291 aq->queue_count = max_t(int, 1, aq->queue_count + 1); 292 if (aq->queue_count == 1) 293 mod_timer(&aq->timeout, jiffies + aq->request_timeout); 294 list_move_tail(&ap_msg->list, &aq->pendingq); 295 aq->requestq_count--; 296 aq->pendingq_count++; 297 if (aq->queue_count < aq->card->queue_depth) { 298 aq->sm_state = AP_SM_STATE_WORKING; 299 return AP_SM_WAIT_AGAIN; 300 } 301 fallthrough; 302 case AP_RESPONSE_Q_FULL: 303 aq->sm_state = AP_SM_STATE_QUEUE_FULL; 304 return aq->interrupt ? 305 AP_SM_WAIT_INTERRUPT : AP_SM_WAIT_HIGH_TIMEOUT; 306 case AP_RESPONSE_RESET_IN_PROGRESS: 307 aq->sm_state = AP_SM_STATE_RESET_WAIT; 308 return AP_SM_WAIT_LOW_TIMEOUT; 309 case AP_RESPONSE_INVALID_DOMAIN: 310 AP_DBF_WARN("%s RESPONSE_INVALID_DOMAIN on NQAP\n", __func__); 311 fallthrough; 312 case AP_RESPONSE_MESSAGE_TOO_BIG: 313 case AP_RESPONSE_REQ_FAC_NOT_INST: 314 list_del_init(&ap_msg->list); 315 aq->requestq_count--; 316 ap_msg->rc = -EINVAL; 317 ap_msg->receive(aq, ap_msg, NULL); 318 return AP_SM_WAIT_AGAIN; 319 default: 320 aq->dev_state = AP_DEV_STATE_ERROR; 321 aq->last_err_rc = status.response_code; 322 AP_DBF_WARN("%s RC 0x%02x on 0x%02x.%04x -> AP_DEV_STATE_ERROR\n", 323 __func__, status.response_code, 324 AP_QID_CARD(aq->qid), AP_QID_QUEUE(aq->qid)); 325 return AP_SM_WAIT_NONE; 326 } 327 } 328 329 /** 330 * ap_sm_read_write(): Send and receive messages to/from an AP queue. 331 * @aq: pointer to the AP queue 332 * 333 * Returns AP_SM_WAIT_NONE, AP_SM_WAIT_AGAIN, or AP_SM_WAIT_INTERRUPT 334 */ 335 static enum ap_sm_wait ap_sm_read_write(struct ap_queue *aq) 336 { 337 return min(ap_sm_read(aq), ap_sm_write(aq)); 338 } 339 340 /** 341 * ap_sm_reset(): Reset an AP queue. 342 * @aq: The AP queue 343 * 344 * Submit the Reset command to an AP queue. 345 */ 346 static enum ap_sm_wait ap_sm_reset(struct ap_queue *aq) 347 { 348 struct ap_queue_status status; 349 350 status = ap_rapq(aq->qid, aq->rapq_fbit); 351 if (status.async) 352 return AP_SM_WAIT_NONE; 353 switch (status.response_code) { 354 case AP_RESPONSE_NORMAL: 355 case AP_RESPONSE_RESET_IN_PROGRESS: 356 aq->sm_state = AP_SM_STATE_RESET_WAIT; 357 aq->interrupt = false; 358 aq->rapq_fbit = 0; 359 return AP_SM_WAIT_LOW_TIMEOUT; 360 default: 361 aq->dev_state = AP_DEV_STATE_ERROR; 362 aq->last_err_rc = status.response_code; 363 AP_DBF_WARN("%s RC 0x%02x on 0x%02x.%04x -> AP_DEV_STATE_ERROR\n", 364 __func__, status.response_code, 365 AP_QID_CARD(aq->qid), AP_QID_QUEUE(aq->qid)); 366 return AP_SM_WAIT_NONE; 367 } 368 } 369 370 /** 371 * ap_sm_reset_wait(): Test queue for completion of the reset operation 372 * @aq: pointer to the AP queue 373 * 374 * Returns AP_POLL_IMMEDIATELY, AP_POLL_AFTER_TIMEROUT or 0. 375 */ 376 static enum ap_sm_wait ap_sm_reset_wait(struct ap_queue *aq) 377 { 378 struct ap_queue_status status; 379 void *lsi_ptr; 380 381 if (aq->queue_count > 0 && aq->reply) 382 /* Try to read a completed message and get the status */ 383 status = ap_sm_recv(aq); 384 else 385 /* Get the status with TAPQ */ 386 status = ap_tapq(aq->qid, NULL); 387 388 switch (status.response_code) { 389 case AP_RESPONSE_NORMAL: 390 lsi_ptr = ap_airq_ptr(); 391 if (lsi_ptr && ap_queue_enable_irq(aq, lsi_ptr) == 0) 392 aq->sm_state = AP_SM_STATE_SETIRQ_WAIT; 393 else 394 aq->sm_state = (aq->queue_count > 0) ? 395 AP_SM_STATE_WORKING : AP_SM_STATE_IDLE; 396 return AP_SM_WAIT_AGAIN; 397 case AP_RESPONSE_BUSY: 398 case AP_RESPONSE_RESET_IN_PROGRESS: 399 return AP_SM_WAIT_LOW_TIMEOUT; 400 case AP_RESPONSE_Q_NOT_AVAIL: 401 case AP_RESPONSE_DECONFIGURED: 402 case AP_RESPONSE_CHECKSTOPPED: 403 default: 404 aq->dev_state = AP_DEV_STATE_ERROR; 405 aq->last_err_rc = status.response_code; 406 AP_DBF_WARN("%s RC 0x%02x on 0x%02x.%04x -> AP_DEV_STATE_ERROR\n", 407 __func__, status.response_code, 408 AP_QID_CARD(aq->qid), AP_QID_QUEUE(aq->qid)); 409 return AP_SM_WAIT_NONE; 410 } 411 } 412 413 /** 414 * ap_sm_setirq_wait(): Test queue for completion of the irq enablement 415 * @aq: pointer to the AP queue 416 * 417 * Returns AP_POLL_IMMEDIATELY, AP_POLL_AFTER_TIMEROUT or 0. 418 */ 419 static enum ap_sm_wait ap_sm_setirq_wait(struct ap_queue *aq) 420 { 421 struct ap_queue_status status; 422 423 if (aq->queue_count > 0 && aq->reply) 424 /* Try to read a completed message and get the status */ 425 status = ap_sm_recv(aq); 426 else 427 /* Get the status with TAPQ */ 428 status = ap_tapq(aq->qid, NULL); 429 430 if (status.irq_enabled == 1) { 431 /* Irqs are now enabled */ 432 aq->interrupt = true; 433 aq->sm_state = (aq->queue_count > 0) ? 434 AP_SM_STATE_WORKING : AP_SM_STATE_IDLE; 435 } 436 437 switch (status.response_code) { 438 case AP_RESPONSE_NORMAL: 439 if (aq->queue_count > 0) 440 return AP_SM_WAIT_AGAIN; 441 fallthrough; 442 case AP_RESPONSE_NO_PENDING_REPLY: 443 return AP_SM_WAIT_LOW_TIMEOUT; 444 default: 445 aq->dev_state = AP_DEV_STATE_ERROR; 446 aq->last_err_rc = status.response_code; 447 AP_DBF_WARN("%s RC 0x%02x on 0x%02x.%04x -> AP_DEV_STATE_ERROR\n", 448 __func__, status.response_code, 449 AP_QID_CARD(aq->qid), AP_QID_QUEUE(aq->qid)); 450 return AP_SM_WAIT_NONE; 451 } 452 } 453 454 /** 455 * ap_sm_assoc_wait(): Test queue for completion of a pending 456 * association request. 457 * @aq: pointer to the AP queue 458 */ 459 static enum ap_sm_wait ap_sm_assoc_wait(struct ap_queue *aq) 460 { 461 struct ap_queue_status status; 462 struct ap_tapq_gr2 info; 463 464 status = ap_test_queue(aq->qid, 1, &info); 465 /* handle asynchronous error on this queue */ 466 if (status.async && status.response_code) { 467 aq->dev_state = AP_DEV_STATE_ERROR; 468 aq->last_err_rc = status.response_code; 469 AP_DBF_WARN("%s asynch RC 0x%02x on 0x%02x.%04x -> AP_DEV_STATE_ERROR\n", 470 __func__, status.response_code, 471 AP_QID_CARD(aq->qid), AP_QID_QUEUE(aq->qid)); 472 return AP_SM_WAIT_NONE; 473 } 474 if (status.response_code > AP_RESPONSE_BUSY) { 475 aq->dev_state = AP_DEV_STATE_ERROR; 476 aq->last_err_rc = status.response_code; 477 AP_DBF_WARN("%s RC 0x%02x on 0x%02x.%04x -> AP_DEV_STATE_ERROR\n", 478 __func__, status.response_code, 479 AP_QID_CARD(aq->qid), AP_QID_QUEUE(aq->qid)); 480 return AP_SM_WAIT_NONE; 481 } 482 483 /* check bs bits */ 484 switch (info.bs) { 485 case AP_BS_Q_USABLE: 486 /* association is through */ 487 aq->sm_state = AP_SM_STATE_IDLE; 488 AP_DBF_DBG("%s queue 0x%02x.%04x associated with %u\n", 489 __func__, AP_QID_CARD(aq->qid), 490 AP_QID_QUEUE(aq->qid), aq->assoc_idx); 491 return AP_SM_WAIT_NONE; 492 case AP_BS_Q_USABLE_NO_SECURE_KEY: 493 /* association still pending */ 494 return AP_SM_WAIT_LOW_TIMEOUT; 495 default: 496 /* reset from 'outside' happened or no idea at all */ 497 aq->assoc_idx = ASSOC_IDX_INVALID; 498 aq->dev_state = AP_DEV_STATE_ERROR; 499 aq->last_err_rc = status.response_code; 500 AP_DBF_WARN("%s bs 0x%02x on 0x%02x.%04x -> AP_DEV_STATE_ERROR\n", 501 __func__, info.bs, 502 AP_QID_CARD(aq->qid), AP_QID_QUEUE(aq->qid)); 503 return AP_SM_WAIT_NONE; 504 } 505 } 506 507 /* 508 * AP state machine jump table 509 */ 510 static ap_func_t *ap_jumptable[NR_AP_SM_STATES][NR_AP_SM_EVENTS] = { 511 [AP_SM_STATE_RESET_START] = { 512 [AP_SM_EVENT_POLL] = ap_sm_reset, 513 [AP_SM_EVENT_TIMEOUT] = ap_sm_nop, 514 }, 515 [AP_SM_STATE_RESET_WAIT] = { 516 [AP_SM_EVENT_POLL] = ap_sm_reset_wait, 517 [AP_SM_EVENT_TIMEOUT] = ap_sm_nop, 518 }, 519 [AP_SM_STATE_SETIRQ_WAIT] = { 520 [AP_SM_EVENT_POLL] = ap_sm_setirq_wait, 521 [AP_SM_EVENT_TIMEOUT] = ap_sm_nop, 522 }, 523 [AP_SM_STATE_IDLE] = { 524 [AP_SM_EVENT_POLL] = ap_sm_write, 525 [AP_SM_EVENT_TIMEOUT] = ap_sm_nop, 526 }, 527 [AP_SM_STATE_WORKING] = { 528 [AP_SM_EVENT_POLL] = ap_sm_read_write, 529 [AP_SM_EVENT_TIMEOUT] = ap_sm_reset, 530 }, 531 [AP_SM_STATE_QUEUE_FULL] = { 532 [AP_SM_EVENT_POLL] = ap_sm_read, 533 [AP_SM_EVENT_TIMEOUT] = ap_sm_reset, 534 }, 535 [AP_SM_STATE_ASSOC_WAIT] = { 536 [AP_SM_EVENT_POLL] = ap_sm_assoc_wait, 537 [AP_SM_EVENT_TIMEOUT] = ap_sm_reset, 538 }, 539 }; 540 541 enum ap_sm_wait ap_sm_event(struct ap_queue *aq, enum ap_sm_event event) 542 { 543 if (aq->config && !aq->chkstop && 544 aq->dev_state > AP_DEV_STATE_UNINITIATED) 545 return ap_jumptable[aq->sm_state][event](aq); 546 else 547 return AP_SM_WAIT_NONE; 548 } 549 550 enum ap_sm_wait ap_sm_event_loop(struct ap_queue *aq, enum ap_sm_event event) 551 { 552 enum ap_sm_wait wait; 553 554 while ((wait = ap_sm_event(aq, event)) == AP_SM_WAIT_AGAIN) 555 ; 556 return wait; 557 } 558 559 /* 560 * AP queue related attributes. 561 */ 562 static ssize_t request_count_show(struct device *dev, 563 struct device_attribute *attr, 564 char *buf) 565 { 566 struct ap_queue *aq = to_ap_queue(dev); 567 bool valid = false; 568 u64 req_cnt; 569 570 spin_lock_bh(&aq->lock); 571 if (aq->dev_state > AP_DEV_STATE_UNINITIATED) { 572 req_cnt = aq->total_request_count; 573 valid = true; 574 } 575 spin_unlock_bh(&aq->lock); 576 577 if (valid) 578 return sysfs_emit(buf, "%llu\n", req_cnt); 579 else 580 return sysfs_emit(buf, "-\n"); 581 } 582 583 static ssize_t request_count_store(struct device *dev, 584 struct device_attribute *attr, 585 const char *buf, size_t count) 586 { 587 struct ap_queue *aq = to_ap_queue(dev); 588 589 spin_lock_bh(&aq->lock); 590 aq->total_request_count = 0; 591 spin_unlock_bh(&aq->lock); 592 593 return count; 594 } 595 596 static DEVICE_ATTR_RW(request_count); 597 598 static ssize_t requestq_count_show(struct device *dev, 599 struct device_attribute *attr, char *buf) 600 { 601 struct ap_queue *aq = to_ap_queue(dev); 602 unsigned int reqq_cnt = 0; 603 604 spin_lock_bh(&aq->lock); 605 if (aq->dev_state > AP_DEV_STATE_UNINITIATED) 606 reqq_cnt = aq->requestq_count; 607 spin_unlock_bh(&aq->lock); 608 return sysfs_emit(buf, "%d\n", reqq_cnt); 609 } 610 611 static DEVICE_ATTR_RO(requestq_count); 612 613 static ssize_t pendingq_count_show(struct device *dev, 614 struct device_attribute *attr, char *buf) 615 { 616 struct ap_queue *aq = to_ap_queue(dev); 617 unsigned int penq_cnt = 0; 618 619 spin_lock_bh(&aq->lock); 620 if (aq->dev_state > AP_DEV_STATE_UNINITIATED) 621 penq_cnt = aq->pendingq_count; 622 spin_unlock_bh(&aq->lock); 623 return sysfs_emit(buf, "%d\n", penq_cnt); 624 } 625 626 static DEVICE_ATTR_RO(pendingq_count); 627 628 static ssize_t reset_show(struct device *dev, 629 struct device_attribute *attr, char *buf) 630 { 631 struct ap_queue *aq = to_ap_queue(dev); 632 int rc = 0; 633 634 spin_lock_bh(&aq->lock); 635 switch (aq->sm_state) { 636 case AP_SM_STATE_RESET_START: 637 case AP_SM_STATE_RESET_WAIT: 638 rc = sysfs_emit(buf, "Reset in progress.\n"); 639 break; 640 case AP_SM_STATE_WORKING: 641 case AP_SM_STATE_QUEUE_FULL: 642 rc = sysfs_emit(buf, "Reset Timer armed.\n"); 643 break; 644 default: 645 rc = sysfs_emit(buf, "No Reset Timer set.\n"); 646 } 647 spin_unlock_bh(&aq->lock); 648 return rc; 649 } 650 651 static ssize_t reset_store(struct device *dev, 652 struct device_attribute *attr, 653 const char *buf, size_t count) 654 { 655 struct ap_queue *aq = to_ap_queue(dev); 656 657 spin_lock_bh(&aq->lock); 658 __ap_flush_queue(aq); 659 aq->sm_state = AP_SM_STATE_RESET_START; 660 ap_wait(ap_sm_event(aq, AP_SM_EVENT_POLL)); 661 spin_unlock_bh(&aq->lock); 662 663 AP_DBF_INFO("%s reset queue=%02x.%04x triggered by user\n", 664 __func__, AP_QID_CARD(aq->qid), AP_QID_QUEUE(aq->qid)); 665 666 return count; 667 } 668 669 static DEVICE_ATTR_RW(reset); 670 671 static ssize_t interrupt_show(struct device *dev, 672 struct device_attribute *attr, char *buf) 673 { 674 struct ap_queue *aq = to_ap_queue(dev); 675 int rc = 0; 676 677 spin_lock_bh(&aq->lock); 678 if (aq->sm_state == AP_SM_STATE_SETIRQ_WAIT) 679 rc = sysfs_emit(buf, "Enable Interrupt pending.\n"); 680 else if (aq->interrupt) 681 rc = sysfs_emit(buf, "Interrupts enabled.\n"); 682 else 683 rc = sysfs_emit(buf, "Interrupts disabled.\n"); 684 spin_unlock_bh(&aq->lock); 685 return rc; 686 } 687 688 static DEVICE_ATTR_RO(interrupt); 689 690 static ssize_t config_show(struct device *dev, 691 struct device_attribute *attr, char *buf) 692 { 693 struct ap_queue *aq = to_ap_queue(dev); 694 int rc; 695 696 spin_lock_bh(&aq->lock); 697 rc = sysfs_emit(buf, "%d\n", aq->config ? 1 : 0); 698 spin_unlock_bh(&aq->lock); 699 return rc; 700 } 701 702 static DEVICE_ATTR_RO(config); 703 704 static ssize_t chkstop_show(struct device *dev, 705 struct device_attribute *attr, char *buf) 706 { 707 struct ap_queue *aq = to_ap_queue(dev); 708 int rc; 709 710 spin_lock_bh(&aq->lock); 711 rc = sysfs_emit(buf, "%d\n", aq->chkstop ? 1 : 0); 712 spin_unlock_bh(&aq->lock); 713 return rc; 714 } 715 716 static DEVICE_ATTR_RO(chkstop); 717 718 static ssize_t ap_functions_show(struct device *dev, 719 struct device_attribute *attr, char *buf) 720 { 721 struct ap_queue *aq = to_ap_queue(dev); 722 struct ap_queue_status status; 723 struct ap_tapq_gr2 info; 724 725 status = ap_test_queue(aq->qid, 1, &info); 726 if (status.response_code > AP_RESPONSE_BUSY) { 727 AP_DBF_DBG("%s RC 0x%02x on tapq(0x%02x.%04x)\n", 728 __func__, status.response_code, 729 AP_QID_CARD(aq->qid), AP_QID_QUEUE(aq->qid)); 730 return -EIO; 731 } 732 733 return sysfs_emit(buf, "0x%08X\n", info.fac); 734 } 735 736 static DEVICE_ATTR_RO(ap_functions); 737 738 #ifdef CONFIG_ZCRYPT_DEBUG 739 static ssize_t states_show(struct device *dev, 740 struct device_attribute *attr, char *buf) 741 { 742 struct ap_queue *aq = to_ap_queue(dev); 743 int rc = 0; 744 745 spin_lock_bh(&aq->lock); 746 /* queue device state */ 747 switch (aq->dev_state) { 748 case AP_DEV_STATE_UNINITIATED: 749 rc = sysfs_emit(buf, "UNINITIATED\n"); 750 break; 751 case AP_DEV_STATE_OPERATING: 752 rc = sysfs_emit(buf, "OPERATING"); 753 break; 754 case AP_DEV_STATE_SHUTDOWN: 755 rc = sysfs_emit(buf, "SHUTDOWN"); 756 break; 757 case AP_DEV_STATE_ERROR: 758 rc = sysfs_emit(buf, "ERROR"); 759 break; 760 default: 761 rc = sysfs_emit(buf, "UNKNOWN"); 762 } 763 /* state machine state */ 764 if (aq->dev_state) { 765 switch (aq->sm_state) { 766 case AP_SM_STATE_RESET_START: 767 rc += sysfs_emit_at(buf, rc, " [RESET_START]\n"); 768 break; 769 case AP_SM_STATE_RESET_WAIT: 770 rc += sysfs_emit_at(buf, rc, " [RESET_WAIT]\n"); 771 break; 772 case AP_SM_STATE_SETIRQ_WAIT: 773 rc += sysfs_emit_at(buf, rc, " [SETIRQ_WAIT]\n"); 774 break; 775 case AP_SM_STATE_IDLE: 776 rc += sysfs_emit_at(buf, rc, " [IDLE]\n"); 777 break; 778 case AP_SM_STATE_WORKING: 779 rc += sysfs_emit_at(buf, rc, " [WORKING]\n"); 780 break; 781 case AP_SM_STATE_QUEUE_FULL: 782 rc += sysfs_emit_at(buf, rc, " [FULL]\n"); 783 break; 784 case AP_SM_STATE_ASSOC_WAIT: 785 rc += sysfs_emit_at(buf, rc, " [ASSOC_WAIT]\n"); 786 break; 787 default: 788 rc += sysfs_emit_at(buf, rc, " [UNKNOWN]\n"); 789 } 790 } 791 spin_unlock_bh(&aq->lock); 792 793 return rc; 794 } 795 static DEVICE_ATTR_RO(states); 796 797 static ssize_t last_err_rc_show(struct device *dev, 798 struct device_attribute *attr, char *buf) 799 { 800 struct ap_queue *aq = to_ap_queue(dev); 801 int rc; 802 803 spin_lock_bh(&aq->lock); 804 rc = aq->last_err_rc; 805 spin_unlock_bh(&aq->lock); 806 807 switch (rc) { 808 case AP_RESPONSE_NORMAL: 809 return sysfs_emit(buf, "NORMAL\n"); 810 case AP_RESPONSE_Q_NOT_AVAIL: 811 return sysfs_emit(buf, "Q_NOT_AVAIL\n"); 812 case AP_RESPONSE_RESET_IN_PROGRESS: 813 return sysfs_emit(buf, "RESET_IN_PROGRESS\n"); 814 case AP_RESPONSE_DECONFIGURED: 815 return sysfs_emit(buf, "DECONFIGURED\n"); 816 case AP_RESPONSE_CHECKSTOPPED: 817 return sysfs_emit(buf, "CHECKSTOPPED\n"); 818 case AP_RESPONSE_BUSY: 819 return sysfs_emit(buf, "BUSY\n"); 820 case AP_RESPONSE_INVALID_ADDRESS: 821 return sysfs_emit(buf, "INVALID_ADDRESS\n"); 822 case AP_RESPONSE_OTHERWISE_CHANGED: 823 return sysfs_emit(buf, "OTHERWISE_CHANGED\n"); 824 case AP_RESPONSE_Q_FULL: 825 return sysfs_emit(buf, "Q_FULL/NO_PENDING_REPLY\n"); 826 case AP_RESPONSE_INDEX_TOO_BIG: 827 return sysfs_emit(buf, "INDEX_TOO_BIG\n"); 828 case AP_RESPONSE_NO_FIRST_PART: 829 return sysfs_emit(buf, "NO_FIRST_PART\n"); 830 case AP_RESPONSE_MESSAGE_TOO_BIG: 831 return sysfs_emit(buf, "MESSAGE_TOO_BIG\n"); 832 case AP_RESPONSE_REQ_FAC_NOT_INST: 833 return sysfs_emit(buf, "REQ_FAC_NOT_INST\n"); 834 default: 835 return sysfs_emit(buf, "response code %d\n", rc); 836 } 837 } 838 static DEVICE_ATTR_RO(last_err_rc); 839 #endif 840 841 static struct attribute *ap_queue_dev_attrs[] = { 842 &dev_attr_request_count.attr, 843 &dev_attr_requestq_count.attr, 844 &dev_attr_pendingq_count.attr, 845 &dev_attr_reset.attr, 846 &dev_attr_interrupt.attr, 847 &dev_attr_config.attr, 848 &dev_attr_chkstop.attr, 849 &dev_attr_ap_functions.attr, 850 #ifdef CONFIG_ZCRYPT_DEBUG 851 &dev_attr_states.attr, 852 &dev_attr_last_err_rc.attr, 853 #endif 854 NULL 855 }; 856 857 static struct attribute_group ap_queue_dev_attr_group = { 858 .attrs = ap_queue_dev_attrs 859 }; 860 861 static const struct attribute_group *ap_queue_dev_attr_groups[] = { 862 &ap_queue_dev_attr_group, 863 NULL 864 }; 865 866 static struct device_type ap_queue_type = { 867 .name = "ap_queue", 868 .groups = ap_queue_dev_attr_groups, 869 }; 870 871 static ssize_t se_bind_show(struct device *dev, 872 struct device_attribute *attr, char *buf) 873 { 874 struct ap_queue *aq = to_ap_queue(dev); 875 struct ap_queue_status status; 876 struct ap_tapq_gr2 info; 877 878 if (!ap_q_supports_bind(aq)) 879 return sysfs_emit(buf, "-\n"); 880 881 status = ap_test_queue(aq->qid, 1, &info); 882 if (status.response_code > AP_RESPONSE_BUSY) { 883 AP_DBF_DBG("%s RC 0x%02x on tapq(0x%02x.%04x)\n", 884 __func__, status.response_code, 885 AP_QID_CARD(aq->qid), AP_QID_QUEUE(aq->qid)); 886 return -EIO; 887 } 888 switch (info.bs) { 889 case AP_BS_Q_USABLE: 890 case AP_BS_Q_USABLE_NO_SECURE_KEY: 891 return sysfs_emit(buf, "bound\n"); 892 default: 893 return sysfs_emit(buf, "unbound\n"); 894 } 895 } 896 897 static ssize_t se_bind_store(struct device *dev, 898 struct device_attribute *attr, 899 const char *buf, size_t count) 900 { 901 struct ap_queue *aq = to_ap_queue(dev); 902 struct ap_queue_status status; 903 bool value; 904 int rc; 905 906 if (!ap_q_supports_bind(aq)) 907 return -EINVAL; 908 909 /* only 0 (unbind) and 1 (bind) allowed */ 910 rc = kstrtobool(buf, &value); 911 if (rc) 912 return rc; 913 914 if (value) { 915 /* bind, do BAPQ */ 916 spin_lock_bh(&aq->lock); 917 if (aq->sm_state < AP_SM_STATE_IDLE) { 918 spin_unlock_bh(&aq->lock); 919 return -EBUSY; 920 } 921 status = ap_bapq(aq->qid); 922 spin_unlock_bh(&aq->lock); 923 if (status.response_code) { 924 AP_DBF_WARN("%s RC 0x%02x on bapq(0x%02x.%04x)\n", 925 __func__, status.response_code, 926 AP_QID_CARD(aq->qid), 927 AP_QID_QUEUE(aq->qid)); 928 return -EIO; 929 } 930 } else { 931 /* unbind, set F bit arg and trigger RAPQ */ 932 spin_lock_bh(&aq->lock); 933 __ap_flush_queue(aq); 934 aq->rapq_fbit = 1; 935 aq->assoc_idx = ASSOC_IDX_INVALID; 936 aq->sm_state = AP_SM_STATE_RESET_START; 937 ap_wait(ap_sm_event(aq, AP_SM_EVENT_POLL)); 938 spin_unlock_bh(&aq->lock); 939 } 940 941 return count; 942 } 943 944 static DEVICE_ATTR_RW(se_bind); 945 946 static ssize_t se_associate_show(struct device *dev, 947 struct device_attribute *attr, char *buf) 948 { 949 struct ap_queue *aq = to_ap_queue(dev); 950 struct ap_queue_status status; 951 struct ap_tapq_gr2 info; 952 953 if (!ap_q_supports_assoc(aq)) 954 return sysfs_emit(buf, "-\n"); 955 956 status = ap_test_queue(aq->qid, 1, &info); 957 if (status.response_code > AP_RESPONSE_BUSY) { 958 AP_DBF_DBG("%s RC 0x%02x on tapq(0x%02x.%04x)\n", 959 __func__, status.response_code, 960 AP_QID_CARD(aq->qid), AP_QID_QUEUE(aq->qid)); 961 return -EIO; 962 } 963 964 switch (info.bs) { 965 case AP_BS_Q_USABLE: 966 if (aq->assoc_idx == ASSOC_IDX_INVALID) { 967 AP_DBF_WARN("%s AP_BS_Q_USABLE but invalid assoc_idx\n", __func__); 968 return -EIO; 969 } 970 return sysfs_emit(buf, "associated %u\n", aq->assoc_idx); 971 case AP_BS_Q_USABLE_NO_SECURE_KEY: 972 if (aq->assoc_idx != ASSOC_IDX_INVALID) 973 return sysfs_emit(buf, "association pending\n"); 974 fallthrough; 975 default: 976 return sysfs_emit(buf, "unassociated\n"); 977 } 978 } 979 980 static ssize_t se_associate_store(struct device *dev, 981 struct device_attribute *attr, 982 const char *buf, size_t count) 983 { 984 struct ap_queue *aq = to_ap_queue(dev); 985 struct ap_queue_status status; 986 unsigned int value; 987 int rc; 988 989 if (!ap_q_supports_assoc(aq)) 990 return -EINVAL; 991 992 /* association index needs to be >= 0 */ 993 rc = kstrtouint(buf, 0, &value); 994 if (rc) 995 return rc; 996 if (value >= ASSOC_IDX_INVALID) 997 return -EINVAL; 998 999 spin_lock_bh(&aq->lock); 1000 1001 /* sm should be in idle state */ 1002 if (aq->sm_state != AP_SM_STATE_IDLE) { 1003 spin_unlock_bh(&aq->lock); 1004 return -EBUSY; 1005 } 1006 1007 /* already associated or association pending ? */ 1008 if (aq->assoc_idx != ASSOC_IDX_INVALID) { 1009 spin_unlock_bh(&aq->lock); 1010 return -EINVAL; 1011 } 1012 1013 /* trigger the asynchronous association request */ 1014 status = ap_aapq(aq->qid, value); 1015 switch (status.response_code) { 1016 case AP_RESPONSE_NORMAL: 1017 case AP_RESPONSE_STATE_CHANGE_IN_PROGRESS: 1018 aq->sm_state = AP_SM_STATE_ASSOC_WAIT; 1019 aq->assoc_idx = value; 1020 ap_wait(ap_sm_event(aq, AP_SM_EVENT_POLL)); 1021 spin_unlock_bh(&aq->lock); 1022 break; 1023 default: 1024 spin_unlock_bh(&aq->lock); 1025 AP_DBF_WARN("%s RC 0x%02x on aapq(0x%02x.%04x)\n", 1026 __func__, status.response_code, 1027 AP_QID_CARD(aq->qid), AP_QID_QUEUE(aq->qid)); 1028 return -EIO; 1029 } 1030 1031 return count; 1032 } 1033 1034 static DEVICE_ATTR_RW(se_associate); 1035 1036 static struct attribute *ap_queue_dev_sb_attrs[] = { 1037 &dev_attr_se_bind.attr, 1038 &dev_attr_se_associate.attr, 1039 NULL 1040 }; 1041 1042 static struct attribute_group ap_queue_dev_sb_attr_group = { 1043 .attrs = ap_queue_dev_sb_attrs 1044 }; 1045 1046 static const struct attribute_group *ap_queue_dev_sb_attr_groups[] = { 1047 &ap_queue_dev_sb_attr_group, 1048 NULL 1049 }; 1050 1051 static void ap_queue_device_release(struct device *dev) 1052 { 1053 struct ap_queue *aq = to_ap_queue(dev); 1054 1055 spin_lock_bh(&ap_queues_lock); 1056 hash_del(&aq->hnode); 1057 spin_unlock_bh(&ap_queues_lock); 1058 1059 kfree(aq); 1060 } 1061 1062 struct ap_queue *ap_queue_create(ap_qid_t qid, int device_type) 1063 { 1064 struct ap_queue *aq; 1065 1066 aq = kzalloc(sizeof(*aq), GFP_KERNEL); 1067 if (!aq) 1068 return NULL; 1069 aq->ap_dev.device.release = ap_queue_device_release; 1070 aq->ap_dev.device.type = &ap_queue_type; 1071 aq->ap_dev.device_type = device_type; 1072 // add optional SE secure binding attributes group 1073 if (ap_sb_available() && is_prot_virt_guest()) 1074 aq->ap_dev.device.groups = ap_queue_dev_sb_attr_groups; 1075 aq->qid = qid; 1076 aq->interrupt = false; 1077 spin_lock_init(&aq->lock); 1078 INIT_LIST_HEAD(&aq->pendingq); 1079 INIT_LIST_HEAD(&aq->requestq); 1080 timer_setup(&aq->timeout, ap_request_timeout, 0); 1081 1082 return aq; 1083 } 1084 1085 void ap_queue_init_reply(struct ap_queue *aq, struct ap_message *reply) 1086 { 1087 aq->reply = reply; 1088 1089 spin_lock_bh(&aq->lock); 1090 ap_wait(ap_sm_event(aq, AP_SM_EVENT_POLL)); 1091 spin_unlock_bh(&aq->lock); 1092 } 1093 EXPORT_SYMBOL(ap_queue_init_reply); 1094 1095 /** 1096 * ap_queue_message(): Queue a request to an AP device. 1097 * @aq: The AP device to queue the message to 1098 * @ap_msg: The message that is to be added 1099 */ 1100 int ap_queue_message(struct ap_queue *aq, struct ap_message *ap_msg) 1101 { 1102 int rc = 0; 1103 1104 /* msg needs to have a valid receive-callback */ 1105 BUG_ON(!ap_msg->receive); 1106 1107 spin_lock_bh(&aq->lock); 1108 1109 /* only allow to queue new messages if device state is ok */ 1110 if (aq->dev_state == AP_DEV_STATE_OPERATING) { 1111 list_add_tail(&ap_msg->list, &aq->requestq); 1112 aq->requestq_count++; 1113 aq->total_request_count++; 1114 atomic64_inc(&aq->card->total_request_count); 1115 } else { 1116 rc = -ENODEV; 1117 } 1118 1119 /* Send/receive as many request from the queue as possible. */ 1120 ap_wait(ap_sm_event_loop(aq, AP_SM_EVENT_POLL)); 1121 1122 spin_unlock_bh(&aq->lock); 1123 1124 return rc; 1125 } 1126 EXPORT_SYMBOL(ap_queue_message); 1127 1128 /** 1129 * ap_cancel_message(): Cancel a crypto request. 1130 * @aq: The AP device that has the message queued 1131 * @ap_msg: The message that is to be removed 1132 * 1133 * Cancel a crypto request. This is done by removing the request 1134 * from the device pending or request queue. Note that the 1135 * request stays on the AP queue. When it finishes the message 1136 * reply will be discarded because the psmid can't be found. 1137 */ 1138 void ap_cancel_message(struct ap_queue *aq, struct ap_message *ap_msg) 1139 { 1140 struct ap_message *tmp; 1141 1142 spin_lock_bh(&aq->lock); 1143 if (!list_empty(&ap_msg->list)) { 1144 list_for_each_entry(tmp, &aq->pendingq, list) 1145 if (tmp->psmid == ap_msg->psmid) { 1146 aq->pendingq_count--; 1147 goto found; 1148 } 1149 aq->requestq_count--; 1150 found: 1151 list_del_init(&ap_msg->list); 1152 } 1153 spin_unlock_bh(&aq->lock); 1154 } 1155 EXPORT_SYMBOL(ap_cancel_message); 1156 1157 /** 1158 * __ap_flush_queue(): Flush requests. 1159 * @aq: Pointer to the AP queue 1160 * 1161 * Flush all requests from the request/pending queue of an AP device. 1162 */ 1163 static void __ap_flush_queue(struct ap_queue *aq) 1164 { 1165 struct ap_message *ap_msg, *next; 1166 1167 list_for_each_entry_safe(ap_msg, next, &aq->pendingq, list) { 1168 list_del_init(&ap_msg->list); 1169 aq->pendingq_count--; 1170 ap_msg->rc = -EAGAIN; 1171 ap_msg->receive(aq, ap_msg, NULL); 1172 } 1173 list_for_each_entry_safe(ap_msg, next, &aq->requestq, list) { 1174 list_del_init(&ap_msg->list); 1175 aq->requestq_count--; 1176 ap_msg->rc = -EAGAIN; 1177 ap_msg->receive(aq, ap_msg, NULL); 1178 } 1179 aq->queue_count = 0; 1180 } 1181 1182 void ap_flush_queue(struct ap_queue *aq) 1183 { 1184 spin_lock_bh(&aq->lock); 1185 __ap_flush_queue(aq); 1186 spin_unlock_bh(&aq->lock); 1187 } 1188 EXPORT_SYMBOL(ap_flush_queue); 1189 1190 void ap_queue_prepare_remove(struct ap_queue *aq) 1191 { 1192 spin_lock_bh(&aq->lock); 1193 /* flush queue */ 1194 __ap_flush_queue(aq); 1195 /* move queue device state to SHUTDOWN in progress */ 1196 aq->dev_state = AP_DEV_STATE_SHUTDOWN; 1197 spin_unlock_bh(&aq->lock); 1198 del_timer_sync(&aq->timeout); 1199 } 1200 1201 void ap_queue_remove(struct ap_queue *aq) 1202 { 1203 /* 1204 * all messages have been flushed and the device state 1205 * is SHUTDOWN. Now reset with zero which also clears 1206 * the irq registration and move the device state 1207 * to the initial value AP_DEV_STATE_UNINITIATED. 1208 */ 1209 spin_lock_bh(&aq->lock); 1210 ap_zapq(aq->qid, 0); 1211 aq->dev_state = AP_DEV_STATE_UNINITIATED; 1212 spin_unlock_bh(&aq->lock); 1213 } 1214 1215 void ap_queue_init_state(struct ap_queue *aq) 1216 { 1217 spin_lock_bh(&aq->lock); 1218 aq->dev_state = AP_DEV_STATE_OPERATING; 1219 aq->sm_state = AP_SM_STATE_RESET_START; 1220 aq->last_err_rc = 0; 1221 aq->assoc_idx = ASSOC_IDX_INVALID; 1222 ap_wait(ap_sm_event(aq, AP_SM_EVENT_POLL)); 1223 spin_unlock_bh(&aq->lock); 1224 } 1225 EXPORT_SYMBOL(ap_queue_init_state); 1226