Linux Audio

Check our new training course

Loading...
  1/* SPDX-License-Identifier: GPL-2.0-or-later */
  2/*
  3 *
  4 *			Linux MegaRAID Unified device driver
  5 *
  6 * Copyright (c) 2003-2004  LSI Logic Corporation.
  7 *
  8 * FILE		: mbox_defs.h
  9 */
 10#ifndef _MRAID_MBOX_DEFS_H_
 11#define _MRAID_MBOX_DEFS_H_
 12
 13#include <linux/types.h>
 14
 15/*
 16 * Commands and states for mailbox based controllers
 17 */
 18
 19#define MBOXCMD_LREAD		0x01
 20#define MBOXCMD_LWRITE		0x02
 21#define MBOXCMD_PASSTHRU	0x03
 22#define MBOXCMD_ADPEXTINQ	0x04
 23#define MBOXCMD_ADAPTERINQ	0x05
 24#define MBOXCMD_LREAD64		0xA7
 25#define MBOXCMD_LWRITE64	0xA8
 26#define MBOXCMD_PASSTHRU64	0xC3
 27#define MBOXCMD_EXTPTHRU	0xE3
 28
 29#define MAIN_MISC_OPCODE	0xA4
 30#define GET_MAX_SG_SUPPORT	0x01
 31#define SUPPORT_EXT_CDB		0x16
 32
 33#define FC_NEW_CONFIG		0xA1
 34#define NC_SUBOP_PRODUCT_INFO	0x0E
 35#define NC_SUBOP_ENQUIRY3	0x0F
 36#define ENQ3_GET_SOLICITED_FULL	0x02
 37#define OP_DCMD_READ_CONFIG	0x04
 38#define NEW_READ_CONFIG_8LD	0x67
 39#define READ_CONFIG_8LD		0x07
 40#define FLUSH_ADAPTER		0x0A
 41#define FLUSH_SYSTEM		0xFE
 42
 43/*
 44 * Command for random deletion of logical drives
 45 */
 46#define	FC_DEL_LOGDRV		0xA4
 47#define	OP_SUP_DEL_LOGDRV	0x2A
 48#define OP_GET_LDID_MAP		0x18
 49#define OP_DEL_LOGDRV		0x1C
 50
 51/*
 52 * BIOS commands
 53 */
 54#define IS_BIOS_ENABLED		0x62
 55#define GET_BIOS		0x01
 56#define CHNL_CLASS		0xA9
 57#define GET_CHNL_CLASS		0x00
 58#define SET_CHNL_CLASS		0x01
 59#define CH_RAID			0x01
 60#define CH_SCSI			0x00
 61#define BIOS_PVT_DATA		0x40
 62#define GET_BIOS_PVT_DATA	0x00
 63
 64
 65/*
 66 * Commands to support clustering
 67 */
 68#define GET_TARGET_ID		0x7D
 69#define CLUSTER_OP		0x70
 70#define GET_CLUSTER_MODE	0x02
 71#define CLUSTER_CMD		0x6E
 72#define RESERVE_LD		0x01
 73#define RELEASE_LD		0x02
 74#define RESET_RESERVATIONS	0x03
 75#define RESERVATION_STATUS	0x04
 76#define RESERVE_PD		0x05
 77#define RELEASE_PD		0x06
 78
 79
 80/*
 81 * Module battery status
 82 */
 83#define BATTERY_MODULE_MISSING		0x01
 84#define BATTERY_LOW_VOLTAGE		0x02
 85#define BATTERY_TEMP_HIGH		0x04
 86#define BATTERY_PACK_MISSING		0x08
 87#define BATTERY_CHARGE_MASK		0x30
 88#define BATTERY_CHARGE_DONE		0x00
 89#define BATTERY_CHARGE_INPROG		0x10
 90#define BATTERY_CHARGE_FAIL		0x20
 91#define BATTERY_CYCLES_EXCEEDED		0x40
 92
 93/*
 94 * Physical drive states.
 95 */
 96#define PDRV_UNCNF	0
 97#define PDRV_ONLINE	3
 98#define PDRV_FAILED	4
 99#define PDRV_RBLD	5
