3  *                      Linux MegaRAID Unified device driver
 
   5  * Copyright (c) 2003-2004  LSI Logic Corporation.
 
   7  *         This program is free software; you can redistribute it and/or
 
   8  *         modify it under the terms of the GNU General Public License
 
   9  *         as published by the Free Software Foundation; either version
 
  10  *         2 of the License, or (at your option) any later version.
 
  15 #ifndef _MRAID_MBOX_DEFS_H_
 
  16 #define _MRAID_MBOX_DEFS_H_
 
  18 #include <linux/types.h>
 
  21  * Commands and states for mailbox based controllers
 
  24 #define MBOXCMD_LREAD           0x01
 
  25 #define MBOXCMD_LWRITE          0x02
 
  26 #define MBOXCMD_PASSTHRU        0x03
 
  27 #define MBOXCMD_ADPEXTINQ       0x04
 
  28 #define MBOXCMD_ADAPTERINQ      0x05
 
  29 #define MBOXCMD_LREAD64         0xA7
 
  30 #define MBOXCMD_LWRITE64        0xA8
 
  31 #define MBOXCMD_PASSTHRU64      0xC3
 
  32 #define MBOXCMD_EXTPTHRU        0xE3
 
  34 #define MAIN_MISC_OPCODE        0xA4
 
  35 #define GET_MAX_SG_SUPPORT      0x01
 
  36 #define SUPPORT_EXT_CDB         0x16
 
  38 #define FC_NEW_CONFIG           0xA1
 
  39 #define NC_SUBOP_PRODUCT_INFO   0x0E
 
  40 #define NC_SUBOP_ENQUIRY3       0x0F
 
  41 #define ENQ3_GET_SOLICITED_FULL 0x02
 
  42 #define OP_DCMD_READ_CONFIG     0x04
 
  43 #define NEW_READ_CONFIG_8LD     0x67
 
  44 #define READ_CONFIG_8LD         0x07
 
  45 #define FLUSH_ADAPTER           0x0A
 
  46 #define FLUSH_SYSTEM            0xFE
 
  49  * Command for random deletion of logical drives
 
  51 #define FC_DEL_LOGDRV           0xA4
 
  52 #define OP_SUP_DEL_LOGDRV       0x2A
 
  53 #define OP_GET_LDID_MAP         0x18
 
  54 #define OP_DEL_LOGDRV           0x1C
 
  59 #define IS_BIOS_ENABLED         0x62
 
  61 #define CHNL_CLASS              0xA9
 
  62 #define GET_CHNL_CLASS          0x00
 
  63 #define SET_CHNL_CLASS          0x01
 
  66 #define BIOS_PVT_DATA           0x40
 
  67 #define GET_BIOS_PVT_DATA       0x00
 
  71  * Commands to support clustering
 
  73 #define GET_TARGET_ID           0x7D
 
  74 #define CLUSTER_OP              0x70
 
  75 #define GET_CLUSTER_MODE        0x02
 
  76 #define CLUSTER_CMD             0x6E
 
  77 #define RESERVE_LD              0x01
 
  78 #define RELEASE_LD              0x02
 
  79 #define RESET_RESERVATIONS      0x03
 
  80 #define RESERVATION_STATUS      0x04
 
  81 #define RESERVE_PD              0x05
 
  82 #define RELEASE_PD              0x06
 
  86  * Module battery status
 
  88 #define BATTERY_MODULE_MISSING          0x01
 
  89 #define BATTERY_LOW_VOLTAGE             0x02
 
  90 #define BATTERY_TEMP_HIGH               0x04
 
  91 #define BATTERY_PACK_MISSING            0x08
 
  92 #define BATTERY_CHARGE_MASK             0x30
 
  93 #define BATTERY_CHARGE_DONE             0x00
 
  94 #define BATTERY_CHARGE_INPROG           0x10
 
  95 #define BATTERY_CHARGE_FAIL             0x20
 
  96 #define BATTERY_CYCLES_EXCEEDED         0x40
 
  99  * Physical drive states.
 
 102 #define PDRV_ONLINE     3
 
 103 #define PDRV_FAILED     4
 
 105 #define PDRV_HOTSPARE   6
 
 109  * Raid logical drive states.
 
 111 #define RDRV_OFFLINE    0
 
 112 #define RDRV_DEGRADED   1
 
 113 #define RDRV_OPTIMAL    2
 
 114 #define RDRV_DELETED    3
 
 117  * Read, write and cache policies
 
 119 #define NO_READ_AHEAD           0
 
 121 #define ADAP_READ_AHEAD         2
 
 122 #define WRMODE_WRITE_THRU       0
 
 123 #define WRMODE_WRITE_BACK       1
 
 127 #define MAX_LOGICAL_DRIVES_8LD          8
 
 128 #define MAX_LOGICAL_DRIVES_40LD         40
 
 129 #define FC_MAX_PHYSICAL_DEVICES         256
 
 130 #define MAX_MBOX_CHANNELS               5
 
 131 #define MAX_MBOX_TARGET                 15
 
 132 #define MBOX_MAX_PHYSICAL_DRIVES        MAX_MBOX_CHANNELS*MAX_MBOX_TARGET
 
 133 #define MAX_ROW_SIZE_40LD               32
 
 134 #define MAX_ROW_SIZE_8LD                8
 
 135 #define SPAN_DEPTH_8_SPANS              8
 
 136 #define SPAN_DEPTH_4_SPANS              4
 
 137 #define MAX_REQ_SENSE_LEN               0x20
 
 142  * struct mbox_t - Driver and f/w handshake structure.
 
 143  * @cmd         : firmware command
 
 144  * @cmdid       : command id
 
 145  * @numsectors  : number of sectors to be transferred
 
 146  * @lba         : Logical Block Address on LD
 
 147  * @xferaddr    : DMA address for data transfer
 
 148  * @logdrv      : logical drive number
 
 149  * @numsge      : number of scatter gather elements in sg list
 
 151  * @busy        : f/w busy, must wait to issue more commands.
 
 152  * @numstatus   : number of commands completed.
 
 153  * @status      : status of the commands completed
 
 154  * @completed   : array of completed command ids.
 
 155  * @poll        : poll and ack sequence
 
 156  * @ack         : poll and ack sequence
 
 158  * The central handshake structure between the driver and the firmware. This
 
 159  * structure must be allocated by the driver and aligned at 8-byte boundary.
 
 161 #define MBOX_MAX_FIRMWARE_STATUS        46
 
 174         uint8_t         completed[MBOX_MAX_FIRMWARE_STATUS];
 
 177 } __attribute__ ((packed)) mbox_t;
 
 181  * mbox64_t - 64-bit extension for the mailbox
 
 182  * @segment_lo  : the low 32-bits of the address of the scatter-gather list
 
 183  * @segment_hi  : the upper 32-bits of the address of the scatter-gather list
 
 184  * @mbox        : 32-bit mailbox, whose xferadder field must be set to
 
 187  * This is the extension of the 32-bit mailbox to be able to perform DMA
 
 188  * beyond 4GB address range.
 
 191         uint32_t        xferaddr_lo;
 
 192         uint32_t        xferaddr_hi;
 
 194 } __attribute__ ((packed)) mbox64_t;
 
 197  * mailbox structure used for internal commands
 
 210 } __attribute__ ((packed)) int_mbox_t;
 
 213  * mraid_passthru_t - passthru structure to issue commands to physical devices
 
 214  * @timeout             : command timeout, 0=6sec, 1=60sec, 2=10min, 3=3hr
 
 215  * @ars                 : set if ARS required after check condition
 
 216  * @islogical           : set if command meant for logical devices
 
 217  * @logdrv              : logical drive number if command for LD
 
 218  * @channel             : Channel on which physical device is located
 
 219  * @target              : SCSI target of the device
 
 221  * @queueaction         : unused
 
 223  * @cdblen              : length of the CDB
 
 224  * @reqsenselen         : amount of request sense data to be returned
 
 225  * @reqsensearea        : Sense information buffer
 
 226  * @numsge              : number of scatter-gather elements in the sg list
 
 227  * @scsistatus          : SCSI status of the command completed.
 
 228  * @dataxferaddr        : DMA data transfer address
 
 229  * @dataxferlen         : amount of the data to be transferred.
 
 235         uint8_t         islogical       :1;
 
 244         uint8_t         reqsensearea[MAX_REQ_SENSE_LEN];
 
 247         uint32_t        dataxferaddr;
 
 248         uint32_t        dataxferlen;
 
 249 } __attribute__ ((packed)) mraid_passthru_t;
 
 253         uint32_t                dataxferaddr_lo;
 
 254         uint32_t                dataxferaddr_hi;
 
 255         mraid_passthru_t        pthru32;
 
 257 } __attribute__ ((packed)) mega_passthru64_t;
 
 260  * mraid_epassthru_t - passthru structure to issue commands to physical devices
 
 261  * @timeout             : command timeout, 0=6sec, 1=60sec, 2=10min, 3=3hr
 
 262  * @ars                 : set if ARS required after check condition
 
 263  * @rsvd1               : reserved field
 
 265  * @rsvd2               : reserved field
 
 266  * @islogical           : set if command meant for logical devices
 
 267  * @logdrv              : logical drive number if command for LD
 
 268  * @channel             : Channel on which physical device is located
 
 269  * @target              : SCSI target of the device
 
 271  * @queueaction         : unused
 
 272  * @cdblen              : length of the CDB
 
 273  * @rsvd3               : reserved field
 
 275  * @numsge              : number of scatter-gather elements in the sg list
 
 276  * @status              : SCSI status of the command completed.
 
 277  * @reqsenselen         : amount of request sense data to be returned
 
 278  * @reqsensearea        : Sense information buffer
 
 279  * @rsvd4               : reserved field
 
 280  * @dataxferaddr        : DMA data transfer address
 
 281  * @dataxferlen         : amount of the data to be transferred.
 
 289         uint8_t         islogical       :1;
 
 301         uint8_t         reqsensearea[MAX_REQ_SENSE_LEN];
 
 303         uint32_t        dataxferaddr;
 
 304         uint32_t        dataxferlen;
 
 305 } __attribute__ ((packed)) mraid_epassthru_t;
 
 309  * mraid_pinfo_t - product info, static information about the controller
 
 310  * @data_size           : current size in bytes (not including resvd)
 
 311  * @config_signature    : Current value is 0x00282008
 
 312  * @fw_version          : Firmware version
 
 313  * @bios_version        : version of the BIOS
 
 314  * @product_name        : Name given to the controller
 
 315  * @max_commands        : Maximum concurrent commands supported
 
 316  * @nchannels           : Number of SCSI Channels detected
 
 317  * @fc_loop_present     : Number of Fibre Loops detected
 
 318  * @mem_type            : EDO, FPM, SDRAM etc
 
 320  * @dram_size           : In terms of MB
 
 321  * @subsysid            : device PCI subsystem ID
 
 322  * @subsysvid           : device PCI subsystem vendor ID
 
 324  * @pad1k               : 135 + 889 resvd = 1024 total size
 
 326  * This structures holds the information about the controller which is not
 
 327  * expected to change dynamically.
 
 329  * The current value of config signature is 0x00282008:
 
 330  * 0x28 = MAX_LOGICAL_DRIVES,
 
 331  * 0x20 = Number of stripes and
 
 332  * 0x08 = Number of spans
 
 336         uint32_t        config_signature;
 
 337         uint8_t         fw_version[16];
 
 338         uint8_t         bios_version[16];
 
 339         uint8_t         product_name[80];
 
 340         uint8_t         max_commands;
 
 342         uint8_t         fc_loop_present;
 
 348         uint8_t         notify_counters;
 
 350 } __attribute__ ((packed)) mraid_pinfo_t;
 
 354  * mraid_notify_t - the notification structure
 
 355  * @global_counter              : Any change increments this counter
 
 356  * @param_counter               : Indicates any params changed
 
 357  * @param_id                    : Param modified - defined below
 
 358  * @param_val                   : New val of last param modified
 
 359  * @write_config_counter        : write config occurred
 
 360  * @write_config_rsvd           :
 
 361  * @ldrv_op_counter             : Indicates ldrv op started/completed
 
 362  * @ldrv_opid                   : ldrv num
 
 363  * @ldrv_opcmd                  : ldrv operation - defined below
 
 364  * @ldrv_opstatus               : status of the operation
 
 365  * @ldrv_state_counter          : Indicates change of ldrv state
 
 366  * @ldrv_state_id               : ldrv num
 
 367  * @ldrv_state_new              : New state
 
 368  * @ldrv_state_old              : old state
 
 369  * @pdrv_state_counter          : Indicates change of ldrv state
 
 370  * @pdrv_state_id               : pdrv id
 
 371  * @pdrv_state_new              : New state
 
 372  * @pdrv_state_old              : old state
 
 373  * @pdrv_fmt_counter            : Indicates pdrv format started/over
 
 374  * @pdrv_fmt_id                 : pdrv id
 
 375  * @pdrv_fmt_val                : format started/over
 
 377  * @targ_xfer_counter           : Indicates SCSI-2 Xfer rate change
 
 378  * @targ_xfer_id                : pdrv Id
 
 379  * @targ_xfer_val               : new Xfer params of last pdrv
 
 381  * @fcloop_id_chg_counter       : Indicates loopid changed
 
 382  * @fcloopid_pdrvid             : pdrv id
 
 383  * @fcloop_id0                  : loopid on fc loop 0
 
 384  * @fcloop_id1                  : loopid on fc loop 1
 
 385  * @fcloop_state_counter        : Indicates loop state changed
 
 386  * @fcloop_state0               : state of fc loop 0
 
 387  * @fcloop_state1               : state of fc loop 1
 
 388  * @fcloop_state_rsvd           :
 
 391         uint32_t        global_counter;
 
 392         uint8_t         param_counter;
 
 395         uint8_t         write_config_counter;
 
 396         uint8_t         write_config_rsvd[3];
 
 397         uint8_t         ldrv_op_counter;
 
 400         uint8_t         ldrv_opstatus;
 
 401         uint8_t         ldrv_state_counter;
 
 402         uint8_t         ldrv_state_id;
 
 403         uint8_t         ldrv_state_new;
 
 404         uint8_t         ldrv_state_old;
 
 405         uint8_t         pdrv_state_counter;
 
 406         uint8_t         pdrv_state_id;
 
 407         uint8_t         pdrv_state_new;
 
 408         uint8_t         pdrv_state_old;
 
 409         uint8_t         pdrv_fmt_counter;
 
 411         uint8_t         pdrv_fmt_val;
 
 412         uint8_t         pdrv_fmt_rsvd;
 
 413         uint8_t         targ_xfer_counter;
 
 414         uint8_t         targ_xfer_id;
 
 415         uint8_t         targ_xfer_val;
 
 416         uint8_t         targ_xfer_rsvd;
 
 417         uint8_t         fcloop_id_chg_counter;
 
 418         uint8_t         fcloopid_pdrvid;
 
 421         uint8_t         fcloop_state_counter;
 
 422         uint8_t         fcloop_state0;
 
 423         uint8_t         fcloop_state1;
 
 424         uint8_t         fcloop_state_rsvd;
 
 425 } __attribute__ ((packed)) mraid_notify_t;
 
 429  * mraid_inquiry3_t - enquiry for device information
 
 431  * @data_size           : current size in bytes (not including resvd)
 
 434  * @rebuild_rate        : rebuild rate (0% - 100%)
 
 435  * @cache_flush_int     : cache flush interval in seconds
 
 437  * @drive_insert_count  : drive insertion count
 
 439  * @num_ldrv            : no. of Log Drives configured
 
 440  * @recon_state         : state of reconstruct
 
 441  * @ldrv_op_status      : logdrv Status
 
 442  * @ldrv_size           : size of each log drv
 
 444  * @ldrv_state          : state of log drives
 
 445  * @pdrv_state          : state of phys drvs.
 
 447  * @targ_xfer           : phys device transfer rate
 
 448  * @pad1k               : 761 + 263reserved = 1024 bytes total size
 
 450 #define MAX_NOTIFY_SIZE         0x80
 
 451 #define CUR_NOTIFY_SIZE         sizeof(mraid_notify_t)
 
 456         mraid_notify_t  notify;
 
 458         uint8_t         notify_rsvd[MAX_NOTIFY_SIZE - CUR_NOTIFY_SIZE];
 
 460         uint8_t         rebuild_rate;
 
 461         uint8_t         cache_flush_int;
 
 463         uint8_t         drive_insert_count;
 
 465         uint8_t         battery_status;
 
 467         uint8_t         recon_state[MAX_LOGICAL_DRIVES_40LD / 8];
 
 468         uint16_t        ldrv_op_status[MAX_LOGICAL_DRIVES_40LD / 8];
 
 470         uint32_t        ldrv_size[MAX_LOGICAL_DRIVES_40LD];
 
 471         uint8_t         ldrv_prop[MAX_LOGICAL_DRIVES_40LD];
 
 472         uint8_t         ldrv_state[MAX_LOGICAL_DRIVES_40LD];
 
 473         uint8_t         pdrv_state[FC_MAX_PHYSICAL_DEVICES];
 
 474         uint16_t        pdrv_format[FC_MAX_PHYSICAL_DEVICES / 16];
 
 476         uint8_t         targ_xfer[80];
 
 478 } __attribute__ ((packed)) mraid_inquiry3_t;
 
 482  * mraid_adapinfo_t - information about the adapter
 
 483  * @max_commands                : max concurrent commands supported
 
 484  * @rebuild_rate                : rebuild rate - 0% thru 100%
 
 485  * @max_targ_per_chan           : max targ per channel
 
 486  * @nchannels                   : number of channels on HBA
 
 487  * @fw_version                  : firmware version
 
 488  * @age_of_flash                : number of times FW has been flashed
 
 489  * @chip_set_value              : contents of 0xC0000832
 
 491  * @cache_flush_interval        : in seconds
 
 495  * @write_config_count          : increase with every configuration change
 
 496  * @drive_inserted_count        : increase with every drive inserted
 
 497  * @inserted_drive              : channel:Id of inserted drive
 
 498  * @battery_status              : bit 0: battery module missing
 
 500  *                              bit 2: temprature high
 
 501  *                              bit 3: battery pack missing
 
 503  *                                      00 - charge complete
 
 504  *                                      01 - fast charge in progress
 
 505  *                                      10 - fast charge fail
 
 507  *                              bit 6: counter > 1000
 
 509  * @dec_fault_bus_info          :
 
 512         uint8_t         max_commands;
 
 513         uint8_t         rebuild_rate;
 
 514         uint8_t         max_targ_per_chan;
 
 516         uint8_t         fw_version[4];
 
 517         uint16_t        age_of_flash;
 
 518         uint8_t         chip_set_value;
 
 520         uint8_t         cache_flush_interval;
 
 521         uint8_t         bios_version[4];
 
 524         uint8_t         write_config_count;
 
 525         uint8_t         battery_status;
 
 526         uint8_t         dec_fault_bus_info;
 
 527 } __attribute__ ((packed)) mraid_adapinfo_t;
 
 531  * mraid_ldrv_info_t - information about the logical drives
 
 532  * @nldrv       : Number of logical drives configured
 
 534  * @size        : size of each logical drive
 
 536  * @state       : state of each logical drive
 
 541         uint32_t        size[MAX_LOGICAL_DRIVES_8LD];
 
 542         uint8_t         prop[MAX_LOGICAL_DRIVES_8LD];
 
 543         uint8_t         state[MAX_LOGICAL_DRIVES_8LD];
 
 544 } __attribute__ ((packed)) mraid_ldrv_info_t;
 
 548  * mraid_pdrv_info_t - information about the physical drives
 
 549  * @pdrv_state  : state of each physical drive
 
 552         uint8_t         pdrv_state[MBOX_MAX_PHYSICAL_DRIVES];
 
 554 } __attribute__ ((packed)) mraid_pdrv_info_t;
 
 558  * mraid_inquiry_t - RAID inquiry, mailbox command 0x05
 
 559  * @mraid_adapinfo_t    : adapter information
 
 560  * @mraid_ldrv_info_t   : logical drives information
 
 561  * @mraid_pdrv_info_t   : physical drives information
 
 564         mraid_adapinfo_t        adapter_info;
 
 565         mraid_ldrv_info_t       logdrv_info;
 
 566         mraid_pdrv_info_t       pdrv_info;
 
 567 } __attribute__ ((packed)) mraid_inquiry_t;
 
 571  * mraid_extinq_t - RAID extended inquiry, mailbox command 0x04
 
 573  * @raid_inq            : raid inquiry
 
 580         mraid_inquiry_t raid_inq;
 
 581         uint16_t        phys_drv_format[MAX_MBOX_CHANNELS];
 
 583         uint8_t         modem_status;
 
 585 } __attribute__ ((packed)) mraid_extinq_t;
 
 589  * adap_device_t - device information
 
 590  * @channel     : channel fpor the device
 
 591  * @target      : target ID of the device
 
 596 }__attribute__ ((packed)) adap_device_t;
 
 600  * adap_span_40ld_t - 40LD span
 
 601  * @start_blk   : starting block
 
 602  * @num_blks    : number of blocks
 
 607         adap_device_t   device[MAX_ROW_SIZE_40LD];
 
 608 }__attribute__ ((packed)) adap_span_40ld_t;
 
 612  * adap_span_8ld_t - 8LD span
 
 613  * @start_blk   : starting block
 
 614  * @num_blks    : number of blocks
 
 619         adap_device_t   device[MAX_ROW_SIZE_8LD];
 
 620 }__attribute__ ((packed)) adap_span_8ld_t;
 
 624  * logdrv_param_t - logical drives parameters
 
 626  * @span_depth  : total number of spans
 
 627  * @level       : RAID level
 
 628  * @read_ahead  : read ahead, no read ahead, adaptive read ahead
 
 629  * @stripe_sz   : encoded stripe size
 
 630  * @status      : status of the logical drive
 
 631  * @write_mode  : write mode, write_through/write_back
 
 632  * @direct_io   : direct io or through cache
 
 633  * @row_size    : number of stripes in a row
 
 644 } __attribute__ ((packed)) logdrv_param_t;
 
 648  * logdrv_40ld_t - logical drive definition for 40LD controllers
 
 649  * @lparam      : logical drives parameters
 
 653         logdrv_param_t          lparam;
 
 654         adap_span_40ld_t        span[SPAN_DEPTH_8_SPANS];
 
 655 }__attribute__ ((packed)) logdrv_40ld_t;
 
 659  * logdrv_8ld_span8_t - logical drive definition for 8LD controllers
 
 660  * @lparam      : logical drives parameters
 
 663  * 8-LD logical drive with upto 8 spans
 
 666         logdrv_param_t  lparam;
 
 667         adap_span_8ld_t span[SPAN_DEPTH_8_SPANS];
 
 668 }__attribute__ ((packed)) logdrv_8ld_span8_t;
 
 672  * logdrv_8ld_span4_t - logical drive definition for 8LD controllers
 
 673  * @lparam      : logical drives parameters
 
 676  * 8-LD logical drive with upto 4 spans
 
 679         logdrv_param_t  lparam;
 
 680         adap_span_8ld_t span[SPAN_DEPTH_4_SPANS];
 
 681 }__attribute__ ((packed)) logdrv_8ld_span4_t;
 
 685  * phys_drive_t - physical device information
 
 686  * @type        : Type of the device
 
 687  * @cur_status  : current status of the device
 
 688  * @tag_depth   : Level of tagging
 
 689  * @sync_neg    : sync negotiation - ENABLE or DISBALE
 
 690  * @size        : configurable size in terms of 512 byte
 
 698 }__attribute__ ((packed)) phys_drive_t;
 
 702  * disk_array_40ld_t - disk array for 40LD controllers
 
 703  * @numldrv     : number of logical drives
 
 705  * @ldrv        : logical drives information
 
 706  * @pdrv        : physical drives information
 
 711         logdrv_40ld_t   ldrv[MAX_LOGICAL_DRIVES_40LD];
 
 712         phys_drive_t    pdrv[MBOX_MAX_PHYSICAL_DRIVES];
 
 713 }__attribute__ ((packed)) disk_array_40ld_t;
 
 717  * disk_array_8ld_span8_t - disk array for 8LD controllers
 
 718  * @numldrv     : number of logical drives
 
 720  * @ldrv        : logical drives information
 
 721  * @pdrv        : physical drives information
 
 723  * Disk array for 8LD logical drives with upto 8 spans
 
 728         logdrv_8ld_span8_t      ldrv[MAX_LOGICAL_DRIVES_8LD];
 
 729         phys_drive_t            pdrv[MBOX_MAX_PHYSICAL_DRIVES];
 
 730 }__attribute__ ((packed)) disk_array_8ld_span8_t;
 
 734  * disk_array_8ld_span4_t - disk array for 8LD controllers
 
 735  * @numldrv     : number of logical drives
 
 737  * @ldrv        : logical drives information
 
 738  * @pdrv        : physical drives information
 
 740  * Disk array for 8LD logical drives with upto 4 spans
 
 745         logdrv_8ld_span4_t      ldrv[MAX_LOGICAL_DRIVES_8LD];
 
 746         phys_drive_t            pdrv[MBOX_MAX_PHYSICAL_DRIVES];
 
 747 }__attribute__ ((packed)) disk_array_8ld_span4_t;
 
 751  * struct private_bios_data - bios private data for boot devices
 
 752  * @geometry    : bits 0-3 - BIOS geometry, 0x0001 - 1GB, 0x0010 - 2GB,
 
 753  *              0x1000 - 8GB, Others values are invalid
 
 754  * @unused      : bits 4-7 are unused
 
 755  * @boot_drv    : logical drive set as boot drive, 0..7 - for 8LD cards,
 
 756  *              0..39 - for 40LD cards
 
 757  * @cksum       : 0-(sum of first 13 bytes of this structure)
 
 759 struct private_bios_data {
 
 765 } __attribute__ ((packed));
 
 769  * mbox_sgl64 - 64-bit scatter list for mailbox based controllers
 
 770  * @address     : address of the buffer
 
 771  * @length      : data transfer length
 
 776 } __attribute__ ((packed)) mbox_sgl64;
 
 779  * mbox_sgl32 - 32-bit scatter list for mailbox based controllers
 
 780  * @address     : address of the buffer
 
 781  * @length      : data transfer length
 
 786 } __attribute__ ((packed)) mbox_sgl32;
 
 788 #endif          // _MRAID_MBOX_DEFS_H_
 
 790 /* vim: set ts=8 sw=8 tw=78: */