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