brintos

brintos / linux-shallow public Read only

0
0
Text · 20.4 KiB · f0ef8f7 Raw
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