784 lines · c
1/* SPDX-License-Identifier: GPL-2.0-or-later */2/*3 *4 * Linux MegaRAID Unified device driver5 *6 * Copyright (c) 2003-2004 LSI Logic Corporation.7 *8 * FILE : mbox_defs.h9 */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 controllers17 */18 19#define MBOXCMD_LREAD 0x0120#define MBOXCMD_LWRITE 0x0221#define MBOXCMD_PASSTHRU 0x0322#define MBOXCMD_ADPEXTINQ 0x0423#define MBOXCMD_ADAPTERINQ 0x0524#define MBOXCMD_LREAD64 0xA725#define MBOXCMD_LWRITE64 0xA826#define MBOXCMD_PASSTHRU64 0xC327#define MBOXCMD_EXTPTHRU 0xE328 29#define MAIN_MISC_OPCODE 0xA430#define GET_MAX_SG_SUPPORT 0x0131#define SUPPORT_EXT_CDB 0x1632 33#define FC_NEW_CONFIG 0xA134#define NC_SUBOP_PRODUCT_INFO 0x0E35#define NC_SUBOP_ENQUIRY3 0x0F36#define ENQ3_GET_SOLICITED_FULL 0x0237#define OP_DCMD_READ_CONFIG 0x0438#define NEW_READ_CONFIG_8LD 0x6739#define READ_CONFIG_8LD 0x0740#define FLUSH_ADAPTER 0x0A41#define FLUSH_SYSTEM 0xFE42 43/*44 * Command for random deletion of logical drives45 */46#define FC_DEL_LOGDRV 0xA447#define OP_SUP_DEL_LOGDRV 0x2A48#define OP_GET_LDID_MAP 0x1849#define OP_DEL_LOGDRV 0x1C50 51/*52 * BIOS commands53 */54#define IS_BIOS_ENABLED 0x6255#define GET_BIOS 0x0156#define CHNL_CLASS 0xA957#define GET_CHNL_CLASS 0x0058#define SET_CHNL_CLASS 0x0159#define CH_RAID 0x0160#define CH_SCSI 0x0061#define BIOS_PVT_DATA 0x4062#define GET_BIOS_PVT_DATA 0x0063 64 65/*66 * Commands to support clustering67 */68#define GET_TARGET_ID 0x7D69#define CLUSTER_OP 0x7070#define GET_CLUSTER_MODE 0x0271#define CLUSTER_CMD 0x6E72#define RESERVE_LD 0x0173#define RELEASE_LD 0x0274#define RESET_RESERVATIONS 0x0375#define RESERVATION_STATUS 0x0476#define RESERVE_PD 0x0577#define RELEASE_PD 0x0678 79 80/*81 * Module battery status82 */83#define BATTERY_MODULE_MISSING 0x0184#define BATTERY_LOW_VOLTAGE 0x0285#define BATTERY_TEMP_HIGH 0x0486#define BATTERY_PACK_MISSING 0x0887#define BATTERY_CHARGE_MASK 0x3088#define BATTERY_CHARGE_DONE 0x0089#define BATTERY_CHARGE_INPROG 0x1090#define BATTERY_CHARGE_FAIL 0x2091#define BATTERY_CYCLES_EXCEEDED 0x4092 93/*94 * Physical drive states.95 */96#define PDRV_UNCNF 097#define PDRV_ONLINE 398#define PDRV_FAILED 499#define PDRV_RBLD 5100#define PDRV_HOTSPARE 6101 102 103/*104 * Raid logical drive states.105 */106#define RDRV_OFFLINE 0107#define RDRV_DEGRADED 1108#define RDRV_OPTIMAL 2109#define RDRV_DELETED 3110 111/*112 * Read, write and cache policies113 */114#define NO_READ_AHEAD 0115#define READ_AHEAD 1116#define ADAP_READ_AHEAD 2117#define WRMODE_WRITE_THRU 0118#define WRMODE_WRITE_BACK 1119#define CACHED_IO 0120#define DIRECT_IO 1121 122#define MAX_LOGICAL_DRIVES_8LD 8123#define MAX_LOGICAL_DRIVES_40LD 40124#define FC_MAX_PHYSICAL_DEVICES 256125#define MAX_MBOX_CHANNELS 5126#define MAX_MBOX_TARGET 15127#define MBOX_MAX_PHYSICAL_DRIVES MAX_MBOX_CHANNELS*MAX_MBOX_TARGET128#define MAX_ROW_SIZE_40LD 32129#define MAX_ROW_SIZE_8LD 8130#define SPAN_DEPTH_8_SPANS 8131#define SPAN_DEPTH_4_SPANS 4132#define MAX_REQ_SENSE_LEN 0x20133 134 135 136/**137 * struct mbox_t - Driver and f/w handshake structure.138 * @cmd : firmware command139 * @cmdid : command id140 * @numsectors : number of sectors to be transferred141 * @lba : Logical Block Address on LD142 * @xferaddr : DMA address for data transfer143 * @logdrv : logical drive number144 * @numsge : number of scatter gather elements in sg list145 * @resvd : reserved146 * @busy : f/w busy, must wait to issue more commands.147 * @numstatus : number of commands completed.148 * @status : status of the commands completed149 * @completed : array of completed command ids.150 * @poll : poll and ack sequence151 * @ack : poll and ack sequence152 *153 * The central handshake structure between the driver and the firmware. This154 * structure must be allocated by the driver and aligned at 8-byte boundary.155 */156#define MBOX_MAX_FIRMWARE_STATUS 46157typedef 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 mailbox177 * @segment_lo : the low 32-bits of the address of the scatter-gather list178 * @segment_hi : the upper 32-bits of the address of the scatter-gather list179 * @mbox : 32-bit mailbox, whose xferadder field must be set to180 * 0xFFFFFFFF181 *182 * This is the extension of the 32-bit mailbox to be able to perform DMA183 * beyond 4GB address range.184 */185typedef 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 commands193 */194typedef 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 devices209 * @timeout : command timeout, 0=6sec, 1=60sec, 2=10min, 3=3hr210 * @ars : set if ARS required after check condition211 * @islogical : set if command meant for logical devices212 * @logdrv : logical drive number if command for LD213 * @channel : Channel on which physical device is located214 * @target : SCSI target of the device215 * @queuetag : unused216 * @queueaction : unused217 * @cdb : SCSI CDB218 * @cdblen : length of the CDB219 * @reqsenselen : amount of request sense data to be returned220 * @reqsensearea : Sense information buffer221 * @numsge : number of scatter-gather elements in the sg list222 * @scsistatus : SCSI status of the command completed.223 * @dataxferaddr : DMA data transfer address224 * @dataxferlen : amount of the data to be transferred.225 */226typedef 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 246typedef 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 devices256 * @timeout : command timeout, 0=6sec, 1=60sec, 2=10min, 3=3hr257 * @ars : set if ARS required after check condition258 * @rsvd1 : reserved field259 * @cd_rom : (?)260 * @rsvd2 : reserved field261 * @islogical : set if command meant for logical devices262 * @logdrv : logical drive number if command for LD263 * @channel : Channel on which physical device is located264 * @target : SCSI target of the device265 * @queuetag : unused266 * @queueaction : unused267 * @cdblen : length of the CDB268 * @rsvd3 : reserved field269 * @cdb : SCSI CDB270 * @numsge : number of scatter-gather elements in the sg list271 * @status : SCSI status of the command completed.272 * @reqsenselen : amount of request sense data to be returned273 * @reqsensearea : Sense information buffer274 * @rsvd4 : reserved field275 * @dataxferaddr : DMA data transfer address276 * @dataxferlen : amount of the data to be transferred.277 */278typedef 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 controller305 * @data_size : current size in bytes (not including resvd)306 * @config_signature : Current value is 0x00282008307 * @fw_version : Firmware version308 * @bios_version : version of the BIOS309 * @product_name : Name given to the controller310 * @max_commands : Maximum concurrent commands supported311 * @nchannels : Number of SCSI Channels detected312 * @fc_loop_present : Number of Fibre Loops detected313 * @mem_type : EDO, FPM, SDRAM etc314 * @signature :315 * @dram_size : In terms of MB316 * @subsysid : device PCI subsystem ID317 * @subsysvid : device PCI subsystem vendor ID318 * @notify_counters :319 * @pad1k : 135 + 889 resvd = 1024 total size320 *321 * This structures holds the information about the controller which is not322 * expected to change dynamically.323 *324 * The current value of config signature is 0x00282008:325 * 0x28 = MAX_LOGICAL_DRIVES,326 * 0x20 = Number of stripes and327 * 0x08 = Number of spans328 */329typedef 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 structure350 * @global_counter : Any change increments this counter351 * @param_counter : Indicates any params changed352 * @param_id : Param modified - defined below353 * @param_val : New val of last param modified354 * @write_config_counter : write config occurred355 * @write_config_rsvd :356 * @ldrv_op_counter : Indicates ldrv op started/completed357 * @ldrv_opid : ldrv num358 * @ldrv_opcmd : ldrv operation - defined below359 * @ldrv_opstatus : status of the operation360 * @ldrv_state_counter : Indicates change of ldrv state361 * @ldrv_state_id : ldrv num362 * @ldrv_state_new : New state363 * @ldrv_state_old : old state364 * @pdrv_state_counter : Indicates change of ldrv state365 * @pdrv_state_id : pdrv id366 * @pdrv_state_new : New state367 * @pdrv_state_old : old state368 * @pdrv_fmt_counter : Indicates pdrv format started/over369 * @pdrv_fmt_id : pdrv id370 * @pdrv_fmt_val : format started/over371 * @pdrv_fmt_rsvd :372 * @targ_xfer_counter : Indicates SCSI-2 Xfer rate change373 * @targ_xfer_id : pdrv Id374 * @targ_xfer_val : new Xfer params of last pdrv375 * @targ_xfer_rsvd :376 * @fcloop_id_chg_counter : Indicates loopid changed377 * @fcloopid_pdrvid : pdrv id378 * @fcloop_id0 : loopid on fc loop 0379 * @fcloop_id1 : loopid on fc loop 1380 * @fcloop_state_counter : Indicates loop state changed381 * @fcloop_state0 : state of fc loop 0382 * @fcloop_state1 : state of fc loop 1383 * @fcloop_state_rsvd :384 */385typedef 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 information425 *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 seconds431 * @sense_alert :432 * @drive_insert_count : drive insertion count433 * @battery_status :434 * @num_ldrv : no. of Log Drives configured435 * @recon_state : state of reconstruct436 * @ldrv_op_status : logdrv Status437 * @ldrv_size : size of each log drv438 * @ldrv_prop :439 * @ldrv_state : state of log drives440 * @pdrv_state : state of phys drvs.441 * @pdrv_format :442 * @targ_xfer : phys device transfer rate443 * @pad1k : 761 + 263reserved = 1024 bytes total size444 */445#define MAX_NOTIFY_SIZE 0x80446#define CUR_NOTIFY_SIZE sizeof(mraid_notify_t)447 448typedef 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 adapter478 * @max_commands : max concurrent commands supported479 * @rebuild_rate : rebuild rate - 0% thru 100%480 * @max_targ_per_chan : max targ per channel481 * @nchannels : number of channels on HBA482 * @fw_version : firmware version483 * @age_of_flash : number of times FW has been flashed484 * @chip_set_value : contents of 0xC0000832485 * @dram_size : in MB486 * @cache_flush_interval : in seconds487 * @bios_version :488 * @board_type :489 * @sense_alert :490 * @write_config_count : increase with every configuration change491 * @drive_inserted_count : increase with every drive inserted492 * @inserted_drive : channel:Id of inserted drive493 * @battery_status : bit 0: battery module missing494 * bit 1: VBAD495 * bit 2: temperature high496 * bit 3: battery pack missing497 * bit 4,5:498 * 00 - charge complete499 * 01 - fast charge in progress500 * 10 - fast charge fail501 * 11 - undefined502 * bit 6: counter > 1000503 * bit 7: Undefined504 * @dec_fault_bus_info :505 */506typedef 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 drives527 * @nldrv : Number of logical drives configured528 * @rsvd :529 * @size : size of each logical drive530 * @prop :531 * @state : state of each logical drive532 */533typedef 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 drives544 * @pdrv_state : state of each physical drive545 */546typedef 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 0x05554 * @mraid_adapinfo_t : adapter information555 * @mraid_ldrv_info_t : logical drives information556 * @mraid_pdrv_info_t : physical drives information557 */558typedef 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 0x04567 *568 * @raid_inq : raid inquiry569 * @phys_drv_format :570 * @stack_attn :571 * @modem_status :572 * @rsvd :573 */574typedef 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 information585 * @channel : channel fpor the device586 * @target : target ID of the device587 */588typedef struct {589 uint8_t channel;590 uint8_t target;591}__attribute__ ((packed)) adap_device_t;592 593 594/**595 * adap_span_40ld_t - 40LD span596 * @start_blk : starting block597 * @num_blks : number of blocks598 */599typedef 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 span608 * @start_blk : starting block609 * @num_blks : number of blocks610 */611typedef 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 parameters620 *621 * @span_depth : total number of spans622 * @level : RAID level623 * @read_ahead : read ahead, no read ahead, adaptive read ahead624 * @stripe_sz : encoded stripe size625 * @status : status of the logical drive626 * @write_mode : write mode, write_through/write_back627 * @direct_io : direct io or through cache628 * @row_size : number of stripes in a row629 */630typedef 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 controllers644 * @lparam : logical drives parameters645 * @span : span646 */647typedef 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 controllers655 * @lparam : logical drives parameters656 * @span : span657 *658 * 8-LD logical drive with up to 8 spans659 */660typedef 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 controllers668 * @lparam : logical drives parameters669 * @span : span670 *671 * 8-LD logical drive with up to 4 spans672 */673typedef 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 information681 * @type : Type of the device682 * @cur_status : current status of the device683 * @tag_depth : Level of tagging684 * @sync_neg : sync negotiation - ENABLE or DISABLE685 * @size : configurable size in terms of 512 byte686 */687typedef 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 controllers698 * @numldrv : number of logical drives699 * @resvd :700 * @ldrv : logical drives information701 * @pdrv : physical drives information702 */703typedef 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 controllers713 * @numldrv : number of logical drives714 * @resvd :715 * @ldrv : logical drives information716 * @pdrv : physical drives information717 *718 * Disk array for 8LD logical drives with up to 8 spans719 */720typedef 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 controllers730 * @numldrv : number of logical drives731 * @resvd :732 * @ldrv : logical drives information733 * @pdrv : physical drives information734 *735 * Disk array for 8LD logical drives with up to 4 spans736 */737typedef 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 devices747 * @geometry : bits 0-3 - BIOS geometry, 0x0001 - 1GB, 0x0010 - 2GB,748 * 0x1000 - 8GB, Others values are invalid749 * @unused : bits 4-7 are unused750 * @boot_drv : logical drive set as boot drive, 0..7 - for 8LD cards,751 * 0..39 - for 40LD cards752 * @cksum : 0-(sum of first 13 bytes of this structure)753 */754struct 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 controllers765 * @address : address of the buffer766 * @length : data transfer length767 */768typedef 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 controllers775 * @address : address of the buffer776 * @length : data transfer length777 */778typedef struct {779 uint32_t address;780 uint32_t length;781} __attribute__ ((packed)) mbox_sgl32;782 783#endif // _MRAID_MBOX_DEFS_H_784