Release 4.7 drivers/scsi/megaraid/mbox_defs.h
  
  
/*
 *
 *                      Linux MegaRAID Unified device driver
 *
 * Copyright (c) 2003-2004  LSI Logic Corporation.
 *
 *         This program is free software; you can redistribute it and/or
 *         modify it under the terms of the GNU General Public License
 *         as published by the Free Software Foundation; either version
 *         2 of the License, or (at your option) any later version.
 *
 * FILE         : mbox_defs.h
 *
 */
#ifndef _MRAID_MBOX_DEFS_H_
#define _MRAID_MBOX_DEFS_H_
#include <linux/types.h>
/*
 * Commands and states for mailbox based controllers
 */
#define MBOXCMD_LREAD		0x01
#define MBOXCMD_LWRITE		0x02
#define MBOXCMD_PASSTHRU	0x03
#define MBOXCMD_ADPEXTINQ	0x04
#define MBOXCMD_ADAPTERINQ	0x05
#define MBOXCMD_LREAD64		0xA7
#define MBOXCMD_LWRITE64	0xA8
#define MBOXCMD_PASSTHRU64	0xC3
#define MBOXCMD_EXTPTHRU	0xE3
#define MAIN_MISC_OPCODE	0xA4
#define GET_MAX_SG_SUPPORT	0x01
#define SUPPORT_EXT_CDB		0x16
#define FC_NEW_CONFIG		0xA1
#define NC_SUBOP_PRODUCT_INFO	0x0E
#define NC_SUBOP_ENQUIRY3	0x0F
#define ENQ3_GET_SOLICITED_FULL	0x02
#define OP_DCMD_READ_CONFIG	0x04
#define NEW_READ_CONFIG_8LD	0x67
#define READ_CONFIG_8LD		0x07
#define FLUSH_ADAPTER		0x0A
#define FLUSH_SYSTEM		0xFE
/*
 * Command for random deletion of logical drives
 */
#define	FC_DEL_LOGDRV		0xA4
#define	OP_SUP_DEL_LOGDRV	0x2A
#define OP_GET_LDID_MAP		0x18
#define OP_DEL_LOGDRV		0x1C
/*
 * BIOS commands
 */
#define IS_BIOS_ENABLED		0x62
#define GET_BIOS		0x01
#define CHNL_CLASS		0xA9
#define GET_CHNL_CLASS		0x00
#define SET_CHNL_CLASS		0x01
#define CH_RAID			0x01
#define CH_SCSI			0x00
#define BIOS_PVT_DATA		0x40
#define GET_BIOS_PVT_DATA	0x00
/*
 * Commands to support clustering
 */
#define GET_TARGET_ID		0x7D
#define CLUSTER_OP		0x70
#define GET_CLUSTER_MODE	0x02
#define CLUSTER_CMD		0x6E
#define RESERVE_LD		0x01
#define RELEASE_LD		0x02
#define RESET_RESERVATIONS	0x03
#define RESERVATION_STATUS	0x04
#define RESERVE_PD		0x05
#define RELEASE_PD		0x06
/*
 * Module battery status
 */
#define BATTERY_MODULE_MISSING		0x01
#define BATTERY_LOW_VOLTAGE		0x02
#define BATTERY_TEMP_HIGH		0x04
#define BATTERY_PACK_MISSING		0x08
#define BATTERY_CHARGE_MASK		0x30
#define BATTERY_CHARGE_DONE		0x00
#define BATTERY_CHARGE_INPROG		0x10
#define BATTERY_CHARGE_FAIL		0x20
#define BATTERY_CYCLES_EXCEEDED		0x40
/*
 * Physical drive states.
 */
#define PDRV_UNCNF	0
#define PDRV_ONLINE	3
#define PDRV_FAILED	4
#define PDRV_RBLD	5
#define PDRV_HOTSPARE	6
/*
 * Raid logical drive states.
 */
#define RDRV_OFFLINE	0
#define RDRV_DEGRADED	1
#define RDRV_OPTIMAL	2
#define RDRV_DELETED	3
/*
 * Read, write and cache policies
 */
