root/drivers/scsi/megaraid/mbox_defs.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


   1 /* SPDX-License-Identifier: GPL-2.0-or-later */
   2 /*
   3  *
   4  *                      Linux MegaRAID Unified device driver
   5  *
   6  * Copyright (c) 2003-2004  LSI Logic Corporation.
   7  *
   8  * FILE         : mbox_defs.h
   9  */
  10 #ifndef _MRAID_MBOX_DEFS_H_
  11 #define _MRAID_MBOX_DEFS_H_
  12 
  13 #include <linux/types.h>
  14 
  15 /*
  16  * Commands and states for mailbox based controllers
  17  */
  18 
  19 #define MBOXCMD_LREAD           0x01
  20 #define MBOXCMD_LWRITE          0x02
  21 #define MBOXCMD_PASSTHRU        0x03
  22 #define MBOXCMD_ADPEXTINQ       0x04
  23 #define MBOXCMD_ADAPTERINQ      0x05
  24 #define MBOXCMD_LREAD64         0xA7
  25 #define MBOXCMD_LWRITE64        0xA8
  26 #define MBOXCMD_PASSTHRU64      0xC3
  27 #define MBOXCMD_EXTPTHRU        0xE3
  28 
  29 #define MAIN_MISC_OPCODE        0xA4
  30 #define GET_MAX_SG_SUPPORT      0x01
  31 #define SUPPORT_EXT_CDB         0x16
  32 
  33 #define FC_NEW_CONFIG           0xA1
  34 #define NC_SUBOP_PRODUCT_INFO   0x0E
  35 #define NC_SUBOP_ENQUIRY3       0x0F
  36 #define ENQ3_GET_SOLICITED_FULL 0x02
  37 #define OP_DCMD_READ_CONFIG     0x04
  38 #define NEW_READ_CONFIG_8LD     0x67
  39 #define READ_CONFIG_8LD         0x07
  40 #define FLUSH_ADAPTER           0x0A
  41 #define FLUSH_SYSTEM            0xFE
  42 
  43 /*
  44  * Command for random deletion of logical drives
  45  */
  46 #define FC_DEL_LOGDRV           0xA4
  47 #define OP_SUP_DEL_LOGDRV       0x2A
  48 #define OP_GET_LDID_MAP         0x18
  49 #define OP_DEL_LOGDRV           0x1C
  50 
  51 /*
  52  * BIOS commands
  53  */
  54 #define IS_BIOS_ENABLED         0x62
  55 #define GET_BIOS                0x01
  56 #define CHNL_CLASS              0xA9
  57 #define GET_CHNL_CLASS          0x00
  58 #define SET_CHNL_CLASS          0x01
  59 #define CH_RAID                 0x01
  60 #define CH_SCSI                 0x00
  61 #define BIOS_PVT_DATA           0x40
  62 #define GET_BIOS_PVT_DATA       0x00
  63 
  64 
  65 /*
  66  * Commands to support clustering
  67  */
  68 #define GET_TARGET_ID           0x7D
  69 #define CLUSTER_OP              0x70
  70 #define GET_CLUSTER_MODE        0x02
  71 #define CLUSTER_CMD             0x6E
  72 #define RESERVE_LD              0x01
  73 #define RELEASE_LD              0x02
  74 #define RESET_RESERVATIONS      0x03
  75 #define RESERVATION_STATUS      0x04
  76 #define RESERVE_PD              0x05
  77 #define RELEASE_PD              0x06
  78 
  79 
  80 /*
  81  * Module battery status
  82  */
  83 #define BATTERY_MODULE_MISSING          0x01
  84 #define BATTERY_LOW_VOLTAGE             0x02
  85 #define BATTERY_TEMP_HIGH               0x04
  86 #define BATTERY_PACK_MISSING            0x08
  87 #define BATTERY_CHARGE_MASK             0x30
  88 #define BATTERY_CHARGE_DONE             0x00
  89 #define BATTERY_CHARGE_INPROG           0x10
  90 #define BATTERY_CHARGE_FAIL             0x20
  91 #define BATTERY_CYCLES_EXCEEDED         0x40
  92 
  93 /*
  94  * Physical drive states.
  95  */
  96 #define PDRV_UNCNF      0
  97 #define PDRV_ONLINE     3
  98 #define PDRV_FAILED     4
  99 #define PDRV_RBLD       5
 100 #define PDRV_HOTSPARE   6
 101 
 102 
 103 /*
 104  * Raid logical drive states.
 105  */
 106 #define RDRV_OFFLINE    0
 107 #define RDRV_DEGRADED   1
 108 #define RDRV_OPTIMAL    2
 109 #define RDRV_DELETED    3
 110 
 111 /*
 112  * Read, write and cache policies
 113  */
 114 #define NO_READ_AHEAD           0
 115 #define READ_AHEAD              1
 116 #define ADAP_READ_AHEAD         2
 117 #define WRMODE_WRITE_THRU       0
 118 #define WRMODE_WRITE_BACK       1
 119 #define CACHED_IO               0
 120 #define DIRECT_IO               1
 121 
 122 #define MAX_LOGICAL_DRIVES_8LD          8
 123 #define MAX_LOGICAL_DRIVES_40LD         40
 124 #define FC_MAX_PHYSICAL_DEVICES         256
 125 #define MAX_MBOX_CHANNELS               5
 126 #define MAX_MBOX_TARGET                 15
 127 #define MBOX_MAX_PHYSICAL_DRIVES        MAX_MBOX_CHANNELS*MAX_MBOX_TARGET
 128 #define MAX_ROW_SIZE_40LD               32
 129 #define MAX_ROW_SIZE_8LD                8
 130 #define SPAN_DEPTH_8_SPANS              8
 131 #define SPAN_DEPTH_4_SPANS              4
 132 #define MAX_REQ_SENSE_LEN               0x20
 133 
 134 
 135 
 136 /**
 137  * struct mbox_t - Driver and f/w handshake structure.
 138  * @cmd         : firmware command
 139  * @cmdid       : command id
 140  * @numsectors  : number of sectors to be transferred
 141  * @lba         : Logical Block Address on LD
 142  * @xferaddr    : DMA address for data transfer
 143  * @logdrv      : logical drive number
 144  * @numsge      : number of scatter gather elements in sg list
 145  * @resvd       : reserved
 146  * @busy        : f/w busy, must wait to issue more commands.
 147  * @numstatus   : number of commands completed.
 148  * @status      : status of the commands completed
 149  * @completed   : array of completed command ids.
 150  * @poll        : poll and ack sequence
 151  * @ack         : poll and ack sequence
 152  *
 153  * The central handshake structure between the driver and the firmware. This
 154  * structure must be allocated by the driver and aligned at 8-byte boundary.
 155  */
 156 #define MBOX_MAX_FIRMWARE_STATUS        46
 157 typedef struct {
 158         uint8_t         cmd;
 159         uint8_t         cmdid;
 160         uint16_t        numsectors;
 161         uint32_t        lba;
 162         uint32_t        xferaddr;
 163         uint8_t         logdrv;
 164         uint8_t         numsge;
 165         uint8_t         resvd;
 166         uint8_t         busy;
 167         uint8_t         numstatus;
 168         uint8_t         status;
 169         uint8_t         completed[MBOX_MAX_FIRMWARE_STATUS];
 170         uint8_t         poll;
 171         uint8_t         ack;
 172 } __attribute__ ((packed)) mbox_t;
 173 
 174 
 175 /**
 176  * mbox64_t - 64-bit extension for the mailbox
 177  * @segment_lo  : the low 32-bits of the address of the scatter-gather list
 178  * @segment_hi  : the upper 32-bits of the address of the scatter-gather list
 179  * @mbox        : 32-bit mailbox, whose xferadder field must be set to
 180  *              0xFFFFFFFF
 181  *
 182  * This is the extension of the 32-bit mailbox to be able to perform DMA
 183  * beyond 4GB address range.
 184  */
 185 typedef struct {
 186         uint32_t        xferaddr_lo;
 187         uint32_t        xferaddr_hi;
 188         mbox_t          mbox32;
 189 } __attribute__ ((packed)) mbox64_t;
 190 
 191 /*
 192  * mailbox structure used for internal commands
 193  */
 194 typedef struct {
 195         u8      cmd;
 196         u8      cmdid;
 197         u8      opcode;
 198         u8      subopcode;
 199         u32     lba;
 200         u32     xferaddr;
 201         u8      logdrv;
 202         u8      rsvd[3];
 203         u8      numstatus;
 204         u8      status;
 205 } __attribute__ ((packed)) int_mbox_t;
 206 
 207 /**
 208  * mraid_passthru_t - passthru structure to issue commands to physical devices
 209  * @timeout             : command timeout, 0=6sec, 1=60sec, 2=10min, 3=3hr
 210  * @ars                 : set if ARS required after check condition
 211  * @islogical           : set if command meant for logical devices
 212  * @logdrv              : logical drive number if command for LD
 213  * @channel             : Channel on which physical device is located
 214  * @target              : SCSI target of the device
 215  * @queuetag            : unused
 216  * @queueaction         : unused
 217  * @cdb                 : SCSI CDB
 218  * @cdblen              : length of the CDB
 219  * @reqsenselen         : amount of request sense data to be returned
 220  * @reqsensearea        : Sense information buffer
 221  * @numsge              : number of scatter-gather elements in the sg list
 222  * @scsistatus          : SCSI status of the command completed.
 223  * @dataxferaddr        : DMA data transfer address
 224  * @dataxferlen         : amount of the data to be transferred.
 225  */
 226 typedef struct {
 227         uint8_t         timeout         :3;
 228         uint8_t         ars             :1;
 229         uint8_t         reserved        :3;
 230         uint8_t         islogical       :1;
 231         uint8_t         logdrv;
 232         uint8_t         channel;
 233         uint8_t         target;
 234         uint8_t         queuetag;
 235         uint8_t         queueaction;
 236         uint8_t         cdb[10];
 237         uint8_t         cdblen;
 238         uint8_t         reqsenselen;
 239         uint8_t         reqsensearea[MAX_REQ_SENSE_LEN];
 240         uint8_t         numsge;
 241         uint8_t         scsistatus;
 242         uint32_t        dataxferaddr;
 243         uint32_t        dataxferlen;
 244 } __attribute__ ((packed)) mraid_passthru_t;
 245 
 246 typedef struct {
 247 
 248         uint32_t                dataxferaddr_lo;
 249         uint32_t                dataxferaddr_hi;
 250         mraid_passthru_t        pthru32;
 251 
 252 } __attribute__ ((packed)) mega_passthru64_t;
 253 
 254 /**
 255  * mraid_epassthru_t - passthru structure to issue commands to physical devices
 256  * @timeout             : command timeout, 0=6sec, 1=60sec, 2=10min, 3=3hr
 257  * @ars                 : set if ARS required after check condition
 258  * @rsvd1               : reserved field
 259  * @cd_rom              : (?)
 260  * @rsvd2               : reserved field
 261  * @islogical           : set if command meant for logical devices
 262  * @logdrv              : logical drive number if command for LD
 263  * @channel             : Channel on which physical device is located
 264  * @target              : SCSI target of the device
 265  * @queuetag            : unused
 266  * @queueaction         : unused
 267  * @cdblen              : length of the CDB
 268  * @rsvd3               : reserved field
 269  * @cdb                 : SCSI CDB
 270  * @numsge              : number of scatter-gather elements in the sg list
 271  * @status              : SCSI status of the command completed.
 272  * @reqsenselen         : amount of request sense data to be returned
 273  * @reqsensearea        : Sense information buffer
 274  * @rsvd4               : reserved field
 275  * @dataxferaddr        : DMA data transfer address
 276  * @dataxferlen         : amount of the data to be transferred.
 277  */
 278 typedef struct {
 279         uint8_t         timeout         :3;
 280         uint8_t         ars             :1;
 281         uint8_t         rsvd1           :1;
 282         uint8_t         cd_rom          :1;
 283         uint8_t         rsvd2           :1;
 284         uint8_t         islogical       :1;
 285         uint8_t         logdrv;
 286         uint8_t         channel;
 287         uint8_t         target;
 288         uint8_t         queuetag;
 289         uint8_t         queueaction;
 290         uint8_t         cdblen;
 291         uint8_t         rsvd3;
 292         uint8_t         cdb[16];
 293         uint8_t         numsge;
 294         uint8_t         status;
 295         uint8_t         reqsenselen;
 296         uint8_t         reqsensearea[MAX_REQ_SENSE_LEN];
 297         uint8_t         rsvd4;
 298         uint32_t        dataxferaddr;
 299         uint32_t        dataxferlen;
 300 } __attribute__ ((packed)) mraid_epassthru_t;
 301 
 302 
 303 /**
 304  * mraid_pinfo_t - product info, static information about the controller
 305  * @data_size           : current size in bytes (not including resvd)
 306  * @config_signature    : Current value is 0x00282008
 307  * @fw_version          : Firmware version
 308  * @bios_version        : version of the BIOS
 309  * @product_name        : Name given to the controller
 310  * @max_commands        : Maximum concurrent commands supported
 311  * @nchannels           : Number of SCSI Channels detected
 312  * @fc_loop_present     : Number of Fibre Loops detected
 313  * @mem_type            : EDO, FPM, SDRAM etc
 314  * @signature           :
 315  * @dram_size           : In terms of MB
 316  * @subsysid            : device PCI subsystem ID
 317  * @subsysvid           : device PCI subsystem vendor ID
 318  * @notify_counters     :
 319  * @pad1k               : 135 + 889 resvd = 1024 total size
 320  *
 321  * This structures holds the information about the controller which is not
 322  * expected to change dynamically.
 323  *
 324  * The current value of config signature is 0x00282008:
 325  * 0x28 = MAX_LOGICAL_DRIVES,
 326  * 0x20 = Number of stripes and
 327  * 0x08 = Number of spans
 328  */
 329 typedef struct {
 330         uint32_t        data_size;
 331         uint32_t        config_signature;
 332         uint8_t         fw_version[16];
 333         uint8_t         bios_version[16];
 334         uint8_t         product_name[80];
 335         uint8_t         max_commands;
 336         uint8_t         nchannels;
 337         uint8_t         fc_loop_present;
 338         uint8_t         mem_type;
 339         uint32_t        signature;
 340         uint16_t        dram_size;
 341         uint16_t        subsysid;
 342         uint16_t        subsysvid;
 343         uint8_t         notify_counters;
 344         uint8_t         pad1k[889];
 345 } __attribute__ ((packed)) mraid_pinfo_t;
 346 
 347 
 348 /**
 349  * mraid_notify_t - the notification structure
 350  * @global_counter              : Any change increments this counter
 351  * @param_counter               : Indicates any params changed
 352  * @param_id                    : Param modified - defined below
 353  * @param_val                   : New val of last param modified
 354  * @write_config_counter        : write config occurred
 355  * @write_config_rsvd           :
 356  * @ldrv_op_counter             : Indicates ldrv op started/completed
 357  * @ldrv_opid                   : ldrv num
 358  * @ldrv_opcmd                  : ldrv operation - defined below
 359  * @ldrv_opstatus               : status of the operation
 360  * @ldrv_state_counter          : Indicates change of ldrv state
 361  * @ldrv_state_id               : ldrv num
 362  * @ldrv_state_new              : New state
 363  * @ldrv_state_old              : old state
 364  * @pdrv_state_counter          : Indicates change of ldrv state
 365  * @pdrv_state_id               : pdrv id
 366  * @pdrv_state_new              : New state
 367  * @pdrv_state_old              : old state
 368  * @pdrv_fmt_counter            : Indicates pdrv format started/over
 369  * @pdrv_fmt_id                 : pdrv id
 370  * @pdrv_fmt_val                : format started/over
 371  * @pdrv_fmt_rsvd               :
 372  * @targ_xfer_counter           : Indicates SCSI-2 Xfer rate change
 373  * @targ_xfer_id                : pdrv Id
 374  * @targ_xfer_val               : new Xfer params of last pdrv
 375  * @targ_xfer_rsvd              :
 376  * @fcloop_id_chg_counter       : Indicates loopid changed
 377  * @fcloopid_pdrvid             : pdrv id
 378  * @fcloop_id0                  : loopid on fc loop 0
 379  * @fcloop_id1                  : loopid on fc loop 1
 380  * @fcloop_state_counter        : Indicates loop state changed
 381  * @fcloop_state0               : state of fc loop 0
 382  * @fcloop_state1               : state of fc loop 1
 383  * @fcloop_state_rsvd           :
 384  */
 385 typedef struct {
 386         uint32_t        global_counter;
 387         uint8_t         param_counter;
 388         uint8_t         param_id;
 389         uint16_t        param_val;
 390         uint8_t         write_config_counter;
 391         uint8_t         write_config_rsvd[3];
 392         uint8_t         ldrv_op_counter;
 393         uint8_t         ldrv_opid;
 394         uint8_t         ldrv_opcmd;
 395         uint8_t         ldrv_opstatus;
 396         uint8_t         ldrv_state_counter;
 397         uint8_t         ldrv_state_id;
 398         uint8_t         ldrv_state_new;
 399         uint8_t         ldrv_state_old;
 400         uint8_t         pdrv_state_counter;
 401         uint8_t         pdrv_state_id;
 402         uint8_t         pdrv_state_new;
 403         uint8_t         pdrv_state_old;
 404         uint8_t         pdrv_fmt_counter;
 405         uint8_t         pdrv_fmt_id;
 406         uint8_t         pdrv_fmt_val;
 407         uint8_t         pdrv_fmt_rsvd;
 408         uint8_t         targ_xfer_counter;
 409         uint8_t         targ_xfer_id;
 410         uint8_t         targ_xfer_val;
 411         uint8_t         targ_xfer_rsvd;
 412         uint8_t         fcloop_id_chg_counter;
 413         uint8_t         fcloopid_pdrvid;
 414         uint8_t         fcloop_id0;
 415         uint8_t         fcloop_id1;
 416         uint8_t         fcloop_state_counter;
 417         uint8_t         fcloop_state0;
 418         uint8_t         fcloop_state1;
 419         uint8_t         fcloop_state_rsvd;
 420 } __attribute__ ((packed)) mraid_notify_t;
 421 
 422 
 423 /**
 424  * mraid_inquiry3_t - enquiry for device information
 425  *
 426  * @data_size           : current size in bytes (not including resvd)
 427  * @notify              :
 428  * @notify_rsvd         :
 429  * @rebuild_rate        : rebuild rate (0% - 100%)
 430  * @cache_flush_int     : cache flush interval in seconds
 431  * @sense_alert         :
 432  * @drive_insert_count  : drive insertion count
 433  * @battery_status      :
 434  * @num_ldrv            : no. of Log Drives configured
 435  * @recon_state         : state of reconstruct
 436  * @ldrv_op_status      : logdrv Status
 437  * @ldrv_size           : size of each log drv
 438  * @ldrv_prop           :
 439  * @ldrv_state          : state of log drives
 440  * @pdrv_state          : state of phys drvs.
 441  * @pdrv_format         :
 442  * @targ_xfer           : phys device transfer rate
 443  * @pad1k               : 761 + 263reserved = 1024 bytes total size
 444  */
 445 #define MAX_NOTIFY_SIZE         0x80
 446 #define CUR_NOTIFY_SIZE         sizeof(mraid_notify_t)
 447 
 448 typedef struct {
 449         uint32_t        data_size;
 450 
 451         mraid_notify_t  notify;
 452 
 453         uint8_t         notify_rsvd[MAX_NOTIFY_SIZE - CUR_NOTIFY_SIZE];
 454 
 455         uint8_t         rebuild_rate;
 456         uint8_t         cache_flush_int;
 457         uint8_t         sense_alert;
 458         uint8_t         drive_insert_count;
 459 
 460         uint8_t         battery_status;
 461         uint8_t         num_ldrv;
 462         uint8_t         recon_state[MAX_LOGICAL_DRIVES_40LD / 8];
 463         uint16_t        ldrv_op_status[MAX_LOGICAL_DRIVES_40LD / 8];
 464 
 465         uint32_t        ldrv_size[MAX_LOGICAL_DRIVES_40LD];
 466         uint8_t         ldrv_prop[MAX_LOGICAL_DRIVES_40LD];
 467         uint8_t         ldrv_state[MAX_LOGICAL_DRIVES_40LD];
 468         uint8_t         pdrv_state[FC_MAX_PHYSICAL_DEVICES];
 469         uint16_t        pdrv_format[FC_MAX_PHYSICAL_DEVICES / 16];
 470 
 471         uint8_t         targ_xfer[80];
 472         uint8_t         pad1k[263];
 473 } __attribute__ ((packed)) mraid_inquiry3_t;
 474 
 475 
 476 /**
 477  * mraid_adapinfo_t - information about the adapter
 478  * @max_commands                : max concurrent commands supported
 479  * @rebuild_rate                : rebuild rate - 0% thru 100%
 480  * @max_targ_per_chan           : max targ per channel
 481  * @nchannels                   : number of channels on HBA
 482  * @fw_version                  : firmware version
 483  * @age_of_flash                : number of times FW has been flashed
 484  * @chip_set_value              : contents of 0xC0000832
 485  * @dram_size                   : in MB
 486  * @cache_flush_interval        : in seconds
 487  * @bios_version                :
 488  * @board_type                  :
 489  * @sense_alert                 :
 490  * @write_config_count          : increase with every configuration change
 491  * @drive_inserted_count        : increase with every drive inserted
 492  * @inserted_drive              : channel:Id of inserted drive
 493  * @battery_status              : bit 0: battery module missing
 494  *                              bit 1: VBAD
 495  *                              bit 2: temperature high
 496  *                              bit 3: battery pack missing
 497  *                              bit 4,5:
 498  *                                      00 - charge complete
 499  *                                      01 - fast charge in progress
 500  *                                      10 - fast charge fail
 501  *                                      11 - undefined
 502  *                              bit 6: counter > 1000
 503  *                              bit 7: Undefined
 504  * @dec_fault_bus_info          :
 505  */
 506 typedef struct {
 507         uint8_t         max_commands;
 508         uint8_t         rebuild_rate;
 509         uint8_t         max_targ_per_chan;
 510         uint8_t         nchannels;
 511         uint8_t         fw_version[4];
 512         uint16_t        age_of_flash;
 513         uint8_t         chip_set_value;
 514         uint8_t         dram_size;
 515         uint8_t         cache_flush_interval;
 516         uint8_t         bios_version[4];
 517         uint8_t         board_type;
 518         uint8_t         sense_alert;
 519         uint8_t         write_config_count;
 520         uint8_t         battery_status;
 521         uint8_t         dec_fault_bus_info;
 522 } __attribute__ ((packed)) mraid_adapinfo_t;
 523 
 524 
 525 /**
 526  * mraid_ldrv_info_t - information about the logical drives
 527  * @nldrv       : Number of logical drives configured
 528  * @rsvd        :
 529  * @size        : size of each logical drive
 530  * @prop        :
 531  * @state       : state of each logical drive
 532  */
 533 typedef struct {
 534         uint8_t         nldrv;
 535         uint8_t         rsvd[3];
 536         uint32_t        size[MAX_LOGICAL_DRIVES_8LD];
 537         uint8_t         prop[MAX_LOGICAL_DRIVES_8LD];
 538         uint8_t         state[MAX_LOGICAL_DRIVES_8LD];
 539 } __attribute__ ((packed)) mraid_ldrv_info_t;
 540 
 541 
 542 /**
 543  * mraid_pdrv_info_t - information about the physical drives
 544  * @pdrv_state  : state of each physical drive
 545  */
 546 typedef struct {
 547         uint8_t         pdrv_state[MBOX_MAX_PHYSICAL_DRIVES];
 548         uint8_t         rsvd;
 549 } __attribute__ ((packed)) mraid_pdrv_info_t;
 550 
 551 
 552 /**
 553  * mraid_inquiry_t - RAID inquiry, mailbox command 0x05
 554  * @mraid_adapinfo_t    : adapter information
 555  * @mraid_ldrv_info_t   : logical drives information
 556  * @mraid_pdrv_info_t   : physical drives information
 557  */
 558 typedef struct {
 559         mraid_adapinfo_t        adapter_info;
 560         mraid_ldrv_info_t       logdrv_info;
 561         mraid_pdrv_info_t       pdrv_info;
 562 } __attribute__ ((packed)) mraid_inquiry_t;
 563 
 564 
 565 /**
 566  * mraid_extinq_t - RAID extended inquiry, mailbox command 0x04
 567  *
 568  * @raid_inq            : raid inquiry
 569  * @phys_drv_format     :
 570  * @stack_attn          :
 571  * @modem_status        :
 572  * @rsvd                :
 573  */
 574 typedef struct {
 575         mraid_inquiry_t raid_inq;
 576         uint16_t        phys_drv_format[MAX_MBOX_CHANNELS];
 577         uint8_t         stack_attn;
 578         uint8_t         modem_status;
 579         uint8_t         rsvd[2];
 580 } __attribute__ ((packed)) mraid_extinq_t;
 581 
 582 
 583 /**
 584  * adap_device_t - device information
 585  * @channel     : channel fpor the device
 586  * @target      : target ID of the device
 587  */
 588 typedef struct {
 589         uint8_t         channel;
 590         uint8_t         target;
 591 }__attribute__ ((packed)) adap_device_t;
 592 
 593 
 594 /**
 595  * adap_span_40ld_t - 40LD span
 596  * @start_blk   : starting block
 597  * @num_blks    : number of blocks
 598  */
 599 typedef struct {
 600         uint32_t        start_blk;
 601         uint32_t        num_blks;
 602         adap_device_t   device[MAX_ROW_SIZE_40LD];
 603 }__attribute__ ((packed)) adap_span_40ld_t;
 604 
 605 
 606 /**
 607  * adap_span_8ld_t - 8LD span
 608  * @start_blk   : starting block
 609  * @num_blks    : number of blocks
 610  */
 611 typedef struct {
 612         uint32_t        start_blk;
 613         uint32_t        num_blks;
 614         adap_device_t   device[MAX_ROW_SIZE_8LD];
 615 }__attribute__ ((packed)) adap_span_8ld_t;
 616 
 617 
 618 /**
 619  * logdrv_param_t - logical drives parameters
 620  *
 621  * @span_depth  : total number of spans
 622  * @level       : RAID level
 623  * @read_ahead  : read ahead, no read ahead, adaptive read ahead
 624  * @stripe_sz   : encoded stripe size
 625  * @status      : status of the logical drive
 626  * @write_mode  : write mode, write_through/write_back
 627  * @direct_io   : direct io or through cache
 628  * @row_size    : number of stripes in a row
 629  */
 630 typedef struct {
 631         uint8_t         span_depth;
 632         uint8_t         level;
 633         uint8_t         read_ahead;
 634         uint8_t         stripe_sz;
 635         uint8_t         status;
 636         uint8_t         write_mode;
 637         uint8_t         direct_io;
 638         uint8_t         row_size;
 639 } __attribute__ ((packed)) logdrv_param_t;
 640 
 641 
 642 /**
 643  * logdrv_40ld_t - logical drive definition for 40LD controllers
 644  * @lparam      : logical drives parameters
 645  * @span        : span
 646  */
 647 typedef struct {
 648         logdrv_param_t          lparam;
 649         adap_span_40ld_t        span[SPAN_DEPTH_8_SPANS];
 650 }__attribute__ ((packed)) logdrv_40ld_t;
 651 
 652 
 653 /**
 654  * logdrv_8ld_span8_t - logical drive definition for 8LD controllers
 655  * @lparam      : logical drives parameters
 656  * @span        : span
 657  *
 658  * 8-LD logical drive with up to 8 spans
 659  */
 660 typedef struct {
 661         logdrv_param_t  lparam;
 662         adap_span_8ld_t span[SPAN_DEPTH_8_SPANS];
 663 }__attribute__ ((packed)) logdrv_8ld_span8_t;
 664 
 665 
 666 /**
 667  * logdrv_8ld_span4_t - logical drive definition for 8LD controllers
 668  * @lparam      : logical drives parameters
 669  * @span        : span
 670  *
 671  * 8-LD logical drive with up to 4 spans
 672  */
 673 typedef struct {
 674         logdrv_param_t  lparam;
 675         adap_span_8ld_t span[SPAN_DEPTH_4_SPANS];
 676 }__attribute__ ((packed)) logdrv_8ld_span4_t;
 677 
 678 
 679 /**
 680  * phys_drive_t - physical device information
 681  * @type        : Type of the device
 682  * @cur_status  : current status of the device
 683  * @tag_depth   : Level of tagging
 684  * @sync_neg    : sync negotiation - ENABLE or DISABLE
 685  * @size        : configurable size in terms of 512 byte
 686  */
 687 typedef struct {
 688         uint8_t         type;
 689         uint8_t         cur_status;
 690         uint8_t         tag_depth;
 691         uint8_t         sync_neg;
 692         uint32_t        size;
 693 }__attribute__ ((packed)) phys_drive_t;
 694 
 695 
 696 /**
 697  * disk_array_40ld_t - disk array for 40LD controllers
 698  * @numldrv     : number of logical drives
 699  * @resvd       :
 700  * @ldrv        : logical drives information
 701  * @pdrv        : physical drives information
 702  */
 703 typedef struct {
 704         uint8_t         numldrv;
 705         uint8_t         resvd[3];
 706         logdrv_40ld_t   ldrv[MAX_LOGICAL_DRIVES_40LD];
 707         phys_drive_t    pdrv[MBOX_MAX_PHYSICAL_DRIVES];
 708 }__attribute__ ((packed)) disk_array_40ld_t;
 709 
 710 
 711 /**
 712  * disk_array_8ld_span8_t - disk array for 8LD controllers
 713  * @numldrv     : number of logical drives
 714  * @resvd       :
 715  * @ldrv        : logical drives information
 716  * @pdrv        : physical drives information
 717  *
 718  * Disk array for 8LD logical drives with up to 8 spans
 719  */
 720 typedef struct {
 721         uint8_t                 numldrv;
 722         uint8_t                 resvd[3];
 723         logdrv_8ld_span8_t      ldrv[MAX_LOGICAL_DRIVES_8LD];
 724         phys_drive_t            pdrv[MBOX_MAX_PHYSICAL_DRIVES];
 725 }__attribute__ ((packed)) disk_array_8ld_span8_t;
 726 
 727 
 728 /**
 729  * disk_array_8ld_span4_t - disk array for 8LD controllers
 730  * @numldrv     : number of logical drives
 731  * @resvd       :
 732  * @ldrv        : logical drives information
 733  * @pdrv        : physical drives information
 734  *
 735  * Disk array for 8LD logical drives with up to 4 spans
 736  */
 737 typedef struct {
 738         uint8_t                 numldrv;
 739         uint8_t                 resvd[3];
 740         logdrv_8ld_span4_t      ldrv[MAX_LOGICAL_DRIVES_8LD];
 741         phys_drive_t            pdrv[MBOX_MAX_PHYSICAL_DRIVES];
 742 }__attribute__ ((packed)) disk_array_8ld_span4_t;
 743 
 744 
 745 /**
 746  * struct private_bios_data - bios private data for boot devices
 747  * @geometry    : bits 0-3 - BIOS geometry, 0x0001 - 1GB, 0x0010 - 2GB,
 748  *              0x1000 - 8GB, Others values are invalid
 749  * @unused      : bits 4-7 are unused
 750  * @boot_drv    : logical drive set as boot drive, 0..7 - for 8LD cards,
 751  *              0..39 - for 40LD cards
 752  * @cksum       : 0-(sum of first 13 bytes of this structure)
 753  */
 754 struct private_bios_data {
 755         uint8_t         geometry        :4;
 756         uint8_t         unused          :4;
 757         uint8_t         boot_drv;
 758         uint8_t         rsvd[12];
 759         uint16_t        cksum;
 760 } __attribute__ ((packed));
 761 
 762 
 763 /**
 764  * mbox_sgl64 - 64-bit scatter list for mailbox based controllers
 765  * @address     : address of the buffer
 766  * @length      : data transfer length
 767  */
 768 typedef struct {
 769         uint64_t        address;
 770         uint32_t        length;
 771 } __attribute__ ((packed)) mbox_sgl64;
 772 
 773 /**
 774  * mbox_sgl32 - 32-bit scatter list for mailbox based controllers
 775  * @address     : address of the buffer
 776  * @length      : data transfer length
 777  */
 778 typedef struct {
 779         uint32_t        address;
 780         uint32_t        length;
 781 } __attribute__ ((packed)) mbox_sgl32;
 782 
 783 #endif          // _MRAID_MBOX_DEFS_H_
 784 
 785 /* vim: set ts=8 sw=8 tw=78: */

/* [<][>][^][v][top][bottom][index][help] */