linux/drivers/scsi/scsi_transport_sas.c
<<
>>
Prefs
   1/*
   2 * Copyright (C) 2005-2006 Dell Inc.
   3 *      Released under GPL v2.
   4 *
   5 * Serial Attached SCSI (SAS) transport class.
   6 *
   7 * The SAS transport class contains common code to deal with SAS HBAs,
   8 * an aproximated representation of SAS topologies in the driver model,
   9 * and various sysfs attributes to expose these topologies and management
  10 * interfaces to userspace.
  11 *
  12 * In addition to the basic SCSI core objects this transport class
  13 * introduces two additional intermediate objects:  The SAS PHY
  14 * as represented by struct sas_phy defines an "outgoing" PHY on
  15 * a SAS HBA or Expander, and the SAS remote PHY represented by
  16 * struct sas_rphy defines an "incoming" PHY on a SAS Expander or
  17 * end device.  Note that this is purely a software concept, the
  18 * underlying hardware for a PHY and a remote PHY is the exactly
  19 * the same.
  20 *
  21 * There is no concept of a SAS port in this code, users can see
  22 * what PHYs form a wide port based on the port_identifier attribute,
  23 * which is the same for all PHYs in a port.
  24 */
  25
  26#include <linux/init.h>
  27#include <linux/module.h>
  28#include <linux/jiffies.h>
  29#include <linux/err.h>
  30#include <linux/slab.h>
  31#include <linux/string.h>
  32#include <linux/blkdev.h>
  33#include <linux/bsg.h>
  34
  35#include <scsi/scsi.h>
  36#include <scsi/scsi_device.h>
  37#include <scsi/scsi_host.h>
  38#include <scsi/scsi_transport.h>
  39#include <scsi/scsi_transport_sas.h>
  40
  41#include "scsi_sas_internal.h"
  42struct sas_host_attrs {
  43        struct list_head rphy_list;
  44        struct mutex lock;
  45        struct request_queue *q;
  46        u32 next_target_id;
  47        u32 next_expander_id;
  48        int next_port_id;
  49};
  50#define to_sas_host_attrs(host) ((struct sas_host_attrs *)(host)->shost_data)
  51
  52
  53/*
  54 * Hack to allow attributes of the same name in different objects.
  55 */
  56#define SAS_DEVICE_ATTR(_prefix,_name,_mode,_show,_store) \
  57        struct device_attribute dev_attr_##_prefix##_##_name = \
  58        __ATTR(_name,_mode,_show,_store)
  59
  60
  61/*
  62 * Pretty printing helpers
  63 */
  64
  65#define sas_bitfield_name_match(title, table)                   \
  66static ssize_t                                                  \
  67get_sas_##title##_names(u32 table_key, char *buf)               \
  68{                                                               \
  69        char *prefix = "";                                      \
  70        ssize_t len = 0;                                        \
  71        int i;                                                  \
  72                                                                \
  73        for (i = 0; i < ARRAY_SIZE(table); i++) {               \
  74                if (table[i].value & table_key) {               \
  75                        len += sprintf(buf + len, "%s%s",       \
  76                                prefix, table[i].name);         \
  77                        prefix = ", ";                          \
  78                }                                               \
  79        }                                                       \
  80        len += sprintf(buf + len, "\n");                        \
  81        return len;                                             \
  82}
  83
  84#define sas_bitfield_name_set(title, table)                     \
  85static ssize_t                                                  \
  86set_sas_##title##_names(u32 *table_key, const char *buf)        \
  87{                                                               \
  88        ssize_t len = 0;                                        \
  89        int i;                                                  \
  90                                                                \
  91        for (i = 0; i < ARRAY_SIZE(table); i++) {               \
  92                len = strlen(table[i].name);                    \
  93                if (strncmp(buf, table[i].name, len) == 0 &&    \
  94                    (buf[len] == '\n' || buf[len] == '\0')) {   \
  95                        *table_key = table[i].value;            \
  96                        return 0;                               \
  97                }                                               \
  98        }                                                       \
  99        return -EINVAL;                                         \
 100}
 101
 102#define sas_bitfield_name_search(title, table)                  \
 103static ssize_t                                                  \
 104get_sas_##title##_names(u32 table_key, char *buf)               \
 105{                                                               \
 106        ssize_t len = 0;                                        \
 107        int i;                                                  \
 108                                                                \
 109        for (i = 0; i < ARRAY_SIZE(table); i++) {               \
 110                if (table[i].value == table_key) {              \
 111                        len += sprintf(buf + len, "%s",         \
 112                                table[i].name);                 \
 113                        break;                                  \
 114                }                                               \
 115        }                                                       \
 116        len += sprintf(buf + len, "\n");                        \
 117        return len;                                             \
 118}
 119
 120static struct {
 121        u32             value;
 122        char            *name;
 123} sas_device_type_names[] = {
 124        { SAS_PHY_UNUSED,               "unused" },
 125        { SAS_END_DEVICE,               "end device" },
 126        { SAS_EDGE_EXPANDER_DEVICE,     "edge expander" },
 127        { SAS_FANOUT_EXPANDER_DEVICE,   "fanout expander" },
 128};
 129sas_bitfield_name_search(device_type, sas_device_type_names)
 130
 131
 132static struct {
 133        u32             value;
 134        char            *name;
 135} sas_protocol_names[] = {
 136        { SAS_PROTOCOL_SATA,            "sata" },
 137        { SAS_PROTOCOL_SMP,             "smp" },
 138        { SAS_PROTOCOL_STP,             "stp" },
 139        { SAS_PROTOCOL_SSP,             "ssp" },
 140};
 141sas_bitfield_name_match(protocol, sas_protocol_names)
 142
 143static struct {
 144        u32             value;
 145        char            *name;
 146} sas_linkspeed_names[] = {
 147        { SAS_LINK_RATE_UNKNOWN,        "Unknown" },
 148        { SAS_PHY_DISABLED,             "Phy disabled" },
 149        { SAS_LINK_RATE_FAILED,         "Link Rate failed" },
 150        { SAS_SATA_SPINUP_HOLD,         "Spin-up hold" },
 151        { SAS_LINK_RATE_1_5_GBPS,       "1.5 Gbit" },
 152        { SAS_LINK_RATE_3_0_GBPS,       "3.0 Gbit" },
 153        { SAS_LINK_RATE_6_0_GBPS,       "6.0 Gbit" },
 154        { SAS_LINK_RATE_12_0_GBPS,      "12.0 Gbit" },
 155};
 156sas_bitfield_name_search(linkspeed, sas_linkspeed_names)
 157sas_bitfield_name_set(linkspeed, sas_linkspeed_names)
 158
 159static struct sas_end_device *sas_sdev_to_rdev(struct scsi_device *sdev)
 160{
 161        struct sas_rphy *rphy = target_to_rphy(sdev->sdev_target);
 162        struct sas_end_device *rdev;
 163
 164        BUG_ON(rphy->identify.device_type != SAS_END_DEVICE);
 165
 166        rdev = rphy_to_end_device(rphy);
 167        return rdev;
 168}
 169
 170static void sas_smp_request(struct request_queue *q, struct Scsi_Host *shost,
 171                            struct sas_rphy *rphy)
 172{
 173        struct request *req;
 174        int ret;
 175        int (*handler)(struct Scsi_Host *, struct sas_rphy *, struct request *);
 176
 177        while ((req = blk_fetch_request(q)) != NULL) {
 178                spin_unlock_irq(q->queue_lock);
 179
 180                handler = to_sas_internal(shost->transportt)->f->smp_handler;
 181                ret = handler(shost, rphy, req);
 182                req->errors = ret;
 183
 184                blk_end_request_all(req, ret);
 185
 186                spin_lock_irq(q->queue_lock);
 187        }
 188}
 189
 190static void sas_host_smp_request(struct request_queue *q)
 191{
 192        sas_smp_request(q, (struct Scsi_Host *)q->queuedata, NULL);
 193}
 194
 195static void sas_non_host_smp_request(struct request_queue *q)
 196{
 197        struct sas_rphy *rphy = q->queuedata;
 198        sas_smp_request(q, rphy_to_shost(rphy), rphy);
 199}
 200
 201static void sas_host_release(struct device *dev)
 202{
 203        struct Scsi_Host *shost = dev_to_shost(dev);
 204        struct sas_host_attrs *sas_host = to_sas_host_attrs(shost);
 205        struct request_queue *q = sas_host->q;
 206
 207        if (q)
 208                blk_cleanup_queue(q);
 209}
 210
 211static int sas_bsg_initialize(struct Scsi_Host *shost, struct sas_rphy *rphy)
 212{
 213        struct request_queue *q;
 214        int error;
 215        struct device *dev;
 216        char namebuf[20];
 217        const char *name;
 218        void (*release)(struct device *);
 219
 220        if (!to_sas_internal(shost->transportt)->f->smp_handler) {
 221                printk("%s can't handle SMP requests\n", shost->hostt->name);
 222                return 0;
 223        }
 224
 225        if (rphy) {
 226                q = blk_init_queue(sas_non_host_smp_request, NULL);
 227                dev = &rphy->dev;
 228                name = dev_name(dev);
 229                release = NULL;
 230        } else {
 231                q = blk_init_queue(sas_host_smp_request, NULL);
 232                dev = &shost->shost_gendev;
 233                snprintf(namebuf, sizeof(namebuf),
 234                         "sas_host%d", shost->host_no);
 235                name = namebuf;
 236                release = sas_host_release;
 237        }
 238        if (!q)
 239                return -ENOMEM;
 240
 241        error = bsg_register_queue(q, dev, name, release);
 242        if (error) {
 243                blk_cleanup_queue(q);
 244                return -ENOMEM;
 245        }
 246
 247        if (rphy)
 248                rphy->q = q;
 249        else
 250                to_sas_host_attrs(shost)->q = q;
 251
 252        if (rphy)
 253                q->queuedata = rphy;
 254        else
 255                q->queuedata = shost;
 256
 257        queue_flag_set_unlocked(QUEUE_FLAG_BIDI, q);
 258        return 0;
 259}
 260
 261static void sas_bsg_remove(struct Scsi_Host *shost, struct sas_rphy *rphy)
 262{
 263        struct request_queue *q;
 264
 265        if (rphy)
 266                q = rphy->q;
 267        else
 268                q = to_sas_host_attrs(shost)->q;
 269
 270        if (!q)
 271                return;
 272
 273        bsg_unregister_queue(q);
 274}
 275
 276/*
 277 * SAS host attributes
 278 */
 279
 280static int sas_host_setup(struct transport_container *tc, struct device *dev,
 281                          struct device *cdev)
 282{
 283        struct Scsi_Host *shost = dev_to_shost(dev);
 284        struct sas_host_attrs *sas_host = to_sas_host_attrs(shost);
 285
 286        INIT_LIST_HEAD(&sas_host->rphy_list);
 287        mutex_init(&sas_host->lock);
 288        sas_host->next_target_id = 0;
 289        sas_host->next_expander_id = 0;
 290        sas_host->next_port_id = 0;
 291
 292        if (sas_bsg_initialize(shost, NULL))
 293                dev_printk(KERN_ERR, dev, "fail to a bsg device %d\n",
 294                           shost->host_no);
 295
 296        return 0;
 297}
 298
 299static int sas_host_remove(struct transport_container *tc, struct device *dev,
 300                           struct device *cdev)
 301{
 302        struct Scsi_Host *shost = dev_to_shost(dev);
 303
 304        sas_bsg_remove(shost, NULL);
 305
 306        return 0;
 307}
 308
 309static DECLARE_TRANSPORT_CLASS(sas_host_class,
 310                "sas_host", sas_host_setup, sas_host_remove, NULL);
 311
 312static int sas_host_match(struct attribute_container *cont,
 313                            struct device *dev)
 314{
 315        struct Scsi_Host *shost;
 316        struct sas_internal *i;
 317
 318        if (!scsi_is_host_device(dev))
 319                return 0;
 320        shost = dev_to_shost(dev);
 321
 322        if (!shost->transportt)
 323                return 0;
 324        if (shost->transportt->host_attrs.ac.class !=
 325                        &sas_host_class.class)
 326                return 0;
 327
 328        i = to_sas_internal(shost->transportt);
 329        return &i->t.host_attrs.ac == cont;
 330}
 331
 332static int do_sas_phy_delete(struct device *dev, void *data)
 333{
 334        int pass = (int)(unsigned long)data;
 335
 336        if (pass == 0 && scsi_is_sas_port(dev))
 337                sas_port_delete(dev_to_sas_port(dev));
 338        else if (pass == 1 && scsi_is_sas_phy(dev))
 339                sas_phy_delete(dev_to_phy(dev));
 340        return 0;
 341}
 342
 343/**
 344 * sas_remove_children  -  tear down a devices SAS data structures
 345 * @dev:        device belonging to the sas object
 346 *
 347 * Removes all SAS PHYs and remote PHYs for a given object
 348 */
 349void sas_remove_children(struct device *dev)
 350{
 351        device_for_each_child(dev, (void *)0, do_sas_phy_delete);
 352        device_for_each_child(dev, (void *)1, do_sas_phy_delete);
 353}
 354EXPORT_SYMBOL(sas_remove_children);
 355
 356/**
 357 * sas_remove_host  -  tear down a Scsi_Host's SAS data structures
 358 * @shost:      Scsi Host that is torn down
 359 *
 360 * Removes all SAS PHYs and remote PHYs for a given Scsi_Host.
 361 * Must be called just before scsi_remove_host for SAS HBAs.
 362 */
 363void sas_remove_host(struct Scsi_Host *shost)
 364{
 365        sas_remove_children(&shost->shost_gendev);
 366}
 367EXPORT_SYMBOL(sas_remove_host);
 368
 369/**
 370 * sas_tlr_supported - checking TLR bit in vpd 0x90
 371 * @sdev: scsi device struct
 372 *
 373 * Check Transport Layer Retries are supported or not.
 374 * If vpd page 0x90 is present, TRL is supported.
 375 *
 376 */
 377unsigned int
 378sas_tlr_supported(struct scsi_device *sdev)
 379{
 380        const int vpd_len = 32;
 381        struct sas_end_device *rdev = sas_sdev_to_rdev(sdev);
 382        char *buffer = kzalloc(vpd_len, GFP_KERNEL);
 383        int ret = 0;
 384
 385        if (scsi_get_vpd_page(sdev, 0x90, buffer, vpd_len))
 386                goto out;
 387
 388        /*
 389         * Magic numbers: the VPD Protocol page (0x90)
 390         * has a 4 byte header and then one entry per device port
 391         * the TLR bit is at offset 8 on each port entry
 392         * if we take the first port, that's at total offset 12
 393         */
 394        ret = buffer[12] & 0x01;
 395
 396 out:
 397        kfree(buffer);
 398        rdev->tlr_supported = ret;
 399        return ret;
 400
 401}
 402EXPORT_SYMBOL_GPL(sas_tlr_supported);
 403
 404/**
 405 * sas_disable_tlr - setting TLR flags
 406 * @sdev: scsi device struct
 407 *
 408 * Seting tlr_enabled flag to 0.
 409 *
 410 */
 411void
 412sas_disable_tlr(struct scsi_device *sdev)
 413{
 414        struct sas_end_device *rdev = sas_sdev_to_rdev(sdev);
 415
 416        rdev->tlr_enabled = 0;
 417}
 418EXPORT_SYMBOL_GPL(sas_disable_tlr);
 419
 420/**
 421 * sas_enable_tlr - setting TLR flags
 422 * @sdev: scsi device struct
 423 *
 424 * Seting tlr_enabled flag 1.
 425 *
 426 */
 427void sas_enable_tlr(struct scsi_device *sdev)
 428{
 429        unsigned int tlr_supported = 0;
 430        tlr_supported  = sas_tlr_supported(sdev);
 431
 432        if (tlr_supported) {
 433                struct sas_end_device *rdev = sas_sdev_to_rdev(sdev);
 434
 435                rdev->tlr_enabled = 1;
 436        }
 437
 438        return;
 439}
 440EXPORT_SYMBOL_GPL(sas_enable_tlr);
 441
 442unsigned int sas_is_tlr_enabled(struct scsi_device *sdev)
 443{
 444        struct sas_end_device *rdev = sas_sdev_to_rdev(sdev);
 445        return rdev->tlr_enabled;
 446}
 447EXPORT_SYMBOL_GPL(sas_is_tlr_enabled);
 448
 449/*
 450 * SAS Phy attributes
 451 */
 452
 453#define sas_phy_show_simple(field, name, format_string, cast)           \
 454static ssize_t                                                          \
 455show_sas_phy_##name(struct device *dev,                                 \
 456                    struct device_attribute *attr, char *buf)           \
 457{                                                                       \
 458        struct sas_phy *phy = transport_class_to_phy(dev);              \
 459                                                                        \
 460        return snprintf(buf, 20, format_string, cast phy->field);       \
 461}
 462
 463#define sas_phy_simple_attr(field, name, format_string, type)           \
 464        sas_phy_show_simple(field, name, format_string, (type)) \
 465static DEVICE_ATTR(name, S_IRUGO, show_sas_phy_##name, NULL)
 466
 467#define sas_phy_show_protocol(field, name)                              \
 468static ssize_t                                                          \
 469show_sas_phy_##name(struct device *dev,                                 \
 470                    struct device_attribute *attr, char *buf)           \
 471{                                                                       \
 472        struct sas_phy *phy = transport_class_to_phy(dev);              \
 473                                                                        \
 474        if (!phy->field)                                                \
 475                return snprintf(buf, 20, "none\n");                     \
 476        return get_sas_protocol_names(phy->field, buf);         \
 477}
 478
 479#define sas_phy_protocol_attr(field, name)                              \
 480        sas_phy_show_protocol(field, name)                              \
 481static DEVICE_ATTR(name, S_IRUGO, show_sas_phy_##name, NULL)
 482
 483#define sas_phy_show_linkspeed(field)                                   \
 484static ssize_t                                                          \
 485show_sas_phy_##field(struct device *dev,                                \
 486                     struct device_attribute *attr, char *buf)          \
 487{                                                                       \
 488        struct sas_phy *phy = transport_class_to_phy(dev);              \
 489                                                                        \
 490        return get_sas_linkspeed_names(phy->field, buf);                \
 491}
 492
 493/* Fudge to tell if we're minimum or maximum */
 494#define sas_phy_store_linkspeed(field)                                  \
 495static ssize_t                                                          \
 496store_sas_phy_##field(struct device *dev,                               \
 497                      struct device_attribute *attr,                    \
 498                      const char *buf,  size_t count)                   \
 499{                                                                       \
 500        struct sas_phy *phy = transport_class_to_phy(dev);              \
 501        struct Scsi_Host *shost = dev_to_shost(phy->dev.parent);        \
 502        struct sas_internal *i = to_sas_internal(shost->transportt);    \
 503        u32 value;                                                      \
 504        struct sas_phy_linkrates rates = {0};                           \
 505        int error;                                                      \
 506                                                                        \
 507        error = set_sas_linkspeed_names(&value, buf);                   \
 508        if (error)                                                      \
 509                return error;                                           \
 510        rates.field = value;                                            \
 511        error = i->f->set_phy_speed(phy, &rates);                       \
 512                                                                        \
 513        return error ? error : count;                                   \
 514}
 515
 516#define sas_phy_linkspeed_rw_attr(field)                                \
 517        sas_phy_show_linkspeed(field)                                   \
 518        sas_phy_store_linkspeed(field)                                  \
 519static DEVICE_ATTR(field, S_IRUGO, show_sas_phy_##field,                \
 520        store_sas_phy_##field)
 521
 522#define sas_phy_linkspeed_attr(field)                                   \
 523        sas_phy_show_linkspeed(field)                                   \
 524static DEVICE_ATTR(field, S_IRUGO, show_sas_phy_##field, NULL)
 525
 526
 527#define sas_phy_show_linkerror(field)                                   \
 528static ssize_t                                                          \
 529show_sas_phy_##field(struct device *dev,                                \
 530                     struct device_attribute *attr, char *buf)          \
 531{                                                                       \
 532        struct sas_phy *phy = transport_class_to_phy(dev);              \
 533        struct Scsi_Host *shost = dev_to_shost(phy->dev.parent);        \
 534        struct sas_internal *i = to_sas_internal(shost->transportt);    \
 535        int error;                                                      \
 536                                                                        \
 537        error = i->f->get_linkerrors ? i->f->get_linkerrors(phy) : 0;   \
 538        if (error)                                                      \
 539                return error;                                           \
 540        return snprintf(buf, 20, "%u\n", phy->field);                   \
 541}
 542
 543#define sas_phy_linkerror_attr(field)                                   \
 544        sas_phy_show_linkerror(field)                                   \
 545static DEVICE_ATTR(field, S_IRUGO, show_sas_phy_##field, NULL)
 546
 547
 548static ssize_t
 549show_sas_device_type(struct device *dev,
 550                     struct device_attribute *attr, char *buf)
 551{
 552        struct sas_phy *phy = transport_class_to_phy(dev);
 553
 554        if (!phy->identify.device_type)
 555                return snprintf(buf, 20, "none\n");
 556        return get_sas_device_type_names(phy->identify.device_type, buf);
 557}
 558static DEVICE_ATTR(device_type, S_IRUGO, show_sas_device_type, NULL);
 559
 560static ssize_t do_sas_phy_enable(struct device *dev,
 561                size_t count, int enable)
 562{
 563        struct sas_phy *phy = transport_class_to_phy(dev);
 564        struct Scsi_Host *shost = dev_to_shost(phy->dev.parent);
 565        struct sas_internal *i = to_sas_internal(shost->transportt);
 566        int error;
 567
 568        error = i->f->phy_enable(phy, enable);
 569        if (error)
 570                return error;
 571        phy->enabled = enable;
 572        return count;
 573};
 574
 575static ssize_t
 576store_sas_phy_enable(struct device *dev, struct device_attribute *attr,
 577                     const char *buf, size_t count)
 578{
 579        if (count < 1)
 580                return -EINVAL;
 581
 582        switch (buf[0]) {
 583        case '0':
 584                do_sas_phy_enable(dev, count, 0);
 585                break;
 586        case '1':
 587                do_sas_phy_enable(dev, count, 1);
 588                break;
 589        default:
 590                return -EINVAL;
 591        }
 592
 593        return count;
 594}
 595
 596static ssize_t
 597show_sas_phy_enable(struct device *dev, struct device_attribute *attr,
 598                    char *buf)
 599{
 600        struct sas_phy *phy = transport_class_to_phy(dev);
 601
 602        return snprintf(buf, 20, "%d", phy->enabled);
 603}
 604
 605static DEVICE_ATTR(enable, S_IRUGO | S_IWUSR, show_sas_phy_enable,
 606                         store_sas_phy_enable);
 607
 608static ssize_t
 609do_sas_phy_reset(struct device *dev, size_t count, int hard_reset)
 610{
 611        struct sas_phy *phy = transport_class_to_phy(dev);
 612        struct Scsi_Host *shost = dev_to_shost(phy->dev.parent);
 613        struct sas_internal *i = to_sas_internal(shost->transportt);
 614        int error;
 615
 616        error = i->f->phy_reset(phy, hard_reset);
 617        if (error)
 618                return error;
 619        phy->enabled = 1;
 620        return count;
 621};
 622
 623static ssize_t
 624store_sas_link_reset(struct device *dev, struct device_attribute *attr,
 625                     const char *buf, size_t count)
 626{
 627        return do_sas_phy_reset(dev, count, 0);
 628}
 629static DEVICE_ATTR(link_reset, S_IWUSR, NULL, store_sas_link_reset);
 630
 631static ssize_t
 632store_sas_hard_reset(struct device *dev, struct device_attribute *attr,
 633                     const char *buf, size_t count)
 634{
 635        return do_sas_phy_reset(dev, count, 1);
 636}
 637static DEVICE_ATTR(hard_reset, S_IWUSR, NULL, store_sas_hard_reset);
 638
 639sas_phy_protocol_attr(identify.initiator_port_protocols,
 640                initiator_port_protocols);
 641sas_phy_protocol_attr(identify.target_port_protocols,
 642                target_port_protocols);
 643sas_phy_simple_attr(identify.sas_address, sas_address, "0x%016llx\n",
 644                unsigned long long);
 645sas_phy_simple_attr(identify.phy_identifier, phy_identifier, "%d\n", u8);
 646//sas_phy_simple_attr(port_identifier, port_identifier, "%d\n", int);
 647sas_phy_linkspeed_attr(negotiated_linkrate);
 648sas_phy_linkspeed_attr(minimum_linkrate_hw);
 649sas_phy_linkspeed_rw_attr(minimum_linkrate);
 650sas_phy_linkspeed_attr(maximum_linkrate_hw);
 651sas_phy_linkspeed_rw_attr(maximum_linkrate);
 652sas_phy_linkerror_attr(invalid_dword_count);
 653sas_phy_linkerror_attr(running_disparity_error_count);
 654sas_phy_linkerror_attr(loss_of_dword_sync_count);
 655sas_phy_linkerror_attr(phy_reset_problem_count);
 656
 657static int sas_phy_setup(struct transport_container *tc, struct device *dev,
 658                         struct device *cdev)
 659{
 660        struct sas_phy *phy = dev_to_phy(dev);
 661        struct Scsi_Host *shost = dev_to_shost(phy->dev.parent);
 662        struct sas_internal *i = to_sas_internal(shost->transportt);
 663
 664        if (i->f->phy_setup)
 665                i->f->phy_setup(phy);
 666
 667        return 0;
 668}
 669
 670static DECLARE_TRANSPORT_CLASS(sas_phy_class,
 671                "sas_phy", sas_phy_setup, NULL, NULL);
 672
 673static int sas_phy_match(struct attribute_container *cont, struct device *dev)
 674{
 675        struct Scsi_Host *shost;
 676        struct sas_internal *i;
 677
 678        if (!scsi_is_sas_phy(dev))
 679                return 0;
 680        shost = dev_to_shost(dev->parent);
 681
 682        if (!shost->transportt)
 683                return 0;
 684        if (shost->transportt->host_attrs.ac.class !=
 685                        &sas_host_class.class)
 686                return 0;
 687
 688        i = to_sas_internal(shost->transportt);
 689        return &i->phy_attr_cont.ac == cont;
 690}
 691
 692static void sas_phy_release(struct device *dev)
 693{
 694        struct sas_phy *phy = dev_to_phy(dev);
 695        struct Scsi_Host *shost = dev_to_shost(phy->dev.parent);
 696        struct sas_internal *i = to_sas_internal(shost->transportt);
 697
 698        if (i->f->phy_release)
 699                i->f->phy_release(phy);
 700        put_device(dev->parent);
 701        kfree(phy);
 702}
 703
 704/**
 705 * sas_phy_alloc  -  allocates and initialize a SAS PHY structure
 706 * @parent:     Parent device
 707 * @number:     Phy index
 708 *
 709 * Allocates an SAS PHY structure.  It will be added in the device tree
 710 * below the device specified by @parent, which has to be either a Scsi_Host
 711 * or sas_rphy.
 712 *
 713 * Returns:
 714 *      SAS PHY allocated or %NULL if the allocation failed.
 715 */
 716struct sas_phy *sas_phy_alloc(struct device *parent, int number)
 717{
 718        struct Scsi_Host *shost = dev_to_shost(parent);
 719        struct sas_phy *phy;
 720
 721        phy = kzalloc(sizeof(*phy), GFP_KERNEL);
 722        if (!phy)
 723                return NULL;
 724
 725        phy->number = number;
 726        phy->enabled = 1;
 727
 728        device_initialize(&phy->dev);
 729        phy->dev.parent = get_device(parent);
 730        phy->dev.release = sas_phy_release;
 731        INIT_LIST_HEAD(&phy->port_siblings);
 732        if (scsi_is_sas_expander_device(parent)) {
 733                struct sas_rphy *rphy = dev_to_rphy(parent);
 734                dev_set_name(&phy->dev, "phy-%d:%d:%d", shost->host_no,
 735                        rphy->scsi_target_id, number);
 736        } else
 737                dev_set_name(&phy->dev, "phy-%d:%d", shost->host_no, number);
 738
 739        transport_setup_device(&phy->dev);
 740
 741        return phy;
 742}
 743EXPORT_SYMBOL(sas_phy_alloc);
 744
 745/**
 746 * sas_phy_add  -  add a SAS PHY to the device hierarchy
 747 * @phy:        The PHY to be added
 748 *
 749 * Publishes a SAS PHY to the rest of the system.
 750 */
 751int sas_phy_add(struct sas_phy *phy)
 752{
 753        int error;
 754
 755        error = device_add(&phy->dev);
 756        if (!error) {
 757                transport_add_device(&phy->dev);
 758                transport_configure_device(&phy->dev);
 759        }
 760
 761        return error;
 762}
 763EXPORT_SYMBOL(sas_phy_add);
 764
 765/**
 766 * sas_phy_free  -  free a SAS PHY
 767 * @phy:        SAS PHY to free
 768 *
 769 * Frees the specified SAS PHY.
 770 *
 771 * Note:
 772 *   This function must only be called on a PHY that has not
 773 *   successfully been added using sas_phy_add().
 774 */
 775void sas_phy_free(struct sas_phy *phy)
 776{
 777        transport_destroy_device(&phy->dev);
 778        put_device(&phy->dev);
 779}
 780EXPORT_SYMBOL(sas_phy_free);
 781
 782/**
 783 * sas_phy_delete  -  remove SAS PHY
 784 * @phy:        SAS PHY to remove
 785 *
 786 * Removes the specified SAS PHY.  If the SAS PHY has an
 787 * associated remote PHY it is removed before.
 788 */
 789void
 790sas_phy_delete(struct sas_phy *phy)
 791{
 792        struct device *dev = &phy->dev;
 793
 794        /* this happens if the phy is still part of a port when deleted */
 795        BUG_ON(!list_empty(&phy->port_siblings));
 796
 797        transport_remove_device(dev);
 798        device_del(dev);
 799        transport_destroy_device(dev);
 800        put_device(dev);
 801}
 802EXPORT_SYMBOL(sas_phy_delete);
 803
 804/**
 805 * scsi_is_sas_phy  -  check if a struct device represents a SAS PHY
 806 * @dev:        device to check
 807 *
 808 * Returns:
 809 *      %1 if the device represents a SAS PHY, %0 else
 810 */
 811int scsi_is_sas_phy(const struct device *dev)
 812{
 813        return dev->release == sas_phy_release;
 814}
 815EXPORT_SYMBOL(scsi_is_sas_phy);
 816
 817/*
 818 * SAS Port attributes
 819 */
 820#define sas_port_show_simple(field, name, format_string, cast)          \
 821static ssize_t                                                          \
 822show_sas_port_##name(struct device *dev,                                \
 823                     struct device_attribute *attr, char *buf)          \
 824{                                                                       \
 825        struct sas_port *port = transport_class_to_sas_port(dev);       \
 826                                                                        \
 827        return snprintf(buf, 20, format_string, cast port->field);      \
 828}
 829
 830#define sas_port_simple_attr(field, name, format_string, type)          \
 831        sas_port_show_simple(field, name, format_string, (type))        \
 832static DEVICE_ATTR(name, S_IRUGO, show_sas_port_##name, NULL)
 833
 834sas_port_simple_attr(num_phys, num_phys, "%d\n", int);
 835
 836static DECLARE_TRANSPORT_CLASS(sas_port_class,
 837                               "sas_port", NULL, NULL, NULL);
 838
 839static int sas_port_match(struct attribute_container *cont, struct device *dev)
 840{
 841        struct Scsi_Host *shost;
 842        struct sas_internal *i;
 843
 844        if (!scsi_is_sas_port(dev))
 845                return 0;
 846        shost = dev_to_shost(dev->parent);
 847
 848        if (!shost->transportt)
 849                return 0;
 850        if (shost->transportt->host_attrs.ac.class !=
 851                        &sas_host_class.class)
 852                return 0;
 853
 854        i = to_sas_internal(shost->transportt);
 855        return &i->port_attr_cont.ac == cont;
 856}
 857
 858
 859static void sas_port_release(struct device *dev)
 860{
 861        struct sas_port *port = dev_to_sas_port(dev);
 862
 863        BUG_ON(!list_empty(&port->phy_list));
 864
 865        put_device(dev->parent);
 866        kfree(port);
 867}
 868
 869static void sas_port_create_link(struct sas_port *port,
 870                                 struct sas_phy *phy)
 871{
 872        int res;
 873
 874        res = sysfs_create_link(&port->dev.kobj, &phy->dev.kobj,
 875                                dev_name(&phy->dev));
 876        if (res)
 877                goto err;
 878        res = sysfs_create_link(&phy->dev.kobj, &port->dev.kobj, "port");
 879        if (res)
 880                goto err;
 881        return;
 882err:
 883        printk(KERN_ERR "%s: Cannot create port links, err=%d\n",
 884               __func__, res);
 885}
 886
 887static void sas_port_delete_link(struct sas_port *port,
 888                                 struct sas_phy *phy)
 889{
 890        sysfs_remove_link(&port->dev.kobj, dev_name(&phy->dev));
 891        sysfs_remove_link(&phy->dev.kobj, "port");
 892}
 893
 894/** sas_port_alloc - allocate and initialize a SAS port structure
 895 *
 896 * @parent:     parent device
 897 * @port_id:    port number
 898 *
 899 * Allocates a SAS port structure.  It will be added to the device tree
 900 * below the device specified by @parent which must be either a Scsi_Host
 901 * or a sas_expander_device.
 902 *
 903 * Returns %NULL on error
 904 */
 905struct sas_port *sas_port_alloc(struct device *parent, int port_id)
 906{
 907        struct Scsi_Host *shost = dev_to_shost(parent);
 908        struct sas_port *port;
 909
 910        port = kzalloc(sizeof(*port), GFP_KERNEL);
 911        if (!port)
 912                return NULL;
 913
 914        port->port_identifier = port_id;
 915
 916        device_initialize(&port->dev);
 917
 918        port->dev.parent = get_device(parent);
 919        port->dev.release = sas_port_release;
 920
 921        mutex_init(&port->phy_list_mutex);
 922        INIT_LIST_HEAD(&port->phy_list);
 923
 924        if (scsi_is_sas_expander_device(parent)) {
 925                struct sas_rphy *rphy = dev_to_rphy(parent);
 926                dev_set_name(&port->dev, "port-%d:%d:%d", shost->host_no,
 927                             rphy->scsi_target_id, port->port_identifier);
 928        } else
 929                dev_set_name(&port->dev, "port-%d:%d", shost->host_no,
 930                             port->port_identifier);
 931
 932        transport_setup_device(&port->dev);
 933
 934        return port;
 935}
 936EXPORT_SYMBOL(sas_port_alloc);
 937
 938/** sas_port_alloc_num - allocate and initialize a SAS port structure
 939 *
 940 * @parent:     parent device
 941 *
 942 * Allocates a SAS port structure and a number to go with it.  This
 943 * interface is really for adapters where the port number has no
 944 * meansing, so the sas class should manage them.  It will be added to
 945 * the device tree below the device specified by @parent which must be
 946 * either a Scsi_Host or a sas_expander_device.
 947 *
 948 * Returns %NULL on error
 949 */
 950struct sas_port *sas_port_alloc_num(struct device *parent)
 951{
 952        int index;
 953        struct Scsi_Host *shost = dev_to_shost(parent);
 954        struct sas_host_attrs *sas_host = to_sas_host_attrs(shost);
 955
 956        /* FIXME: use idr for this eventually */
 957        mutex_lock(&sas_host->lock);
 958        if (scsi_is_sas_expander_device(parent)) {
 959                struct sas_rphy *rphy = dev_to_rphy(parent);
 960                struct sas_expander_device *exp = rphy_to_expander_device(rphy);
 961
 962                index = exp->next_port_id++;
 963        } else
 964                index = sas_host->next_port_id++;
 965        mutex_unlock(&sas_host->lock);
f">dev_to_rphy(lock);
 867}
 936EXPORT_SYMBOL(sasass="sref">lock);
 909
 940 *
 901 * Al  It will be ahierarchy" lass="comment"> *
 942 *
 943 *
 944 *ystem" lass="comment"> *
 945
 839static int sas_port_alloc_num(struct sas_port *parent)
parent)) {
 839static turns index;
 909
 956        
 921        BUG_ON(!list_empty(&port->phy_list));
 862
 883    turns rphy =e" clth=sas_port_alloc> =e" clthnsport_setup_device(&port->dev);
 864
 958        turns parent)
 926index;
 937
 918    "drivers/slthode=transport_setup_device" claslthode=transport_setup_device(&port->dev);
 919    "drivers/sconfigureode=transport_setup_device" clasconfigureode=transport_setup_device(&port->dev);
 920
 88             return 0;
 892}
 936EXPORT_SYMBOL(saslass="sref">dev);
 864
 895 *
 896OL"  class="comment"> *
 897OL" l  Ifded to the device tree
 898 *
 899 * below thnt">OL" sas_expander_device.