#define NO_READ_AHEAD		0
#define READ_AHEAD		1
#define ADAP_READ_AHEAD		2
#define WRMODE_WRITE_THRU	0
#define WRMODE_WRITE_BACK	1
#define CACHED_IO		0
#define DIRECT_IO		1
#define MAX_LOGICAL_DRIVES_8LD		8
#define MAX_LOGICAL_DRIVES_40LD		40
#define FC_MAX_PHYSICAL_DEVICES		256
#define MAX_MBOX_CHANNELS		5
#define MAX_MBOX_TARGET			15
#define MBOX_MAX_PHYSICAL_DRIVES	MAX_MBOX_CHANNELS*MAX_MBOX_TARGET
#define MAX_ROW_SIZE_40LD		32
#define MAX_ROW_SIZE_8LD		8
#define SPAN_DEPTH_8_SPANS		8
#define SPAN_DEPTH_4_SPANS		4
#define MAX_REQ_SENSE_LEN		0x20
/**
 * struct mbox_t - Driver and f/w handshake structure.
 * @cmd         : firmware command
 * @cmdid       : command id
 * @numsectors  : number of sectors to be transferred
 * @lba         : Logical Block Address on LD
 * @xferaddr    : DMA address for data transfer
 * @logdrv      : logical drive number
 * @numsge      : number of scatter gather elements in sg list
 * @resvd       : reserved
 * @busy        : f/w busy, must wait to issue more commands.
 * @numstatus   : number of commands completed.
 * @status      : status of the commands completed
 * @completed   : array of completed command ids.
 * @poll        : poll and ack sequence
 * @ack         : poll and ack sequence
 *
 * The central handshake structure between the driver and the firmware. This
 * structure must be allocated by the driver and aligned at 8-byte boundary.
 */
#define MBOX_MAX_FIRMWARE_STATUS	46
typedef struct {
	
uint8_t		cmd;
	
uint8_t		cmdid;
	
uint16_t	numsectors;
	
uint32_t	lba;
	
uint32_t	xferaddr;
	
uint8_t		logdrv;
	
uint8_t		numsge;
	
uint8_t		resvd;
	
uint8_t		busy;
	
uint8_t		numstatus;
	
uint8_t		status;
	
uint8_t		completed[MBOX_MAX_FIRMWARE_STATUS];
	
uint8_t		poll;
	
uint8_t		ack;
} 
__attribute__ ((packed)) mbox_t;
/**
 * mbox64_t - 64-bit extension for the mailbox
 * @segment_lo  : the low 32-bits of the address of the scatter-gather list
 * @segment_hi  : the upper 32-bits of the address of the scatter-gather list
 * @mbox        : 32-bit mailbox, whose xferadder field must be set to
 *              0xFFFFFFFF
 *
 * This is the extension of the 32-bit mailbox to be able to perform DMA
 * beyond 4GB address range.
 */
typedef struct {
	
uint32_t	xferaddr_lo;
	
uint32_t	xferaddr_hi;
	
mbox_t		mbox32;
} 
__attribute__ ((packed)) mbox64_t;
/*
 * mailbox structure used for internal commands
 */
typedef struct {
	
u8	cmd;
	
u8	cmdid;
	
u8	opcode;
	
u8	subopcode;
	
u32	lba;
	
u32	xferaddr;
	
u8	logdrv;
	
u8	rsvd[3];
	
u8	numstatus;
	
u8	status;
} 
__attribute__ ((packed)) int_mbox_t;
/**
 * mraid_passthru_t - passthru structure to issue commands to physical devices
 * @timeout             : command timeout, 0=6sec, 1=60sec, 2=10min, 3=3hr
 * @ars                 : set if ARS required after check condition
 * @islogical           : set if command meant for logical devices
 * @logdrv              : logical drive number if command for LD
 * @channel             : Channel on which physical device is located
 * @target              : SCSI target of the device
 * @queuetag            : unused
 * @queueaction         : unused
 * @cdb                 : SCSI CDB
 * @cdblen              : length of the CDB
 * @reqsenselen         : amount of request sense data to be returned
 * @reqsensearea        : Sense information buffer
 * @numsge              : number of scatter-gather elements in the sg list
 * @scsistatus          : SCSI status of the command completed.
 * @dataxferaddr        : DMA data transfer address
 * @dataxferlen         : amount of the data to be transferred.
 */
