/*
* fusion.h
*
* Solaris MegaRAID device driver for SAS2.0 controllers
* Copyright (c) 2008-2012, LSI Logic Corporation.
* All rights reserved.
*
* Version:
* Author:
* Swaminathan K S
* Arun Chandrashekhar
* Manju R
* Rasheed
* Shakeel Bukhari
*/
#ifndef _FUSION_H_
#define _FUSION_H_
#define S8 char
#define S16 short
#define S32 int
/* MPI2 defines */
#define MPI2_VERSION_MINOR_SHIFT (0)
#define MPI2_HEADER_VERSION_DEV_SHIFT (0)
<< 8) | \
/* Invader defines */
/* get the mapping information of LD */
#ifndef MPI2_POINTER
#define MPI2_POINTER *
#endif
#pragma pack(1)
typedef struct _MPI25_IEEE_SGE_CHAIN64
{
typedef struct _MPI2_SGE_SIMPLE_UNION
{
union
{
} u1;
typedef struct
{
typedef struct _MPI2_SGE_CHAIN_UNION
{
union
{
} u1;
typedef struct _MPI2_IEEE_SGE_SIMPLE32
{
typedef struct _MPI2_IEEE_SGE_SIMPLE64
{
typedef union _MPI2_IEEE_SGE_SIMPLE_UNION
{
typedef union _MPI2_IEEE_SGE_CHAIN_UNION
{
typedef union _MPI2_SGE_IO_UNION
{
typedef union
{
/* Default Request Descriptor */
typedef struct _MPI2_DEFAULT_REQUEST_DESCRIPTOR
{
/* High Priority Request Descriptor */
typedef struct _MPI2_HIGH_PRIORITY_REQUEST_DESCRIPTOR
{
/* SCSI IO Request Descriptor */
typedef struct _MPI2_SCSI_IO_REQUEST_DESCRIPTOR
{
/* SCSI Target Request Descriptor */
typedef struct _MPI2_SCSI_TARGET_REQUEST_DESCRIPTOR
{
/* RAID Accelerator Request Descriptor */
typedef struct _MPI2_RAID_ACCEL_REQUEST_DESCRIPTOR
{
/* Default Reply Descriptor */
typedef struct _MPI2_DEFAULT_REPLY_DESCRIPTOR
{
/* Address Reply Descriptor */
typedef struct _MPI2_ADDRESS_REPLY_DESCRIPTOR
{
/* SCSI IO Success Reply Descriptor */
typedef struct _MPI2_SCSI_IO_SUCCESS_REPLY_DESCRIPTOR
{
/* TargetAssist Success Reply Descriptor */
typedef struct _MPI2_TARGETASSIST_SUCCESS_REPLY_DESCRIPTOR
{
/* Target Command Buffer Reply Descriptor */
typedef struct _MPI2_TARGET_COMMAND_BUFFER_REPLY_DESCRIPTOR
{
/* RAID Accelerator Success Reply Descriptor */
typedef struct _MPI2_RAID_ACCELERATOR_SUCCESS_REPLY_DESCRIPTOR
{
/* union of Reply Descriptors */
typedef union _MPI2_REPLY_DESCRIPTORS_UNION
{
/* IOCInit Request message */
typedef struct _MPI2_IOC_INIT_REQUEST
{
typedef struct _MR_DEV_HANDLE_INFO {
/* Send bitmap of LDs that are idle with respect to FP */
/* bitmap of valid device handles. */
/* 0x04 dev handles for all the paths. */
typedef struct _MR_ARRAY_INFO {
typedef struct _MR_QUAD_ELEMENT {
typedef struct _MR_SPAN_INFO {
/* 0x00, starting block number in array */
/* 0x08, number of blocks */
/* 0x10, array reference */
typedef struct _MR_SPAN_BLOCK_INFO {
typedef struct _MR_LD_RAID {
struct {
/* FDE or controller encryption (MR_LD_ENCRYPTION_TYPE) */
/* 0x12, shift-count to get stripe size (0=512, 1=1K, 7=64K, etc.) */
/* 0x14, number of data disks in a row */
/* 0x16, To differentiate between RAID1 and RAID1E */
/* 0x1a, state of ld, state corresponds to MR_LD_STATE */
/* 0x1b, Pre calculate region type requests based on MFC etc.. */
/*
* 0x1d, region lock type used for read, valid only if
* regTypeOnReadIsValid=1
*/
struct {
/* This LD requires sync command before completing */
typedef struct _MR_LD_SPAN_MAP {
/* 0x80, needed for GET_ARM() - R0/1/5 only. */
typedef struct _MR_FW_RAID_MAP {
/* total size of this structure, including this field */
union {
/* Simple method of version checking variables */
struct {
} u1;
/*
* 0x20 This doesn't correspond to
* FW Ld Tgt Id to LD, but will purge. For example: if tgt Id is 4
* and FW LD is 2, and there is only one LD, FW will populate the
* array like this. [0xFF, 0xFF, 0xFF, 0xFF, 0x0.....]. This is to
* help reduce the entire structure size if there are few LDs or
* driver is looking info for 1 LD only.
*/
MAX_RAIDMAP_VIEWS]; /* 0x20 */
/* timeout value used by driver in FP IOs */
/* 0x28a8-[0 -MAX_RAIDMAP_LOGICAL_DRIVES+MAX_RAIDMAP_VIEWS+1]; */
typedef struct _LD_TARGET_SYNC {
#pragma pack()
struct IO_REQUEST_INFO {
};
#endif /* _FUSION_H_ */