10_te" name="L898"> 898 8doid="nspo3c/51/0bee054244f8f9e25d7fc8c20d318b05964f_3/10_tr>der_device.
10_ne" name="L901"> 901
10_ne" name="L942"> 942OL" l hatere thee either a Scsi_Host
10_ne" name="L943"> 943
10_ne" name="L904"> 904 */
10_ne" n87"> 887static void sas_port *parent)
10_ne" name="L906"> 906{
10_ne" name="L957"> 957    "drivers/sdeporoyode=transport_setup_device" clasdeporoyode=transport_setup_device(&port->dev);
10_ne" name="L918"> 918        port->dev);
10_9e" name="L892"> 892}
10_se" name="L936"> 936EXPORT_SYMBOL(dev);
10_ne" name="L961"> 961
10_ne" name="L942"> 942 *
10_ne" name="L943"> 943OL"  class="comment"> *
10_ne" name="L944"> 944OL" l  Iclass= class="comment"> *
10_ne" name="L895"> 895 *
10_ne" name="L896"> 896 * below thnt">OL" s  Ifnt"> nt">OL" lre tan class="comment"> *
10_ne" name="L897"> 897ociat th" cl, unsrefclassIfdom for adapte twellsas_expander_device.
10_ne" name="L898"> 898 */
10_9e" n87"> 887static void sas_port *parent)
10_se" name="L906"> 906{
10_ne" name="L861"> 861        struct device *kobj, &port->dev);
10_2e" name="L861"> 861        strsct sas_phy *sas_phydev);
10_ne" name="L933"> 933
10_ne" name="L924"> 924        amp;port-/a>(parent)) {
10_ne" name="L925"> 925<        strsct vice"ss="sra href="+code=koid vice"ss="srref">f">dev_to_rphyport-/a>(dev);
10_ne" name="L926"> 926            /mp;port-/a>(rphyNULL;
10_ne" name="L95ame="L892"> 892}
10_ne" name="L868"> 868
10_ne" name="L919"> 919        mutex_lock(&port->phy_list_mutex);
10_se" name="L919"> 919    " clafor_each_a>f">dev_to_rphy *sas_phykobj, &port->host_no,
10_1e" name="L926"> 926<<<<<<<<<<<<<<<<<kobj, &_siblingde=to_sas_host_aamp;_siblingd" cla"sref">parent)) {
10_ne" name="L962"> 962            oid sas_poef">kobj, &scsi_target_id *);
10_3e" name="L962"> 962            " class=a href="+code=mutex_" class=a hres="sref">mutex_lock(&phy-amp;_siblingde=to_sas_host_aamp;_siblingd" claphy_list_mutex);
10_4e" name="L95ame="L892"> 892}
10_ne" name="L965"> 965        mutex_unlock(&port->phy_list_mutex);
10_ne" name="L886"> 886
10_ne" name="L954"> 924        amp;port-is_backde=sas_port_delete_is_backde=s" cla"sref">parent)) {
10_ne" name="L888"> 888(struct device * = port->dev.);
10_ne" name="L909"> 909
10_se" name="L962"> 962            o   sysfs_remove_link(&port->dev.kobj, dev.phy_list));
10_1e" name="L926"> 926<924        amp;port-is_backde=sas_port_delete_is_backde=s" clpor            return 0;
10_2e" name="L95ame="L892"> 892}
10_ne" name="L933"> 933
10_ne" name="L914"> 914    "drivers/sclass="de=transport_setup_device" clasclass="de=traass="ass="sref">dev<>dev);
10_ne" name="L965"> 965    > =e" css= href="+code=device" css=ass="ass="sref">dev<>dev);
10_ne" name="L916"> 916    "drivers/sdeporoyode=transport_setup_device" clasdeporoyode=transporass="sref">dev<>dev);
10_ne" name="L957"> 957        dev<>dev);
10_8e" name="L892"> 892}
10_9e" name="L936"> 936EXPORT_SYMBOL(dev);
10_se" name="L933"> 933
10_ne" name="L901"> 901 *
10_ne" name="L942"> 942a * A class="comment"> *
10_ne" name="L943"> 943 *
10_ne" name="L944"> 944 *
10_ne" name="L945"> 94510_ne" name="L896"> 896t will be arepresa>Prs/, ommen0"> 96as_expander_device.
10_ne" name="L897"> 897 */
10_8e" n39"> 839static iref= class=adapa href="+code=koref= class=adapsref"const61"> 861        struct device *parent)
10_ne" name="L889"> 889{
10_se" name="L95code=index" class="s52a> *port-/a>.release = sas_port_release;
10_1e" name="L892"> 892}
10_2e" name="L936"> 936EXPORT_SYMBOLdev);
10_ne" name="L933"> 933
10_ne" name="L894"> 894 */
10_ne" name="L945"> 945adaptmeport_id:    port number
 896 *