typedef struct {
	
uint8_t		timeout		:3;
	
uint8_t		ars		:1;
	
uint8_t		reserved	:3;
	
uint8_t		islogical	:1;
	
uint8_t		logdrv;
	
uint8_t		channel;
	
uint8_t		target;
	
uint8_t		queuetag;
	
uint8_t		queueaction;
	
uint8_t		cdb[10];
	
uint8_t		cdblen;
	
uint8_t		reqsenselen;
	
uint8_t		reqsensearea[MAX_REQ_SENSE_LEN];
	
uint8_t		numsge;
	
uint8_t		scsistatus;
	
uint32_t	dataxferaddr;
	
uint32_t	dataxferlen;
} 
__attribute__ ((packed)) mraid_passthru_t;
typedef struct {
	
uint32_t		dataxferaddr_lo;
	
uint32_t		dataxferaddr_hi;
	
mraid_passthru_t	pthru32;
} 
__attribute__ ((packed)) mega_passthru64_t;
/**
 * mraid_epassthru_t - passthru structure to issue commands to physical devices
 * @timeout             : command timeout, 0=6sec, 1=60sec, 2=10min, 3=3hr
 * @ars                 : set if ARS required after check condition
 * @rsvd1               : reserved field
 * @cd_rom              : (?)
 * @rsvd2               : reserved field
 * @islogical           : set if command meant for logical devices
 * @logdrv              : logical drive number if command for LD
 * @channel             : Channel on which physical device is located
 * @target              : SCSI target of the device
 * @queuetag            : unused
 * @queueaction         : unused
 * @cdblen              : length of the CDB
 * @rsvd3               : reserved field
 * @cdb                 : SCSI CDB
 * @numsge              : number of scatter-gather elements in the sg list
 * @status              : SCSI status of the command completed.
 * @reqsenselen         : amount of request sense data to be returned
 * @reqsensearea        : Sense information buffer
 * @rsvd4               : reserved field
 * @dataxferaddr        : DMA data transfer address
 * @dataxferlen         : amount of the data to be transferred.
 */
typedef struct {
	
uint8_t		timeout		:3;
	
uint8_t		ars		:1;
	
uint8_t		rsvd1		:1;
	
uint8_t		cd_rom		:1;
	
uint8_t		rsvd2		:1;
	
uint8_t		islogical	:1;
	
uint8_t		logdrv;
	
uint8_t		channel;
	
uint8_t		target;
	
uint8_t		queuetag;
	
uint8_t		queueaction;
	
uint8_t		cdblen;
	
uint8_t		rsvd3;
	
uint8_t		cdb[16];
	
uint8_t		numsge;
	
uint8_t		status;
	
uint8_t		reqsenselen;
	
uint8_t		reqsensearea[MAX_REQ_SENSE_LEN];
	
uint8_t		rsvd4;
	
uint32_t	dataxferaddr;
	
uint32_t	dataxferlen;
} 
__attribute__ ((packed)) mraid_epassthru_t;
/**
 * mraid_pinfo_t - product info, static information about the controller
 * @data_size           : current size in bytes (not including resvd)
 * @config_signature    : Current value is 0x00282008
 * @fw_version          : Firmware version
 * @bios_version        : version of the BIOS
 * @product_name        : Name given to the controller
 * @max_commands        : Maximum concurrent commands supported
 * @nchannels           : Number of SCSI Channels detected
 * @fc_loop_present     : Number of Fibre Loops detected
 * @mem_type            : EDO, FPM, SDRAM etc
 * @signature           :
 * @dram_size           : In terms of MB
 * @subsysid            : device PCI subsystem ID
 * @subsysvid           : device PCI subsystem vendor ID
 * @notify_counters     :
 * @pad1k               : 135 + 889 resvd = 1024 total size
 *
 * This structures holds the information about the controller which is not
 * expected to change dynamically.
 *
 * The current value of config signature is 0x00282008:
 * 0x28 = MAX_LOGICAL_DRIVES,
 * 0x20 = Number of stripes and
 * 0x08 = Number of spans
 */