100#define PDRV_HOTSPARE	6
101
102
103/*
104 * Raid logical drive states.
105 */
106#define RDRV_OFFLINE	0
107#define RDRV_DEGRADED	1
108#define RDRV_OPTIMAL	2
109#define RDRV_DELETED	3
110
111/*
112 * Read, write and cache policies
113 */
114#define NO_READ_AHEAD		0
115#define READ_AHEAD		1
116#define ADAP_READ_AHEAD		2
117#define WRMODE_WRITE_THRU	0
118#define WRMODE_WRITE_BACK	1
119#define CACHED_IO		0
120#define DIRECT_IO		1
121
122#define MAX_LOGICAL_DRIVES_8LD		8
123#define MAX_LOGICAL_DRIVES_40LD		40
124#define FC_MAX_PHYSICAL_DEVICES		256
125#define MAX_MBOX_CHANNELS		5
126#define MAX_MBOX_TARGET			15
127#define MBOX_MAX_PHYSICAL_DRIVES	MAX_MBOX_CHANNELS*MAX_MBOX_TARGET
128#define MAX_ROW_SIZE_40LD		32
129#define MAX_ROW_SIZE_8LD		8
130#define SPAN_DEPTH_8_SPANS		8
131#define SPAN_DEPTH_4_SPANS		4
132#define MAX_REQ_SENSE_LEN		0x20
133
134
135
136/**
137 * struct mbox_t - Driver and f/w handshake structure.
138 * @cmd		: firmware command
139 * @cmdid	: command id
140 * @numsectors	: number of sectors to be transferred
141 * @lba		: Logical Block Address on LD
142 * @xferaddr	: DMA address for data transfer
143 * @logdrv	: logical drive number
144 * @numsge	: number of scatter gather elements in sg list
145 * @resvd	: reserved
146 * @busy	: f/w busy, must wait to issue more commands.
147 * @numstatus	: number of commands completed.
148 * @status	: status of the commands completed
149 * @completed	: array of completed command ids.
150 * @poll	: poll and ack sequence
151 * @ack		: poll and ack sequence
152 *
153 * The central handshake structure between the driver and the firmware. This
154 * structure must be allocated by the driver and aligned at 8-byte boundary.
155 */
156#define MBOX_MAX_FIRMWARE_STATUS	46
157typedef struct {
158	uint8_t		cmd;
159	uint8_t		cmdid;
160	uint16_t	numsectors;
161	uint32_t	lba;
162	uint32_t	xferaddr;
163	uint8_t		logdrv;
164	uint8_t		numsge;
165	uint8_t		resvd;
166	uint8_t		busy;
167	uint8_t		numstatus;
168	uint8_t		status;
169	uint8_t		completed[MBOX_MAX_FIRMWARE_STATUS];
170	uint8_t		poll;
171	uint8_t		ack;
172} __attribute__ ((packed)) mbox_t;
173
174
175/**
176 * mbox64_t - 64-bit extension for the mailbox
177 * @segment_lo	: the low 32-bits of the address of the scatter-gather list
178 * @segment_hi	: the upper 32-bits of the address of the scatter-gather list
179 * @mbox	: 32-bit mailbox, whose xferadder field must be set to
180 *		0xFFFFFFFF
181 *
182 * This is the extension of the 32-bit mailbox to be able to perform DMA
183 * beyond 4GB address range.
184 */
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 commands
193 */
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 devices
209 * @timeout		: command timeout, 0=6sec, 1=60sec, 2=10min, 3=3hr
210 * @ars			: set if ARS required after check condition
211 * @islogical		: set if command meant for logical devices
212 * @logdrv		: logical drive number if command for LD
213 * @channel		: Channel on which physical device is located
214 * @target		: SCSI target of the device
215 * @queuetag		: unused
216 * @queueaction		: unused
217 * @cdb			: SCSI CDB
218 * @cdblen		: length of the CDB
219 * @reqsenselen		: amount of request sense data to be returned
220 * @reqsensearea	: Sense information buffer
221 * @numsge		: number of scatter-gather elements in the sg list
222 * @scsistatus		: SCSI status of the command completed.
223 * @dataxferaddr	: DMA data transfer address
224 * @dataxferlen		: amount of the data to be transferred.
225 */
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 devices
256 * @timeout		: command timeout, 0=6sec, 1=60sec, 2=10min, 3=3hr
257 * @ars			: set if ARS required after check condition
258 * @rsvd1		: reserved field
259 * @cd_rom		: (?)
260 * @rsvd2		: reserved field
261 * @islogical		: set if command meant for logical devices
262 * @logdrv		: logical drive number if command for LD
263 * @channel		: Channel on which physical device is located
264 * @target		: SCSI target of the device
265 * @queuetag		: unused
266 * @queueaction		: unused
267 * @cdblen		: length of the CDB
268 * @rsvd3		: reserved field
269 * @cdb			: SCSI CDB
270 * @numsge		: number of scatter-gather elements in the sg list
271 * @status		: SCSI status of the command completed.
272 * @reqsenselen		: amount of request sense data to be returned
273 * @reqsensearea	: Sense information buffer
274 * @rsvd4		: reserved field
275 * @dataxferaddr	: DMA data transfer address
276 * @dataxferlen		: amount of the data to be transferred.
277 */
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 controller
305 * @data_size		: current size in bytes (not including resvd)
306 * @config_signature	: Current value is 0x00282008
307 * @fw_version		: Firmware version
308 * @bios_version	: version of the BIOS
309 * @product_name	: Name given to the controller
310 * @max_commands	: Maximum concurrent commands supported
311 * @nchannels		: Number of SCSI Channels detected
312 * @fc_loop_present	: Number of Fibre Loops detected
313 * @mem_type		: EDO, FPM, SDRAM etc
314 * @signature		:
315 * @dram_size		: In terms of MB
316 * @subsysid		: device PCI subsystem ID
317 * @subsysvid		: device PCI subsystem vendor ID
318 * @notify_counters	:
319 * @pad1k		: 135 + 889 resvd = 1024 total size
320 *
321 * This structures holds the information about the controller which is not
322 * expected to change dynamically.
323 *
324 * The current value of config signature is 0x00282008:
325 * 0x28 = MAX_LOGICAL_DRIVES,
326 * 0x20 = Number of stripes and
327 * 0x08 = Number of spans
328 */
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 structure
350 * @global_counter		: Any change increments this counter
351 * @param_counter		: Indicates any params changed
352 * @param_id			: Param modified - defined below
353 * @param_val			: New val of last param modified
354 * @write_config_counter	: write config occurred
355 * @write_config_rsvd		:
356 * @ldrv_op_counter		: Indicates ldrv op started/completed
357 * @ldrv_opid			: ldrv num
358 * @ldrv_opcmd			: ldrv operation - defined below
359 * @ldrv_opstatus		: status of the operation
360 * @ldrv_state_counter		: Indicates change of ldrv state
361 * @ldrv_state_id		: ldrv num
362 * @ldrv_state_new		: New state
363 * @ldrv_state_old		: old state
364 * @pdrv_state_counter		: Indicates change of ldrv state
365 * @pdrv_state_id		: pdrv id
366 * @pdrv_state_new		: New state
367 * @pdrv_state_old		: old state
368 * @pdrv_fmt_counter		: Indicates pdrv format started/over
369 * @pdrv_fmt_id			: pdrv id
370 * @pdrv_fmt_val		: format started/over
371 * @pdrv_fmt_rsvd		:
372 * @targ_xfer_counter		: Indicates SCSI-2 Xfer rate change
373 * @targ_xfer_id		: pdrv Id
374 * @targ_xfer_val		: new Xfer params of last pdrv
375 * @targ_xfer_rsvd		:
376 * @fcloop_id_chg_counter	: Indicates loopid changed
377 * @fcloopid_pdrvid		: pdrv id
378 * @fcloop_id0			: loopid on fc loop 0
379 * @fcloop_id1			: loopid on fc loop 1
380 * @fcloop_state_counter	: Indicates loop state changed
381 * @fcloop_state0		: state of fc loop 0
382 * @fcloop_state1		: state of fc loop 1
383 * @fcloop_state_rsvd		:
384 */
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 information
425 *
426 * @data_size		: current size in bytes (not including resvd)
427 * @notify		:
428 * @notify_rsvd		:
429 * @rebuild_rate	: rebuild rate (0% - 100%)
430 * @cache_flush_int	: cache flush interval in seconds
431 * @sense_alert		:
432 * @drive_insert_count	: drive insertion count
433 * @battery_status	:
434 * @num_ldrv		: no. of Log Drives configured
435 * @recon_state		: state of reconstruct
436 * @ldrv_op_status	: logdrv Status
437 * @ldrv_size		: size of each log drv
438 * @ldrv_prop		:
439 * @ldrv_state		: state of log drives
440 * @pdrv_state		: state of phys drvs.
441 * @pdrv_format		:
442 * @targ_xfer		: phys device transfer rate
443 * @pad1k		: 761 + 263reserved = 1024 bytes total size
444 */
445#define MAX_NOTIFY_SIZE		0x80
446#define CUR_NOTIFY_SIZE		sizeof(mraid_notify_t)
447
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 adapter
478 * @max_commands		: max concurrent commands supported
479 * @rebuild_rate		: rebuild rate - 0% thru 100%
480 * @max_targ_per_chan		: max targ per channel
481 * @nchannels			: number of channels on HBA
482 * @fw_version			: firmware version
483 * @age_of_flash		: number of times FW has been flashed
484 * @chip_set_value		: contents of 0xC0000832
485 * @dram_size			: in MB
486 * @cache_flush_interval	: in seconds
487 * @bios_version		:
488 * @board_type			:
489 * @sense_alert			:
490 * @write_config_count		: increase with every configuration change
491 * @drive_inserted_count	: increase with every drive inserted
492 * @inserted_drive		: channel:Id of inserted drive
493 * @battery_status		: bit 0: battery module missing
494 *				bit 1: VBAD
495 *				bit 2: temperature high
496 *				bit 3: battery pack missing
497 *				bit 4,5:
498 *					00 - charge complete
499 *					01 - fast charge in progress
500 *					10 - fast charge fail
501 *					11 - undefined
502 *				bit 6: counter > 1000
503 *				bit 7: Undefined
504 * @dec_fault_bus_info		:
505 */
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 drives
527 * @nldrv	: Number of logical drives configured
528 * @rsvd	:
529 * @size	: size of each logical drive
530 * @prop	:
531 * @state	: state of each logical drive
532 */
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 drives
544 * @pdrv_state	: state of each physical drive
545 */
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 0x05
554 * @mraid_adapinfo_t	: adapter information
555 * @mraid_ldrv_info_t	: logical drives information
556 * @mraid_pdrv_info_t	: physical drives information
557 */
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 0x04
567 *
568 * @raid_inq		: raid inquiry
569 * @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 information
585 * @channel	: channel fpor the device
586 * @target	: target ID of the device
587 */
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 span
596 * @start_blk	: starting block
597 * @num_blks	: number of blocks
598 */
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 span
608 * @start_blk	: starting block
609 * @num_blks	: number of blocks
610 */
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 parameters
620 *
621 * @span_depth	: total number of spans
622 * @level	: RAID level
623 * @read_ahead	: read ahead, no read ahead, adaptive read ahead
624 * @stripe_sz	: encoded stripe size
625 * @status	: status of the logical drive
626 * @write_mode	: write mode, write_through/write_back
627 * @direct_io	: direct io or through cache
628 * @row_size	: number of stripes in a row
629 */
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 controllers
644 * @lparam	: logical drives parameters
645 * @span	: span
646 */
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 controllers
655 * @lparam	: logical drives parameters
656 * @span	: span
657 *
658 * 8-LD logical drive with up to 8 spans
659 */
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 controllers
668 * @lparam	: logical drives parameters
669 * @span	: span
670 *
671 * 8-LD logical drive with up to 4 spans
672 */
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 information
681 * @type	: Type of the device
682 * @cur_status	: current status of the device
683 * @tag_depth	: Level of tagging
684 * @sync_neg	: sync negotiation - ENABLE or DISABLE
685 * @size	: configurable size in terms of 512 byte
686 */
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 controllers
698 * @numldrv	: number of logical drives
699 * @resvd	:
700 * @ldrv	: logical drives information
701 * @pdrv	: physical drives information
702 */
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 controllers
713 * @numldrv	: number of logical drives
714 * @resvd	:
715 * @ldrv	: logical drives information
716 * @pdrv	: physical drives information
717 *
718 * Disk array for 8LD logical drives with up to 8 spans
719 */
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 controllers
730 * @numldrv	: number of logical drives
731 * @resvd	:
732 * @ldrv	: logical drives information
733 * @pdrv	: physical drives information
734 *
735 * Disk array for 8LD logical drives with up to 4 spans
736 */
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 devices
747 * @geometry	: bits 0-3 - BIOS geometry, 0x0001 - 1GB, 0x0010 - 2GB,
748 *		0x1000 - 8GB, Others values are invalid
749 * @unused	: bits 4-7 are unused
750 * @boot_drv	: logical drive set as boot drive, 0..7 - for 8LD cards,
751 * 		0..39 - for 40LD cards
752 * @cksum	: 0-(sum of first 13 bytes of this structure)
753 */
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 controllers
765 * @address	: address of the buffer
766 * @length	: data transfer length
767 */
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 controllers
775 * @address	: address of the buffer
776 * @length	: data transfer length
777 */
778typedef struct {
779	uint32_t	address;
780	uint32_t	length;
781} __attribute__ ((packed)) mbox_sgl32;
782
783#endif		// _MRAID_MBOX_DEFS_H_