10_ne" name="L897"> 897 */
10_8e" n1"> 861        strsct sas_physas_port_alloc_num(struct sas_port *parent)
10_ne" name="L889"> 889{
10_se" name="L861"> 861        strsct sas_phy *dev);
10_ne" name="L961"> 961
10_ne" name="L932"> 932        mutex_lock(&port->phy_list_mutex);
10_3e" name="L964"> 924        a>(!list_empty(&port->10_ne" name="L964"> 964            a> *rphyNULL;
10_ne" name="L96> 96"sref">parent)) {
10_ne" name="L926"> 926<1"> 861        strmpty"heah=sas_port_allocmpty"heahlass="sref">sas_phy = port->devNULL;
10_ne" name="L937"> 937
10_ne" name="L888"> 888            a> *rphyEXPORT_SYMBOL<.sas_physas_phy *port);
10_ne" name="L929"> 929            > = mutex_lock(&phy->dev);
10_se" name="L95ame="L892"> 892}
10_ne" name="L921"> 921        mutex_unlock(&port->phy_list_mutex);
10_ne" name="L862"> 862
10_3e" name="L964"> 934        retu> *dev);
10_4e" name="L892"> 892}
10_5e" name="L936"> 936EXPORT_SYMBOL(sas>phy_list_mutex);
10_ne" name="L886"> 886
10_ne" name="L897"> 897 */
10_ne" name="L948"> 948 *
10_ne" name="L899"> 899 *
10_se" name="L899"> 899 *
10_ne" name="L941"> 941 *
10_ne" name="L942"> 942adaptXMEXum - aly creat t, iptXME clas (re theh" cl).  cla class="comment"> *
10_ne" name="L943"> 94310_ne" name="L944"> 944
10_ne" name="L945"> 945 * At, butmfor onlyhobjectl hatec="L@parent which must be
10_ne" name="L896"> 896
10_ne" name="L897"> 897t wy'reL8onnectem.   mnythingsas_expander_device.
10_ne" name="L898"> 898 */
10_9e" n87"> 887static void sas_port_alloc_num(struct sas_port * 861        strsct sas_phy *);
110se" name="L906"> 906{
110ne" name="L921"> 921        mutex_lock(&port->phy_list_mutex);
110ne" name="L952"> 924        unsrkel *BUG_ON(!list_empty(&phy-amp;_siblingde=to_sas_host_aamp;_siblingd" clas="sref">parent)) {
1103e" name="L962"> 962 956         */
110ne" name="L964"> 964<1"> 861        strsct sas_phydev);
110ne" name="L955"> 955
110ne" name="L926"> 926            " clafor_each_a>EXPORT_SYMBOLkobj, &port->port 955
11_ne" name="L9555555555555555552"> 924        tm= release *);
110ne" name="L888"> 888<<<<<<<<<<<<<<<<dev);
110ne" name="L929"> 929 956         */
111se" name="L899"> 899* efnahdif"erentEadaptn class="comment"> */
1111e" name="L926"> 926<2"> 924        unsrkel *        tm= release *parent)) {
111ne" name="L962"> 962<6"> 926            nameprintef="+code=mutex_nameprintes="sr924        KERN_ERRf="+code=mutex_KERN_ERRy" cass="sref">kobj, &port-> 956  1">ing">"* efnanoass="port\n"class="="sref">host_no,
1113e" name="L962"> 962 962<6"> 926            namemutex_lock(&phy->phy_list_mutex);
111ne" name="L964"> 964<6"> 926            BUG;phy_list_mutex);
111ne" name="L925"> 925 892}
111ne" name="L92}6> 96"sref">parent)) {
111ne" name="L9555555555887static void         a> *release *);
111ne" name="L888"> 888            mpty"sdd=tailf="+code=list_empty"sdd=tails="sref">list_empty(&phy-amp;_siblingde=to_sas_host_aamp;_siblingd" class="sref">kobj, &port->);
111ne" name="L929"> 929            amp;port-numy" cde=to_sas_host_anumy" cd" clf">next_port_id++;
112se" name="L95ame="L892"> 892}
112ne" name="L921"> 921        mutex_unlock(&port->phy_list_mutex);
112ne" name="L892"> 892}
112ne" name="L936"> 936EXPORT_SYMBOL(sas>phy_list_mutex);
112ne" name="L864"> 864
112ne" name="L895"> 895 *
112ne" name="L896"> 896 *
112ne" name="L897"> 897 *
112ne" name="L948"> 948 *
112ne" name="L899"> 899 *
113se" name="L899"> 899/* Fea>ing downeers/seSgains  Ited by be class="comment"> *
113ne" name="L901"> 901adaptorewide> * A be>/*gecall="c _num" class="srsas_expander_device.
113ne" name="L942"> 942 */
11_3e" n87"> 887static void sas_port * 861        strsct sas_phy *);
11_4e" nsref">parent)) {
11_ne" name="L965"> 965        mutex_lock(&port->phy_list_mutex);
113ne" name="L916"> 916    ease" class="sr=de=sas_port_delete_link" class="sref">sas_poef">kobj, &scsi_target_id *);
113ne" name="L957"> 957    " class=a href="+code=mutex_" class=a hres="sref">mutex_lock(&phy-amp;_siblingde=to_sas_host_aamp;_siblingd" claphy_list_mutex);
113ne" name="L918"> 918     mp;port-numy" cde=to_sas_host_anumy" cd" cl--phy_list_mutex);
113ne" name="L919"> 919        mutex_unlock(&port->phy_list_mutex);
11_se" name="L892"> 892}
11_1e" name="L936"> 936EXPORT_SYMBOL(114ne" name="L862"> 862
1143e" n87"> 887static void sas_port_alloc_num(struct sas_port *);
1144e" nsref">parent)) {
11_ne" name="L9639"> 839static rede=to_sas_host_aredy" cass="sref">dev);
11_ne" name="L91port_alloc_num(struct device * = port->dev.port-&a>.port-&a>.dev);
114ne" name="L937"> 937
114ne" name="L873"> 924        amp;port-is_backde=sas_port_delete_is_backde=s" claame="L937"> 937
114ne" name="L929"> 929<4"> 93ass="sref">dev);
115se" name="L919"> 919    amp;port-is_backde=sas_port_delete_is_backde=s" clpor1ass="sref">dev);
115ne" name="L921"> 921    rede=to_sas_host_aredy" cport_identifiermutex_unlock(&port->dev.mutex_unlock(&aa>.port-/a>.dev);
115ne" name="L962"> 962<6"> 926 921    a>, dev.phy_list));
1153e" name="L964"> 924        rede=to_sas_host_aredy" caame="L937"> 937
115ne" name="L964"> 964dev);
115ne" name="L964"> 93ass="sref">dev);
11_ne" naex" class="s52ture=to_sas_host_aturclas:ss="sref">dev);
115ne" name="L957"> 957     rintef="+code=mutex_printes="sr924        KERN_ERRf="+code=mutex_KERN_ERRy" c 956  1">ing">"ommens: Cannot creat > * A backde=s, tur=ommend\n"class="="sref">host_no,
115ne" name="L888"> 888924        ____" __f="+code=mutex_____" __" cl>scsi_target_iddev);
115ne" name="L909"> 909
116se" name="L892"> 892}
1161e" name="L936"> 936EXPORT_SYMBOL(sasaass="sref">dev);
116ne" name="L862"> 862
116ne" name="L943"> 943 *
11_ne" name="L894"> 894ntmotwiPHY at">ibutessas_expander_device.
11_ne" name="L945"> 945 */
 886