typedef struct {
	
uint32_t	data_size;
	
uint32_t	config_signature;
	
uint8_t		fw_version[16];
	
uint8_t		bios_version[16];
	
uint8_t		product_name[80];
	
uint8_t		max_commands;
	
uint8_t		nchannels;
	
uint8_t		fc_loop_present;
	
uint8_t		mem_type;
	
uint32_t	signature;
	
uint16_t	dram_size;
	
uint16_t	subsysid;
	
uint16_t	subsysvid;
	
uint8_t		notify_counters;
	
uint8_t		pad1k[889];
} 
__attribute__ ((packed)) mraid_pinfo_t;
/**
 * mraid_notify_t - the notification structure
 * @global_counter              : Any change increments this counter
 * @param_counter               : Indicates any params changed
 * @param_id                    : Param modified - defined below
 * @param_val                   : New val of last param modified
 * @write_config_counter        : write config occurred
 * @write_config_rsvd           :
 * @ldrv_op_counter             : Indicates ldrv op started/completed
 * @ldrv_opid                   : ldrv num
 * @ldrv_opcmd                  : ldrv operation - defined below
 * @ldrv_opstatus               : status of the operation
 * @ldrv_state_counter          : Indicates change of ldrv state
 * @ldrv_state_id               : ldrv num
 * @ldrv_state_new              : New state
 * @ldrv_state_old              : old state
 * @pdrv_state_counter          : Indicates change of ldrv state
 * @pdrv_state_id               : pdrv id
 * @pdrv_state_new              : New state
 * @pdrv_state_old              : old state
 * @pdrv_fmt_counter            : Indicates pdrv format started/over
 * @pdrv_fmt_id                 : pdrv id
 * @pdrv_fmt_val                : format started/over
 * @pdrv_fmt_rsvd               :
 * @targ_xfer_counter           : Indicates SCSI-2 Xfer rate change
 * @targ_xfer_id                : pdrv Id
 * @targ_xfer_val               : new Xfer params of last pdrv
 * @targ_xfer_rsvd              :
 * @fcloop_id_chg_counter       : Indicates loopid changed
 * @fcloopid_pdrvid             : pdrv id
 * @fcloop_id0                  : loopid on fc loop 0
 * @fcloop_id1                  : loopid on fc loop 1
 * @fcloop_state_counter        : Indicates loop state changed
 * @fcloop_state0               : state of fc loop 0
 * @fcloop_state1               : state of fc loop 1
 * @fcloop_state_rsvd           :
 */
typedef struct {
	
uint32_t	global_counter;
	
uint8_t		param_counter;
	
uint8_t		param_id;
	
uint16_t	param_val;
	
uint8_t		write_config_counter;
	
uint8_t		write_config_rsvd[3];
	
uint8_t		ldrv_op_counter;
	
uint8_t		ldrv_opid;
	
uint8_t		ldrv_opcmd;
	
uint8_t		ldrv_opstatus;
	
uint8_t		ldrv_state_counter;
	
uint8_t		ldrv_state_id;
	
uint8_t		ldrv_state_new;
	
uint8_t		ldrv_state_old;
	
uint8_t		pdrv_state_counter;
	
uint8_t		pdrv_state_id;
	
uint8_t		pdrv_state_new;
	
uint8_t		pdrv_state_old;
	
uint8_t		pdrv_fmt_counter;
	
uint8_t		pdrv_fmt_id;
	
uint8_t		pdrv_fmt_val;
	
uint8_t		pdrv_fmt_rsvd;
	
uint8_t		targ_xfer_counter;
	
uint8_t		targ_xfer_id;
	
uint8_t		targ_xfer_val;
	
uint8_t		targ_xfer_rsvd;
	
uint8_t		fcloop_id_chg_counter;
	
uint8_t		fcloopid_pdrvid;
	
uint8_t		fcloop_id0;
	
uint8_t		fcloop_id1;
	
uint8_t		fcloop_state_counter;
	
uint8_t		fcloop_state0;
	
uint8_t		fcloop_state1;
	
uint8_t		fcloop_state_rsvd;
} 
__attribute__ ((packed)) mraid_notify_t;
/**
 * mraid_inquiry3_t - enquiry for device information
 *
 * @data_size           : current size in bytes (not including resvd)
 * @notify              :
 * @notify_rsvd         :
 * @rebuild_rate        : rebuild rate (0% - 100%)
 * @cache_flush_int     : cache flush interval in seconds
 * @sense_alert         :
 * @drive_insert_count  : drive insertion count
 * @battery_status      :
 * @num_ldrv            : no. of Log Drives configured
 * @recon_state         : state of reconstruct
 * @ldrv_op_status      : logdrv Status
 * @ldrv_size           : size of each log drv
 * @ldrv_prop           :
 * @ldrv_state          : state of log drives
 * @pdrv_state          : state of phys drvs.
 * @pdrv_format         :
 * @targ_xfer           : phys device transfer rate
 * @pad1k               : 761 + 263reserved = 1024 bytes total size
 */
