linux/drivers/s390/crypto/ap_bus.c
<<
>>
Prefs
   1// SPDX-License-Identifier: GPL-2.0+
   2/*
   3 * Copyright IBM Corp. 2006, 2012
   4 * Author(s): Cornelia Huck <cornelia.huck@de.ibm.com>
   5 *            Martin Schwidefsky <schwidefsky@de.ibm.com>
   6 *            Ralph Wuerthner <rwuerthn@de.ibm.com>
   7 *            Felix Beck <felix.beck@de.ibm.com>
   8 *            Holger Dengler <hd@linux.vnet.ibm.com>
   9 *
  10 * Adjunct processor bus.
  11 */
  12
  13#define KMSG_COMPONENT "ap"
  14#define pr_fmt(fmt) KMSG_COMPONENT ": " fmt
  15
  16#include <linux/kernel_stat.h>
  17#include <linux/moduleparam.h>
  18#include <linux/init.h>
  19#include <linux/delay.h>
  20#include <linux/err.h>
  21#include <linux/interrupt.h>
  22#include <linux/workqueue.h>
  23#include <linux/slab.h>
  24#include <linux/notifier.h>
  25#include <linux/kthread.h>
  26#include <linux/mutex.h>
  27#include <linux/suspend.h>
  28#include <asm/reset.h>
  29#include <asm/airq.h>
  30#include <linux/atomic.h>
  31#include <asm/isc.h>
  32#include <linux/hrtimer.h>
  33#include <linux/ktime.h>
  34#include <asm/facility.h>
  35#include <linux/crypto.h>
  36#include <linux/mod_devicetable.h>
  37#include <linux/debugfs.h>
  38
  39#include "ap_bus.h"
  40#include "ap_asm.h"
  41#include "ap_debug.h"
  42
  43/*
  44 * Module parameters; note though this file itself isn't modular.
  45 */
  46int ap_domain_index = -1;       /* Adjunct Processor Domain Index */
  47static DEFINE_SPINLOCK(ap_domain_lock);
  48module_param_named(domain, ap_domain_index, int, S_IRUSR|S_IRGRP);
  49MODULE_PARM_DESC(domain, "domain index for ap devices");
  50EXPORT_SYMBOL(ap_domain_index);
  51
  52static int ap_thread_flag = 0;
  53module_param_named(poll_thread, ap_thread_flag, int, S_IRUSR|S_IRGRP);
  54MODULE_PARM_DESC(poll_thread, "Turn on/off poll thread, default is 0 (off).");
  55
  56static struct device *ap_root_device;
  57
  58DEFINE_SPINLOCK(ap_list_lock);
  59LIST_HEAD(ap_card_list);
  60
  61static struct ap_config_info *ap_configuration;
  62static bool initialised;
  63
  64/*
  65 * AP bus related debug feature things.
  66 */
  67debug_info_t *ap_dbf_info;
  68
  69/*
  70 * Workqueue timer for bus rescan.
  71 */
  72static struct timer_list ap_config_timer;
  73static int ap_config_time = AP_CONFIG_TIME;
  74static void ap_scan_bus(struct work_struct *);
  75static DECLARE_WORK(ap_scan_work, ap_scan_bus);
  76
  77/*
  78 * Tasklet & timer for AP request polling and interrupts
  79 */
  80static void ap_tasklet_fn(unsigned long);
  81static DECLARE_TASKLET(ap_tasklet, ap_tasklet_fn, 0);
  82static DECLARE_WAIT_QUEUE_HEAD(ap_poll_wait);
  83static struct task_struct *ap_poll_kthread = NULL;
  84static DEFINE_MUTEX(ap_poll_thread_mutex);
  85static DEFINE_SPINLOCK(ap_poll_timer_lock);
  86static struct hrtimer ap_poll_timer;
  87/* In LPAR poll with 4kHz frequency. Poll every 250000 nanoseconds.
  88 * If z/VM change to 1500000 nanoseconds to adjust to z/VM polling.*/
  89static unsigned long long poll_timeout = 250000;
  90
  91/* Suspend flag */
  92static int ap_suspend_flag;
  93/* Maximum domain id */
  94static int ap_max_domain_id;
  95/* Flag to check if domain was set through module parameter domain=. This is
  96 * important when supsend and resume is done in a z/VM environment where the
  97 * domain might change. */
  98static int user_set_domain = 0;
  99static struct bus_type ap_bus_type;
 100
 101/* Adapter interrupt definitions */
 102static void ap_interrupt_handler(struct airq_struct *airq);
 103
 104static int ap_airq_flag;
 105
 106static struct airq_struct ap_airq = {
 107        .handler = ap_interrupt_handler,
 108        .isc = AP_ISC,
 109};
 110
 111/**
 112 * ap_using_interrupts() - Returns non-zero if interrupt support is
 113 * available.
 114 */
 115static inline int ap_using_interrupts(void)
 116{
 117        return ap_airq_flag;
 118}
 119
 120/**
 121 * ap_airq_ptr() - Get the address of the adapter interrupt indicator
 122 *
 123 * Returns the address of the local-summary-indicator of the adapter
 124 * interrupt handler for AP, or NULL if adapter interrupts are not
 125 * available.
 126 */
 127void *ap_airq_ptr(void)
 128{
 129        if (ap_using_interrupts())
 130                return ap_airq.lsi_ptr;
 131        return NULL;
 132}
 133
 134/**
 135 * ap_interrupts_available(): Test if AP interrupts are available.
 136 *
 137 * Returns 1 if AP interrupts are available.
 138 */
 139static int ap_interrupts_available(void)
 140{
 141        return test_facility(65);
 142}
 143
 144/**
 145 * ap_configuration_available(): Test if AP configuration
 146 * information is available.
 147 *
 148 * Returns 1 if AP configuration information is available.
 149 */
 150static int ap_configuration_available(void)
 151{
 152        return test_facility(12);
 153}
 154
 155/**
 156 * ap_apft_available(): Test if AP facilities test (APFT)
 157 * facility is available.
 158 *
 159 * Returns 1 if APFT is is available.
 160 */
 161static int ap_apft_available(void)
 162{
 163        return test_facility(15);
 164}
 165
 166/*
 167 * ap_qact_available(): Test if the PQAP(QACT) subfunction is available.
 168 *
 169 * Returns 1 if the QACT subfunction is available.
 170 */
 171static inline int ap_qact_available(void)
 172{
 173        if (ap_configuration)
 174                return ap_configuration->qact;
 175        return 0;
 176}
 177
 178/**
 179 * ap_test_queue(): Test adjunct processor queue.
 180 * @qid: The AP queue number
 181 * @tbit: Test facilities bit
 182 * @info: Pointer to queue descriptor
 183 *
 184 * Returns AP queue status structure.
 185 */
 186struct ap_queue_status ap_test_queue(ap_qid_t qid,
 187                                     int tbit,
 188                                     unsigned long *info)
 189{
 190        if (tbit)
 191                qid |= 1UL << 23; /* set T bit*/
 192        return ap_tapq(qid, info);
 193}
 194EXPORT_SYMBOL(ap_test_queue);
 195
 196/*
 197 * ap_query_configuration(): Fetch cryptographic config info
 198 *
 199 * Returns the ap configuration info fetched via PQAP(QCI).
 200 * On success 0 is returned, on failure a negative errno
 201 * is returned, e.g. if the PQAP(QCI) instruction is not
 202 * available, the return value will be -EOPNOTSUPP.
 203 */
 204int ap_query_configuration(struct ap_config_info *info)
 205{
 206        if (!ap_configuration_available())
 207                return -EOPNOTSUPP;
 208        if (!info)
 209                return -EINVAL;
 210        return ap_qci(info);
 211}
 212EXPORT_SYMBOL(ap_query_configuration);
 213
 214/**
 215 * ap_init_configuration(): Allocate and query configuration array.
 216 */
 217static void ap_init_configuration(void)
 218{
 219        if (!ap_configuration_available())
 220                return;
 221
 222        ap_configuration = kzalloc(sizeof(*ap_configuration), GFP_KERNEL);
 223        if (!ap_configuration)
 224                return;
 225        if (ap_query_configuration(ap_configuration) != 0) {
 226                kfree(ap_configuration);
 227                ap_configuration = NULL;
 228                return;
 229        }
 230}
 231
 232/*
 233 * ap_test_config(): helper function to extract the nrth bit
 234 *                   within the unsigned int array field.
 235 */
 236static inline int ap_test_config(unsigned int *field, unsigned int nr)
 237{
 238        return ap_test_bit((field + (nr >> 5)), (nr & 0x1f));
 239}
 240
 241/*
 242 * ap_test_config_card_id(): Test, whether an AP card ID is configured.
 243 * @id AP card ID
 244 *
 245 * Returns 0 if the card is not configured
 246 *         1 if the card is configured or
 247 *           if the configuration information is not available
 248 */
 249static inline int ap_test_config_card_id(unsigned int id)
 250{
 251        if (!ap_configuration)  /* QCI not supported */
 252                return 1;
 253        return ap_test_config(ap_configuration->apm, id);
 254}
 255
 256/*
 257 * ap_test_config_domain(): Test, whether an AP usage domain is configured.
 258 * @domain AP usage domain ID
 259 *
 260 * Returns 0 if the usage domain is not configured
 261 *         1 if the usage domain is configured or
 262 *           if the configuration information is not available
 263 */
 264static inline int ap_test_config_domain(unsigned int domain)
 265{
 266        if (!ap_configuration)  /* QCI not supported */
 267                return domain < 16;
 268        return ap_test_config(ap_configuration->aqm, domain);
 269}
 270
 271/**
 272 * ap_query_queue(): Check if an AP queue is available.
 273 * @qid: The AP queue number
 274 * @queue_depth: Pointer to queue depth value
 275 * @device_type: Pointer to device type value
 276 * @facilities: Pointer to facility indicator
 277 */
 278static int ap_query_queue(ap_qid_t qid, int *queue_depth, int *device_type,
 279                          unsigned int *facilities)
 280{
 281        struct ap_queue_status status;
 282        unsigned long info;
 283        int nd;
 284
 285        if (!ap_test_config_card_id(AP_QID_CARD(qid)))
 286                return -ENODEV;
 287
 288        status = ap_test_queue(qid, ap_apft_available(), &info);
 289        switch (status.response_code) {
 290        case AP_RESPONSE_NORMAL:
 291                *queue_depth = (int)(info & 0xff);
 292                *device_type = (int)((info >> 24) & 0xff);
 293                *facilities = (unsigned int)(info >> 32);
 294                /* Update maximum domain id */
 295                nd = (info >> 16) & 0xff;
 296                /* if N bit is available, z13 and newer */
 297                if ((info & (1UL << 57)) && nd > 0)
 298                        ap_max_domain_id = nd;
 299                else /* older machine types */
 300                        ap_max_domain_id = 15;
 301                switch (*device_type) {
 302                        /* For CEX2 and CEX3 the available functions
 303                         * are not refrected by the facilities bits.
 304                         * Instead it is coded into the type. So here
 305                         * modify the function bits based on the type.
 306                         */
 307                case AP_DEVICE_TYPE_CEX2A:
 308                case AP_DEVICE_TYPE_CEX3A:
 309                        *facilities |= 0x08000000;
 310                        break;
 311                case AP_DEVICE_TYPE_CEX2C:
 312                case AP_DEVICE_TYPE_CEX3C:
 313                        *facilities |= 0x10000000;
 314                        break;
 315                default:
 316                        break;
 317                }
 318                return 0;
 319        case AP_RESPONSE_Q_NOT_AVAIL:
 320        case AP_RESPONSE_DECONFIGURED:
 321        case AP_RESPONSE_CHECKSTOPPED:
 322        case AP_RESPONSE_INVALID_ADDRESS:
 323                return -ENODEV;
 324        case AP_RESPONSE_RESET_IN_PROGRESS:
 325        case AP_RESPONSE_OTHERWISE_CHANGED:
 326        case AP_RESPONSE_BUSY:
 327                return -EBUSY;
 328        default:
 329                BUG();
 330        }
 331}
 332
 333void ap_wait(enum ap_wait wait)
 334{
 335        ktime_t hr_time;
 336
 337        switch (wait) {
 338        case AP_WAIT_AGAIN:
 339        case AP_WAIT_INTERRUPT:
 340                if (ap_using_interrupts())
 341                        break;
 342                if (ap_poll_kthread) {
 343                        wake_up(&ap_poll_wait);
 344                        break;
 345                }
 346                /* Fall through */
 347        case AP_WAIT_TIMEOUT:
 348                spin_lock_bh(&ap_poll_timer_lock);
 349                if (!hrtimer_is_queued(&ap_poll_timer)) {
 350                        hr_time = poll_timeout;
 351                        hrtimer_forward_now(&ap_poll_timer, hr_time);
 352                        hrtimer_restart(&ap_poll_timer);
 353                }
 354                spin_unlock_bh(&ap_poll_timer_lock);
 355                break;
 356        case AP_WAIT_NONE:
 357        default:
 358                break;
 359        }
 360}
 361
 362/**
 363 * ap_request_timeout(): Handling of request timeouts
 364 * @t: timer making this callback
 365 *
 366 * Handles request timeouts.
 367 */
 368void ap_request_timeout(struct timer_list *t)
 369{
 370        struct ap_queue *aq = from_timer(aq, t, timeout);
 371
 372        if (ap_suspend_flag)
 373                return;
 374        spin_lock_bh(&aq->lock);
 375        ap_wait(ap_sm_event(aq, AP_EVENT_TIMEOUT));
 376        spin_unlock_bh(&aq->lock);
 377}
 378
 379/**
 380 * ap_poll_timeout(): AP receive polling for finished AP requests.
 381 * @unused: Unused pointer.
 382 *
 383 * Schedules the AP tasklet using a high resolution timer.
 384 */
 385static enum hrtimer_restart ap_poll_timeout(struct hrtimer *unused)
 386{
 387        if (!ap_suspend_flag)
 388                tasklet_schedule(&ap_tasklet);
 389        return HRTIMER_NORESTART;
 390}
 391
 392/**
 393 * ap_interrupt_handler() - Schedule ap_tasklet on interrupt
 394 * @airq: pointer to adapter interrupt descriptor
 395 */
 396static void ap_interrupt_handler(struct airq_struct *airq)
 397{
 398        inc_irq_stat(IRQIO_APB);
 399        if (!ap_suspend_flag)
 400                tasklet_schedule(&ap_tasklet);
 401}
 402
 403/**
 404 * ap_tasklet_fn(): Tasklet to poll all AP devices.
 405 * @dummy: Unused variable
 406 *
 407 * Poll all AP devices on the bus.
 408 */
 409static void ap_tasklet_fn(unsigned long dummy)
 410{
 411        struct ap_card *ac;
 412        struct ap_queue *aq;
 413        enum ap_wait wait = AP_WAIT_NONE;
 414
 415        /* Reset the indicator if interrupts are used. Thus new interrupts can
 416         * be received. Doing it in the beginning of the tasklet is therefor
 417         * important that no requests on any AP get lost.
 418         */
 419        if (ap_using_interrupts())
 420                xchg(ap_airq.lsi_ptr, 0);
 421
 422        spin_lock_bh(&ap_list_lock);
 423        for_each_ap_card(ac) {
 424                for_each_ap_queue(aq, ac) {
 425                        spin_lock_bh(&aq->lock);
 426                        wait = min(wait, ap_sm_event_loop(aq, AP_EVENT_POLL));
 427                        spin_unlock_bh(&aq->lock);
 428                }
 429        }
 430        spin_unlock_bh(&ap_list_lock);
 431
 432        ap_wait(wait);
 433}
 434
 435static int ap_pending_requests(void)
 436{
 437        struct ap_card *ac;
 438        struct ap_queue *aq;
 439
 440        spin_lock_bh(&ap_list_lock);
 441        for_each_ap_card(ac) {
 442                for_each_ap_queue(aq, ac) {
 443                        if (aq->queue_count == 0)
 444                                continue;
 445                        spin_unlock_bh(&ap_list_lock);
 446                        return 1;
 447                }
 448        }
 449        spin_unlock_bh(&ap_list_lock);
 450        return 0;
 451}
 452
 453/**
 454 * ap_poll_thread(): Thread that polls for finished requests.
 455 * @data: Unused pointer
 456 *
 457 * AP bus poll thread. The purpose of this thread is to poll for
 458 * finished requests in a loop if there is a "free" cpu - that is
 459 * a cpu that doesn't have anything better to do. The polling stops
 460 * as soon as there is another task or if all messages have been
 461 * delivered.
 462 */
 463static int ap_poll_thread(void *data)
 464{
 465        DECLARE_WAITQUEUE(wait, current);
 466
 467        set_user_nice(current, MAX_NICE);
 468        set_freezable();
 469        while (!kthread_should_stop()) {
 470                add_wait_queue(&ap_poll_wait, &wait);
 471                set_current_state(TASK_INTERRUPTIBLE);
 472                if (ap_suspend_flag || !ap_pending_requests()) {
 473                        schedule();
 474                        try_to_freeze();
 475                }
 476                set_current_state(TASK_RUNNING);
 477                remove_wait_queue(&ap_poll_wait, &wait);
 478                if (need_resched()) {
 479                        schedule();
 480                        try_to_freeze();
 481                        continue;
 482                }
 483                ap_tasklet_fn(0);
 484        }
 485
 486        return 0;
 487}
 488
 489static int ap_poll_thread_start(void)
 490{
 491        int rc;
 492
 493        if (ap_using_interrupts() || ap_poll_kthread)
 494                return 0;
 495        mutex_lock(&ap_poll_thread_mutex);
 496        ap_poll_kthread = kthread_run(ap_poll_thread, NULL, "appoll");
 497        rc = PTR_RET(ap_poll_kthread);
 498        if (rc)
 499                ap_poll_kthread = NULL;
 500        mutex_unlock(&ap_poll_thread_mutex);
 501        return rc;
 502}
 503
 504static void ap_poll_thread_stop(void)
 505{
 506        if (!ap_poll_kthread)
 507                return;
 508        mutex_lock(&ap_poll_thread_mutex);
 509        kthread_stop(ap_poll_kthread);
 510        ap_poll_kthread = NULL;
 511        mutex_unlock(&ap_poll_thread_mutex);
 512}
 513
 514#define is_card_dev(x) ((x)->parent == ap_root_device)
 515#define is_queue_dev(x) ((x)->parent != ap_root_device)
 516
 517/**
 518 * ap_bus_match()
 519 * @dev: Pointer to device
 520 * @drv: Pointer to device_driver
 521 *
 522 * AP bus driver registration/unregistration.
 523 */
 524static int ap_bus_match(struct device *dev, struct device_driver *drv)
 525{
 526        struct ap_driver *ap_drv = to_ap_drv(drv);
 527        struct ap_device_id *id;
 528
 529        /*
 530         * Compare device type of the device with the list of
 531         * supported types of the device_driver.
 532         */
 533        for (id = ap_drv->ids; id->match_flags; id++) {
 534                if (is_card_dev(dev) &&
 535                    id->match_flags & AP_DEVICE_ID_MATCH_CARD_TYPE &&
 536                    id->dev_type == to_ap_dev(dev)->device_type)
 537                        return 1;
 538                if (is_queue_dev(dev) &&
 539                    id->match_flags & AP_DEVICE_ID_MATCH_QUEUE_TYPE &&
 540                    id->dev_type == to_ap_dev(dev)->device_type)
 541                        return 1;
 542        }
 543        return 0;
 544}
 545
 546/**
 547 * ap_uevent(): Uevent function for AP devices.
 548 * @dev: Pointer to device
 549 * @env: Pointer to kobj_uevent_env
 550 *
 551 * It sets up a single environment variable DEV_TYPE which contains the
 552 * hardware device type.
 553 */
 554static int ap_uevent (struct device *dev, struct kobj_uevent_env *env)
 555{
 556        struct ap_device *ap_dev = to_ap_dev(dev);
 557        int retval = 0;
 558
 559        if (!ap_dev)
 560                return -ENODEV;
 561
 562        /* Set up DEV_TYPE environment variable. */
 563        retval = add_uevent_var(env, "DEV_TYPE=%04X", ap_dev->device_type);
 564        if (retval)
 565                return retval;
 566
 567        /* Add MODALIAS= */
 568        retval = add_uevent_var(env, "MODALIAS=ap:t%02X", ap_dev->device_type);
 569
 570        return retval;
 571}
 572
 573static int ap_dev_suspend(struct device *dev)
 574{
 575        struct ap_device *ap_dev = to_ap_dev(dev);
 576
 577        if (ap_dev->drv && ap_dev->drv->suspend)
 578                ap_dev->drv->suspend(ap_dev);
 579        return 0;
 580}
 581
 582static int ap_dev_resume(struct device *dev)
 583{
 584        struct ap_device *ap_dev = to_ap_dev(dev);
 585
 586        if (ap_dev->drv && ap_dev->drv->resume)
 587                ap_dev->drv->resume(ap_dev);
 588        return 0;
 589}
 590
 591static void ap_bus_suspend(void)
 592{
 593        AP_DBF(DBF_DEBUG, "ap_bus_suspend running\n");
 594
 595        ap_suspend_flag = 1;
 596        /*
 597         * Disable scanning for devices, thus we do not want to scan
 598         * for them after removing.
 599         */
 600        flush_work(&ap_scan_work);
 601        tasklet_disable(&ap_tasklet);
 602}
 603
 604static int __ap_card_devices_unregister(struct device *dev, void *dummy)
 605{
 606        if (is_card_dev(dev))
 607                device_unregister(dev);
 608        return 0;
 609}
 610
 611static int __ap_queue_devices_unregister(struct device *dev, void *dummy)
 612{
 613        if (is_queue_dev(dev))
 614                device_unregister(dev);
 615        return 0;
 616}
 617
 618static int __ap_queue_devices_with_id_unregister(struct device *dev, void *data)
 619{
 620        if (is_queue_dev(dev) &&
 621            AP_QID_CARD(to_ap_queue(dev)->qid) == (int)(long) data)
 622                device_unregister(dev);
 623        return 0;
 624}
 625
 626static void ap_bus_resume(void)
 627{
 628        int rc;
 629
 630        AP_DBF(DBF_DEBUG, "ap_bus_resume running\n");
 631
 632        /* remove all queue devices */
 633        bus_for_each_dev(&ap_bus_type, NULL, NULL,
 634                         __ap_queue_devices_unregister);
 635        /* remove all card devices */
 636        bus_for_each_dev(&ap_bus_type, NULL, NULL,
 637                         __ap_card_devices_unregister);
 638
 639        /* Reset thin interrupt setting */
 640        if (ap_interrupts_available() && !ap_using_interrupts()) {
 641                rc = register_adapter_interrupt(&ap_airq);
 642                ap_airq_flag = (rc == 0);
 643        }
 644        if (!ap_interrupts_available() && ap_using_interrupts()) {
 645                unregister_adapter_interrupt(&ap_airq);
 646                ap_airq_flag = 0;
 647        }
 648        /* Reset domain */
 649        if (!user_set_domain)
 650                ap_domain_index = -1;
 651        /* Get things going again */
 652        ap_suspend_flag = 0;
 653        if (ap_airq_flag)
 654                xchg(ap_airq.lsi_ptr, 0);
 655        tasklet_enable(&ap_tasklet);
 656        queue_work(system_long_wq, &ap_scan_work);
 657}
 658
 659static int ap_power_event(struct notifier_block *this, unsigned long event,
 660                          void *ptr)
 661{
 662        switch (event) {
 663        case PM_HIBERNATION_PREPARE:
 664        case PM_SUSPEND_PREPARE:
 665                ap_bus_suspend();
 666                break;
 667        case PM_POST_HIBERNATION:
 668        case PM_POST_SUSPEND:
 669                ap_bus_resume();
 670                break;
 671        default:
 672                break;
 673        }
 674        return NOTIFY_DONE;
 675}
 676static struct notifier_block ap_power_notifier = {
 677        .notifier_call = ap_power_event,
 678};
 679
 680static SIMPLE_DEV_PM_OPS(ap_bus_pm_ops, ap_dev_suspend, ap_dev_resume);
 681
 682static struct bus_type ap_bus_type = {
 683        .name = "ap",
 684        .match = &ap_bus_match,
 685        .uevent = &ap_uevent,
 686        .pm = &ap_bus_pm_ops,
 687};
 688
 689static int ap_device_probe(struct device *dev)
 690{
 691        struct ap_device *ap_dev = to_ap_dev(dev);
 692        struct ap_driver *ap_drv = to_ap_drv(dev->driver);
 693        int rc;
 694
 695        /* Add queue/card to list of active queues/cards */
 696        spin_lock_bh(&ap_list_lock);
 697        if (is_card_dev(dev))
 698                list_add(&to_ap_card(dev)->list, &ap_card_list);
 699        else
 700                list_add(&to_ap_queue(dev)->list,
 701                         &to_ap_queue(dev)->card->queues);
 702        spin_unlock_bh(&ap_list_lock);
 703
 704        ap_dev->drv = ap_drv;
 705        rc = ap_drv->probe ? ap_drv->probe(ap_dev) : -ENODEV;
 706
 707        if (rc) {
 708                spin_lock_bh(&ap_list_lock);
 709                if (is_card_dev(dev))
 710                        list_del_init(&to_ap_card(dev)->list);
 711                else
 712                        list_del_init(&to_ap_queue(dev)->list);
 713                spin_unlock_bh(&ap_list_lock);
 714                ap_dev->drv = NULL;
 715        }
 716
 717        return rc;
 718}
 719
 720static int ap_device_remove(struct device *dev)
 721{
 722        struct ap_device *ap_dev = to_ap_dev(dev);
 723        struct ap_driver *ap_drv = ap_dev->drv;
 724
 725        if (ap_drv->remove)
 726                ap_drv->remove(ap_dev);
 727
 728        /* Remove queue/card from list of active queues/cards */
 729        spin_lock_bh(&ap_list_lock);
 730        if (is_card_dev(dev))
 731                list_del_init(&to_ap_card(dev)->list);
 732        else
 733                list_del_init(&to_ap_queue(dev)->list);
 734        spin_unlock_bh(&ap_list_lock);
 735
 736        return 0;
 737}
 738
 739int ap_driver_register(struct ap_driver *ap_drv, struct module *owner,
 740                       char *name)
 741{
 742        struct device_driver *drv = &ap_drv->driver;
 743
 744        if (!initialised)
 745                return -ENODEV;
 746
 747        drv->bus = &ap_bus_type;
 748        drv->probe = ap_device_probe;
 749        drv->remove = ap_device_remove;
 750        drv->owner = owner;
 751        drv->name = name;
 752        return driver_register(drv);
 753}
 754EXPORT_SYMBOL(ap_driver_register);
 755
 756void ap_driver_unregister(struct ap_driver *ap_drv)
 757{
 758        driver_unregister(&ap_drv->driver);
 759}
 760EXPORT_SYMBOL(ap_driver_unregister);
 761
 762void ap_bus_force_rescan(void)
 763{
 764        if (ap_suspend_flag)
 765                return;
 766        /* processing a asynchronous bus rescan */
 767        del_timer(&ap_config_timer);
 768        queue_work(system_long_wq, &ap_scan_work);
 769        flush_work(&ap_scan_work);
 770}
 771EXPORT_SYMBOL(ap_bus_force_rescan);
 772
 773/*
 774 * AP bus attributes.
 775 */
 776static ssize_t ap_domain_show(struct bus_type *bus, char *buf)
 777{
 778        return snprintf(buf, PAGE_SIZE, "%d\n", ap_domain_index);
 779}
 780
 781static ssize_t ap_domain_store(struct bus_type *bus,
 782                               const char *buf, size_t count)
 783{
 784        int domain;
 785
 786        if (sscanf(buf, "%i\n", &domain) != 1 ||
 787            domain < 0 || domain > ap_max_domain_id)
 788                return -EINVAL;
 789        spin_lock_bh(&ap_domain_lock);
 790        ap_domain_index = domain;
 791        spin_unlock_bh(&ap_domain_lock);
 792
 793        AP_DBF(DBF_DEBUG, "stored new default domain=%d\n", domain);
 794
 795        return count;
 796}
 797
 798static BUS_ATTR(ap_domain, 0644, ap_domain_show, ap_domain_store);
 799
 800static ssize_t ap_control_domain_mask_show(struct bus_type *bus, char *buf)
 801{
 802        if (!ap_configuration)  /* QCI not supported */
 803                return snprintf(buf, PAGE_SIZE, "not supported\n");
 804
 805        return snprintf(buf, PAGE_SIZE,
 806                        "0x%08x%08x%08x%08x%08x%08x%08x%08x\n",
 807                        ap_configuration->adm[0], ap_configuration->adm[1],
 808                        ap_configuration->adm[2], ap_configuration->adm[3],
 809                        ap_configuration->adm[4], ap_configuration->adm[5],
 810                        ap_configuration->adm[6], ap_configuration->adm[7]);
 811}
 812
 813static BUS_ATTR(ap_control_domain_mask, 0444,
 814                ap_control_domain_mask_show, NULL);
 815
 816static ssize_t ap_usage_domain_mask_show(struct bus_type *bus, char *buf)
 817{
 818        if (!ap_configuration)  /* QCI not supported */
 819                return snprintf(buf, PAGE_SIZE, "not supported\n");
 820
 821        return snprintf(buf, PAGE_SIZE,
 822                        "0x%08x%08x%08x%08x%08x%08x%08x%08x\n",
 823                        ap_configuration->aqm[0], ap_configuration->aqm[1],
 824                        ap_configuration->aqm[2], ap_configuration->aqm[3],
 825                        ap_configuration->aqm[4], ap_configuration->aqm[5],
 826                        ap_configuration->aqm[6], ap_configuration->aqm[7]);
 827}
 828
 829static BUS_ATTR(ap_usage_domain_mask, 0444,
 830                ap_usage_domain_mask_show, NULL);
 831
 832static ssize_t ap_config_time_show(struct bus_type *bus, char *buf)
 833{
 834        return snprintf(buf, PAGE_SIZE, "%d\n", ap_config_time);
 835}
 836
 837static ssize_t ap_interrupts_show(struct bus_type *bus, char *buf)
 838{
 839        return snprintf(buf, PAGE_SIZE, "%d\n",
 840                        ap_using_interrupts() ? 1 : 0);
 841}
 842
 843static BUS_ATTR(ap_interrupts, 0444, ap_interrupts_show, NULL);
 844
 845static ssize_t ap_config_time_store(struct bus_type *bus,
 846                                    const char *buf, size_t count)
 847{
 848        int time;
 849
 850        if (sscanf(buf, "%d\n", &time) != 1 || time < 5 || time > 120)
 851                return -EINVAL;
 852        ap_config_time = time;
 853        mod_timer(&ap_config_timer, jiffies + ap_config_time * HZ);
 854        return count;
 855}
 856
 857static BUS_ATTR(config_time, 0644, ap_config_time_show, ap_config_time_store);
 858
 859static ssize_t ap_poll_thread_show(struct bus_type *bus, char *buf)
 860{
 861        return snprintf(buf, PAGE_SIZE, "%d\n", ap_poll_kthread ? 1 : 0);
 862}
 863
 864static ssize_t ap_poll_thread_store(struct bus_type *bus,
 865                                    const char *buf, size_t count)
 866{
 867        int flag, rc;
 868
 869        if (sscanf(buf, "%d\n", &flag) != 1)
 870                return -EINVAL;
 871        if (flag) {
 872                rc = ap_poll_thread_start();
 873                if (rc)
 874                        count = rc;
 875        } else
 876                ap_poll_thread_stop();
 877        return count;
 878}
 879
 880static BUS_ATTR(poll_thread, 0644, ap_poll_thread_show, ap_poll_thread_store);
 881
 882static ssize_t poll_timeout_show(struct bus_type *bus, char *buf)
 883{
 884        return snprintf(buf, PAGE_SIZE, "%llu\n", poll_timeout);
 885}
 886
 887static ssize_t poll_timeout_store(struct bus_type *bus, const char *buf,
 888                                  size_t count)
 889{
 890        unsigned long long time;
 891        ktime_t hr_time;
 892
 893        /* 120 seconds = maximum poll interval */
 894        if (sscanf(buf, "%llu\n", &time) != 1 || time < 1 ||
 895            time > 120000000000ULL)
 896                return -EINVAL;
 897        poll_timeout = time;
 898        hr_time = poll_timeout;
 899
 900        spin_lock_bh(&ap_poll_timer_lock);
 901        hrtimer_cancel(&ap_poll_timer);
 902        hrtimer_set_expires(&ap_poll_timer, hr_time);
 903        hrtimer_start_expires(&ap_poll_timer, HRTIMER_MODE_ABS);
 904        spin_unlock_bh(&ap_poll_timer_lock);
 905
 906        return count;
 907}
 908
 909static BUS_ATTR(poll_timeout, 0644, poll_timeout_show, poll_timeout_store);
 910
 911static ssize_t ap_max_domain_id_show(struct bus_type *bus, char *buf)
 912{
 913        int max_domain_id;
 914
 915        if (ap_configuration)
 916                max_domain_id = ap_max_domain_id ? : -1;
 917        else
 918                max_domain_id = 15;
 919        return snprintf(buf, PAGE_SIZE, "%d\n", max_domain_id);
 920}
 921
 922static BUS_ATTR(ap_max_domain_id, 0444, ap_max_domain_id_show, NULL);
 923
 924static struct bus_attribute *const ap_bus_attrs[] = {
 925        &bus_attr_ap_domain,
 926        &bus_attr_ap_control_domain_mask,
 927        &bus_attr_ap_usage_domain_mask,
 928        &bus_attr_config_time,
 929        &bus_attr_poll_thread,
 930        &bus_attr_ap_interrupts,
 931        &bus_attr_poll_timeout,
 932        &bus_attr_ap_max_domain_id,
 933        NULL,
 934};
 935
 936/**
 937 * ap_select_domain(): Select an AP domain.
 938 *
 939 * Pick one of the 16 AP domains.
 940 */
 941static int ap_select_domain(void)
 942{
 943        int count, max_count, best_domain;
 944        struct ap_queue_status status;
 945        int i, j;
 946
 947        /*
 948         * We want to use a single domain. Either the one specified with
 949         * the "domain=" parameter or the domain with the maximum number
 950         * of devices.
 951         */
 952        spin_lock_bh(&ap_domain_lock);
 953        if (ap_domain_index >= 0) {
 954                /* Domain has already been selected. */
 955                spin_unlock_bh(&ap_domain_lock);
 956                return 0;
 957        }
 958        best_domain = -1;
 959        max_count = 0;
 960        for (i = 0; i < AP_DOMAINS; i++) {
 961                if (!ap_test_config_domain(i))
 962                        continue;
 963                count = 0;
 964                for (j = 0; j < AP_DEVICES; j++) {
 965                        if (!ap_test_config_card_id(j))
 966                                continue;
 967                        status = ap_test_queue(AP_MKQID(j, i),
 968                                               ap_apft_available(),
 969                                               NULL);
 970                        if (status.response_code != AP_RESPONSE_NORMAL)
 971                                continue;
 972                        count++;
 973                }
 974                if (count > max_count) {
 975                        max_count = count;
 976                        best_domain = i;
 977                }
 978        }
 979        if (best_domain >= 0){
 980                ap_domain_index = best_domain;
 981                AP_DBF(DBF_DEBUG, "new ap_domain_index=%d\n", ap_domain_index);
 982                spin_unlock_bh(&ap_domain_lock);
 983                return 0;
 984        }
 985        spin_unlock_bh(&ap_domain_lock);
 986        return -ENODEV;
 987}
 988
 989/*
 990 * This function checks the type and returns either 0 for not
 991 * supported or the highest compatible type value (which may
 992 * include the input type value).
 993 */
 994static int ap_get_compatible_type(ap_qid_t qid, int rawtype, unsigned int func)
 995{
 996        int comp_type = 0;
 997
 998        /* < CEX2A is not supported */
 999        if (rawtype < AP_DEVICE_TYPE_CEX2A)
1000                return 0;
1001        /* up to CEX6 known and fully supported */
1002        if (rawtype <= AP_DEVICE_TYPE_CEX6)
1003                return rawtype;
1004        /*
1005         * unknown new type > CEX6, check for compatibility
1006         * to the highest known and supported type which is
1007         * currently CEX6 with the help of the QACT function.
1008         */
1009        if (ap_qact_available()) {
1010                struct ap_queue_status status;
1011                union ap_qact_ap_info apinfo = {0};
1012
1013                apinfo.mode = (func >> 26) & 0x07;
1014                apinfo.cat = AP_DEVICE_TYPE_CEX6;
1015                status = ap_qact(qid, 0, &apinfo);
1016                if (status.response_code == AP_RESPONSE_NORMAL
1017                    && apinfo.cat >= AP_DEVICE_TYPE_CEX2A
1018                    && apinfo.cat <= AP_DEVICE_TYPE_CEX6)
1019                        comp_type = apinfo.cat;
1020        }
1021        if (!comp_type)
1022                AP_DBF(DBF_WARN, "queue=%02x.%04x unable to map type %d\n",
1023                       AP_QID_CARD(qid), AP_QID_QUEUE(qid), rawtype);
1024        else if (comp_type != rawtype)
1025                AP_DBF(DBF_INFO, "queue=%02x.%04x map type %d to %d\n",
1026                       AP_QID_CARD(qid), AP_QID_QUEUE(qid), rawtype, comp_type);
1027        return comp_type;
1028}
1029
1030/*
1031 * helper function to be used with bus_find_dev
1032 * matches for the card device with the given id
1033 */
1034static int __match_card_device_with_id(struct device *dev, void *data)
1035{
1036        return is_card_dev(dev) && to_ap_card(dev)->id == (int)(long) data;
1037}
1038
1039/* helper function to be used with bus_find_dev
1040 * matches for the queue device with a given qid
1041 */
1042static int __match_queue_device_with_qid(struct device *dev, void *data)
1043{
1044        return is_queue_dev(dev) && to_ap_queue(dev)->qid == (int)(long) data;
1045}
1046
1047/**
1048 * ap_scan_bus(): Scan the AP bus for new devices
1049 * Runs periodically, workqueue timer (ap_config_time)
1050 */
1051static void ap_scan_bus(struct work_struct *unused)
1052{
1053        struct ap_queue *aq;
1054        struct ap_card *ac;
1055        struct device *dev;
1056        ap_qid_t qid;
1057        int comp_type, depth = 0, type = 0;
1058        unsigned int func = 0;
1059        int rc, id, dom, borked, domains, defdomdevs = 0;
1060
1061        AP_DBF(DBF_DEBUG, "ap_scan_bus running\n");
1062
1063        ap_query_configuration(ap_configuration);
1064        if (ap_select_domain() != 0)
1065                goto out;
1066
1067        for (id = 0; id < AP_DEVICES; id++) {
1068                /* check if device is registered */
1069                dev = bus_find_device(&ap_bus_type, NULL,
1070                                      (void *)(long) id,
1071                                      __match_card_device_with_id);
1072                ac = dev ? to_ap_card(dev) : NULL;
1073                if (!ap_test_config_card_id(id)) {
1074                        if (dev) {
1075                                /* Card device has been removed from
1076                                 * configuration, remove the belonging
1077                                 * queue devices.
1078                                 */
1079                                bus_for_each_dev(&ap_bus_type, NULL,
1080                                        (void *)(long) id,
1081                                        __ap_queue_devices_with_id_unregister);
1082                                /* now remove the card device */
1083                                device_unregister(dev);
1084                                put_device(dev);
1085                        }
1086                        continue;
1087                }
1088                /* According to the configuration there should be a card
1089                 * device, so check if there is at least one valid queue
1090                 * and maybe create queue devices and the card device.
1091                 */
1092                domains = 0;
1093                for (dom = 0; dom < AP_DOMAINS; dom++) {
1094                        qid = AP_MKQID(id, dom);
1095                        dev = bus_find_device(&ap_bus_type, NULL,
1096                                              (void *)(long) qid,
1097                                              __match_queue_device_with_qid);
1098                        aq = dev ? to_ap_queue(dev) : NULL;
1099                        if (!ap_test_config_domain(dom)) {
1100                                if (dev) {
1101                                        /* Queue device exists but has been
1102                                         * removed from configuration.
1103                                         */
1104                                        device_unregister(dev);
1105                                        put_device(dev);
1106                                }
1107                                continue;
1108                        }
1109                        rc = ap_query_queue(qid, &depth, &type, &func);
1110                        if (dev) {
1111                                spin_lock_bh(&aq->lock);
1112                                if (rc == -ENODEV ||
1113                                    /* adapter reconfiguration */
1114                                    (ac && ac->functions != func))
1115                                        aq->state = AP_STATE_BORKED;
1116                                borked = aq->state == AP_STATE_BORKED;
1117                                spin_unlock_bh(&aq->lock);
1118                                if (borked)     /* Remove broken device */
1119                                        device_unregister(dev);
1120                                put_device(dev);
1121                                if (!borked) {
1122                                        domains++;
1123                                        if (dom == ap_domain_index)
1124                                                defdomdevs++;
1125                                        continue;
1126                                }
1127                        }
1128                        if (rc)
1129                                continue;
1130                        /* a new queue device is needed, check out comp type */
1131                        comp_type = ap_get_compatible_type(qid, type, func);
1132                        if (!comp_type)
1133                                continue;
1134                        /* maybe a card device needs to be created first */
1135                        if (!ac) {
1136                                ac = ap_card_create(id, depth, type,
1137                                                    comp_type, func);
1138                                if (!ac)
1139                                        continue;
1140                                ac->ap_dev.device.bus = &ap_bus_type;
1141                                ac->ap_dev.device.parent = ap_root_device;
1142                                dev_set_name(&ac->ap_dev.device,
1143                                             "card%02x", id);
1144                                /* Register card with AP bus */
1145                                rc = device_register(&ac->ap_dev.device);
1146                                if (rc) {
1147                                        put_device(&ac->ap_dev.device);
1148                                        ac = NULL;
1149                                        break;
1150                                }
1151                                /* get it and thus adjust reference counter */
1152                                get_device(&ac->ap_dev.device);
1153                        }
1154                        /* now create the new queue device */
1155                        aq = ap_queue_create(qid, comp_type);
1156                        if (!aq)
1157                                continue;
1158                        aq->card = ac;
1159                        aq->ap_dev.device.bus = &ap_bus_type;
1160                        aq->ap_dev.device.parent = &ac->ap_dev.device;
1161                        dev_set_name(&aq->ap_dev.device,
1162                                     "%02x.%04x", id, dom);
1163                        /* Start with a device reset */
1164                        spin_lock_bh(&aq->lock);
1165                        ap_wait(ap_sm_event(aq, AP_EVENT_POLL));
1166                        spin_unlock_bh(&aq->lock);
1167                        /* Register device */
1168                        rc = device_register(&aq->ap_dev.device);
1169                        if (rc) {
1170                                put_device(&aq->ap_dev.device);
1171                                continue;
1172                        }
1173                        domains++;
1174                        if (dom == ap_domain_index)
1175                                defdomdevs++;
1176                } /* end domain loop */
1177                if (ac) {
1178                        /* remove card dev if there are no queue devices */
1179                        if (!domains)
1180                                device_unregister(&ac->ap_dev.device);
1181                        put_device(&ac->ap_dev.device);
1182                }
1183        } /* end device loop */
1184
1185        if (defdomdevs < 1)
1186                AP_DBF(DBF_INFO, "no queue device with default domain %d available\n",
1187                       ap_domain_index);
1188
1189out:
1190        mod_timer(&ap_config_timer, jiffies + ap_config_time * HZ);
1191}
1192
1193static void ap_config_timeout(struct timer_list *unused)
1194{
1195        if (ap_suspend_flag)
1196                return;
1197        queue_work(system_long_wq, &ap_scan_work);
1198}
1199
1200static void ap_reset_all(void)
1201{
1202        int i, j;
1203
1204        for (i = 0; i < AP_DOMAINS; i++) {
1205                if (!ap_test_config_domain(i))
1206                        continue;
1207                for (j = 0; j < AP_DEVICES; j++) {
1208                        if (!ap_test_config_card_id(j))
1209                                continue;
1210                        ap_rapq(AP_MKQID(j, i));
1211                }
1212        }
1213}
1214
1215static struct reset_call ap_reset_call = {
1216        .fn = ap_reset_all,
1217};
1218
1219int __init ap_debug_init(void)
1220{
1221        ap_dbf_info = debug_register("ap", 1, 1,
1222                                     DBF_MAX_SPRINTF_ARGS * sizeof(long));
1223        debug_register_view(ap_dbf_info, &debug_sprintf_view);
1224        debug_set_level(ap_dbf_info, DBF_ERR);
1225
1226        return 0;
1227}
1228
1229void ap_debug_exit(void)
1230{
1231        debug_unregister(ap_dbf_info);
1232}
1233
1234/**
1235 * ap_module_init(): The module initialization code.
1236 *
1237 * Initializes the module.
1238 */
1239int __init ap_module_init(void)
1240{
1241        int max_domain_id;
1242        int rc, i;
1243
1244        rc = ap_debug_init();
1245        if (rc)
1246                return rc;
1247
1248        if (ap_instructions_available() != 0) {
1249                pr_warn("The hardware system does not support AP instructions\n");
1250                return -ENODEV;
1251        }
1252
1253        /* Get AP configuration data if available */
1254        ap_init_configuration();
1255
1256        if (ap_configuration)
1257                max_domain_id =
1258                        ap_max_domain_id ? ap_max_domain_id : AP_DOMAINS - 1;
1259        else
1260                max_domain_id = 15;
1261        if (ap_domain_index < -1 || ap_domain_index > max_domain_id) {
1262                pr_warn("%d is not a valid cryptographic domain\n",
1263                        ap_domain_index);
1264                ap_domain_index = -1;
1265        }
1266        /* In resume callback we need to know if the user had set the domain.
1267         * If so, we can not just reset it.
1268         */
1269        if (ap_domain_index >= 0)
1270                user_set_domain = 1;
1271
1272        if (ap_interrupts_available()) {
1273                rc = register_adapter_interrupt(&ap_airq);
1274                ap_airq_flag = (rc == 0);
1275        }
1276
1277        register_reset_call(&ap_reset_call);
1278
1279        /* Create /sys/bus/ap. */
1280        rc = bus_register(&ap_bus_type);
1281        if (rc)
1282                goto out;
1283        for (i = 0; ap_bus_attrs[i]; i++) {
1284                rc = bus_create_file(&ap_bus_type, ap_bus_attrs[i]);
1285                if (rc)
1286                        goto out_bus;
1287        }
1288
1289        /* Create /sys/devices/ap. */
1290        ap_root_device = root_device_register("ap");
1291        rc = PTR_RET(ap_root_device);
1292        if (rc)
1293                goto out_bus;
1294
1295        /* Setup the AP bus rescan timer. */
1296        timer_setup(&ap_config_timer, ap_config_timeout, 0);
1297
1298        /*
1299         * Setup the high resultion poll timer.
1300         * If we are running under z/VM adjust polling to z/VM polling rate.
1301         */
1302        if (MACHINE_IS_VM)
1303                poll_timeout = 1500000;
1304        spin_lock_init(&ap_poll_timer_lock);
1305        hrtimer_init(&ap_poll_timer, CLOCK_MONOTONIC, HRTIMER_MODE_ABS);
1306        ap_poll_timer.function = ap_poll_timeout;
1307
1308        /* Start the low priority AP bus poll thread. */
1309        if (ap_thread_flag) {
1310                rc = ap_poll_thread_start();
1311                if (rc)
1312                        goto out_work;
1313        }
1314
1315        rc = register_pm_notifier(&ap_power_notifier);
1316        if (rc)
1317                goto out_pm;
1318
1319        queue_work(system_long_wq, &ap_scan_work);
1320        initialised = true;
1321
1322        return 0;
1323
1324out_pm:
1325        ap_poll_thread_stop();
1326out_work:
1327        hrtimer_cancel(&ap_poll_timer);
1328        root_device_unregister(ap_root_device);
1329out_bus:
1330        while (i--)
1331                bus_remove_file(&ap_bus_type, ap_bus_attrs[i]);
1332        bus_unregister(&ap_bus_type);
1333out:
1334        unregister_reset_call(&ap_reset_call);
1335        if (ap_using_interrupts())
1336                unregister_adapter_interrupt(&ap_airq);
1337        kfree(ap_configuration);
1338        return rc;
1339}
1340device_initcall(ap_module_init);
1341