blob: b25b74764ec3305ec036bc2930cad04e87fcf3f6 [file] [log] [blame]
Linus Torvalds1da177e2005-04-16 15:20:36 -07001/*
2 *
3 * Linux MegaRAID Unified device driver
4 *
5 * Copyright (c) 2003-2004 LSI Logic Corporation.
6 *
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.
11 *
12 * FILE : mbox_defs.h
13 *
14 */
15#ifndef _MRAID_MBOX_DEFS_H_
16#define _MRAID_MBOX_DEFS_H_
17
18#include <linux/types.h>
19
20/*
21 * Commands and states for mailbox based controllers
22 */
23
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
33
34#define MAIN_MISC_OPCODE 0xA4
35#define GET_MAX_SG_SUPPORT 0x01
36#define SUPPORT_EXT_CDB 0x16
37
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
47
48/*
49 * Command for random deletion of logical drives
50 */
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
55
56/*
57 * BIOS commands
58 */
59#define IS_BIOS_ENABLED 0x62
60#define GET_BIOS 0x01
61#define CHNL_CLASS 0xA9
62#define GET_CHNL_CLASS 0x00
63#define SET_CHNL_CLASS 0x01
64#define CH_RAID 0x01
65#define CH_SCSI 0x00
66#define BIOS_PVT_DATA 0x40
67#define GET_BIOS_PVT_DATA 0x00
68
69
70/*
71 * Commands to support clustering
72 */
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
83
84
85/*
86 * Module battery status
87 */
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
97
98/*
99 * Physical drive states.
100 */
101#define PDRV_UNCNF 0
102#define PDRV_ONLINE 3
103#define PDRV_FAILED 4
104#define PDRV_RBLD 5
105#define PDRV_HOTSPARE 6
106
107
108/*
109 * Raid logical drive states.
110 */
111#define RDRV_OFFLINE 0
112#define RDRV_DEGRADED 1
113#define RDRV_OPTIMAL 2
114#define RDRV_DELETED 3
115
116/*
117 * Read, write and cache policies
118 */
119#define NO_READ_AHEAD 0
120#define READ_AHEAD 1
121#define ADAP_READ_AHEAD 2
122#define WRMODE_WRITE_THRU 0
123#define WRMODE_WRITE_BACK 1
124#define CACHED_IO 0
125#define DIRECT_IO 1
126
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
138
139
140
141/**
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
150 * @resvd : reserved
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
157 *
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.
160 */
161#define MBOX_MAX_FIRMWARE_STATUS 46
162typedef struct {
163 uint8_t cmd;
164 uint8_t cmdid;
165 uint16_t numsectors;
166 uint32_t lba;
167 uint32_t xferaddr;
168 uint8_t logdrv;
169 uint8_t numsge;
170 uint8_t resvd;
171 uint8_t busy;
172 uint8_t numstatus;
173 uint8_t status;
174 uint8_t completed[MBOX_MAX_FIRMWARE_STATUS];
175 uint8_t poll;
176 uint8_t ack;
177} __attribute__ ((packed)) mbox_t;
178
179
180/**
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
185 * 0xFFFFFFFF
186 *
187 * This is the extension of the 32-bit mailbox to be able to perform DMA
188 * beyond 4GB address range.
189 */
190typedef struct {
191 uint32_t xferaddr_lo;
192 uint32_t xferaddr_hi;
193 mbox_t mbox32;
194} __attribute__ ((packed)) mbox64_t;
195
196/*
197 * mailbox structure used for internal commands
198 */
199typedef struct {
200 u8 cmd;
201 u8 cmdid;
202 u8 opcode;
203 u8 subopcode;
204 u32 lba;
205 u32 xferaddr;
206 u8 logdrv;
207 u8 rsvd[3];
208 u8 numstatus;
209 u8 status;
210} __attribute__ ((packed)) int_mbox_t;
211
212/**
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
220 * @queuetag : unused
221 * @queueaction : unused
222 * @cdb : SCSI CDB
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.
230 */
231typedef struct {
232 uint8_t timeout :3;
233 uint8_t ars :1;
234 uint8_t reserved :3;
235 uint8_t islogical :1;
236 uint8_t logdrv;
237 uint8_t channel;
238 uint8_t target;
239 uint8_t queuetag;
240 uint8_t queueaction;
241 uint8_t cdb[10];
242 uint8_t cdblen;
243 uint8_t reqsenselen;
244 uint8_t reqsensearea[MAX_REQ_SENSE_LEN];
245 uint8_t numsge;
246 uint8_t scsistatus;
247 uint32_t dataxferaddr;
248 uint32_t dataxferlen;
249} __attribute__ ((packed)) mraid_passthru_t;
250
251typedef struct {
252
253 uint32_t dataxferaddr_lo;
254 uint32_t dataxferaddr_hi;
255 mraid_passthru_t pthru32;
256
257} __attribute__ ((packed)) mega_passthru64_t;
258
259/**
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
264 * @cd_rom : (?)
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
270 * @queuetag : unused
271 * @queueaction : unused
272 * @cdblen : length of the CDB
273 * @rsvd3 : reserved field
274 * @cdb : SCSI CDB
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.
282 */
283typedef struct {
284 uint8_t timeout :3;
285 uint8_t ars :1;
286 uint8_t rsvd1 :1;
287 uint8_t cd_rom :1;
288 uint8_t rsvd2 :1;
289 uint8_t islogical :1;
290 uint8_t logdrv;
291 uint8_t channel;
292 uint8_t target;
293 uint8_t queuetag;
294 uint8_t queueaction;
295 uint8_t cdblen;
296 uint8_t rsvd3;
297 uint8_t cdb[16];
298 uint8_t numsge;
299 uint8_t status;
300 uint8_t reqsenselen;
301 uint8_t reqsensearea[MAX_REQ_SENSE_LEN];
302 uint8_t rsvd4;
303 uint32_t dataxferaddr;
304 uint32_t dataxferlen;
305} __attribute__ ((packed)) mraid_epassthru_t;
306
307
308/**
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
319 * @signature :
320 * @dram_size : In terms of MB
321 * @subsysid : device PCI subsystem ID
322 * @subsysvid : device PCI subsystem vendor ID
323 * @notify_counters :
324 * @pad1k : 135 + 889 resvd = 1024 total size
325 *
326 * This structures holds the information about the controller which is not
327 * expected to change dynamically.
328 *
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
333 */
334typedef struct {
335 uint32_t data_size;
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;
341 uint8_t nchannels;
342 uint8_t fc_loop_present;
343 uint8_t mem_type;
344 uint32_t signature;
345 uint16_t dram_size;
346 uint16_t subsysid;
347 uint16_t subsysvid;
348 uint8_t notify_counters;
349 uint8_t pad1k[889];
350} __attribute__ ((packed)) mraid_pinfo_t;
351
352
353/**
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
376 * @pdrv_fmt_rsvd :
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
380 * @targ_xfer_rsvd :
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 :
389 */
390typedef struct {
391 uint32_t global_counter;
392 uint8_t param_counter;
393 uint8_t param_id;
394 uint16_t param_val;
395 uint8_t write_config_counter;
396 uint8_t write_config_rsvd[3];
397 uint8_t ldrv_op_counter;
398 uint8_t ldrv_opid;
399 uint8_t ldrv_opcmd;
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;
410 uint8_t pdrv_fmt_id;
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;
419 uint8_t fcloop_id0;
420 uint8_t fcloop_id1;
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;
426
427
428/**
429 * mraid_inquiry3_t - enquiry for device information
430 *
431 * @data_size : current size in bytes (not including resvd)
432 * @notify :
433 * @notify_rsvd :
434 * @rebuild_rate : rebuild rate (0% - 100%)
435 * @cache_flush_int : cache flush interval in seconds
436 * @sense_alert :
437 * @drive_insert_count : drive insertion count
438 * @battery_status :
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
443 * @ldrv_prop :
444 * @ldrv_state : state of log drives
445 * @pdrv_state : state of phys drvs.
446 * @pdrv_format :
447 * @targ_xfer : phys device transfer rate
448 * @pad1k : 761 + 263reserved = 1024 bytes total size
449 */
450#define MAX_NOTIFY_SIZE 0x80
451#define CUR_NOTIFY_SIZE sizeof(mraid_notify_t)
452
453typedef struct {
454 uint32_t data_size;
455
456 mraid_notify_t notify;
457
458 uint8_t notify_rsvd[MAX_NOTIFY_SIZE - CUR_NOTIFY_SIZE];
459
460 uint8_t rebuild_rate;
461 uint8_t cache_flush_int;
462 uint8_t sense_alert;
463 uint8_t drive_insert_count;
464
465 uint8_t battery_status;
466 uint8_t num_ldrv;
467 uint8_t recon_state[MAX_LOGICAL_DRIVES_40LD / 8];
468 uint16_t ldrv_op_status[MAX_LOGICAL_DRIVES_40LD / 8];
469
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];
475
476 uint8_t targ_xfer[80];
477 uint8_t pad1k[263];
478} __attribute__ ((packed)) mraid_inquiry3_t;
479
480
481/**
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
490 * @dram_size : in MB
491 * @cache_flush_interval : in seconds
492 * @bios_version :
493 * @board_type :
494 * @sense_alert :
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
499 * bit 1: VBAD
500 * bit 2: temprature high
501 * bit 3: battery pack missing
502 * bit 4,5:
503 * 00 - charge complete
504 * 01 - fast charge in progress
505 * 10 - fast charge fail
506 * 11 - undefined
507 * bit 6: counter > 1000
508 * bit 7: Undefined
509 * @dec_fault_bus_info :
510 */
511typedef struct {
512 uint8_t max_commands;
513 uint8_t rebuild_rate;
514 uint8_t max_targ_per_chan;
515 uint8_t nchannels;
516 uint8_t fw_version[4];
517 uint16_t age_of_flash;
518 uint8_t chip_set_value;
519 uint8_t dram_size;
520 uint8_t cache_flush_interval;
521 uint8_t bios_version[4];
522 uint8_t board_type;
523 uint8_t sense_alert;
524 uint8_t write_config_count;
525 uint8_t battery_status;
526 uint8_t dec_fault_bus_info;
527} __attribute__ ((packed)) mraid_adapinfo_t;
528
529
530/**
531 * mraid_ldrv_info_t - information about the logical drives
532 * @nldrv : Number of logical drives configured
533 * @rsvd :
534 * @size : size of each logical drive
535 * @prop :
536 * @state : state of each logical drive
537 */
538typedef struct {
539 uint8_t nldrv;
540 uint8_t rsvd[3];
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;
545
546
547/**
548 * mraid_pdrv_info_t - information about the physical drives
549 * @pdrv_state : state of each physical drive
550 */
551typedef struct {
552 uint8_t pdrv_state[MBOX_MAX_PHYSICAL_DRIVES];
553 uint8_t rsvd;
554} __attribute__ ((packed)) mraid_pdrv_info_t;
555
556
557/**
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
562 */
563typedef struct {
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;
568
569
570/**
571 * mraid_extinq_t - RAID extended inquiry, mailbox command 0x04
572 *
573 * @raid_inq : raid inquiry
574 * @phys_drv_format :
575 * @stack_attn :
576 * @modem_status :
577 * @rsvd :
578 */
579typedef struct {
580 mraid_inquiry_t raid_inq;
581 uint16_t phys_drv_format[MAX_MBOX_CHANNELS];
582 uint8_t stack_attn;
583 uint8_t modem_status;
584 uint8_t rsvd[2];
585} __attribute__ ((packed)) mraid_extinq_t;
586
587
588/**
589 * adap_device_t - device information
590 * @channel : channel fpor the device
591 * @target : target ID of the device
592 */
593typedef struct {
594 uint8_t channel;
595 uint8_t target;
596}__attribute__ ((packed)) adap_device_t;
597
598
599/**
600 * adap_span_40ld_t - 40LD span
601 * @start_blk : starting block
602 * @num_blks : number of blocks
603 */
604typedef struct {
605 uint32_t start_blk;
606 uint32_t num_blks;
607 adap_device_t device[MAX_ROW_SIZE_40LD];
608}__attribute__ ((packed)) adap_span_40ld_t;
609
610
611/**
612 * adap_span_8ld_t - 8LD span
613 * @start_blk : starting block
614 * @num_blks : number of blocks
615 */
616typedef struct {
617 uint32_t start_blk;
618 uint32_t num_blks;
619 adap_device_t device[MAX_ROW_SIZE_8LD];
620}__attribute__ ((packed)) adap_span_8ld_t;
621
622
623/**
624 * logdrv_param_t - logical drives parameters
625 *
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
634 */
635typedef struct {
636 uint8_t span_depth;
637 uint8_t level;
638 uint8_t read_ahead;
639 uint8_t stripe_sz;
640 uint8_t status;
641 uint8_t write_mode;
642 uint8_t direct_io;
643 uint8_t row_size;
644} __attribute__ ((packed)) logdrv_param_t;
645
646
647/**
648 * logdrv_40ld_t - logical drive definition for 40LD controllers
649 * @lparam : logical drives parameters
650 * @span : span
651 */
652typedef struct {
653 logdrv_param_t lparam;
654 adap_span_40ld_t span[SPAN_DEPTH_8_SPANS];
655}__attribute__ ((packed)) logdrv_40ld_t;
656
657
658/**
659 * logdrv_8ld_span8_t - logical drive definition for 8LD controllers
660 * @lparam : logical drives parameters
661 * @span : span
662 *
663 * 8-LD logical drive with upto 8 spans
664 */
665typedef struct {
666 logdrv_param_t lparam;
667 adap_span_8ld_t span[SPAN_DEPTH_8_SPANS];
668}__attribute__ ((packed)) logdrv_8ld_span8_t;
669
670
671/**
672 * logdrv_8ld_span4_t - logical drive definition for 8LD controllers
673 * @lparam : logical drives parameters
674 * @span : span
675 *
676 * 8-LD logical drive with upto 4 spans
677 */
678typedef struct {
679 logdrv_param_t lparam;
680 adap_span_8ld_t span[SPAN_DEPTH_4_SPANS];
681}__attribute__ ((packed)) logdrv_8ld_span4_t;
682
683
684/**
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
Thadeu Lima de Souza Cascardo4b512d22009-04-14 23:14:10 -0300689 * @sync_neg : sync negotiation - ENABLE or DISABLE
Linus Torvalds1da177e2005-04-16 15:20:36 -0700690 * @size : configurable size in terms of 512 byte
691 */
692typedef struct {
693 uint8_t type;
694 uint8_t cur_status;
695 uint8_t tag_depth;
696 uint8_t sync_neg;
697 uint32_t size;
698}__attribute__ ((packed)) phys_drive_t;
699
700
701/**
702 * disk_array_40ld_t - disk array for 40LD controllers
703 * @numldrv : number of logical drives
704 * @resvd :
705 * @ldrv : logical drives information
706 * @pdrv : physical drives information
707 */
708typedef struct {
709 uint8_t numldrv;
710 uint8_t resvd[3];
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;
714
715
716/**
717 * disk_array_8ld_span8_t - disk array for 8LD controllers
718 * @numldrv : number of logical drives
719 * @resvd :
720 * @ldrv : logical drives information
721 * @pdrv : physical drives information
722 *
723 * Disk array for 8LD logical drives with upto 8 spans
724 */
725typedef struct {
726 uint8_t numldrv;
727 uint8_t resvd[3];
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;
731
732
733/**
734 * disk_array_8ld_span4_t - disk array for 8LD controllers
735 * @numldrv : number of logical drives
736 * @resvd :
737 * @ldrv : logical drives information
738 * @pdrv : physical drives information
739 *
740 * Disk array for 8LD logical drives with upto 4 spans
741 */
742typedef struct {
743 uint8_t numldrv;
744 uint8_t resvd[3];
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;
748
749
750/**
Randy Dunlap59f19a92007-01-09 21:40:52 -0800751 * struct private_bios_data - bios private data for boot devices
Linus Torvalds1da177e2005-04-16 15:20:36 -0700752 * @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)
758 */
759struct private_bios_data {
760 uint8_t geometry :4;
761 uint8_t unused :4;
762 uint8_t boot_drv;
763 uint8_t rsvd[12];
764 uint16_t cksum;
765} __attribute__ ((packed));
766
767
768/**
769 * mbox_sgl64 - 64-bit scatter list for mailbox based controllers
770 * @address : address of the buffer
771 * @length : data transfer length
772 */
773typedef struct {
774 uint64_t address;
775 uint32_t length;
776} __attribute__ ((packed)) mbox_sgl64;
777
778/**
779 * mbox_sgl32 - 32-bit scatter list for mailbox based controllers
780 * @address : address of the buffer
781 * @length : data transfer length
782 */
783typedef struct {
784 uint32_t address;
785 uint32_t length;
786} __attribute__ ((packed)) mbox_sgl32;
787
788#endif // _MRAID_MBOX_DEFS_H_
789
790/* vim: set ts=8 sw=8 tw=78: */