#define MAX_NOTIFY_SIZE		0x80
#define CUR_NOTIFY_SIZE		sizeof(mraid_notify_t)
typedef struct {
	
uint32_t	data_size;
	
mraid_notify_t	notify;
	
uint8_t		notify_rsvd[MAX_NOTIFY_SIZE - CUR_NOTIFY_SIZE];
	
uint8_t		rebuild_rate;
	
uint8_t		cache_flush_int;
	
uint8_t		sense_alert;
	
uint8_t		drive_insert_count;
	
uint8_t		battery_status;
	
uint8_t		num_ldrv;
	
uint8_t		recon_state[MAX_LOGICAL_DRIVES_40LD / 8];
	
uint16_t	ldrv_op_status[MAX_LOGICAL_DRIVES_40LD / 8];
	
uint32_t	ldrv_size[MAX_LOGICAL_DRIVES_40LD];
	
uint8_t		ldrv_prop[MAX_LOGICAL_DRIVES_40LD];
	
uint8_t		ldrv_state[MAX_LOGICAL_DRIVES_40LD];
	
uint8_t		pdrv_state[FC_MAX_PHYSICAL_DEVICES];
	
uint16_t	pdrv_format[FC_MAX_PHYSICAL_DEVICES / 16];
	
uint8_t		targ_xfer[80];
	
uint8_t		pad1k[263];
} 
__attribute__ ((packed)) mraid_inquiry3_t;
/**
 * mraid_adapinfo_t - information about the adapter
 * @max_commands                : max concurrent commands supported
 * @rebuild_rate                : rebuild rate - 0% thru 100%
 * @max_targ_per_chan           : max targ per channel
 * @nchannels                   : number of channels on HBA
 * @fw_version                  : firmware version
 * @age_of_flash                : number of times FW has been flashed
 * @chip_set_value              : contents of 0xC0000832
 * @dram_size                   : in MB
 * @cache_flush_interval        : in seconds
 * @bios_version                :
 * @board_type                  :
 * @sense_alert                 :
 * @write_config_count          : increase with every configuration change
 * @drive_inserted_count        : increase with every drive inserted
 * @inserted_drive              : channel:Id of inserted drive
 * @battery_status              : bit 0: battery module missing
 *                              bit 1: VBAD
 *                              bit 2: temperature high
 *                              bit 3: battery pack missing
 *                              bit 4,5:
 *                                      00 - charge complete
 *                                      01 - fast charge in progress
 *                                      10 - fast charge fail
 *                                      11 - undefined
 *                              bit 6: counter > 1000
 *                              bit 7: Undefined
 * @dec_fault_bus_info          :
 */
typedef struct {
	
uint8_t		max_commands;
	
uint8_t		rebuild_rate;
	
uint8_t		max_targ_per_chan;
	
uint8_t		nchannels;
	
uint8_t		fw_version[4];
	
uint16_t	age_of_flash;
	
uint8_t		chip_set_value;
	
uint8_t		dram_size;
	
uint8_t		cache_flush_interval;
	
uint8_t		bios_version[4];
	
uint8_t		board_type;
	
uint8_t		sense_alert;
	
uint8_t		write_config_count;
	
uint8_t		battery_status;
	
uint8_t		dec_fault_bus_info;
} 
__attribute__ ((packed)) mraid_adapinfo_t;
/**
 * mraid_ldrv_info_t - information about the logical drives
 * @nldrv       : Number of logical drives configured
 * @rsvd        :
 * @size        : size of each logical drive
 * @prop        :
 * @state       : state of each logical drive
 */
typedef struct {
	
uint8_t		nldrv;
	
uint8_t		rsvd[3];
	
uint32_t	size[MAX_LOGICAL_DRIVES_8LD];
	
uint8_t		prop[MAX_LOGICAL_DRIVES_8LD];
	
uint8_t		state[MAX_LOGICAL_DRIVES_8LD];
} 
__attribute__ ((packed)) mraid_ldrv_info_t;
/**
 * mraid_pdrv_info_t - information about the physical drives
 * @pdrv_state  : state of each physical drive
 */
