linux/drivers/scsi/megaraid.h
<<
>>
Prefs
   1/* SPDX-License-Identifier: GPL-2.0 */
   2#ifndef __MEGARAID_H__
   3#define __MEGARAID_H__
   4
   5#include <linux/spinlock.h>
   6#include <linux/mutex.h>
   7
   8#define MEGARAID_VERSION        \
   9        "v2.00.4 (Release Date: Thu Feb 9 08:51:30 EST 2006)\n"
  10
  11/*
  12 * Driver features - change the values to enable or disable features in the
  13 * driver.
  14 */
  15
  16/*
  17 * Command coalescing - This feature allows the driver to be able to combine
  18 * two or more commands and issue as one command in order to boost I/O
  19 * performance. Useful if the nature of the I/O is sequential. It is not very
  20 * useful for random natured I/Os.
  21 */
  22#define MEGA_HAVE_COALESCING    0
  23
  24/*
  25 * Clustering support - Set this flag if you are planning to use the
  26 * clustering services provided by the megaraid controllers and planning to
  27 * setup a cluster
  28 */
  29#define MEGA_HAVE_CLUSTERING    1
  30
  31/*
  32 * Driver statistics - Set this flag if you are interested in statics about
  33 * number of I/O completed on each logical drive and how many interrupts
  34 * generated. If enabled, this information is available through /proc
  35 * interface and through the private ioctl. Setting this flag has a
  36 * performance penalty.
  37 */
  38#define MEGA_HAVE_STATS         0
  39
  40/*
  41 * Enhanced /proc interface - This feature will allow you to have a more
  42 * detailed /proc interface for megaraid driver. E.g., a real time update of
  43 * the status of the logical drives, battery status, physical drives etc.
  44 */
  45#define MEGA_HAVE_ENH_PROC      1
  46
  47#define MAX_DEV_TYPE    32
  48
  49#define PCI_DEVICE_ID_DISCOVERY         0x000E
  50#define PCI_DEVICE_ID_PERC4_DI          0x000F
  51#define PCI_DEVICE_ID_PERC4_QC_VERDE    0x0407
  52
  53#define HBA_SIGNATURE                   0x3344
  54#define HBA_SIGNATURE_471               0xCCCC
  55#define HBA_SIGNATURE_64BIT             0x0299
  56
  57#define MBOX_BUSY_WAIT                  10      /* wait for up to 10 usec for
  58                                                   mailbox to be free */
  59#define DEFAULT_INITIATOR_ID    7
  60
  61#define MAX_SGLIST              64      /* max supported in f/w */
  62#define MIN_SGLIST              26      /* guaranteed to support these many */
  63#define MAX_COMMANDS            126
  64#define CMDID_INT_CMDS          MAX_COMMANDS+1  /* make sure CMDID_INT_CMDS
  65                                                is less than max commands
  66                                                supported by any f/w */
  67
  68#define MAX_CDB_LEN             10
  69#define MAX_EXT_CDB_LEN         16      /* we support cdb length up to 16 */
  70
  71#define DEF_CMD_PER_LUN         63
  72#define MAX_CMD_PER_LUN         MAX_COMMANDS
  73#define MAX_FIRMWARE_STATUS     46
  74#define MAX_XFER_PER_CMD        (64*1024)
  75#define MAX_SECTORS_PER_IO      128
  76
  77#define MAX_LOGICAL_DRIVES_40LD         40
  78#define FC_MAX_PHYSICAL_DEVICES         256
  79#define MAX_LOGICAL_DRIVES_8LD          8
  80#define MAX_CHANNELS                    5
  81#define MAX_TARGET                      15
  82#define MAX_PHYSICAL_DRIVES             MAX_CHANNELS*MAX_TARGET
  83#define MAX_ROW_SIZE_40LD               32
  84#define MAX_ROW_SIZE_8LD                8
  85#define MAX_SPAN_DEPTH                  8
  86
  87#define NVIRT_CHAN              4       /* # of virtual channels to represent
  88                                           up to 60 logical drives */
  89struct mbox_out {
  90        /* 0x0 */ u8 cmd;
  91        /* 0x1 */ u8 cmdid;
  92        /* 0x2 */ u16 numsectors;
  93        /* 0x4 */ u32 lba;
  94        /* 0x8 */ u32 xferaddr;
  95        /* 0xC */ u8 logdrv;
  96        /* 0xD */ u8 numsgelements;
  97        /* 0xE */ u8 resvd;
  98} __attribute__ ((packed));
  99
 100struct mbox_in {
 101        /* 0xF */ volatile u8 busy;
 102        /* 0x10 */ volatile u8 numstatus;
 103        /* 0x11 */ volatile u8 status;
 104        /* 0x12 */ volatile u8 completed[MAX_FIRMWARE_STATUS];
 105        volatile u8 poll;
 106        volatile u8 ack;
 107} __attribute__ ((packed));
 108
 109typedef struct {
 110        struct mbox_out m_out;
 111        struct mbox_in  m_in;
 112} __attribute__ ((packed)) mbox_t;
 113
 114typedef struct {
 115        u32 xfer_segment_lo;
 116        u32 xfer_segment_hi;
 117        mbox_t mbox;
 118} __attribute__ ((packed)) mbox64_t;
 119
 120
 121/*
 122 * Passthru definitions
 123 */
 124#define MAX_REQ_SENSE_LEN       0x20
 125
 126typedef struct {
 127        u8 timeout:3;           /* 0=6sec/1=60sec/2=10min/3=3hrs */
 128        u8 ars:1;
 129        u8 reserved:3;
 130        u8 islogical:1;
 131        u8 logdrv;              /* if islogical == 1 */
 132        u8 channel;             /* if islogical == 0 */
 133        u8 target;              /* if islogical == 0 */
 134        u8 queuetag;            /* unused */
 135        u8 queueaction;         /* unused */
 136        u8 cdb[MAX_CDB_LEN];
 137        u8 cdblen;
 138        u8 reqsenselen;
 139        u8 reqsensearea[MAX_REQ_SENSE_LEN];
 140        u8 numsgelements;
 141        u8 scsistatus;
 142        u32 dataxferaddr;
 143        u32 dataxferlen;
 144} __attribute__ ((packed)) mega_passthru;
 145
 146
 147/*
 148 * Extended passthru: support CDB > 10 bytes
 149 */
 150typedef struct {
 151        u8 timeout:3;           /* 0=6sec/1=60sec/2=10min/3=3hrs */
 152        u8 ars:1;
 153        u8 rsvd1:1;
 154        u8 cd_rom:1;
 155        u8 rsvd2:1;
 156        u8 islogical:1;
 157        u8 logdrv;              /* if islogical == 1 */
 158        u8 channel;             /* if islogical == 0 */
 159        u8 target;              /* if islogical == 0 */
 160        u8 queuetag;            /* unused */
 161        u8 queueaction;         /* unused */
 162        u8 cdblen;
 163        u8 rsvd3;
 164        u8 cdb[MAX_EXT_CDB_LEN];
 165        u8 numsgelements;
 166        u8 status;
 167        u8 reqsenselen;
 168        u8 reqsensearea[MAX_REQ_SENSE_LEN];
 169        u8 rsvd4;
 170        u32 dataxferaddr;
 171        u32 dataxferlen;
 172} __attribute__ ((packed)) mega_ext_passthru;
 173
 174typedef struct {
 175        u64 address;
 176        u32 length;
 177} __attribute__ ((packed)) mega_sgl64;
 178
 179typedef struct {
 180        u32 address;
 181        u32 length;
 182} __attribute__ ((packed)) mega_sglist;
 183
 184
 185/* Queued command data */
 186typedef struct {
 187        int     idx;
 188        u32     state;
 189        struct list_head        list;
 190        u8      raw_mbox[66];
 191        u32     dma_type;
 192        u32     dma_direction;
 193
 194        struct scsi_cmnd        *cmd;
 195        dma_addr_t      dma_h_bulkdata;
 196        dma_addr_t      dma_h_sgdata;
 197
 198        mega_sglist     *sgl;
 199        mega_sgl64      *sgl64;
 200        dma_addr_t      sgl_dma_addr;
 201
 202        mega_passthru           *pthru;
 203        dma_addr_t              pthru_dma_addr;
 204        mega_ext_passthru       *epthru;
 205        dma_addr_t              epthru_dma_addr;
 206} scb_t;
 207
 208/*
 209 * Flags to follow the scb as it transitions between various stages
 210 */
 211#define SCB_FREE        0x0000  /* on the free list */
 212#define SCB_ACTIVE      0x0001  /* off the free list */
 213#define SCB_PENDQ       0x0002  /* on the pending queue */
 214#define SCB_ISSUED      0x0004  /* issued - owner f/w */
 215#define SCB_ABORT       0x0008  /* Got an abort for this one */
 216#define SCB_RESET       0x0010  /* Got a reset for this one */
 217
 218/*
 219 * Utilities declare this strcture size as 1024 bytes. So more fields can
 220 * be added in future.
 221 */
 222typedef struct {
 223        u32     data_size; /* current size in bytes (not including resvd) */
 224
 225        u32     config_signature;
 226                /* Current value is 0x00282008
 227                 * 0x28=MAX_LOGICAL_DRIVES,
 228                 * 0x20=Number of stripes and
 229                 * 0x08=Number of spans */
 230
 231        u8      fw_version[16];         /* printable ASCI string */
 232        u8      bios_version[16];       /* printable ASCI string */
 233        u8      product_name[80];       /* printable ASCI string */
 234
 235        u8      max_commands;           /* Max. concurrent commands supported */
 236        u8      nchannels;              /* Number of SCSI Channels detected */
 237        u8      fc_loop_present;        /* Number of Fibre Loops detected */
 238        u8      mem_type;               /* EDO, FPM, SDRAM etc */
 239
 240        u32     signature;
 241        u16     dram_size;              /* In terms of MB */
 242        u16     subsysid;
 243
 244        u16     subsysvid;
 245        u8      notify_counters;
 246        u8      pad1k[889];             /* 135 + 889 resvd = 1024 total size */
 247} __attribute__ ((packed)) mega_product_info;
 248
 249struct notify {
 250        u32 global_counter;     /* Any change increments this counter */
 251
 252        u8 param_counter;       /* Indicates any params changed  */
 253        u8 param_id;            /* Param modified - defined below */
 254        u16 param_val;          /* New val of last param modified */
 255
 256        u8 write_config_counter;        /* write config occurred */
 257        u8 write_config_rsvd[3];
 258
 259        u8 ldrv_op_counter;     /* Indicates ldrv op started/completed */
 260        u8 ldrv_opid;           /* ldrv num */
 261        u8 ldrv_opcmd;          /* ldrv operation - defined below */
 262        u8 ldrv_opstatus;       /* status of the operation */
 263
 264        u8 ldrv_state_counter;  /* Indicates change of ldrv state */
 265        u8 ldrv_state_id;               /* ldrv num */
 266        u8 ldrv_state_new;      /* New state */
 267        u8 ldrv_state_old;      /* old state */
 268
 269        u8 pdrv_state_counter;  /* Indicates change of ldrv state */
 270        u8 pdrv_state_id;               /* pdrv id */
 271        u8 pdrv_state_new;      /* New state */
 272        u8 pdrv_state_old;      /* old state */
 273
 274        u8 pdrv_fmt_counter;    /* Indicates pdrv format started/over */
 275        u8 pdrv_fmt_id;         /* pdrv id */
 276        u8 pdrv_fmt_val;                /* format started/over */
 277        u8 pdrv_fmt_rsvd;
 278
 279        u8 targ_xfer_counter;   /* Indicates SCSI-2 Xfer rate change */
 280        u8 targ_xfer_id;        /* pdrv Id  */
 281        u8 targ_xfer_val;               /* new Xfer params of last pdrv */
 282        u8 targ_xfer_rsvd;
 283
 284        u8 fcloop_id_chg_counter;       /* Indicates loopid changed */
 285        u8 fcloopid_pdrvid;             /* pdrv id */
 286        u8 fcloop_id0;                  /* loopid on fc loop 0 */
 287        u8 fcloop_id1;                  /* loopid on fc loop 1 */
 288
 289        u8 fcloop_state_counter;        /* Indicates loop state changed */
 290        u8 fcloop_state0;               /* state of fc loop 0 */
 291        u8 fcloop_state1;               /* state of fc loop 1 */
 292        u8 fcloop_state_rsvd;
 293} __attribute__ ((packed));
 294
 295#define MAX_NOTIFY_SIZE     0x80
 296#define CUR_NOTIFY_SIZE     sizeof(struct notify)
 297
 298typedef struct {
 299        u32     data_size; /* current size in bytes (not including resvd) */
 300
 301        struct notify notify;
 302
 303        u8      notify_rsvd[MAX_NOTIFY_SIZE - CUR_NOTIFY_SIZE];
 304
 305        u8      rebuild_rate;           /* Rebuild rate (0% - 100%) */
 306        u8      cache_flush_interval;   /* In terms of Seconds */
 307        u8      sense_alert;
 308        u8      drive_insert_count;     /* drive insertion count */
 309
 310        u8      battery_status;
 311        u8      num_ldrv;               /* No. of Log Drives configured */
 312        u8      recon_state[MAX_LOGICAL_DRIVES_40LD / 8];       /* State of
 313                                                           reconstruct */
 314        u16     ldrv_op_status[MAX_LOGICAL_DRIVES_40LD / 8]; /* logdrv
 315                                                                 Status */
 316
 317        u32     ldrv_size[MAX_LOGICAL_DRIVES_40LD];/* Size of each log drv */
 318        u8      ldrv_prop[MAX_LOGICAL_DRIVES_40LD];
 319        u8      ldrv_state[MAX_LOGICAL_DRIVES_40LD];/* State of log drives */
 320        u8      pdrv_state[FC_MAX_PHYSICAL_DEVICES];/* State of phys drvs. */
 321        u16     pdrv_format[FC_MAX_PHYSICAL_DEVICES / 16];
 322
 323        u8      targ_xfer[80];  /* phys device transfer rate */
 324        u8      pad1k[263];     /* 761 + 263reserved = 1024 bytes total size */
 325} __attribute__ ((packed)) mega_inquiry3;
 326
 327
 328/* Structures */
 329typedef struct {
 330        u8      max_commands;   /* Max concurrent commands supported */
 331        u8      rebuild_rate;   /* Rebuild rate - 0% thru 100% */
 332        u8      max_targ_per_chan;      /* Max targ per channel */
 333        u8      nchannels;      /* Number of channels on HBA */
 334        u8      fw_version[4];  /* Firmware version */
 335        u16     age_of_flash;   /* Number of times FW has been flashed */
 336        u8      chip_set_value; /* Contents of 0xC0000832 */
 337        u8      dram_size;      /* In MB */
 338        u8      cache_flush_interval;   /* in seconds */
 339        u8      bios_version[4];
 340        u8      board_type;
 341        u8      sense_alert;
 342        u8      write_config_count;     /* Increase with every configuration
 343                                           change */
 344        u8      drive_inserted_count;   /* Increase with every drive inserted
 345                                         */
 346        u8      inserted_drive; /* Channel:Id of inserted drive */
 347        u8      battery_status; /*
 348                                 * BIT 0: battery module missing
 349                                 * BIT 1: VBAD
 350                                 * BIT 2: temperature high
 351                                 * BIT 3: battery pack missing
 352                                 * BIT 4,5:
 353                                 *   00 - charge complete
 354                                 *   01 - fast charge in progress
 355                                 *   10 - fast charge fail
 356                                 *   11 - undefined
 357                                 * Bit 6: counter > 1000
 358                                 * Bit 7: Undefined
 359                                 */
 360        u8      dec_fault_bus_info;
 361} __attribute__ ((packed)) mega_adp_info;
 362
 363
 364typedef struct {
 365        u8      num_ldrv;       /* Number of logical drives configured */
 366        u8      rsvd[3];
 367        u32     ldrv_size[MAX_LOGICAL_DRIVES_8LD];
 368        u8      ldrv_prop[MAX_LOGICAL_DRIVES_8LD];
 369        u8      ldrv_state[MAX_LOGICAL_DRIVES_8LD];
 370} __attribute__ ((packed)) mega_ldrv_info;
 371
 372typedef struct {
 373        u8      pdrv_state[MAX_PHYSICAL_DRIVES];
 374        u8      rsvd;
 375} __attribute__ ((packed)) mega_pdrv_info;
 376
 377/* RAID inquiry: Mailbox command 0x05*/
 378typedef struct {
 379        mega_adp_info   adapter_info;
 380        mega_ldrv_info  logdrv_info;
 381        mega_pdrv_info  pdrv_info;
 382} __attribute__ ((packed)) mraid_inquiry;
 383
 384
 385/* RAID extended inquiry: Mailbox command 0x04*/
 386typedef struct {
 387        mraid_inquiry   raid_inq;
 388        u16     phys_drv_format[MAX_CHANNELS];
 389        u8      stack_attn;
 390        u8      modem_status;
 391        u8      rsvd[2];
 392} __attribute__ ((packed)) mraid_ext_inquiry;
 393
 394
 395typedef struct {
 396        u8      channel;
 397        u8      target;
 398}__attribute__ ((packed)) adp_device;
 399
 400typedef struct {
 401        u32             start_blk;      /* starting block */
 402        u32             num_blks;       /* # of blocks */
 403        adp_device      device[MAX_ROW_SIZE_40LD];
 404}__attribute__ ((packed)) adp_span_40ld;
 405
 406typedef struct {
 407        u32             start_blk;      /* starting block */
 408        u32             num_blks;       /* # of blocks */
 409        adp_device      device[MAX_ROW_SIZE_8LD];
 410}__attribute__ ((packed)) adp_span_8ld;
 411
 412typedef struct {
 413        u8      span_depth;     /* Total # of spans */
 414        u8      level;          /* RAID level */
 415        u8      read_ahead;     /* read ahead, no read ahead, adaptive read
 416                                   ahead */
 417        u8      stripe_sz;      /* Encoded stripe size */
 418        u8      status;         /* Status of the logical drive */
 419        u8      write_mode;     /* write mode, write_through/write_back */
 420        u8      direct_io;      /* direct io or through cache */
 421        u8      row_size;       /* Number of stripes in a row */
 422} __attribute__ ((packed)) logdrv_param;
 423
 424typedef struct {
 425        logdrv_param    lparam;
 426        adp_span_40ld   span[MAX_SPAN_DEPTH];
 427}__attribute__ ((packed)) logdrv_40ld;
 428
 429typedef struct {
 430        logdrv_param    lparam;
 431        adp_span_8ld    span[MAX_SPAN_DEPTH];
 432}__attribute__ ((packed)) logdrv_8ld;
 433
 434typedef struct {
 435        u8      type;           /* Type of the device */
 436        u8      cur_status;     /* current status of the device */
 437        u8      tag_depth;      /* Level of tagging */
 438        u8      sync_neg;       /* sync negotiation - ENABLE or DISABLE */
 439        u32     size;           /* configurable size in terms of 512 byte
 440                                   blocks */
 441}__attribute__ ((packed)) phys_drv;
 442
 443typedef struct {
 444        u8              nlog_drives;            /* number of logical drives */
 445        u8              resvd[3];
 446        logdrv_40ld     ldrv[MAX_LOGICAL_DRIVES_40LD];
 447        phys_drv        pdrv[MAX_PHYSICAL_DRIVES];
 448}__attribute__ ((packed)) disk_array_40ld;
 449
 450typedef struct {
 451        u8              nlog_drives;    /* number of logical drives */
 452        u8              resvd[3];
 453        logdrv_8ld      ldrv[MAX_LOGICAL_DRIVES_8LD];
 454        phys_drv        pdrv[MAX_PHYSICAL_DRIVES];
 455}__attribute__ ((packed)) disk_array_8ld;
 456
 457
 458/*
 459 * User ioctl structure.
 460 * This structure will be used for Traditional Method ioctl interface
 461 * commands (0x80),Alternate Buffer Method (0x81) ioctl commands and the
 462 * Driver ioctls.
 463 * The Driver ioctl interface handles the commands at the driver level,
 464 * without being sent to the card.
 465 */
 466/* system call imposed limit. Change accordingly */
 467#define IOCTL_MAX_DATALEN       4096
 468
 469struct uioctl_t {
 470        u32 inlen;
 471        u32 outlen;
 472        union {
 473                u8 fca[16];
 474                struct {
 475                        u8 opcode;
 476                        u8 subopcode;
 477                        u16 adapno;
 478#if BITS_PER_LONG == 32
 479                        u8 *buffer;
 480                        u8 pad[4];
 481#endif
 482#if BITS_PER_LONG == 64
 483                        u8 *buffer;
 484#endif
 485                        u32 length;
 486                } __attribute__ ((packed)) fcs;
 487        } __attribute__ ((packed)) ui;
 488        u8 mbox[18];            /* 16 bytes + 2 status bytes */
 489        mega_passthru pthru;
 490#if BITS_PER_LONG == 32
 491        char __user *data;              /* buffer <= 4096 for 0x80 commands */
 492        char pad[4];
 493#endif
 494#if BITS_PER_LONG == 64
 495        char __user *data;
 496#endif
 497} __attribute__ ((packed));
 498
 499/*
 500 * struct mcontroller is used to pass information about the controllers in the
 501 * system. Its up to the application how to use the information. We are passing
 502 * as much info about the cards as possible and useful. Before issuing the
 503 * call to find information about the cards, the application needs to issue a
 504 * ioctl first to find out the number of controllers in the system.
 505 */
 506#define MAX_CONTROLLERS 32
 507
 508struct mcontroller {
 509        u64 base;
 510        u8 irq;
 511        u8 numldrv;
 512        u8 pcibus;
 513        u16 pcidev;
 514        u8 pcifun;
 515        u16 pciid;
 516        u16 pcivendor;
 517        u8 pcislot;
 518        u32 uid;
 519};
 520
 521/*
 522 * mailbox structure used for internal commands
 523 */
 524typedef struct {
 525        u8      cmd;
 526        u8      cmdid;
 527        u8      opcode;
 528        u8      subopcode;
 529        u32     lba;
 530        u32     xferaddr;
 531        u8      logdrv;
 532        u8      rsvd[3];
 533        u8      numstatus;
 534        u8      status;
 535} __attribute__ ((packed)) megacmd_t;
 536
 537/*
 538 * Defines for Driver IOCTL interface
 539 */
 540#define MEGAIOC_MAGIC   'm'
 541
 542#define MEGAIOC_QNADAP          'm'     /* Query # of adapters */
 543#define MEGAIOC_QDRVRVER        'e'     /* Query driver version */
 544#define MEGAIOC_QADAPINFO       'g'     /* Query adapter information */
 545#define MKADAP(adapno)          (MEGAIOC_MAGIC << 8 | (adapno) )
 546#define GETADAP(mkadap)         ( (mkadap) ^ MEGAIOC_MAGIC << 8 )
 547
 548/*
 549 * Definition for the new ioctl interface (NIT)
 550 */
 551
 552/*
 553 * Vendor specific Group-7 commands
 554 */
 555#define VENDOR_SPECIFIC_COMMANDS        0xE0
 556#define MEGA_INTERNAL_CMD               VENDOR_SPECIFIC_COMMANDS + 0x01
 557
 558/*
 559 * The ioctl command. No other command shall be used for this interface
 560 */
 561#define USCSICMD        VENDOR_SPECIFIC_COMMANDS
 562
 563/*
 564 * Data direction flags
 565 */
 566#define UIOC_RD         0x00001
 567#define UIOC_WR         0x00002
 568
 569/*
 570 * ioctl opcodes
 571 */
 572#define MBOX_CMD        0x00000 /* DCMD or passthru command */
 573#define GET_DRIVER_VER  0x10000 /* Get driver version */
 574#define GET_N_ADAP      0x20000 /* Get number of adapters */
 575#define GET_ADAP_INFO   0x30000 /* Get information about a adapter */
 576#define GET_CAP         0x40000 /* Get ioctl capabilities */
 577#define GET_STATS       0x50000 /* Get statistics, including error info */
 578
 579
 580/*
 581 * The ioctl structure.
 582 * MBOX macro converts a nitioctl_t structure to megacmd_t pointer and
 583 * MBOX_P macro converts a nitioctl_t pointer to megacmd_t pointer.
 584 */
 585typedef struct {
 586        char            signature[8];   /* Must contain "MEGANIT" */
 587        u32             opcode;         /* opcode for the command */
 588        u32             adapno;         /* adapter number */
 589        union {
 590                u8      __raw_mbox[18];
 591                void __user *__uaddr; /* xferaddr for non-mbox cmds */
 592        }__ua;
 593
 594#define uioc_rmbox      __ua.__raw_mbox
 595#define MBOX(uioc)      ((megacmd_t *)&((uioc).__ua.__raw_mbox[0]))
 596#define MBOX_P(uioc)    ((megacmd_t __user *)&((uioc)->__ua.__raw_mbox[0]))
 597#define uioc_uaddr      __ua.__uaddr
 598
 599        u32             xferlen;        /* xferlen for DCMD and non-mbox
 600                                           commands */
 601        u32             flags;          /* data direction flags */
 602}nitioctl_t;
 603
 604
 605/*
 606 * I/O statistics for some applications like SNMP agent. The caller must
 607 * provide the number of logical drives for which status should be reported.
 608 */
 609typedef struct {
 610        int     num_ldrv;       /* Number for logical drives for which the
 611                                   status should be reported. */
 612        u32     nreads[MAX_LOGICAL_DRIVES_40LD];        /* number of reads for
 613                                                        each logical drive */
 614        u32     nreadblocks[MAX_LOGICAL_DRIVES_40LD];   /* number of blocks
 615                                                        read for each logical
 616                                                        drive */
 617        u32     nwrites[MAX_LOGICAL_DRIVES_40LD];       /* number of writes
 618                                                        for each logical
 619                                                        drive */
 620        u32     nwriteblocks[MAX_LOGICAL_DRIVES_40LD];  /* number of blocks
 621                                                        writes for each
 622                                                        logical drive */
 623        u32     rd_errors[MAX_LOGICAL_DRIVES_40LD];     /* number of read
 624                                                           errors for each
 625                                                           logical drive */
 626        u32     wr_errors[MAX_LOGICAL_DRIVES_40LD];     /* number of write
 627                                                           errors for each
 628                                                           logical drive */
 629}megastat_t;
 630
 631
 632struct private_bios_data {
 633        u8      geometry:4;     /*
 634                                 * bits 0-3 - BIOS geometry
 635                                 * 0x0001 - 1GB
 636                                 * 0x0010 - 2GB
 637                                 * 0x1000 - 8GB
 638                                 * Others values are invalid
 639                                                         */
 640        u8      unused:4;       /* bits 4-7 are unused */
 641        u8      boot_drv;       /*
 642                                 * logical drive set as boot drive
 643                                 * 0..7 - for 8LD cards
 644                                 * 0..39 - for 40LD cards
 645                                 */
 646        u8      rsvd[12];
 647        u16     cksum;  /* 0-(sum of first 13 bytes of this structure) */
 648} __attribute__ ((packed));
 649
 650
 651
 652
 653/*
 654 * Mailbox and firmware commands and subopcodes used in this driver.
 655 */
 656
 657#define MEGA_MBOXCMD_LREAD      0x01
 658#define MEGA_MBOXCMD_LWRITE     0x02
 659#define MEGA_MBOXCMD_PASSTHRU   0x03
 660#define MEGA_MBOXCMD_ADPEXTINQ  0x04
 661#define MEGA_MBOXCMD_ADAPTERINQ 0x05
 662#define MEGA_MBOXCMD_LREAD64    0xA7
 663#define MEGA_MBOXCMD_LWRITE64   0xA8
 664#define MEGA_MBOXCMD_PASSTHRU64 0xC3
 665#define MEGA_MBOXCMD_EXTPTHRU   0xE3
 666
 667#define MAIN_MISC_OPCODE        0xA4    /* f/w misc opcode */
 668#define GET_MAX_SG_SUPPORT      0x01    /* get max sg len supported by f/w */
 669
 670#define FC_NEW_CONFIG           0xA1
 671#define NC_SUBOP_PRODUCT_INFO   0x0E
 672#define NC_SUBOP_ENQUIRY3       0x0F
 673#define ENQ3_GET_SOLICITED_FULL 0x02
 674#define OP_DCMD_READ_CONFIG     0x04
 675#define NEW_READ_CONFIG_8LD     0x67
 676#define READ_CONFIG_8LD         0x07
 677#define FLUSH_ADAPTER           0x0A
 678#define FLUSH_SYSTEM            0xFE
 679
 680/*
 681 * Command for random deletion of logical drives
 682 */
 683#define FC_DEL_LOGDRV           0xA4    /* f/w command */
 684#define OP_SUP_DEL_LOGDRV       0x2A    /* is feature supported */
 685#define OP_GET_LDID_MAP         0x18    /* get ldid and logdrv number map */
 686#define OP_DEL_LOGDRV           0x1C    /* delete logical drive */
 687
 688/*
 689 * BIOS commands
 690 */
 691#define IS_BIOS_ENABLED         0x62
 692#define GET_BIOS                0x01
 693#define CHNL_CLASS              0xA9
 694#define GET_CHNL_CLASS          0x00
 695#define SET_CHNL_CLASS          0x01
 696#define CH_RAID                 0x01
 697#define CH_SCSI                 0x00
 698#define BIOS_PVT_DATA           0x40
 699#define GET_BIOS_PVT_DATA       0x00
 700
 701
 702/*
 703 * Commands to support clustering
 704 */
 705#define MEGA_GET_TARGET_ID      0x7D
 706#define MEGA_CLUSTER_OP         0x70
 707#define MEGA_GET_CLUSTER_MODE   0x02
 708#define MEGA_CLUSTER_CMD        0x6E
 709#define MEGA_RESERVE_LD         0x01
 710#define MEGA_RELEASE_LD         0x02
 711#define MEGA_RESET_RESERVATIONS 0x03
 712#define MEGA_RESERVATION_STATUS 0x04
 713#define MEGA_RESERVE_PD         0x05
 714#define MEGA_RELEASE_PD         0x06
 715
 716
 717/*
 718 * Module battery status
 719 */
 720#define MEGA_BATT_MODULE_MISSING        0x01
 721#define MEGA_BATT_LOW_VOLTAGE           0x02
 722#define MEGA_BATT_TEMP_HIGH             0x04
 723#define MEGA_BATT_PACK_MISSING          0x08
 724#define MEGA_BATT_CHARGE_MASK           0x30
 725#define MEGA_BATT_CHARGE_DONE           0x00
 726#define MEGA_BATT_CHARGE_INPROG         0x10
 727#define MEGA_BATT_CHARGE_FAIL           0x20
 728#define MEGA_BATT_CYCLES_EXCEEDED       0x40
 729
 730/*
 731 * Physical drive states.
 732 */
 733#define PDRV_UNCNF      0
 734#define PDRV_ONLINE     3
 735#define PDRV_FAILED     4
 736#define PDRV_RBLD       5
 737#define PDRV_HOTSPARE   6
 738
 739
 740/*
 741 * Raid logical drive states.
 742 */
 743#define RDRV_OFFLINE    0
 744#define RDRV_DEGRADED   1
 745#define RDRV_OPTIMAL    2
 746#define RDRV_DELETED    3
 747
 748/*
 749 * Read, write and cache policies
 750 */
 751#define NO_READ_AHEAD           0
 752#define READ_AHEAD              1
 753#define ADAP_READ_AHEAD         2
 754#define WRMODE_WRITE_THRU       0
 755#define WRMODE_WRITE_BACK       1
 756#define CACHED_IO               0
 757#define DIRECT_IO               1
 758
 759
 760#define SCSI_LIST(scp) ((struct list_head *)(&(scp)->SCp))
 761
 762/*
 763 * Each controller's soft state
 764 */
 765typedef struct {
 766        int     this_id;        /* our id, may set to different than 7 if
 767                                   clustering is available */
 768        u32     flag;
 769
 770        unsigned long           base;
 771        void __iomem            *mmio_base;
 772
 773        /* mbox64 with mbox not aligned on 16-byte boundary */
 774        mbox64_t        *una_mbox64;
 775        dma_addr_t      una_mbox64_dma;
 776
 777        volatile mbox64_t       *mbox64;/* ptr to 64-bit mailbox */
 778        volatile mbox_t         *mbox;  /* ptr to standard mailbox */
 779        dma_addr_t              mbox_dma;
 780
 781        struct pci_dev  *dev;
 782
 783        struct list_head        free_list;
 784        struct list_head        pending_list;
 785        struct list_head        completed_list;
 786
 787        struct Scsi_Host        *host;
 788
 789#define MEGA_BUFFER_SIZE (2*1024)
 790        u8              *mega_buffer;
 791        dma_addr_t      buf_dma_handle;
 792
 793        mega_product_info       product_info;
 794
 795        u8              max_cmds;
 796        scb_t           *scb_list;
 797
 798        atomic_t        pend_cmds;      /* maintain a counter for pending
 799                                           commands in firmware */
 800
 801#if MEGA_HAVE_STATS
 802        u32     nreads[MAX_LOGICAL_DRIVES_40LD];
 803        u32     nreadblocks[MAX_LOGICAL_DRIVES_40LD];
 804        u32     nwrites[MAX_LOGICAL_DRIVES_40LD];
 805        u32     nwriteblocks[MAX_LOGICAL_DRIVES_40LD];
 806        u32     rd_errors[MAX_LOGICAL_DRIVES_40LD];
 807        u32     wr_errors[MAX_LOGICAL_DRIVES_40LD];
 808#endif
 809
 810        /* Host adapter parameters */
 811        u8      numldrv;
 812        u8      fw_version[7];
 813        u8      bios_version[7];
 814
 815#ifdef CONFIG_PROC_FS
 816        struct proc_dir_entry   *controller_proc_dir_entry;
 817#endif
 818
 819        int     has_64bit_addr;         /* are we using 64-bit addressing */
 820        int     support_ext_cdb;
 821        int     boot_ldrv_enabled;
 822        int     boot_ldrv;
 823        int     boot_pdrv_enabled;      /* boot from physical drive */
 824        int     boot_pdrv_ch;           /* boot physical drive channel */
 825        int     boot_pdrv_tgt;          /* boot physical drive target */
 826
 827
 828        int     support_random_del;     /* Do we support random deletion of
 829                                           logdrvs */
 830        int     read_ldidmap;   /* set after logical drive deltion. The
 831                                   logical drive number must be read from the
 832                                   map */
 833        atomic_t        quiescent;      /* a stage reached when delete logical
 834                                           drive needs to be done. Stop
 835                                           sending requests to the hba till
 836                                           delete operation is completed */
 837        spinlock_t      lock;
 838
 839        u8      logdrv_chan[MAX_CHANNELS+NVIRT_CHAN]; /* logical drive are on
 840                                                        what channels. */
 841        int     mega_ch_class;
 842
 843        u8      sglen;  /* f/w supported scatter-gather list length */
 844
 845        scb_t                   int_scb;
 846        struct mutex            int_mtx;        /* To synchronize the internal
 847                                                commands */
 848        int                     int_status;     /* status of internal cmd */
 849        struct completion       int_waitq;      /* wait queue for internal
 850                                                 cmds */
 851
 852        int     has_cluster;    /* cluster support on this HBA */
 853}adapter_t;
 854
 855
 856struct mega_hbas {
 857        int is_bios_enabled;
 858        adapter_t *hostdata_addr;
 859};
 860
 861
 862/*
 863 * For state flag. Do not use LSB(8 bits) which are
 864 * reserved for storing info about channels.
 865 */
 866#define IN_ABORT        0x80000000L
 867#define IN_RESET        0x40000000L
 868#define BOARD_MEMMAP    0x20000000L
 869#define BOARD_IOMAP     0x10000000L
 870#define BOARD_40LD      0x08000000L
 871#define BOARD_64BIT     0x04000000L
 872
 873#define INTR_VALID                      0x40
 874
 875#define PCI_CONF_AMISIG                 0xa0
 876#define PCI_CONF_AMISIG64               0xa4
 877
 878
 879#define MEGA_DMA_TYPE_NONE              0xFFFF
 880#define MEGA_BULK_DATA                  0x0001
 881#define MEGA_SGLIST                     0x0002
 882
 883/*
 884 * Parameters for the io-mapped controllers
 885 */
 886
 887/* I/O Port offsets */
 888#define CMD_PORT                0x00
 889#define ACK_PORT                0x00
 890#define TOGGLE_PORT             0x01
 891#define INTR_PORT               0x0a
 892
 893#define MBOX_BUSY_PORT          0x00
 894#define MBOX_PORT0              0x04
 895#define MBOX_PORT1              0x05
 896#define MBOX_PORT2              0x06
 897#define MBOX_PORT3              0x07
 898#define ENABLE_MBOX_REGION      0x0B
 899
 900/* I/O Port Values */
 901#define ISSUE_BYTE              0x10
 902#define ACK_BYTE                0x08
 903#define ENABLE_INTR_BYTE        0xc0
 904#define DISABLE_INTR_BYTE       0x00
 905#define VALID_INTR_BYTE         0x40
 906#define MBOX_BUSY_BYTE          0x10
 907#define ENABLE_MBOX_BYTE        0x00
 908
 909
 910/* Setup some port macros here */
 911#define issue_command(adapter)  \
 912                outb_p(ISSUE_BYTE, (adapter)->base + CMD_PORT)
 913
 914#define irq_state(adapter)      inb_p((adapter)->base + INTR_PORT)
 915
 916#define set_irq_state(adapter, value)   \
 917                outb_p((value), (adapter)->base + INTR_PORT)
 918
 919#define irq_ack(adapter)        \
 920                outb_p(ACK_BYTE, (adapter)->base + ACK_PORT)
 921
 922#define irq_enable(adapter)     \
 923        outb_p(ENABLE_INTR_BYTE, (adapter)->base + TOGGLE_PORT)
 924
 925#define irq_disable(adapter)    \
 926        outb_p(DISABLE_INTR_BYTE, (adapter)->base + TOGGLE_PORT)
 927
 928
 929/*
 930 * This is our SYSDEP area. All kernel specific detail should be placed here -
 931 * as much as possible
 932 */
 933
 934/*
 935 * End of SYSDEP area
 936 */
 937
 938const char *megaraid_info (struct Scsi_Host *);
 939
 940static int mega_query_adapter(adapter_t *);
 941static int issue_scb(adapter_t *, scb_t *);
 942static int mega_setup_mailbox(adapter_t *);
 943
 944static int megaraid_queue (struct Scsi_Host *, struct scsi_cmnd *);
 945static scb_t * mega_build_cmd(adapter_t *, struct scsi_cmnd *, int *);
 946static void __mega_runpendq(adapter_t *);
 947static int issue_scb_block(adapter_t *, u_char *);
 948
 949static irqreturn_t megaraid_isr_memmapped(int, void *);
 950static irqreturn_t megaraid_isr_iomapped(int, void *);
 951
 952static void mega_free_scb(adapter_t *, scb_t *);
 953
 954static int megaraid_abort(struct scsi_cmnd *);
 955static int megaraid_reset(struct scsi_cmnd *);
 956static int megaraid_abort_and_reset(adapter_t *, struct scsi_cmnd *, int);
 957static int megaraid_biosparam(struct scsi_device *, struct block_device *,
 958                sector_t, int []);
 959
 960static int mega_build_sglist (adapter_t *adapter, scb_t *scb,
 961                              u32 *buffer, u32 *length);
 962static int __mega_busywait_mbox (adapter_t *);
 963static void mega_rundoneq (adapter_t *);
 964static void mega_cmd_done(adapter_t *, u8 [], int, int);
 965static inline void mega_free_sgl (adapter_t *adapter);
 966static void mega_8_to_40ld (mraid_inquiry *inquiry,
 967                mega_inquiry3 *enquiry3, mega_product_info *);
 968
 969static int megadev_open (struct inode *, struct file *);
 970static int megadev_ioctl (struct file *, unsigned int, unsigned long);
 971static int mega_m_to_n(void __user *, nitioctl_t *);
 972static int mega_n_to_m(void __user *, megacmd_t *);
 973
 974static int mega_init_scb (adapter_t *);
 975
 976static int mega_is_bios_enabled (adapter_t *);
 977
 978#ifdef CONFIG_PROC_FS
 979static void mega_create_proc_entry(int, struct proc_dir_entry *);
 980static int mega_adapinq(adapter_t *, dma_addr_t);
 981static int mega_internal_dev_inquiry(adapter_t *, u8, u8, dma_addr_t);
 982#endif
 983
 984static int mega_support_ext_cdb(adapter_t *);
 985static mega_passthru* mega_prepare_passthru(adapter_t *, scb_t *,
 986                struct scsi_cmnd *, int, int);
 987static mega_ext_passthru* mega_prepare_extpassthru(adapter_t *,
 988                scb_t *, struct scsi_cmnd *, int, int);
 989static void mega_enum_raid_scsi(adapter_t *);
 990static void mega_get_boot_drv(adapter_t *);
 991static int mega_support_random_del(adapter_t *);
 992static int mega_del_logdrv(adapter_t *, int);
 993static int mega_do_del_logdrv(adapter_t *, int);
 994static void mega_get_max_sgl(adapter_t *);
 995static int mega_internal_command(adapter_t *, megacmd_t *, mega_passthru *);
 996static int mega_support_cluster(adapter_t *);
 997#endif
 998
 999/* vi: set ts=8 sw=8 tw=78: */
1000