11_ne" n#def id<        strsct vice"show_simplhref="+code=dev_sct vice"show_simplhsref">EXPORT_SYMBOLscsi_target_idscsi_target_iding"sas_port_allocforma/sc">ingass=>scsi_target_id 888\ame="L886"> 886
11_8e" n1"atic<        strssize_href="+code=sas_psize_he" name="L962"> 962<6"> 926 886
1169e" name="L936"> 936show_sct vice"ref="+code=sas_phow_sct vice"e" n##L869_port_alloc_num(struct device * 886
117se" name="L962"> 962<<<<<(struct ibute href="+code=device" _at">ibuteclass="sref">device href="+code=deat">v" c,echars="sref">devicesasaL888"> 888\ame="L886"> 886
11_ne" n{ame="L962"> 962<6"> 926 886
1172e" name="L861"> 861        strsct /a>(device(rphy((sref">EXPORT_SYMBOL<> 886
1173e" name="L962"> 962 962<6"> 926<2222222222222222222222222222222222222\ame="L886"> 886
11_ne" name="L964"> 934        retsnprintfnsport_setup_desnprintfsref">EXPORT_SYMBOLsas, 20>scsi_target_iding"sas_port_allocforma/sc">ingass=>scsi_target_idport-fielh=sas_port_allocfielh" clla222222\ame="L886"> 886
11_ne" name="L892"> 892}
117ne" name="L886"> 886
117ne" n#def id<        strsct vice"simplh_at"> href="+code=desct vice"simplh_at">sref">EXPORT_SYMBOLscsi_target_idscsi_target_iding"sas_port_allocforma/sc">ingass=>scsi_target_idsasaL888"> 888\ame="L886"> 886
117ne" name="L918"> 918    sct vice"show_simplhref="+code=dev_sct vice"show_simplhsref">EXPORT_SYMBOLscsi_target_idscsi_target_iding"sas_port_allocforma/sc">ingass=>sr924        typesasa)88"> 888\ame="L886"> 886
11_ne" n1"atic<        strnt"_DEVICE_ATTRf="+code=mutex_nt"_DEVICE_ATTRsref">EXPORT_SYMBOL(scsi_target_idscsi_target_id 886
118se" name="L962"> 962            ohow_sct vice"ref="+code=sas_phow_sct vice"e" n##L869>scsi_target_id 937
118ne" name="L961"> 961
11_ne" n#def id<        strsct vice"show_protocolf="+code=list_esct vice"show_protocolsref">EXPORT_SYMBOLscsi_target_id 886
11_3e" n1"atic<        strssize_href="+code=sas_psize_he" name="L962"> 962<6"> 926 886
11_4e" name="L936"> 936show_sct vice"ref="+code=sas_phow_sct vice"e" n##L869_port_alloc_num(struct device * 886
118ne" name="L925"> 925<<<<<(struct ibute href="+code=device" _at">ibuteclass="sref">device href="+code=deat">v" c,echars="sref">devicesasaL888"> 888\ame="L886"> 886
11_ne" n{ame="L962"> 962<6"> 926 886
118ne" name="L951"> 861        strsct /a>(device(rphy((sref">EXPORT_SYMBOL<> 886
118ne" name="L888"> 888<<<<<<<<<<<<<<<<<2222222222222222222222222222222222222222\ame="L886"> 886
118ne" name="L924"> ="sref">BUG_ON(port-fielh=sas_port_allocfielh" cll222222222222222222222222222222222222222\ame="L886"> 886
119se" name="L962"> 962<4"> 934        retsnprintfnsport_setup_desnprintfsref">EXPORT_SYMBOLsas, 20>sc"> 956  1">ing">"none\n"class="la222222222222222222222\ame="L886"> 886
119ne" name="L924"> 934        retass=oid EXPORT_SYMBOL(port-fielh=sas_port_allocfielh" cl>scsi_target_idsasa;22222222\ame="L886"> 886
119ne" name="L892"> 892}
119ne" name="L933"> 933
11_ne" n#def id<        strsct vice" href="+code=desct vice"sref">EXPORT_SYMBOLscsi_target_id 886
119ne" name="L965"> 965    sct vice"show_protocolf="+code=list_esct vice"show_protocolsref">EXPORT_SYMBOLscsi_target_id 886
11_ne" n1"atic<        strnt"_DEVICE_ATTRf="+code=mutex_nt"_DEVICE_ATTRsref">EXPORT_SYMBOL(scsi_target_idscsi_target_id 886
119ne" name="L9555555555887static vohow_sct vice"ref="+code=sas_phow_sct vice"e" n##L869>scsi_target_id 937
11_ne" name="L937"> 937
119ne" n1"atic<        strssize_href="+code=sas_psize_he" name="L937"> 937
120se" n887static vohow_sct vice"vice" _type(struct device * 937
1201e" name="L926"> 926<<<<<<<<<<(struct ibute href="+code=device" _at">ibuteclass="sref">device href="+code=deat">v" c,echars="sref">devicesasaame="L937"> 937
120ne" nsref">parent)) {
1203e" name="L961"> 861        strsct /a>(device(rphy((sref">EXPORT_SYMBOL<>parent)) {
120ne" name="L864"> 864
120ne" name="L963"> ="sref">BUG_ON(port-identif(dev 937
120ne" name="L926"> 926<4"> 934        retsnprintfnsport_setup_desnprintfsref">EXPORT_SYMBOLsas, 20>sc"> 956  1">ing">"none\n"class="laame="L937"> 937
12_ne" name="L954"> 934        retass=oid vice" _typee" clde=to_sas_host_aass=oid vice" _typee" cldsref"ame="L937"> 937
120ne" name="L888"> 888<<<<<<<<<"sref">BUG_ON(port-identif(devscsi_target_idsasa;ame="L937"> 937
120ne" name="L892"> 892}
121se" name="L933"> 933
1211e" n1"atic<        strnt"_DEVICE_ATTRf="+code=mutex_nt"_DEVICE_ATTRsref">EXPORT_SYMBOL(scsi_target_idscsi_target_id 933
121ne" name="L962"> 962<887static vohow_sct vice"vice" _typescsi_target_id 937
121ne" name="L933"> 933
121ne" n1"atic<        strssize_href="+code=sas_psize_he" name="L937"> 937
1215e" name="L936"> 936ohow_sct vice"encloss a_identifie> href="+code=deshow_sct vice"encloss a_identifie>sref"port_alloc_num(struct device * 937
121ne" name="L926"> 926<26"> 926<<<<<<<<<<(struct ibute href="+code=device" _at">ibuteclass="sref">device href="+code=deat">v" c,echars="sref">devicesasaame="L937"> 937
121ne" nsref">parent)) {
121ne" name="L881"> 861        strsct /a>(device(rphy((sref">EXPORT_SYMBOL<>parent)) {
121ne" name="L921"> 861        strsct sas_phy *rphy *EXPORT_SYMBOL(port->dev.parent)) {
122se" name="L861"> 861        strSref=Ho href="+code=phy_Sref=Ho hlass="sref">sas_phyrphyEXPORT_SYMBOLphy->dev.parent)) {
122ne" name="L921"> 861        strsct internalf="+code=list_esct internallass="sref">sas_phyrphyEXPORT_SYMBOLphy-"drivers/href="+code=phy_"drivers/hclaslaref">parent)) {
122ne" name="L932"> 932    u_sas.c#L964e=phy_u_ne" n32"> 932    identifie> href="+code=deidentifie>srefaref">parent)) {
1223e" name="L9649"> 839static errore=to_sas_host_aturo>srefaref">parent)) {
122ne" name="L864"> 864
122ne" name="L965me="L943"> 943 *
122ne" name="L896"> 896 *
122ne" name="L897"> 897aiommeSMP feats asas_expander_device.
122ne" name="L948"> 948 */
122ne" name="L924"> >EXPORT_SYMBOLEXPORT_SYMBOL 937
123se" name="L962"> 962<4"> 934->EXPORT_SYMBOLparent)) {
123ne" name="L961"> 961
123ne" name="L932"> 932    errore=to_sas_host_aturo>srefass="sref">rphyport-f=sas_port_allocf" class="sref">port-ass=encloss a_identifie> href="+code=deass=encloss a_identifie>sref">EXPORT_SYMBOL(s">mutex_unlock(&identifie> href="+code=deidentifie>sreflaref">parent)) {
1233e" name="L964"> 924        errore=to_sas_host_aturo>srefaame="L937"> 937
123ne" name="L964"> 964<4"> 934        reterrore=to_sas_host_aturo>srefaref">parent)) {
12_ne" name="L964"> 934        retsprintfnsport_setup_desprintfsref">EXPORT_SYMBOLsas, c"> 956  1">ing">"0xommenllx\n"class="= (unsigned long long)ex_unlock(&identifie> href="+code=deidentifie>sreflaref">parent)) {
123ne" name="L892"> 892}
123ne" name="L937"> 937
1238e" n1"atic<        strnt"_DEVICE_ATTRf="+code=mutex_nt"_DEVICE_ATTRsref">EXPORT_SYMBOL(scsi_target_id href="+code=deencloss a_identifie>sref>scsi_target_id 933
123ne" name="L91ame="L932"> 932    ohow_sct vice"encloss a_identifie> href="+code=deshow_sct vice"encloss a_identifie>sref>scsi_target_id 937
124se" name="L933"> 933
1241e" n1"atic<        strssize_href="+code=sas_psize_he" name="L937"> 937
124ne" n2"> 932    ohow_sct vice"bay_identifie> href="+code=deshow_sct vice"bay_identifie>sref"port_alloc_num(struct device * 937
1243e" name="L962"> 962 962<6"port_alloc_num(struct ibute href="+code=device" _at">ibuteclass="sref">device href="+code=deat">v" c,echars="sref">devicesasaame="L937"> 937
1244e" nsref">parent)) {
12_ne" name="L961"> 861        strsct /a>(device(rphy((sref">EXPORT_SYMBOL<>parent)) {
12_ne" name="L91port_alloc_num(strsct sas_phy *rphy *EXPORT_SYMBOL(port->dev.parent)) {
124ne" name="L951"> 861        strSref=Ho href="+code=phy_Sref=Ho hlass="sref">sas_phyrphyEXPORT_SYMBOLphy->dev.parent)) {
124ne" name="L881"> 861        strsct internalf="+code=list_esct internallass="sref">sas_phyrphyEXPORT_SYMBOLphy-"drivers/href="+code=phy_"drivers/hclaslaref">parent)) {
124ne" name="L9249"> 839static valf="+code=list_evalsrefaref">parent)) {
125se" name="L933"> 933
125ne" name="L924"> >EXPORT_SYMBOLEXPORT_SYMBOL 937
125ne" name="L962"> 962<4"> 934->EXPORT_SYMBOLparent)) {
125ne" name="L933"> 933
125ne" name="L96 839static valf="+code=list_evalsrefass="sref">rphyport-f=sas_port_allocf" class="sref">port-ass=bay_identifie> href="+code=deass=bay_identifie>sref">EXPORT_SYMBOL(parent)) {
125ne" name="L963">  839static valf="+code=list_evalsrefa< 0aame="L937"> 937
125ne" name="L926"> 926<4"> 934        retvalf="+code=list_evalsrefaref">parent)) {
125ne" name="L954"> 934        retsprintfnsport_setup_desprintfsref">EXPORT_SYMBOLsas, c"> 956  1">ing">"ommend\n"class="=4        retvalf="+code=list_evalsreflaref">parent)) {
125ne" name="L892"> 892}
125ne" name="L909"> 909
126se" n1"atic<        strnt"_DEVICE_ATTRf="+code=mutex_nt"_DEVICE_ATTRsref">EXPORT_SYMBOL(scsi_target_id href="+code=debay_identifie>sref>scsi_target_id 933
1261e" name="L926"> 926<2"> 932    ohow_sct vice"bay_identifie> href="+code=deshow_sct vice"bay_identifie>sref>scsi_target_id 937
126ne" name="L862"> 862
126ne" name="L936"> 936sct vice" href="+code=desct vice"sref">EXPORT_SYMBOLdev< hreiator  933
126ne" name="L964"> 964dev< hreiator  937
1265e" name="L936"> 936oct vice" href="+code=desct vice"sref">EXPORT_SYMBOLdevscsi_target_id 937
 href="+code=desct vice"simplh_at">sref">EXPORT_SYMBOLdevscsi_target_idsc"> 956  1">ing">"0xommen016llx\n"class="=ame="L937"> 937
126ne" name="L9555555555unsigned long long);ame="L937"> 937
12_8e" naex" class="s52sct vice"simplh_at"> href="+code=desct vice"simplh_at">sref">EXPORT_SYMBOLdev href="+code=deice"identifie>sref>scsi_target_id href="+code=deice"identifie>sref>sc"> 956  1">ing">"ommend\n"class="=4        retu8 href="+code=deu8srefa;ame="L937"> 937
126ne" name="L909"> 909
127se" name="L899"> 899 */
12_ne" n#def id<        strBUF_SIZE href="+code=deBUF_SIZEe" na64comment"> */
127ne" name="L862"> 862
1273e" n49"> 839static sct vead (strhref=uct sas_phy 862
1274e" nsref">parent)) {
127ne" name="L96chars="sref">device href="+code=debuffe>srefass="sref">rphyEXPORT_SYMBOL        retGFP_KERNE deviceparent)) {
127ne" name="L91port_alloc_num(strsct end=uct deviceEXPORT_SYMBOLparent)) {
127ne" name="L951"> 861        strsref=mtic_datadeviceparent)) {
127ne" name="L9139"> 839static rede=to_sas_host_aredy" c>scsi_target_idsrefaref">parent)) {
127ne" name="L909"> 909
128se" name="L963"> ="sref">BUG_ON href="+code=debuffe>sreflame="L862"> 862
1281e" name="L926"> 926<4"> 934->EXPORT_SYMBOLparent)) {
128ne" name="L862"> 862
1283e" name="L96 839static rede=to_sas_host_aredy" cport_identifierEXPORT_SYMBOLscsi_target_id href="+code=debuffe>sref>scsi_target_iddevice 937
128ne" name="L964"> 964<<<<<<<<<<<<<<<">mutex_unlock(&mtic_datascsi_target_id 937
128ne" name="L937"> 937
1286e" name="L96 839static errore=to_sas_host_aturo>srefass->EXPORT_SYMBOLparent)) {
128ne" name="L953"> ="sref">BUG_ONEXPORT_SYMBOL 862
128ne" name="L888"> 888parent)) {
128ne" name="L909"> 909
129se" name="L919"> 919    msdatasrefa+919"> 919    mtic_datadev 909
1291e" name="L926"> 926<2"> 932    mtic_datadevparent)) {
129ne" name="L862"> 862
1293e" name="L964"> 924        msdatasrefass="<        strBUF_SIZE href="+code=deBUF_SIZEe" na- 8lame="L862"> 862
129ne" name="L964"> 964parent)) {
129ne" name="L937"> 937
1296e" name="L96 839static errore=to_sas_host_aturo>srefass0aref">parent)) {
129ne" name="L937"> 937
129ne" name="L918"> 918    />port-veady led_meaning"sas_port_allocveady led_meaningsrefport_identifiermut 0x10 ? 1 :s0aref">parent)) {
1299e" name="L918"> 918    />port-I_T_nexus=loef_timeouhref="+code=phy_I_T_nexus=loef_timeouhsrefpor 924        msdataparent)) {
130se" name="L919"> 919    />port- hreiator redponsa_timeouhref="+code=phy_ hreiator redponsa_timeouhsrefpor 924        msdataparent)) {
130ne" name="L961"> 961
130ne" nndex" class="s52ouhref="+code=phy_ouhsref:ss="sref">dev);
1303e" name="L96 839static kfrea href="+code=dekfreasref">EXPORT_SYMBOL href="+code=debuffe>sreflaref">parent)) {
130ne" name="L964"> 934        reterrore=to_sas_host_aturo>srefaref">parent)) {
130ne" name="L892"> 892}
130ne" naex" class="s52EXPORT_SYMBOL(vead parent)) {
130ne" name="L937"> 937
1308e" n1"atic<        strDECLARE_TRANSOL" cCLASSEXPORT_SYMBOL(end=ucts href href="+code=dehct end=ucts hrefv" c,ame="L933"> 933
130ne" name="L91ame="L93me="L926"> 926<2"> 956  1">ing">"hct end=uct         return         return         return parent)) {
131se" name="L933"> 933
131ne" n#def id<        strhct end=uctsshow_simplhref="+code=dev_sct end=uctsshow_simplhsref">EXPORT_SYMBOLscsi_target_idscsi_target_iding"sas_port_allocforma/sc">ingass=>scsi_target_id \ame="L886"> 886
131ne" n1"atic<        strssize_href="+code=sas_psize_he" name="L962"> 962<6"> 926 886
131ne" name="L936"> 936show_sct end=uctsref="+code=sas_phow_sct end=uctse" n##L869_port_alloc_num(struct device * 886
131ne" name="L964"> 964<<<<<<<<(struct ibute href="+code=device" _at">ibuteclass="sref">device href="+code=deat">v" c,echars="sref">devicesasa2222222\ame="L886"> 886
1315e" n{ame="L962"> 962<6"> 926 886
131ne" name="L91port_alloc_num(strsct /a>(device(rphy((sref">EXPORT_SYMBOL<> 886
131ne" name="L951"> 861        strsct end=uct deviceEXPORT_SYMBOL( 886
131ne" name="L888"> 888<<<<<<<<<<<<<<<<<2222222222222222222222222222222222222222\ame="L886"> 886
131ne" name="L924"> 934        retsnprintfnsport_setup_desnprintfsref">EXPORT_SYMBOLsas, 20>scsi_target_iding"sas_port_allocforma/sc">ingass=>scsi_target_idport-fielh=sas_port_allocfielh" clla222222\ame="L886"> 886
132se" name="L892"> 892}
132ne" name="L961"> 961
132ne" n#def id<        strsct end=uctssimplh_at"> href="+code=desct end=uctssimplh_at">sref">EXPORT_SYMBOLscsi_target_idscsi_target_iding"sas_port_allocforma/sc">ingass=>scsi_target_idsasaL888"> \ame="L886"> 886
1323e" name="L96 839static hct end=uctsshow_simplhref="+code=dev_sct end=uctsshow_simplhsref">EXPORT_SYMBOLscsi_target_idscsi_target_iding"sas_port_allocforma/sc">ingass=>sr924        typesasa)88"> \ame="L886"> 886
132ne" n1"atic<        strnt"_DEVICE_ATTRf="+code=mutex_nt"_DEVICE_ATTRsref">EXPORT_SYMBOLscsi_target_idscsi_target_id 886
132ne" name="L96ame="L96 839static hhow_sct end=uctsref="+code=sas_phow_sct end=uctse" n##L869>scsi_target_id 937
132ne" name="L937"> 937
132ne" na/a>        strsct end=uctssimplh_at"> href="+code=desct end=uctssimplh_at">sref">EXPORT_SYMBOLscsi_target_idsc"> 956  1">ing">"ommend\n"class="=4intlaref">parent)) {
1328e" naex" class="s52sct end=uctssimplh_at"> href="+code=desct end=uctssimplh_at">sref">EXPORT_SYMBOLscsi_target_idref">parent)) {
132ne" name="L91ame="L93me="L926c"> 956  1">ing">"ommend\n"class="=4intlaref">parent)) {
133se" n887static voct end=uctssimplh_at"> href="+code=desct end=uctssimplh_at">sref">EXPORT_SYMBOL< hreiator redponsa_timeouhref="+code=phy_ hreiator redponsa_timeouhsref>scsi_target_idref">parent)) {
1331e" name="L926"> 926<<<<<<<< 956  1">ing">"ommend\n"class="=4intlaref">parent)) {
133ne" n2"> 932    oct end=uctssimplh_at"> href="+code=desct end=uctssimplh_at">sref">EXPORT_SYMBOLscsi_target_idref">parent)) {
1333e" name="L962"> 962 9c"> 956  1">ing">"ommend\n"class="=4intlaref">parent)) {
133ne" n2"> 932    oct end=uctssimplh_at"> href="+code=desct end=uctssimplh_at">sref">EXPORT_SYMBOLscsi_target_idref">parent)) {
133ne" name="L96ame="L96L962"> 9c"> 956  1">ing">"ommend\n"class="=4intlaref">parent)) {
133ne" name="L937"> 937
133ne" n1"atic<        strDECLARE_TRANSOL" cCLASSEXPORT_SYMBOL(exe="ders href href="+code=dehct exe="ders hrefass=>ref">parent)) {
133ne" name="L888"> 888<<<<<<<<<<<<<<<<2"> 956  1">ing">"hct exe="der"class="=4        return         return         return parent)) {
133ne" name="L909"> 909
134se" n#def id<        strsct exe="dersshow_simplhref="+code=dev_sct exe="dersshow_simplhsref">EXPORT_SYMBOLscsi_target_idscsi_target_iding"sas_port_allocforma/sc">ingass=>scsi_target_id\ame="L886"> 886
1341e" n1"atic<        strssize_href="+code=sas_psize_he" name="L888"> 888<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<\ame="L886"> 886
134ne" n2"> 932    ohow_sct exe="dersref="+code=sas_phow_sct exe="derse" n##L869_port_alloc_num(struct device * 886
1343e" name="L962"> 962 96port_alloc_num(struct ibute href="+code=device" _at">ibuteclass="sref">device href="+code=deat">v" c,echars="sref">devicesasa222222\ame="L886"> 886
1344e" nsame="L888"> 888<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<2222222222222\ame="L886"> 886
13_ne" name="L961"> 861        strsct /a>(device(rphy((sref">EXPORT_SYMBOL<> 886
13_ne" name="L91port_alloc_num(strsct exe="dersuct deviceEXPORT_SYMBOL( 886
134ne" name="L9555555555<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<2222222222222\ame="L886"> 886
134ne" name="L884"> 934        retsnprintfnsport_setup_desnprintfsref">EXPORT_SYMBOLsas, 20>scsi_target_iding"sas_port_allocforma/sc">ingass=>scsi_target_idport-fielh=sas_port_allocfielh" clla222222\ame="L886"> 886
134ne" name="L892"> 892}
135se" name="L933"> 933
135ne" n#def id<        strhct exe="derssimplh_at"> href="+code=desct exe="derssimplh_at">sref">EXPORT_SYMBOLscsi_target_idscsi_target_iding"sas_port_allocforma/sc">ingass=>scsi_target_idsasaL888">\ame="L886"> 886
135ne" name="L96        strsct exe="dersshow_simplhref="+code=dev_sct exe="dersshow_simplhsref">EXPORT_SYMBOLscsi_target_idscsi_target_iding"sas_port_allocforma/sc">ingass=>sr924        typesasa)88">\ame="L886"> 886
135ne" n1"atic<        strnt"_DEVICE_ATTRf="+code=mutex_nt"_DEVICE_ATTRsref">EXPORT_SYMBOLscsi_target_idscsi_target_id 886
135ne" name="L964"> 964<2"> 932    ohow_sct exe="dersref="+code=sas_phow_sct exe="derse" n##L869>scsi_target_id 937
135ne" name="L937"> 937
135ne" naex" class="s52sct exe="derssimplh_at"> href="+code=desct exe="derssimplh_at">sref">EXPORT_SYMBOLscsi_target_idsc"> 956  1">ing">"ommens\n"class="=4chars=laref">parent)) {
135ne" na/a>        strsct exe="derssimplh_at"> href="+code=desct exe="derssimplh_at">sref">EXPORT_SYMBOLscsi_target_idsc"> 956  1">ing">"ommens\n"class="=4chars=laref">parent)) {
1358e" naex" class="s52sct exe="derssimplh_at"> href="+code=desct exe="derssimplh_at">sref">EXPORT_SYMBOLscsi_target_idsc"> 956  1">ing">"ommens\n"class="=4chars=laref">parent)) {
135ne" naex" class="s52sct exe="derssimplh_at"> href="+code=desct exe="derssimplh_at">sref">EXPORT_SYMBOLscsi_target_idref">parent)) {
136se" name="L962"> 962<64"> 964<2"> 956  1">ing">"ommens\n"class="=4chars=laref">parent)) {
1361e" naex" class="s52sct exe="derssimplh_at"> href="+code=desct exe="derssimplh_at">sref">EXPORT_SYMBOLscsi_target_idsc"> 956  1">ing">"ommenu\n"class="=4unsigned intlaref">parent)) {
136ne" n2"> 932    oct exe="derssimplh_at"> href="+code=desct exe="derssimplh_at">sref">EXPORT_SYMBOLscsi_target_idsc"> 956  1">ing">"ommenu\n"class="=ref">parent)) {
1363e" name="L962"> 962 96unsigned intlaref">parent)) {
136ne" n2"> 932    oct exe="derssimplh_at"> href="+code=desct exe="derssimplh_at">sref">EXPORT_SYMBOLscsi_target_idsc"> 956  1">ing">"ommend\n"class="=4intlaref">parent)) {
136ne" name="L937"> 937
        strDECLARE_TRANSOL" cCLASSEXPORT_SYMBOL(vice" href href="+code=dehct vice" hrefass=>ref">parent)) {
136ne" name="L95555555552"> 956  1">ing">"hct uct         return         return         return parent)) {
13_8e" nref">parent)) {
136ne" n1"atic<49"> 839static sct vice"match(strat">ibute_conta id> href="+code=deat">ibute_conta id>class="sref">devicesport_alloc_num(struct device * 937
137se" nsref">parent)) {
1371e" name="L921"> 861        strSref=Ho href="+code=phy_Sref=Ho hlass="sref">sas_phyparent)) {
1372e" name="L921"> 861        strsct internalf="+code=list_esct internallass="sref">sas_phyparent)) {
137ne" name="L933"> 933
137ne" name="L963"> ="sref">BUG_ON(EXPORT_SYMBOL<> 937
137ne" name="L96ame="L964"> 9340aref">parent)) {
1376e" name="L96 839static sho href="+code=phy_sho hy" cass="sref">rphyEXPORT_SYMBOL<>port-/a>.port-/a>.parent)) {
137ne" name="L937"> 937
137ne" name="L913"> ="sref">BUG_ONphy-"drivers/href="+code=phy_"drivers/hclaslame="L937"> 937
137ne" name="L91ame="L934"> 9340aref">parent)) {
138se" name="L963"> "sref">BUG_ONphy-"drivers/href="+code=phy_"drivers/hclaslass="sref">phy-ho h_at">f href="+code=deho h_at">fclaslass="sref">devdev< href href="+code=de hrefass= !=ref">parent)) {
1381e" name="L926"> 926<<<<<<<<<">mutex_unlock(&_phyho h_ href href="+code=dehct ho h_ hrefclaslass="sref">dev< href href="+code=de hrefass=lame="L937"> 937
138ne" name="L962"> 962<4"> 9340aref">parent)) {
138ne" name="L933"> 933
138ne" name="L96sref">sas_phyrphyEXPORT_SYMBOLphy-"drivers/href="+code=phy_"drivers/hclaslaref">parent)) {
138ne" name="L964"> 934">mutex_unlock(&iport-vice"at">_cont=sas_port_allocvice"at">_contclaslass="sref">devrphyparent)) {
1386e" name="L892"> 892}
138ne" name="L937"> 937
1388e" n1"atic<49"> 839static sct end=uctsmatch(strat">ibute_conta id> href="+code=deat">ibute_conta id>class="sref">deviceame="L937"> 937
138ne" name="L91ame="L93me="L926"> 92port_alloc_num(struct device * 937
139se" nsref">parent)) {
1391e" name="L921"> 861        strSref=Ho href="+code=phy_Sref=Ho hlass="sref">sas_phyparent)) {
1392e" name="L921"> 861        strsct internalf="+code=list_esct internallass="sref">sas_phyparent)) {
1393e" name="L961"> 861        strsct /a>(device(parent)) {
139ne" nref">parent)) {
139ne" name="L963"> ="sref">BUG_ON(EXPORT_SYMBOL<> 937
1396e" name="L962"> 962<4"> 9340aref">parent)) {
139ne" name="L95 839static sho href="+code=phy_sho hy" cass="sref">rphyEXPORT_SYMBOL<>port-/a>.port-/a>.parent)) {
139ne" name="L918"> 918    /a>(rphy(EXPORT_SYMBOL<>parent)) {
139ne" name="L909"> 909
140se" name="L963"> ="sref">BUG_ONphy-"drivers/href="+code=phy_"drivers/hclaslame="L937"> 937
1401e" name="L926"> 926<4"> 9340aref">parent)) {
1402e" name="L963"> "sref">BUG_ONphy-"drivers/href="+code=phy_"drivers/hclaslass="sref">phy-ho h_at">f href="+code=deho h_at">fclaslass="sref">devdev< href href="+code=de hrefass= !=ref">parent)) {
1403e" name="L962"> 962 9">mutex_unlock(&_phyho h_ href href="+code=dehct ho h_ hrefclaslass="sref">dev< href href="+code=de hrefass=lame="L937"> 937
140ne" name="L966"> 926<4"> 9340aref">parent)) {
140ne" name="L937"> 937
1406e" name="L96 839static irphyEXPORT_SYMBOLphy-"drivers/href="+code=phy_"drivers/hclaslaref">parent)) {
140ne" name="L954"> 934">mutex_unlock(&iport-end=uctsat">_cont=sas_port_allocend=uctsat">_contclaslass="sref">devrphymut">mutref">parent)) {
140ne" name="L888"> 888<8"> 918    /a>(port- dentif(devrphyparent)) {
140ne" name="L892"> 892}
141se" name="L933"> 933
1411e" n1"atic<49"> 839static sct exe="dersmatch(strat">ibute_conta id> href="+code=deat">ibute_conta id>class="sref">deviceame="L937"> 937
141ne" name="L962"> 962<<<<<<<<<<<<<<(struct device * 937
141ne" nsref">parent)) {
141ne" name="L961"> 861        strSref=Ho href="+code=phy_Sref=Ho hlass="sref">sas_phyparent)) {
141ne" name="L961"> 861        strsct internalf="+code=list_esct internallass="sref">sas_phyparent)) {
141ne" name="L91port_alloc_num(strsct /a>(device(parent)) {
141ne" name="L937"> 937
141ne" name="L913"> ="sref">BUG_ON(EXPORT_SYMBOL<> 937
141ne" name="L91ame="L934"> 9340aref">parent)) {
142se" name="L919"> 919    sho href="+code=phy_sho hy" cass="sref">rphyEXPORT_SYMBOL<>port-/a>.port-/a>.parent)) {
1421e" name="L919"> 919    /a>(rphy(EXPORT_SYMBOL<>parent)) {
142ne" name="L862"> 862
1423e" name="L964"> ="sref">BUG_ONphy-"drivers/href="+code=phy_"drivers/hclaslame="L937"> 937
142ne" name="L966"> 926<4"> 9340aref">parent)) {
142ne" name="L963"> "sref">BUG_ONphy-"drivers/href="+code=phy_"drivers/hclaslass="sref">phy-ho h_at">f href="+code=deho h_at">fclaslass="sref">devdev< href href="+code=de hrefass= !=ref">parent)) {
1426e" name="L962"> 962<<<<<<<<<">mutex_unlock(&_phyho h_ href href="+code=dehct ho h_ hrefclaslass="sref">dev< href href="+code=de hrefass=lame="L937"> 937
142ne" name="L95555555554"> 9340aref">parent)) {
1428e" nref">parent)) {
142ne" name="L91 839static irphyEXPORT_SYMBOLphy-"drivers/href="+code=phy_"drivers/hclaslaref">parent)) {
143se" name="L914"> 934">mutex_unlock(&iport-exe="dersat">_cont=sas_port_allocexe="dersat">_contclaslass="sref">devrphymut">mutref">parent)) {
1431e" name="L926"> 926<">EXPORT_SYMBOL(port- dentif(devrphyparent)) {
143ne" name="L962"> 962<<>EXPORT_SYMBOL(port- dentif(devrphyparent)) {
1433e" name="L892"> 892}
143ne" nref">parent)) {
143ne" n1"atic 839static sct exe="dersreleashref="+code=dev_sct exe="dersreleashsref"port_alloc_num(struct device * 937
143ne" nsref">parent)) {
143ne" name="L951"> 861        strsct /a>(device(rphy(EXPORT_SYMBOL<>parent)) {
143ne" name="L88port_alloc_num(strsct exe="dersuct deviceEXPORT_SYMBOL(parent)) {
143ne" name="L909"> 909
144se" name="L963"> "sref">BUG_ON(port-q 937
1441e" name="L926"> 926port-blk_ heanup_queua href="+code=deblk_ heanup_queuasref">EXPORT_SYMBOL(port-qparent)) {
144ne" name="L862"> 862
1443e" name="L96sref">port-/utsuct EXPORT_SYMBOL<>port-/a>.parent)) {
144ne" name="L96sref">sas_phyEXPORT_SYMBOLparent)) {
144ne" name="L892"> 892}
144ne" name="L937"> 937
144ne" n1"atic 839static sct end=uct (struct device * 937
144ne" nsref">parent)) {
1449e" name="L88port_alloc_num(strsct /a>(device(rphy(EXPORT_SYMBOL<>parent)) {
1450e" name="L88port_alloc_num(strsct end=uct deviceEXPORT_SYMBOL(parent)) {
145ne" name="L961"> 961
1452e" name="L963"> "sref">BUG_ON(port-q 937
1453e" name="L962"> 962port-blk_ heanup_queua href="+code=deblk_ heanup_queuasref">EXPORT_SYMBOL(port-qparent)) {
145ne" nref">parent)) {
1455e" name="L96sref">sas_phyEXPORT_SYMBOL<>port-/a>.parent)) {
1456e" name="L96 839static kfrea href="+code=dekfreasref">EXPORT_SYMBOLparent)) {
145ne" name="L892"> 892}
1458e" nref">parent)) {
145ne" na"> 956  comm./**class="ref">parent)) {
146se" na"> 956  comm. * sct /a>(_ hreialize - common /a>(<49"ializationclass="ref">parent)) {
1461e" na"> 956  comm. * @/a>(:me="L914a>(parent)) {
146ne" n2"> 956  comm. *srass="ref">parent)) {
1463e" na"> 956  comm. * Used by both sct end=uct parent)) {
146ne" n2"> 956  comm. *  hreialish the common /a>(parent)) {
146ne" n2"> 956  comm. */srass="ref">parent)) {
 839static sct /a>(_ hreialize(strsct /a>(device( 937
146ne" nsref">parent)) {
146ne" name="L918"> 918    INIT_LIST_HEADmutex_unlock(&ra>(port-lisa href="+code=palisav" caaref">parent)) {
146ne" name="L892"> 892}
147se" name="L933"> 933
1471e" na"> 956  comm./**class="ref">parent)) {
147ne" n2"> 956  comm. * sct end=uct (parent)) {
1473e" na"> 956  comm. * @rent" : which ers/srass="ref">parent)) {
147ne" n2"> 956  comm. *srass="ref">parent)) {
147ne" n2"> 956  comm. * Allocates an SAS remote PHY8port_aure,parent)) {
1476e" n2"> 956  comm. *srass="ref">parent)) {
147ne" n2"> 956  comm. * R"> 93s:srass="ref">parent)) {
147ne" n2"> 956  comm. *      SAS PHY8allocated or ommenNULL63">the allocation failed.srass="ref">parent)) {
147ne" na"> 956  comm. */srass="ref">parent)) {
148se" nport_alloc_num(strsct /a>(device(strsct ers/ref="+code=dev_sct ers/srass="sref">device.parent)) {
1481e" nsref">parent)) {
1482e" name="L921"> 861        strScef=Ho href="+code=phy_Sref=Ho hlass="sref">sas_phyrphymutex_unlock(&/a>.port->parent)) {
1483e" name="L961"> 861        strsct end=uct deviceparent)) {
148ne" nref">parent)) {
1485e" name="L96sref">sas_phyrphydevice        retGFP_KERNE parent)) {
1486e" name="L964"> ="sref">BUG_ONparent)) {
148ne" name="L95555555554"> 934"sref">BUG_ONparent)) {
148ne" name="L91ame="L892"> 892}
148ne" name="L909"> 909
149se" name="L919"> 919    uct mutex_unlock(&r>port-vicedevparent)) {
1491e" name="L919"> 919    />port-vicedevdev.rphymutex_unlock(&/a>.port->parent)) {
149ne" name="L96        str/>port-vicedevdevrphyparent)) {
1493e" name="L964"> ="sref">rphyEXPORT_SYMBOL.port->dev.parent)) {
149ne" name="L966"> 926(strsct /a>(device(rphy(EXPORT_SYMBOL.port->dev.parent)) {
149ne" name="L96ame="L919"> 919    uct_setsL895mutex_unlock(&r>port-vicedevsc"> 956  1">ing">"end=uct parent)) {
1496e" name="L962"> 962<="L96ame="L919"> 919    sho href="+code=phy_sho hy" class="sref">phy-ho h_noref="+code=phy_ho h_nov" c>scx_unlock(&ra>(port-href="argetsih=sas_port_allochref="argetsihv" c>ref">parent)) {
149ne" name="L9555555555<<<<<<<<<<<<<>EXPORT_SYMBOL.port-ers/sidentifid> href="+code=deers/sidentifid>clas)aref">parent)) {
149ne" name="L91} elseref">parent)) {
149ne" name="L91ame="L939"> 919    uct_setsL895mutex_unlock(&r>port-vicedevsc"> 956  1">ing">"end=uct parent)) {
150se" name="L962"> 962<64"> 964<"L919"> 919    sho href="+code=phy_sho hy" class="sref">phy-ho h_noref="+code=phy_ho h_nov" c>scx_unlock(&/a>.port-ers/sidentifid> href="+code=deers/sidentifid>clas)aref">parent)) {
1501e" name="L919"> 919    />port-vicedev< dentif(devrphyparent)) {
150ne" name="L96        strsct /a>(_ hreializemutex_unlock(&r>port-viceparent)) {
1503e" name="L96sref">port-"drivers/scetupsuct mutex_unlock(&r>port-vicedevparent)) {
150ne" nref">parent)) {
150ne" name="L964"> 934">mutex_unlock(&r>port-viceparent)) {
1506e" name="L892"> 892}
150ne" na/a>        strEXOL" cSYMBO EXPORT_SYMBOLparent)) {
1508e" nref">parent)) {
150ne" na"> 956  comm./**class="ref">parent)) {
151se" na"> 956  comm. * sct exe="dersalloc - allocate an /a>(parent)) {
1511e" na"> 956  comm. * @rent" : which ers/srass="ref">parent)) {
151ne" n2"> 956  comm. * @type: St"_EDGE_EXPANDER_DEVICE or St"_FANOUT_EXPANDER_DEVICEclass="ref">parent)) {
1513e" na"> 956  comm. *class="ref">parent)) {
151ne" n2"> 956  comm. * Allocates an SAS remote PHY8port_aure,parent)) {
151ne" n2"> 956  comm. *srass="ref">parent)) {
1516e" n2"> 956  comm. * R"> 93s:srass="ref">parent)) {
151ne" n2"> 956  comm. *      SAS PHY8allocated or ommenNULL63">the allocation failed.srass="ref">parent)) {
151ne" n2"> 956  comm. */srass="ref">parent)) {
1519e" nport_alloc_num(strsct /a>(device(strsct ers/ref="+code=dev_sct ers/srass="sref">device.parent)) {
152se" name="L962"> 962<64"> 964<"L911111111enumlloc_num(strsct vice" _typeport-"ypeparent)) {
1521e" nsref">parent)) {
1522e" name="L921"> 861        strScef=Ho href="+code=phy_Sref=Ho hlass="sref">sas_phyrphymutex_unlock(&/a>.port->parent)) {
1523e" name="L961"> 861        strsct exe="dersuct deviceparent)) {
152ne" name="L961"> 861        strsct ho h_at">f href="+code=desct ho h_at">fclass="sref">devicerphyf href="+code=de"o_sct ho h_at">fsref">EXPORT_SYMBOLparent)) {
152ne" name="L937"> 937
1526e" name="L96>EXPORT_SYMBOLEXPORT_SYMBOL<"yperphymut">mutref">parent)) {
152ne" name="L955555555>EXPORT_SYMBOL<"yperphyparent)) {
1528e" nref">parent)) {
152ne" name="L91 839static r>rphydevice        retGFP_KERNE parent)) {
153se" name="L963"> ="sref">BUG_ONparent)) {
1531e" name="L926"> 926<4"> 934"sref">BUG_ONparent)) {
153ne" name="L96ame="L892"> 892}
153ne" name="L933"> 933
153ne" name="L96sref">sas_phymutex_unlock(&r>port-vicedevparent)) {
1535e" name="L96sref">sas_phyport-vicedevdev.rphymutex_unlock(&/a>.por">devparent)) {
1536e" name="L96>EXPORT_SYMBOLport-vicedevdevrphyparent)) {
153ne" name="L95 839static mutex_lockref="+code=dev_mutex_locksref"">mutex_unlock(&sct ho href="+code=phy_sct ho hy" cass="sref">port-lockref="+code=dev_locksreflaref">parent)) {
153ne" name="L918"> 918    />port-vicedevrphyport-next exe="dersih=sas_port_allocnext exe="dersihy" c++aref">parent)) {
153ne" name="L91 839static mutex_unlockref="+code=dev_mutex_unlocksref"">mutex_unlock(&sct ho href="+code=phy_sct ho hy" cass="sref">port-lockref="+code=dev_locksreflaref">parent)) {
154se" name="L919"> 919    uct_setsL895mutex_unlock(&r>port-vicedevsc"> 956  1">ing">"exe="der-ommend:ommend"class="=ref">parent)) {
1541e" name="L926"> 926<="L919"> 919    sho href="+code=phy_sho hy" class="sref">phy-ho h_noref="+code=phy_ho h_nov" c>scx_unlock(&r>port-vicedevparent)) {
154ne" name="L96        str/>port-vicedev< dentif(devrphyparent)) {
1543e" name="L96sref">port-sct /a>(_ hreializemutex_unlock(&r>port-viceparent)) {
154ne" name="L96sref">sas_phymutex_unlock(&r>port-vicedevparent)) {
154ne" name="L937"> 937
1546e" name="L964"> 934">mutex_unlock(&r>port-viceparent)) {
154ne" name="L892"> 892}
154ne" na/a>        strEXOL" cSYMBO EXPORT_SYMBOLparent)) {
154ne" name="L909"> 909
155se" na"> 956  comm./**class="ref">parent)) {
1551e" na"> 956  comm. * sct /a>(_add  -  add a SAS remote PHY8to>the uct parent)) {
155ne" n2"> 956  comm. * @/a>(:me="L91The remote PHY8to>be added" ass="ref">parent)) {
1553e" na"> 956  comm. *class="ref">parent)) {
155ne" n2"> 956  comm. * Publishes a SAS remote PHY8to>the rest of the system.srass="ref">parent)) {
155ne" n2"> 956  comm. */srass="ref">parent)) {
1556e" n49"> 839static sct /a>(_add(strsct /a>(device( 937
155ne" nsref">parent)) {
155ne" name="L88port_alloc_num(strsct ers/ref="+code=dev_sct ers/srass="sref">device.rphyEXPORT_SYMBOL(port->dev.parent)) {
1559e" name="L88port_alloc_num(strScef=Ho href="+code=phy_Sref=Ho hlass="sref">sas_phyrphy(&/a>.por">devdev.parent)) {
1560e" name="L88port_alloc_num(strsct ho h_at">f href="+code=desct ho h_at">fclass="sref">devicerphyf href="+code=de"o_sct ho h_at">fsref">EXPORT_SYMBOLparent)) {
1561e" name="L88port_alloc_num(strsct  dentif(devicemutex_unlock(&ra>(port- dentif(parent)) {
1562e" name="L9639"> 839static erro> href="+code=deerro>" claref">parent)) {
156ne" name="L933"> 933
156ne" name="L964"> ="sref">rphy.por">dev( 937
156ne" name="L96ame="L914"> 934-a/a>        strENXIOparent)) {
por">dev(parent)) {
156ne" name="L937"> 937
156ne" name="L918"> 918    erro> href="+code=deerro>" class="sref">rphymutex_unlock(&ra>(port->parent)) {
1569e" name="L964"> ="sref">rphy href="+code=deerro>" claame="L937"> 937
157se" name="L962"> 962<4"> 934"sref">BUG_ON href="+code=deerro>" claref">parent)) {
1571e" name="L919"> 919    "drivers/saddsuct mutex_unlock(&ra>(port->parent)) {
157ne" name="L96        str"drivers/sconfiguresuct mutex_unlock(&ra>(port->parent)) {
1573e" name="L964"> ="sref">rphyEXPORT_SYMBOLscx_unlock(&ra>( 937
157ne" name="L966"> 926<>EXPORT_SYMBOL"> 956  1">ing">"fail8to>a bsg uct rphymutex_unlock(&ra>(port->parent)) {
157ne" name="L937"> 937
157ne" name="L937"> 937
157ne" name="L95 839static mutex_lockref="+code=dev_mutex_locksref"">mutex_unlock(&sct ho href="+code=phy_sct ho hy" cass="sref">port-lockref="+code=dev_locksreflaref">parent)) {
157ne" name="L918"> 918    lisasaddstailref="+code=dev_lisasaddstailsref"">mutex_unlock(&ra>(port-lisa href="+code=palisav" c,<">mutex_unlock(&_phyho href="+code=phy_sct ho hy" cass="sref">port-/a>(_lisa href="+code=pa/a>(_lisasreflaref">parent)) {
1579e" name="L964"> ="sref">rphyport->e" _typerphymut">mutref">parent)) {
158se" name="L962">  ="sref">rphyport-"argetsers/sprotocolf href="+code=de"argetsers/sprotocolf" cl ">mutref">parent)) {
1581e" name="L926"> 9 ="sref">rphyrphyrphy 937
158ne" name="L962"> 962(&ra>(port-href="argetsih=sas_port_allochref="argetsihv" cass="sref">rphyport-next "argetsih=sas_port_allocnext "argetsihy" c++aref">parent)) {
1583e" name="L96else64"> ="sref">rphyport->e" _typerphy 937
158ne" name="L966"> 926<>EXPORT_SYMBOL(port-href="argetsih=sas_port_allochref="argetsihv" cass-1aref">parent)) {
1585e" name="L96sref">sas_phymutex_unlock(&sct ho href="+code=phy_sct ho hy" cass="sref">port-lockref="+code=dev_locksreflaref">parent)) {
158ne" name="L937"> 937
158ne" name="L954"> ="sref">rphyport->e" _typerphymut">mutref">parent)) {
158ne" name="L91926<>EXPORT_SYMBOL(port-href="argetsih=sas_port_allochref="argetsihv" ca!ss-1) sref">parent)) {
158ne" name="L91ame="L9339"> 839static lunref="+code=dev_lun" claref">parent)) {
159se" name="L933"> 933
1591e" name="L926"> 926<4"> ="sref">rphyport-"argetsers/sprotocolf href="+code=de"argetsers/sprotocolf" cl ">muts="sref">rphy 937
159ne" name="L962"> 962<"L91926<>EXPORT_SYMBOLrphyparent)) {
1593e" name="L962"> 962parent)) {
159ne" name="L966"> 926<"L91926<>EXPORT_SYMBOLparent)) {
159ne" name="L937"> 937
1596e" name="L962"> 962port-href=scan="arget=sas_port_allochref=scan="argetsref"">mutex_unlock(&ra>(port->scx_unlock(&ra>(port-href="argetsih=sas_port_allochref="argetsihv" c><>EXPORT_SYMBOLparent)) {
159ne" name="L95ame="L892"> 892}
1598e" nref">parent)) {
159ne" name="L914"> 9340aref">parent)) {
160se" name="L892"> 892}
1601e" na/a>        strEXOL" cSYMBO EXPORT_SYMBOL(_addparent)) {
160ne" nref">parent)) {
1603e" na"> 956  comm./**class="ref">parent)) {
160ne" n2"> 956  comm. * sct /a>(_frea  -  frea a SAS remote PHYclass="ref">parent)) {
160ne" n2"> 956  comm. * @/a>(:mSAS remote PHY8to>freasrass="ref">parent)) {
1606e" n2"> 956  comm. *srass="ref">parent)) {
160ne" n2"> 956  comm. * Freas the specifiddmSAS remote PHY.srass="ref">parent)) {
160ne" n2"> 956  comm. *srass="ref">parent)) {
160ne" na"> 956  comm. * Note:srass="ref">parent)) {
161se" na"> 956  comm. * 91This function must only>be called on a remotesrass="ref">parent)) {
1611e" na"> 956  comm. *   PHY8that has not successfully>been added usingsrass="ref">parent)) {
161ne" n2"> 956  comm. *   sct /a>(_add() (or has been sct /a>(_remove()'d)srass="ref">parent)) {
1613e" na"> 956  comm. */srass="ref">parent)) {
161ne" nvoid> 839static sct /a>(_frea(strsct /a>(device( 937
161ne" nsref">parent)) {
1616e" name="L96port_alloc_num(struct devicemutex_unlock(&ra>(port->parent)) {
1617e" name="L96port_alloc_num(strScef=Ho href="+code=phy_Sref=Ho hlass="sref">sas_phyrphy(&ra>(port->dev.port-ea>.parent)) {
161ne" name="L88port_alloc_num(strsct ho h_at">f href="+code=desct ho h_at">fclass="sref">devicerphyf href="+code=de"o_sct ho h_at">fsref">EXPORT_SYMBOLparent)) {
161ne" name="L909"> 909
162se" name="L919"> 919    mutex_lockref="+code=dev_mutex_locksref"">mutex_unlock(&sct ho href="+code=phy_sct ho hy" cass="sref">port-lockref="+code=dev_locksreflaref">parent)) {
1621e" name="L919"> 919    lisasdelref="+code=dev_lisasdelsref"">mutex_unlock(&ra>(port-lisa href="+code=palisav" claref">parent)) {
162ne" name="L96        strmutex_unlockref="+code=dev_mutex_unlocksref"">mutex_unlock(&sct ho href="+code=phy_sct ho hy" cass="sref">port-lockref="+code=dev_locksreflaref">parent)) {
162ne" name="L933"> 933
162ne" name="L96ex_unlock(&sct bsg_removeref="+code=phy_sct bsg_removesref">EXPORT_SYMBOLscx_unlock(&ra>(parent)) {
162ne" name="L937"> 937
1626e" name="L96>EXPORT_SYMBOL<"drivers/sdeporoysuct EXPORT_SYMBOL<>parent)) {
162ne" name="L937"> 937
162ne" name="L918"> 918    putsuct EXPORT_SYMBOL<>parent)) {
162ne" name="L892"> 892}
163se" na/a>        strEXOL" cSYMBO EXPORT_SYMBOL(_freaparent)) {
1631e" nref">parent)) {
163ne" n2"> 956  comm./**class="ref">parent)) {
1633e" na"> 956  comm. * sct /a>(_deleta  -  remove and frea SAS remote PHYclass="ref">parent)) {
 9336_sa>165t /a>(_frea  -  frea a SAS rem@/a>(:me="L91SAS remote PHY8to>remove and freaclass="ref">parent)) {
163ne" n2"> 956  comm. *srass="ref">parent)) {
1636e" n2"> 956  comm. * R"moves the specifiddmSAS remote PHY and freas i .srass="ref">parent)) {
163ne" n2"> 956  comm. */srass="ref">parent)) {
163ne" nvoidref">parent)) {
163ne" n>EXPORT_SYMBOL(_deleta(strsct /a>(device( 937
164se" nsref">parent)) {
1641e" name="L919"> 919    sct /a>(_removeEXPORT_SYMBOL(parent)) {
164ne" name="L96        strsct /a>(_freaEXPORT_SYMBOL(parent)) {
1643e" name="L892"> 892}
164ne" na/a>        strEXOL" cSYMBO EXPORT_SYMBOL(_deletaparent)) {
164ne" name="L937"> 937
1646e" n2"> 956  comm./**class="ref">parent)) {
164ne" n2"> 956  comm. * sct /a>(_unlink  -  unlink SAS remote PHYclass="ref">parent)) {
164ne" n2"> 956  comm. *m@/a>(:me="L91SAS remote a>(unlink from i s rent"  ers/srass="ref">parent)) {
164ne" na"> 956  comm. *srass="ref">parent)) {
165se" na"> 956  comm. * R"moves ers/ refent"ce8to>an /a>(srass="ref">parent)) {
1651e" na"> 956  comm. */srass="ref">parent)) {
165ne" nvoid> 839static sct /a>(_unlink(strsct /a>(device( 937
1653e" nsref">parent)) {
165ne" name="L961"> 861        strsct ers/ref="+code=dev_sct ers/srass="sref">device.rphyEXPORT_SYMBOL(port->dev.parent)) {
165ne" name="L937"> 937
1656e" name="L96>EXPORT_SYMBOL.por">dev(parent)) {
165ne" name="L892"> 892}
165ne" na/a>        strEXOL" cSYMBO EXPORT_SYMBOL(_unlinkparent)) {
165ne" name="L909"> 909
166se" na"> 956  comm./**class="ref">parent)) {
1661e" na"> 956  comm. * sct /a>(_remove  -  remove SAS remote PHYclass="ref">parent)) {
166ne" n2"> 956  comm. * @/a>(:me="L91SAS remote a>(removesrass="ref">parent)) {
1663e" na"> 956  comm. *class="ref">parent)) {
166t /a>(_frea  -  frea a SAS remR"moves the specifiddmSAS remote PHY.srass="ref">parent)) {
166ne" n2"> 956  comm. */srass="ref">parent)) {
parent)) {
166ne" na/a>        strsct /a>(_remove(strsct /a>(device( 937
166ne" nsref">parent)) {
1669e" name="L96port_alloc_num(struct devicemutex_unlock(&ra>(port->parent)) {
167se" name="L933"> 933
1671e" name="L91switch> ="sref">rphy(port- dentif(devparent)) {
167ne" name="L96cases="sref">rphyparent)) {
1673e" name="L962"> 962(strsref=remove="arget=sas_port_allochref=remove="argetsref">EXPORT_SYMBOL<>parent)) {
167ne" name="L966"> 926parent)) {
1675e" name="L96cases="sref">rphyparent)) {
1676e" name="L96cases="sref">rphyparent)) {
167ne" name="L955555555lloc_num(strsct /emove=childnt"EXPORT_SYMBOL<>parent)) {
167ne" name="L91926<926parent)) {
1679e" name="L96default:ref">parent)) {
168se" name="L962"> 926parent)) {
1681e" name="L92ame="L892"> 892}
168ne" nref">parent)) {
1683e" name="L96sref">port-sct /a>(_unlinkEXPORT_SYMBOL(parent)) {
168ne" name="L96ex_unlock(&"drivers/s/emove=uct EXPORT_SYMBOL<>parent)) {
1685e" name="L96sref">sas_phyEXPORT_SYMBOL<>parent)) {
168ne" name="L892"> 892}
168ne" na/a>        strEXOL" cSYMBO EXPORT_SYMBOL(_removeparent)) {
1688e" nref">parent)) {
168ne" na"> 956  comm./**class="ref">parent)) {
169se" na"> 956  comm. * href=is_sct /a>(  -  check<4">a6port_aluct parent)) {
1691e" na"> 956  comm. * @uct:me="L91luct parent)) {
169ne" n2"> 956  comm. *class="ref">parent)) {
1693e" na"> 956  comm. * R"> 93s:srass="ref">parent)) {
169t /a>(_frea  -  frea a SAS remmmmmmommen1<4">the uct parent)) {
169ne" n2"> 956  comm. */srass="ref">parent)) {
1696e" n49"> 839static sref=is_sct /a>(=sas_port_allochref=is_sct /a>(sref"const6port_alloc_num(struct device 937
169ne" nsref">parent)) {
169ne" name="L914"> 934"sref">BUG_ONpor">devrphyparent)) {
169ne" name="L91ame="L96sref">sas_phypor">devrphyparent)) {
170se" name="L892"> 892}
1701e" na/a>        strEXOL" cSYMBO EXPORT_SYMBOL(=sas_port_allochref=is_sct /a>(sref)aref">parent)) {
170ne" nref">parent)) {
170ne" name="L933"> 933
170ne" n2"> 956  comm./*class="ref">parent)) {
170ne" n2"> 956  comm. * SCSI scan helperclass="ref">parent)) {
1706e" n2"> 956  comm. */srass="ref">parent)) {
170ne" name="L937"> 937
170ne" nstatic339"> 839static sct usersscanref="+code=dev_sct usersscansref"port_alloc_num(strScef=Ho href="+code=phy_Sref=Ho hlass="sref">sas_physcx_unlock(&uiame="L937"> 937
170ne" name="L91ame="L96sref">sas_phy<>EXPORT_SYMBOL 937
171se" nsref">parent)) {
1711e" name="L88port_alloc_num(strsct ho h_at">f href="+code=desct ho h_at">fclass="sref">devicerphyf href="+code=de"o_sct ho h_at">fsref">EXPORT_SYMBOLparent)) {
1712e" name="L88port_alloc_num(strsct /a>(device(parent)) {
171ne" name="L933"> 933
171ne" name="L96ex_unlock(&mutex_lockref="+code=dev_mutex_locksref"">mutex_unlock(&sct ho href="+code=phy_sct ho hy" cass="sref">port-lockref="+code=dev_locksreflaref">parent)) {
1715e" name="L96sref">sas_phyEXPORT_SYMBOL(mutex_unlock(&_phyho href="+code=phy_sct ho hy" cass="sref">port-/a>(_lisa href="+code=pa/a>(_lisasref><>EXPORT_SYMBOLparent)) {
1716e" name="L962"> 962<4"> ="sref">rphy(port- dentif(devrphyparent)) {
171ne" name="L955555555l"L96sref">sas_phy(port-href="argetsih=sas_port_allochref="argetsihv" casss-1)ref">parent)) {
171ne" name="L91926<926<<<<<<<<parent)) {
171ne" name="L909"> 909
172se" name="L962"> 926<4">  ="sref">rphyrphy(&channelref="+code=dev_channely" c =ss0) ">mut">mutref">parent)) {
1721e" name="L926"> 926<<<<< ="sref">rphyrphy(& d=sas_port_allocihv" c =ss="sref">rphy(port-href="argetsih=sas_port_allochref="argetsihv" c)l sref">parent)) {
172ne" name="L962"> 962<"L91926<>EXPORT_SYMBOLmutex_unlock(&ra>(port->ref">parent)) {
1723e" name="L962"> 962<<<<<<<<<<<<<<<<<<<<<<<<<<="sref">rphy(port-href="argetsih=sas_port_allochref="argetsihv" c><>EXPORT_SYMBOLparent)) {
172ne" name="L966"> 926 892}
1725e" name="L96ame="L892"> 892}
1726e" name="L96>EXPORT_SYMBOLmutex_unlock(&sct ho href="+code=phy_sct ho hy" cass="sref">port-lockref="+code=dev_locksreflaref">parent)) {
172ne" name="L937"> 937
172ne" name="L914"> 9340aref">parent)) {
172ne" name="L892"> 892}
173se" name="L933"> 933
1731e" nref">parent)) {
173ne" n2"> 956  comm./*srass="ref">parent)) {
1733e" na"> 956  comm. * S"> p / Teardow956/a>srass="ref">parent)) {
 9337_sa>175t /a>(_frea  -  frea a SAS re/srass="ref">parent)) {
173ne" name="L937"> 937
1736e" n#def ids="sref">rphyEXPORT_SYMBOLbref="+code=phy_at">bv" c><>EXPORT_SYMBOL<>EXPORT_SYMBOL<>EXPORT_SYMBOL 937
173ne" name="L95 839static i=sas_port_allociy" cass="sref">port-p 93ate_=sas_port_allocp 93ate_e" n##at">b[cx_unlock(&courphy_=sas_port_allocnameat">_e" n##fielh;           \ame="L937"> 937
173ne" name="L918"> 918    i=sas_port_allociy" cass="sref">port-p 93ate_=sas_port_allocp 93ate_e" n##at">b[cx_unlock(&coudevref="+code=phy_at">" cllass="sref">devsr cass="sref">rphy 937
1739e" name="L918"> 918    i=sas_port_allociy" cass="sref">port-at">bref="+code=phy_at">bv" c[cx_unlock(&coumutex_unlock(&i=sas_port_allociy" cass="sref">port-p 93ate_=sas_port_allocp 93ate_e" n##at">b[cx_unlock(&cou 937
174se" name="L964"> ="sref">rphy 937
1741e" name="L926"> 926(&cou 937
174ne" nref">parent)) {
1743e" n#def ids="sref">rphyEXPORT_SYMBOLbref="+code=phy_at">bv" c><>EXPORT_SYMBOL<>EXPORT_SYMBOL<>EXPORT_SYMBOLscx_unlock(&ro_te href="+code=phy_ro_te hv" c>scx_unlock(&ro_perm=sas_port_allocro_permv" cl   \ame="L937"> 937
174ne" name="L96ex_unlock(&i=sas_port_allociy" cass="sref">port-p 93ate_=sas_port_allocp 93ate_e" n##at">b[cx_unlock(&courphy_=sas_port_allocnameat">_e" n##fielh;           \ame="L937"> 937
1745e" name="L96sref">sas_phyport-p 93ate_=sas_port_allocp 93ate_e" n##at">b[cx_unlock(&coudevref="+code=phy_at">" cllass="sref">devsr cass="sref">rphy 937
1746e" name="L964"> ="sref">rphy 937
174ne" name="L955555555lloc_num(stri=sas_port_allociy" cass="sref">port-p 93ate_=sas_port_allocp 93ate_e" n##at">b[cx_unlock(&coudevref="+code=phy_at">" cllass="sref">devsr cass="sref">rphy 937
174ne" name="L91926<926(stri=sas_port_allociy" cass="sref">port-p 93ate_=sas_port_allocp 93ate_e" n##at">b[cx_unlock(&coudevrphy 937
1749e" name="L91}                                                               \ame="L937"> 937
175se" name="L919"> 919    i=sas_port_allociy" cass="sref">port-at">bref="+code=phy_at">bv" c[cx_unlock(&coumutex_unlock(&i=sas_port_allociy" cass="sref">port-p 93ate_=sas_port_allocp 93ate_e" n##at">b[cx_unlock(&cou 937
1751e" name="L964"> ="sref">rphy 937
175ne" name="L962"> 962(&cou 937
175ne" name="L933"> 933
175ne" n#def ids="sref">rphyEXPORT_SYMBOL 937
1755e" name="L96sref">sas_phyEXPORT_SYMBOL(_at">f href="+code=de/a>(_at">fv" c><>EXPORT_SYMBOL<>EXPORT_SYMBOL 937
175ne" name="L937"> 937
175ne" n#def ids="sref">rphyEXPORT_SYMBOL<>EXPORT_SYMBOL 937
175ne" name="L918"> 918    nETUP_TEMPLATEref="+code=phy_SETUP_TEMPLATEsref">EXPORT_SYMBOL(_at">f href="+code=de/a>(_at">fv" c><>EXPORT_SYMBOL<>EXPORT_SYMBOL(&i=sas_port_allociy" cass="sref">port-f=sas_port_allocfy" cass="sref">port-func=sas_port_allocfuncv" clame="L937"> 937
175ne" name="L909"> 909
176se" n#def ids="sref">rphyEXPORT_SYMBOL 937
1761e" name="L919"> 919    nETUP_TEMPLATEref="+code=phy_SETUP_TEMPLATEsref">EXPORT_SYMBOL(_at">f href="+code=dea>(_at">fv" c><>EXPORT_SYMBOL<>EXPORT_SYMBOL 937
176ne" nref">parent)) {
1763e" n#def ids="sref">rphyEXPORT_SYMBOL 937
176ne" name="L96ex_unlock(&nETUP_TEMPLATE_RWref="+code=phy_SETUP_TEMPLATE_RWsref">EXPORT_SYMBOL(_at">f href="+code=dea>(_at">fv" c><>EXPORT_SYMBOL<>EXPORT_SYMBOL(&S_IWUSRref="+code=phy_S_IWUSR" cl, 1,       \ame="L937"> 937
1765e" name="L966666666666666666!ex_unlock(&i=sas_port_allociy" cass="sref">port-f=sas_port_allocfy" cass="sref">port-set_a>(_speeh=sas_port_allochet_a>(_speehv" c><>EXPORT_SYMBOL 937
 937
176ne" n#def ids="sref">rphyEXPORT_SYMBOL<>EXPORT_SYMBOL 937
176ne" name="L918"> 918    nETUP_TEMPLATE_RWref="+code=phy_SETUP_TEMPLATE_RWsref">EXPORT_SYMBOL(_at">f href="+code=dea>(_at">fv" c><>EXPORT_SYMBOL<>EXPORT_SYMBOL(&S_IWUSRref="+code=phy_S_IWUSR" cl, 1,       \ame="L937"> 937
176ne" name="L91ame="L966666666666!ex_unlock(&i=sas_port_allociy" cass="sref">port-f=sas_port_allocfy" cass="sref">port-func=sas_port_allocfuncv" c><>EXPORT_SYMBOL 937
177se" name="L933"> 933
1771e" n#def ids="sref">rphyEXPORT_SYMBOL 937
177ne" name="L96        strnETUP_TEMPLATEref="+code=phy_SETUP_TEMPLATEsref">EXPORT_SYMBOLf href="+code=dears/sat">fv" c><>EXPORT_SYMBOL<>EXPORT_SYMBOL 937
177ne" name="L933"> 933
177ne" n#def ids="sref">rphyEXPORT_SYMBOL<>EXPORT_SYMBOL 937
1775e" name="L96sref">sas_phyEXPORT_SYMBOL(_at">f href="+code=dea>(_at">fv" c><>EXPORT_SYMBOL<>EXPORT_SYMBOL(&i=sas_port_allociy" cass="sref">port-f=sas_port_allocfy" cass="sref">port-func=sas_port_allocfuncv" clame="L937"> 937
177ne" name="L937"> 937
177ne" n#def ids="sref">rphyEXPORT_SYMBOL 937
177ne" name="L918"> 918    nETUP_TEMPLATEref="+code=phy_SETUP_TEMPLATEsref">EXPORT_SYMBOL(_at">f href="+code=dea>(_at">fv" c><>EXPORT_SYMBOL<>EXPORT_SYMBOL 937
177ne" name="L909"> 909
178se" n#def ids="sref">rphyEXPORT_SYMBOL<>EXPORT_SYMBOL 937
1781e" name="L919"> 919    nETUP_TEMPLATEref="+code=phy_SETUP_TEMPLATEsref">EXPORT_SYMBOL(_at">f href="+code=dea>(_at">fv" c><>EXPORT_SYMBOL<>EXPORT_SYMBOL(&i=sas_port_allociy" cass="sref">port-f=sas_port_allocfy" cass="sref">port-func=sas_port_allocfuncv" clame="L937"> 937
178ne" nref">parent)) {
1783e" n#def ids="sref">rphyEXPORT_SYMBOL 937
178ne" name="L96ex_unlock(&nETUP_TEMPLATEref="+code=phy_SETUP_TEMPLATEsref">EXPORT_SYMBOLf href="+code=deendsuct_at">fv" c><>EXPORT_SYMBOL<>EXPORT_SYMBOL 937
178ne" name="L937"> 937
1786e" n#def ids="sref">rphyEXPORT_SYMBOL 937
178ne" name="L95 839static nETUP_TEMPLATEref="+code=phy_SETUP_TEMPLATEsref">EXPORT_SYMBOLf href="+code=deexe="dersat">fv" c><>EXPORT_SYMBOL<>EXPORT_SYMBOL 937
1788e" nref">parent)) {
178ne" na"> 956  comm./**class="ref">parent)) {
179se" na"> 956  comm. * hassat"ach "drivers/  -  instantiate SAS "drivers/ templat>srass="ref">parent)) {
1791e" na"> 956  comm. * @ft:me="L91l SAS "drivers/ 6 function templat>srass="ref">parent)) {
179ne" n2"> 956  comm. */srass="ref">parent)) {
1793e" nport_alloc_num(strsref="drivers/stemplat>=sas_port_allochref="drivers/stemplat>e" na*ref">parent)) {
179ne" na/a>        strhassat"ach "drivers/=sas_port_allochassat"ach "drivers/sref"port_alloc_num(strsct functionstemplat>=sas_port_allochct functionstemplat>e" na*>EXPORT_SYMBOL 937
179ne" nsref">parent)) {
1796e" name="L96port_alloc_num(strsct internalref="+code=dev_sct internale" na*>EXPORT_SYMBOLparent)) {
179ne" name="L9539"> 839static couparent)) {
1798e" nref">parent)) {
1799e" name="L918"> 918    i=sas_port_allociy" cass="sref">rphy(strsct internalref="+code=dev_sct internale" n)><>EXPORT_SYMBOLparent)) {
180se" name="L964"> !ex_unlock(&i=sas_port_allociy" clame="L937"> 937
1801e" name="L926"> 926<4"> 934"sref">BUG_ONparent)) {
180ne" nref">parent)) {
1803e" name="L96sref">port-i=sas_port_allociy" cass="sref">port-href="+code=phy_ty" class="sref">devrphyparent)) {
180ne" nref">parent)) {
1805e" name="L96sref">sas_phyport-href="+code=phy_ty" class="sref">devf href="+code=deho h_at">fsreflass="sref">devdevf href="+code=deat">fclassss">mutex_unlock(&i=sas_port_allociy" cass="sref">port-ho h_at">f href="+code=deho h_at">fsref[0]aref">parent)) {
1806e" name="L96>EXPORT_SYMBOLport-href="+code=phy_ty" class="sref">devf href="+code=deho h_at">fsreflass="sref">devdevmutex_unlock(&sct ho h_as_po href="+code=pasct ho h_as_posreflass="sref">devparent)) {
180ne" name="L95 839static i=sas_port_allociy" cass="sref">port-href="+code=phy_ty" class="sref">devf href="+code=deho h_at">fsreflass="sref">devdevrphyparent)) {
180ne" name="L918"> 918    "drivers/sconta idrsregisterref="+code=phy_tdrivers/sconta idrsregistersref"">mutex_unlock(&i=sas_port_allociy" cass="sref">port-href="+code=phy_ty" class="sref">devf href="+code=deho h_at">fsref)aref">parent)) {
1809e" name="L918"> 918    i=sas_port_allociy" cass="sref">port-href="+code=phy_ty" class="sref">dev(strsct ho h_at">f href="+code=desct ho h_at">fclas)aref">parent)) {
181se" name="L933"> 933
1811e" name="L919"> 919    i=sas_port_allociy" cass="sref">port-p>(_at">scont href="+code=dea>(_at">scontsreflass="sref">devdevmutex_unlock(&sct a>(_as_po href="+code=pasct a>(_as_posreflass="sref">devparent)) {
181ne" name="L96        stri=sas_port_allociy" cass="sref">port-p>(_at">scont href="+code=dea>(_at">scontsreflass="sref">devdevf href="+code=deat">fclassss">mutex_unlock(&i=sas_port_allociy" cass="sref">port-a>(_at">f href="+code=dea>(_at">fv" c[0]aref">parent)) {
1813e" name="L96sref">port-i=sas_port_allociy" cass="sref">port-p>(_at">scont href="+code=dea>(_at">scontsreflass="sref">devdevrphy(_match=sas_port_allocsct a>(_matchclasaref">parent)) {
181ne" name="L96ex_unlock(&"drivers/sconta idrsregisterref="+code=phy_tdrivers/sconta idrsregistersref"">mutex_unlock(&i=sas_port_allociy" cass="sref">port-p>(_at">scont href="+code=dea>(_at">scontsref)aref">parent)) {
181ne" name="L937"> 937
1816e" name="L96>EXPORT_SYMBOLport-ars/sat">scont href="+code=dears/sat">scontsreflass="sref">devdevmutex_unlock(&sct ars/scs_po href="+code=pasct ars/scs_posreflass="sref">devparent)) {
181ne" name="L95 839static i=sas_port_allociy" cass="sref">port-prs/sat">scont href="+code=dears/sat">scontsreflass="sref">devdevf href="+code=deat">fclassss">mutex_unlock(&i=sas_port_allociy" cass="sref">port-ars/sat">f href="+code=dears/sat">fv" c[0]aref">parent)) {
181ne" name="L918"> 918    i=sas_port_allociy" cass="sref">port-prs/sat">scont href="+code=dears/sat">scontsreflass="sref">devdevrphyparent)) {
1819e" name="L918"> 918    "drivers/sconta idrsregisterref="+code=phy_tdrivers/sconta idrsregistersref"">mutex_unlock(&i=sas_port_allociy" cass="sref">port-prs/sat">scont href="+code=dears/sat">scontsref)aref">parent)) {
182se" name="L933"> 933
1821e" name="L919"> 919    i=sas_port_allociy" cass="sref">port-rp>(_at">scont href="+code=dera>(_at">scontsreflass="sref">devdevmutex_unlock(&sct ra>(_as_po href="+code=pasct ra>(_as_posreflass="sref">devparent)) {
182ne" name="L96        stri=sas_port_allociy" cass="sref">port-rp>(_at">scont href="+code=dera>(_at">scontsreflass="sref">devdevf href="+code=deat">fclassss">mutex_unlock(&i=sas_port_allociy" cass="sref">port-/a>(_at">f href="+code=de/a>(_at">fv" c[0]aref">parent)) {
1823e" name="L96sref">port-i=sas_port_allociy" cass="sref">port-rp>(_at">scont href="+code=dera>(_at">scontsreflass="sref">devdevrphy(_match=sas_port_allocsct ra>(_matchclasaref">parent)) {
182ne" name="L96ex_unlock(&"drivers/sconta idrsregisterref="+code=phy_tdrivers/sconta idrsregistersref"">mutex_unlock(&i=sas_port_allociy" cass="sref">port-rp>(_at">scont href="+code=dera>(_at">scontsref)aref">parent)) {
182ne" name="L937"> 937
1826e" name="L96>EXPORT_SYMBOLport-endsuct_at">scont href="+code=deendsuct_at">scontsreflass="sref">devdevmutex_unlock(&sct endsuct_as_po href="+code=pasct endsuct_as_posreflass="sref">devparent)) {
182ne" name="L95 839static i=sas_port_allociy" cass="sref">port-endsuct_at">scont href="+code=deendsuct_at">scontsreflass="sref">devdevf href="+code=deat">fclassss">mutex_unlock(&i=sas_port_allociy" cass="sref">port-endsuct_at">f href="+code=deendsuct_at">fv" c[0]aref">parent)) {
182ne" name="L918"> 918    i=sas_port_allociy" cass="sref">port-endsuct_at">scont href="+code=deendsuct_at">scontsreflass="sref">devdevrphyparent)) {
1829e" name="L918"> 918    "drivers/sconta idrsregisterref="+code=phy_tdrivers/sconta idrsregistersref"">mutex_unlock(&i=sas_port_allociy" cass="sref">port-endsuct_at">scont href="+code=deendsuct_at">scontsref)aref">parent)) {
183se" name="L933"> 933
1831e" name="L919"> 919    i=sas_port_allociy" cass="sref">port-exe="dersat">scont href="+code=deexe="dersat">scontsreflass="sref">devdevmutex_unlock(&sct exe="dersas_po href="+code=pasct exe="dersas_posreflass="sref">devparent)) {
183ne" name="L96        stri=sas_port_allociy" cass="sref">port-exe="dersat">scont href="+code=deexe="dersat">scontsreflass="sref">devdevf href="+code=deat">fclassss">mutex_unlock(&i=sas_port_allociy" cass="sref">port-exe="dersat">f href="+code=deexe="dersat">fv" c[0]aref">parent)) {
1833e" name="L96sref">port-i=sas_port_allociy" cass="sref">port-exe="dersat">scont href="+code=deexe="dersat">scontsreflass="sref">devdevrphyparent)) {
 9338_sa>183ne" name="L96ex_unlock(&"drivers/sconta idrsregisterref="+code=phy_tdrivers/sconta idrsregistersref"">mutex_unlock(&i=sas_port_allociy" cass="sref">port-exe="dersat">scont href="+code=deexe="dersat">scontsref)aref">parent)) {
183ne" name="L937"> 937
1836e" name="L96>EXPORT_SYMBOLport-f=sas_port_allocfy" cass="sref">rphyparent)) {
183ne" name="L937"> 937
183ne" name="L918"> 918    couparent)) {
1839e" name="L918"> 918    nETUP_PHYcATTRIBUTEref="+code=phy_SETUP_PHYcATTRIBUTEsref">EXPORT_SYMBOLparent)) {
184se" name="L919"> 919    nETUP_PHYcATTRIBUTEref="+code=phy_SETUP_PHYcATTRIBUTEsref">EXPORT_SYMBOL<"argetsars/sprotocolf href="+code=de"argetsars/sprotocolfsref)aref">parent)) {
1841e" name="L919"> 919    nETUP_PHYcATTRIBUTEref="+code=phy_SETUP_PHYcATTRIBUTEsref">EXPORT_SYMBOLparent)) {
184ne" name="L96        strnETUP_PHYcATTRIBUTEref="+code=phy_SETUP_PHYcATTRIBUTEsref">EXPORT_SYMBOLparent)) {
1843e" name="L96sref">port-nETUP_PHYcATTRIBUTEref="+code=phy_SETUP_PHYcATTRIBUTEsref">EXPORT_SYMBOL(_identifierref="+code=phy_a>(_identifierclas)aref">parent)) {
184ne" name="L96e"> 956  comm.//SETUP_PHYcATTRIBUTE(ers/sidentifier);srass="ref">parent)) {
1845e" name="L96sref">sas_phyEXPORT_SYMBOL=sas_port_allocnegotiated_" ikrat>clas)aref">parent)) {
1846e" name="L96>EXPORT_SYMBOLEXPORT_SYMBOL_hw=sas_port_allocminimum_" ikrat>_hwclas)aref">parent)) {
184ne" name="L95 839static nETUP_PHYcATTRIBUTE_RWref="+code=phy_SETUP_PHYcATTRIBUTE_RWsref">EXPORT_SYMBOL=sas_port_allocminimum_" ikrat>clas)aref">parent)) {
184ne" name="L918"> 918    nETUP_PHYcATTRIBUTEref="+code=phy_SETUP_PHYcATTRIBUTEsref">EXPORT_SYMBOL_hw=sas_port_allocmaximum_" ikrat>_hwclas)aref">parent)) {
1849e" name="L918"> 918    nETUP_PHYcATTRIBUTE_RWref="+code=phy_SETUP_PHYcATTRIBUTE_RWsref">EXPORT_SYMBOL=sas_port_allocmaximum_" ikrat>clas)aref">parent)) {
185se" name="L933"> 933
1851e" name="L919"> 919    nETUP_PHYcATTRIBUTEref="+code=phy_SETUP_PHYcATTRIBUTEsref">EXPORT_SYMBOLparent)) {
185ne" name="L96        strnETUP_PHYcATTRIBUTEref="+code=phy_SETUP_PHYcATTRIBUTEsref">EXPORT_SYMBOLparent)) {
1853e" name="L96sref">port-nETUP_PHYcATTRIBUTEref="+code=phy_SETUP_PHYcATTRIBUTEsref">EXPORT_SYMBOLparent)) {
185ne" name="L96ex_unlock(&nETUP_PHYcATTRIBUTEref="+code=phy_SETUP_PHYcATTRIBUTEsref">EXPORT_SYMBOL(_repe/sproblem_couparent)) {
1855e" name="L96sref">sas_phyEXPORT_SYMBOL<" ik_repe/ href="+code=pal ik_repe/sref><>EXPORT_SYMBOL

(_repe/ href="+code=paa>(_repe/clas)aref">parent)) { 1856e" name="L96>EXPORT_SYMBOLEXPORT_SYMBOL(_repe/clas)aref">parent)) { 185ne" name="L95 839static nETUP_OPTIONAL_PHYcATTRIBUTE_RWref="+code=phy_SETUP_OPTIONAL_PHYcATTRIBUTE_RWsref">EXPORT_SYMBOL(_enableclas)aref">parent)) { 185ne" name="L918"> 918 i=sas_port_allociy" cass="sref">port-a>(_at">f href="+code=dea>(_at">fv" c[8"> 918 courphyparent)) { 185ne" name="L909"> 909 186se" name="L919"> 919 couparent)) { 1861e" name="L919"> 919 nETUP_PL" cATTRIBUTEref="+code=phy_SETUP_OL" cATTRIBUTEsref">EXPORT_SYMBOL(f href="+code=denum_a>(fclas)aref">parent)) { 186ne" name="L96 stri=sas_port_allociy" cass="sref">port-prs/sat">f href="+code=dears/sat">fv" c[8"> 918 courphyparent)) { 186ne" name="L933"> 933 186ne" name="L96ex_unlock(&couparent)) { 1865e" name="L96sref">sas_phyEXPORT_SYMBOL(_initiator ars/sprotocolf href="+code=dera>(_initiator ars/sprotocolfclas)aref">parent)) { EXPORT_SYMBOL(_"argetsars/sprotocolf href="+code=dera>(_"argetsars/sprotocolfclas)aref">parent)) { 186ne" name="L95 839static nETUP_ROL" cATTRIBUTEref="+code=phy_SETUP_ROL" cATTRIBUTEsref">EXPORT_SYMBOL(_vice" _typeparent)) { 186ne" name="L918"> 918 nETUP_ROL" cATTRIBUTEref="+code=phy_SETUP_ROL" cATTRIBUTEsref">EXPORT_SYMBOL(_hassaddrepo href="+code=para>(_hassaddrepoclas)aref">parent)) { 1869e" name="L918"> 918 nETUP_ROL" cATTRIBUTEref="+code=phy_SETUP_ROL" cATTRIBUTEsref">EXPORT_SYMBOL(_a>(_identifierref="+code=phy_ra>(_a>(_identifierclas)aref">parent)) { 187se" name="L919"> 919 nETUP_OPTIONAL_ROL" cATTRIBUTEref="+code=phy_SETUP_OPTIONAL_ROL" cATTRIBUTEsref">EXPORT_SYMBOL(_enclosure_identifierref="+code=phy_ra>(_enclosure_identifiersref>ref">parent)) { 1871e" name="L926"> 926<<<<<<<<<<<<<<<<<<<<<<<<>EXPORT_SYMBOLparent)) { 187ne" name="L96 strnETUP_OPTIONAL_ROL" cATTRIBUTEref="+code=phy_SETUP_OPTIONAL_ROL" cATTRIBUTEsref">EXPORT_SYMBOL(_ba(_identifierref="+code=phy_ra>(_ba(_identifiersref>ref">parent)) { 1873e" name="L926"> 926<<<<<<<<<<<<<<<<<<<<<<<<>EXPORT_SYMBOLparent)) { 187ne" name="L96ex_unlock(&i=sas_port_allociy" cass="sref">port-/a>(_at">f href="+code=de/a>(_at">fv" c[8"> 918 courphyparent)) { 187ne" name="L937"> 937 1876e" name="L96>EXPORT_SYMBOLparent)) { 187ne" name="L95 839static nETUP_END_DEVcATTRIBUTEref="+code=phy_SETUP_END_DEVcATTRIBUTEsref">EXPORT_SYMBOLparent)) { 187ne" name="L918"> 918 nETUP_END_DEVcATTRIBUTEref="+code=phy_SETUP_END_DEVcATTRIBUTEsref">EXPORT_SYMBOLparent)) { 1879e" name="L918"> 918 nETUP_END_DEVcATTRIBUTEref="+code=phy_SETUP_END_DEVcATTRIBUTEsref">EXPORT_SYMBOLparent)) { 188se" name="L919"> 919 nETUP_END_DEVcATTRIBUTEref="+code=phy_SETUP_END_DEVcATTRIBUTEsref">EXPORT_SYMBOLparent)) { 1881e" name="L919"> 919 nETUP_END_DEVcATTRIBUTEref="+code=phy_SETUP_END_DEVcATTRIBUTEsref">EXPORT_SYMBOLparent)) { 188ne" name="L96 stri=sas_port_allociy" cass="sref">port-endsuct_at">f href="+code=deendsuct_at">fv" c[8"> 918 courphyparent)) { 188ne" name="L933"> 933 188ne" name="L96ex_unlock(&couparent)) { 1885e" name="L96sref">sas_phyEXPORT_SYMBOLparent)) { 1886e" name="L96>EXPORT_SYMBOLEXPORT_SYMBOLparent)) { 188ne" name="L95 839static nETUP_EXPANDER_ATTRIBUTEref="+code=phy_SETUP_EXPANDER_ATTRIBUTEsref">EXPORT_SYMBOLparent)) { 188ne" name="L918"> 918 nETUP_EXPANDER_ATTRIBUTEref="+code=phy_SETUP_EXPANDER_ATTRIBUTEsref">EXPORT_SYMBOLparent)) { 1889e" name="L918"> 918 nETUP_EXPANDER_ATTRIBUTEref="+code=phy_SETUP_EXPANDER_ATTRIBUTEsref">EXPORT_SYMBOLparent)) { 189se" name="L919"> 919 nETUP_EXPANDER_ATTRIBUTEref="+code=phy_SETUP_EXPANDER_ATTRIBUTEsref">EXPORT_SYMBOLparent)) { 1891e" name="L919"> 919 nETUP_EXPANDER_ATTRIBUTEref="+code=phy_SETUP_EXPANDER_ATTRIBUTEsref">EXPORT_SYMBOLparent)) { 189ne" name="L96 stri=sas_port_allociy" cass="sref">port-exe="dersat">f href="+code=deexe="dersat">fv" c[8"> 918 courphyparent)) { 189ne" name="L933"> 933 189ne" name="L964"> 934">mutex_unlock(&i=sas_port_allociy" cass="sref">port-href="+code=phy_ty" caref">parent)) { 189ne" n}ref">parent)) { 1896e" nsref">port-EXPL" cSYMBO EXPORT_SYMBOLparent)) { 189ne" name="L937"> 937 1898e" na"> 956 comm./**class="ref">parent)) { 189ne" na"> 956 comm. * hassrelease_tdrivers/ - release SAS "drivers/ templat> instanc>srass="ref">parent)) { 190se" na"> 956 comm. * @t:me="L91l "drivers/ templat> instanc>srass="ref">parent)) { 1901e" na"> 956 comm. */srass="ref">parent)) { 190ne" nvoids="sref">rphy(strsref="drivers/stemplat>=sas_port_allochref="drivers/stemplat>e" na*sref">port-href="+code=phy_ty" clame="L937"> 937 1903e" nsref">parent)) { 190ne" name="L96port_alloc_num(strsct internalref="+code=dev_sct internale" na*>EXPORT_SYMBOLrphyEXPORT_SYMBOLparent)) { 190ne" name="L937"> 937 1906e" name="L96>EXPORT_SYMBOLmutex_unlock(&i=sas_port_allociy" cass="sref">port-href="+code=phy_ty" class="sref">devf href="+code=deho h_at">fsref)aref">parent)) { 190ne" name="L95 839static tdrivers/sconta idrsunregisterref="+code=phy_tdrivers/sconta idrsunregistersref"">mutex_unlock(&i=sas_port_allociy" cass="sref">port-p>(_at">scont href="+code=dea>(_at">scontsref)aref">parent)) { 190ne" name="L918"> 918 "drivers/sconta idrsunregisterref="+code=phy_tdrivers/sconta idrsunregistersref"">mutex_unlock(&i=sas_port_allociy" cass="sref">port-prs/sat">scont href="+code=dears/sat">scontsref)aref">parent)) { 1909e" name="L918"> 918 "drivers/sconta idrsunregisterref="+code=phy_tdrivers/sconta idrsunregistersref"">mutex_unlock(&i=sas_port_allociy" cass="sref">port-rp>(_at">scont href="+code=dera>(_at">scontsref)aref">parent)) { 191se" name="L919"> 919 "drivers/sconta idrsunregisterref="+code=phy_tdrivers/sconta idrsunregistersref"">mutex_unlock(&i=sas_port_allociy" cass="sref">port-endsuct_at">scont href="+code=deendsuct_at">scontsref)aref">parent)) { 1911e" name="L919"> 919 "drivers/sconta idrsunregisterref="+code=phy_tdrivers/sconta idrsunregistersref"">mutex_unlock(&i=sas_port_allociy" cass="sref">port-exe="dersat">scont href="+code=deexe="dersat">scontsref)aref">parent)) { 191ne" nref">parent)) { 1913e" name="L96sref">port-kfre>=sas_port_allockfre>sref">EXPORT_SYMBOLparent)) { 191ne" n}ref">parent)) { 191ne" nsref">port-EXPL" cSYMBO EXPORT_SYMBOLparent)) { 1916e" nref">parent)) { 191ne" nstatic6sref">port-__init=sas_port_alloc__inite" na39"> 839static hass"drivers/sinit=sas_port_allochass"drivers/sinitsref"voidlame="L937"> 937 191ne" nsref">parent)) { 1919e" name="L9139"> 839static error href="+code=deerrory" caref">parent)) { 192se" name="L933"> 933 1921e" name="L919"> 919 error href="+code=deerrory" cass="sref">rphymutex_unlock(&sct ho h_as_po href="+code=pasct ho h_as_posreflaref">parent)) { 192ne" name="L964"> 9"> 919 error href="+code=deerrory" clame="L937"> 937 1923e" name="L926"> 926rphyparent)) { 192ne" name="L96ex_unlock(&error href="+code=deerrory" cass="sref">rphymutex_unlock(&sct a>(_as_po href="+code=pasct a>(_as_posreflaref">parent)) { 1925e" name="L964"> 9"> 919 error href="+code=deerrory" clame="L937"> 937 1926e" name="L966"> 926rphyparent)) { 192ne" name="L95 839static error href="+code=deerrory" cass="sref">rphymutex_unlock(&sct ars/scef=" href="+code=pasct ars/scef="sreflaref">parent)) { 192ne" name="L914"> 9"> 919 error href="+code=deerrory" clame="L937"> 937 1929e" name="L916"> 926rphy(=sas_port_allocoutsunregister_a>(clasaref">parent)) { 193se" name="L919"> 919 error href="+code=deerrory" cass="sref">rphymutex_unlock(&sct ra>(_as_po href="+code=pasct ra>(_as_posreflaref">parent)) { 1931e" name="L914"> 9"> 919 error href="+code=deerrory" clame="L937"> 937 193ne" name="L966"> 926rphyparent)) { 1933e" name="L96sref">port-error href="+code=deerrory" cass="sref">rphymutex_unlock(&sct endsuct_as_po href="+code=pasct endsuct_as_posreflaref">parent)) { 9339_sa>193ne" name="L964"> 9"> 919 error href="+code=deerrory" clame="L937"> 937 1935e" name="L966"> 926rphy(=sas_port_allocoutsunregister_ra>(clasaref">parent)) { 1936e" name="L96>EXPORT_SYMBOLrphymutex_unlock(&sct exe="dersas_po href="+code=pasct exe="dersas_posreflaref">parent)) { 1937e" name="L964"> 9"> 919 error href="+code=deerrory" clame="L937"> 937 193ne" name="L916"> 926rphyparent)) { 193ne" name="L909"> 909 194se" name="L914"> 9340aref">parent)) { 1941e" nref">parent)) { 194ne" na="sref">rphyparent)) { 1943e" name="L96sref">port-tdrivers/scef="sunregisterref="+code=phy_tdrivers/scef="sunregistersref"">mutex_unlock(&sct endsuct_as_po href="+code=pasct endsuct_as_posreflaref">parent)) { 194ne" na="sref">rphy(=sas_port_allocoutsunregister_ra>(clas:ref">parent)) { 1945e" name="L96sref">sas_phymutex_unlock(&sct ra>(_as_po href="+code=pasct ra>(_as_posreflaref">parent)) { 1946e" na="sref">rphyparent)) { 194ne" name="L95 839static tdrivers/scef="sunregisterref="+code=phy_tdrivers/scef="sunregistersref"">mutex_unlock(&sct ars/scef=" href="+code=pasct ars/scef="sreflaref">parent)) { 194ne" na="sref">rphy(=sas_port_allocoutsunregister_a>(clas:ref">parent)) { 1949e" name="L918"> 918 tdrivers/scef="sunregisterref="+code=phy_tdrivers/scef="sunregistersref"">mutex_unlock(&sct a>(_as_po href="+code=pasct a>(_as_posreflaref">parent)) { 195se" ns="sref">rphyparent)) { 1951e" name="L919"> 919 tdrivers/scef="sunregisterref="+code=phy_tdrivers/scef="sunregistersref"">mutex_unlock(&sct ho h_as_po href="+code=pasct ho h_as_posreflaref">parent)) { 195ne" na="sref">rphyparent)) { 1953e" name="L964"> 934 839static error href="+code=deerrory" caref">parent)) { 195ne" nref">parent)) { 195ne" n}ref">parent)) { 1956e" nref">parent)) { 195ne" nstatic6voids="sref">rphyrphy 937 195ne" nsref">parent)) { 1959e" name="L918"> 918 tdrivers/scef="sunregisterref="+code=phy_tdrivers/scef="sunregistersref"">mutex_unlock(&sct ho h_as_po href="+code=pasct ho h_as_posreflaref">parent)) { 196se" name="L919"> 919 tdrivers/scef="sunregisterref="+code=phy_tdrivers/scef="sunregistersref"">mutex_unlock(&sct a>(_as_po href="+code=pasct a>(_as_posreflaref">parent)) { 1961e" name="L919"> 919 tdrivers/scef="sunregisterref="+code=phy_tdrivers/scef="sunregistersref"">mutex_unlock(&sct ars/scef=" href="+code=pasct ars/scef="sreflaref">parent)) { 196ne" name="L96 strtdrivers/scef="sunregisterref="+code=phy_tdrivers/scef="sunregistersref"">mutex_unlock(&sct ra>(_as_po href="+code=pasct ra>(_as_posreflaref">parent)) { 1963e" name="L96sref">port-tdrivers/scef="sunregisterref="+code=phy_tdrivers/scef="sunregistersref"">mutex_unlock(&sct endsuct_as_po href="+code=pasct endsuct_as_posreflaref">parent)) { 196ne" name="L96ex_unlock(&tdrivers/scef="sunregisterref="+code=phy_tdrivers/scef="sunregistersref"">mutex_unlock(&sct exe="dersas_po href="+code=pasct exe="dersas_posreflaref">parent)) { 196ne" n}ref">parent)) { parent)) { 196ne" nex_unlock(&MODULE_AUTHOR href="+code=paMODULE_AUTHORsref">"> 956 string >"Christoph Hellwig"srass="laref">parent)) { 196ne" nex_unlock(&MODULE_DESCRIPTION href="+code=paMODULE_DESCRIPTIONsref">"> 956 string >"SAS Tdrivers/ Attributes"srass="laref">parent)) { 1969e" nex_unlock(&MODULE_LICENSEref="+code=phy_MODULE_LICENSEsref">"> 956 string >"GPL"srass="laref">parent)) { 197se" name="L933"> 933 1971e" nex_unlock(&modulesinit=sas_port_allocmodulesinitsref">EXPORT_SYMBOLparent)) { 197ne" nex_unlock(&modulesexit=sas_port_allocmodulesexitsref">EXPORT_SYMBOLparent)) { 1973e" n

The original LXR software by the ef">parenhttp://sourceforge.net/projects/lxrr>LXR communit(clas, this exeerim.))ion by ef">parenmailto:lxr@" iux.no">lxr@" iux.noclas.
lxr." iux.no kindly ho hed by ef">parenhttp://www.redpill-" ipro.no">Redpill L ipro ASclas, provider of L iux consulting ="d oeerations serce" s since 1995.