typedef struct {
	
uint8_t		pdrv_state[MBOX_MAX_PHYSICAL_DRIVES];
	
uint8_t		rsvd;
} 
__attribute__ ((packed)) mraid_pdrv_info_t;
/**
 * mraid_inquiry_t - RAID inquiry, mailbox command 0x05
 * @mraid_adapinfo_t    : adapter information
 * @mraid_ldrv_info_t   : logical drives information
 * @mraid_pdrv_info_t   : physical drives information
 */
typedef struct {
	
mraid_adapinfo_t	adapter_info;
	
mraid_ldrv_info_t	logdrv_info;
	
mraid_pdrv_info_t	pdrv_info;
} 
__attribute__ ((packed)) mraid_inquiry_t;
/**
 * mraid_extinq_t - RAID extended inquiry, mailbox command 0x04
 *
 * @raid_inq            : raid inquiry
 * @phys_drv_format     :
 * @stack_attn          :
 * @modem_status        :
 * @rsvd                :
 */
typedef struct {
	
mraid_inquiry_t	raid_inq;
	
uint16_t	phys_drv_format[MAX_MBOX_CHANNELS];
	
uint8_t		stack_attn;
	
uint8_t		modem_status;
	
uint8_t		rsvd[2];
} 
__attribute__ ((packed)) mraid_extinq_t;
/**
 * adap_device_t - device information
 * @channel     : channel fpor the device
 * @target      : target ID of the device
 */
typedef struct {
	
uint8_t		channel;
	
uint8_t		target;
}
__attribute__ ((packed)) adap_device_t;
/**
 * adap_span_40ld_t - 40LD span
 * @start_blk   : starting block
 * @num_blks    : number of blocks
 */
typedef struct {
	
uint32_t	start_blk;
	
uint32_t	num_blks;
	
adap_device_t	device[MAX_ROW_SIZE_40LD];
}
__attribute__ ((packed)) adap_span_40ld_t;
/**
 * adap_span_8ld_t - 8LD span
 * @start_blk   : starting block
 * @num_blks    : number of blocks
 */
typedef struct {
	
uint32_t	start_blk;
	
uint32_t	num_blks;
	
adap_device_t	device[MAX_ROW_SIZE_8LD];
}
__attribute__ ((packed)) adap_span_8ld_t;
/**
 * logdrv_param_t - logical drives parameters
 *
 * @span_depth  : total number of spans
 * @level       : RAID level
 * @read_ahead  : read ahead, no read ahead, adaptive read ahead
 * @stripe_sz   : encoded stripe size
 * @status      : status of the logical drive
 * @write_mode  : write mode, write_through/write_back
 * @direct_io   : direct io or through cache
 * @row_size    : number of stripes in a row
 */
typedef struct {
	
uint8_t		span_depth;
	
uint8_t		level;
	
uint8_t		read_ahead;
	
uint8_t		stripe_sz;
	
uint8_t		status;
	
uint8_t		write_mode;
	
uint8_t		direct_io;
	
uint8_t		row_size;
} 
__attribute__ ((packed)) logdrv_param_t;
/**
 * logdrv_40ld_t - logical drive definition for 40LD controllers
 * @lparam      : logical drives parameters
 * @span        : span
 */
typedef struct {
	
logdrv_param_t		lparam;
	
adap_span_40ld_t	span[SPAN_DEPTH_8_SPANS];
}
__attribute__ ((packed)) logdrv_40ld_t;
/**
 * logdrv_8ld_span8_t - logical drive definition for 8LD controllers
 * @lparam      : logical drives parameters
 * @span        : span
 *
 * 8-LD logical drive with up to 8 spans
 */
typedef struct {
	
logdrv_param_t	lparam;
	
adap_span_8ld_t	span[SPAN_DEPTH_8_SPANS];
}
__attribute__ ((packed)) logdrv_8ld_span8_t;
/**
 * logdrv_8ld_span4_t - logical drive definition for 8LD controllers
 * @lparam      : logical drives parameters
 * @span        : span
 *
 * 8-LD logical drive with up to 4 spans
 */
typedef struct {
	
logdrv_param_t	lparam;
	
adap_span_8ld_t	span[SPAN_DEPTH_4_SPANS];
}
__attribute__ ((packed)) logdrv_8ld_span4_t;
/**
 * phys_drive_t - physical device information
 * @type        : Type of the device
 * @cur_status  : current status of the device
 * @tag_depth   : Level of tagging
 * @sync_neg    : sync negotiation - ENABLE or DISABLE
 * @size        : configurable size in terms of 512 byte
 */
typedef struct {
	
uint8_t		type;
	
uint8_t		cur_status;
	
uint8_t		tag_depth;
	
uint8_t		sync_neg;
	
uint32_t	size;
}
__attribute__ ((packed)) phys_drive_t;
/**
 * disk_array_40ld_t - disk array for 40LD controllers
 * @numldrv     : number of logical drives
 * @resvd       :
 * @ldrv        : logical drives information
 * @pdrv        : physical drives information
 */
typedef struct {
	
uint8_t		numldrv;
	
uint8_t		resvd[3];
	
logdrv_40ld_t	ldrv[MAX_LOGICAL_DRIVES_40LD];
	
phys_drive_t	pdrv[MBOX_MAX_PHYSICAL_DRIVES];
}
__attribute__ ((packed)) disk_array_40ld_t;
/**
 * disk_array_8ld_span8_t - disk array for 8LD controllers
 * @numldrv     : number of logical drives
 * @resvd       :
 * @ldrv        : logical drives information
 * @pdrv        : physical drives information
 *
 * Disk array for 8LD logical drives with up to 8 spans
 */
typedef struct {
	
uint8_t			numldrv;
	
uint8_t			resvd[3];
	
logdrv_8ld_span8_t	ldrv[MAX_LOGICAL_DRIVES_8LD];
	
phys_drive_t		pdrv[MBOX_MAX_PHYSICAL_DRIVES];
}
__attribute__ ((packed)) disk_array_8ld_span8_t;
/**
 * disk_array_8ld_span4_t - disk array for 8LD controllers
 * @numldrv     : number of logical drives
 * @resvd       :
 * @ldrv        : logical drives information
 * @pdrv        : physical drives information
 *
 * Disk array for 8LD logical drives with up to 4 spans
 */
typedef struct {
	
uint8_t			numldrv;
	
uint8_t			resvd[3];
	
logdrv_8ld_span4_t	ldrv[MAX_LOGICAL_DRIVES_8LD];
	
phys_drive_t		pdrv[MBOX_MAX_PHYSICAL_DRIVES];
}
__attribute__ ((packed)) disk_array_8ld_span4_t;
/**
 * struct private_bios_data - bios private data for boot devices
 * @geometry    : bits 0-3 - BIOS geometry, 0x0001 - 1GB, 0x0010 - 2GB,
 *              0x1000 - 8GB, Others values are invalid
 * @unused      : bits 4-7 are unused
 * @boot_drv    : logical drive set as boot drive, 0..7 - for 8LD cards,
 *              0..39 - for 40LD cards
 * @cksum       : 0-(sum of first 13 bytes of this structure)
 */
struct private_bios_data {
	
uint8_t		geometry	:4;
	
uint8_t		unused		:4;
	
uint8_t		boot_drv;
	
uint8_t		rsvd[12];
	
uint16_t	cksum;
} __attribute__ ((packed));
/**
 * mbox_sgl64 - 64-bit scatter list for mailbox based controllers
 * @address     : address of the buffer
 * @length      : data transfer length
 */
typedef struct {
	
uint64_t	address;
	
uint32_t	length;
} 
__attribute__ ((packed)) mbox_sgl64;
/**
 * mbox_sgl32 - 32-bit scatter list for mailbox based controllers
 * @address     : address of the buffer
 * @length      : data transfer length
 */
typedef struct {
	
uint32_t	address;
	
uint32_t	length;
} 
__attribute__ ((packed)) mbox_sgl32;
#endif		// _MRAID_MBOX_DEFS_H_
/* vim: set ts=8 sw=8 tw=78: */
Overall Contributors
 | Person | Tokens | Prop | Commits | CommitProp | 
| james bottomley | james bottomley | 1461 | 99.52% | 1 | 20.00% | 
| lucas de marchi | lucas de marchi | 4 | 0.27% | 1 | 20.00% | 
| randy dunlap | randy dunlap | 1 | 0.07% | 1 | 20.00% | 
| andre goddard rosa | andre goddard rosa | 1 | 0.07% | 1 | 20.00% | 
| thadeu lima de souza cascardo | thadeu lima de souza cascardo | 1 | 0.07% | 1 | 20.00% | 
 | Total | 1468 | 100.00% | 5 | 100.00% | 
  
Information contained on this website is for historical information purposes only and does not indicate or represent copyright ownership.