#ifndef __AAC_REGS_H__
#define __AAC_REGS_H__
#ifdef __cplusplus
extern "C" {
#endif
#define AAC_DB_SYNC_COMMAND (1<<0)
#define AAC_DB_COMMAND_READY (1<<1)
#define AAC_DB_RESPONSE_READY (1<<2)
#define AAC_DB_COMMAND_NOT_FULL (1<<3)
#define AAC_DB_RESPONSE_NOT_FULL (1<<4)
#define AAC_DB_PRINTF_READY (1<<5)
#define AAC_DB_INTR_BITS (AAC_DB_COMMAND_READY | \
AAC_DB_RESPONSE_READY | AAC_DB_PRINTF_READY)
#define AAC_DB_INTR_NEW 0x08
#define AAC_SELF_TEST_FAILED 0x00000004
#define AAC_MONITOR_PANIC 0x00000020
#define AAC_KERNEL_UP_AND_RUNNING 0x00000080
#define AAC_KERNEL_PANIC 0x00000100
#define AAC_OMR0 0x18
#define AAC_OMR1 0x1c
#define AAC_IDBR 0x20
#define AAC_ODBR 0x2c
#define AAC_OIMR 0x34
#define AAC_IRCSR 0x38
#define AAC_IQUE 0x40
#define AAC_OQUE 0x44
#define AAC_RX_MAILBOX 0x50
#define AAC_RX_FWSTATUS 0x6c
#define AAC_RKT_MAILBOX 0x1000
#define AAC_RKT_FWSTATUS 0x101c
#define AAC_BREAKPOINT_REQ 0x04
#define AAC_MONKER_INITSTRUCT 0x05
#define AAC_MONKER_SYNCFIB 0x0c
#define AAC_MONKER_GETKERNVER 0x11
#define AAC_MONKER_GETINFO 0x19
#define AAC_MONKER_GETDRVPROP 0x23
#define AAC_MONKER_GETCOMMPREF 0x26
#define AAC_IOP_RESET 0x1000
#define AAC_IRCSR_CORES_RST 3
#define AAC_SECTOR_SIZE 512
#define AAC_NUMBER_OF_HEADS 255
#define AAC_SECTORS_PER_TRACK 63
#define AAC_ROTATION_SPEED 10000
#define AAC_MAX_PFN 0xfffff
#define AAC_ADDITIONAL_LEN 31
#define AAC_ANSI_VER 2
#define AAC_RESP_DATA_FORMAT 2
#define AAC_MAX_LD 64
#define AAC_MAX_PD(s) ((s)->bus_max * (s)->tgt_max)
#define AAC_MAX_DEV(s) (AAC_MAX_LD + AAC_MAX_PD((s)))
#define AAC_BLK_SIZE AAC_SECTOR_SIZE
#define AAC_DMA_ALIGN 4
#define AAC_DMA_ALIGN_MASK (AAC_DMA_ALIGN - 1)
#define AAC_MAX_CONTAINERS AAC_MAX_LD
#define AAC_MAP_SIZE_MIN_RX 4096
#define AAC_MAP_SIZE_MIN_RKT 8192
#define AAC_SUPPORTED_SNAPSHOT 0x01
#define AAC_SUPPORTED_CLUSTERS 0x02
#define AAC_SUPPORTED_WRITE_CACHE 0x04
#define AAC_SUPPORTED_64BIT_DATA 0x08
#define AAC_SUPPORTED_HOST_TIME_FIB 0x10
#define AAC_SUPPORTED_RAID50 0x20
#define AAC_SUPPORTED_4GB_WINDOW 0x40
#define AAC_SUPPORTED_SCSI_UPGRADEABLE 0x80
#define AAC_SUPPORTED_SOFT_ERR_REPORT 0x100
#define AAC_SUPPORTED_NOT_RECONDITION 0x200
#define AAC_SUPPORTED_SGMAP_HOST64 0x400
#define AAC_SUPPORTED_ALARM 0x800
#define AAC_SUPPORTED_NONDASD 0x1000
#define AAC_SUPPORTED_SCSI_MANAGED 0x2000
#define AAC_SUPPORTED_RAID_SCSI_MODE 0x4000
#define AAC_SUPPORTED_SUPPLEMENT_ADAPTER_INFO 0x10000
#define AAC_SUPPORTED_NEW_COMM 0x20000
#define AAC_SUPPORTED_64BIT_ARRAYSIZE 0x40000
#define AAC_SUPPORTED_HEAT_SENSOR 0x80000
#define AAC_SUPPORTED_MU_RESET 0x01
#define AAC_SUPPORTED_IGNORE_RESET 0x02
#define AAC_SUPPORTED_POWER_MANAGEMENT 0x04
#define AAC_SUPPORTED_ARCIO_PHYDEV 0x08
#define AAC_FEATURE_SUPPORTED_JBOD 0x08000000
#pragma pack(1)
struct aac_fib_header {
uint32_t XferState;
uint16_t Command;
uint8_t StructType;
uint8_t Flags;
uint16_t Size;
uint16_t SenderSize;
uint32_t SenderFibAddress;
uint32_t ReceiverFibAddress;
uint32_t SenderData;
int prev;
int next;
};
#define AAC_SENDERADDR_MASK_FAST_RESPONSE 0x01
#define AAC_SENDERADDR_MASK_AIF 0x02
#define AAC_FIB_SIZE 512
#define AAC_FIB_DATASIZE (AAC_FIB_SIZE - sizeof (struct aac_fib_header))
struct aac_fib {
struct aac_fib_header Header;
uint8_t data[AAC_FIB_DATASIZE];
};
#define AAC_FIBSTATE_HOSTOWNED (1<<0)
#define AAC_FIBSTATE_ADAPTEROWNED (1<<1)
#define AAC_FIBSTATE_INITIALISED (1<<2)
#define AAC_FIBSTATE_EMPTY (1<<3)
#define AAC_FIBSTATE_FROMHOST (1<<5)
#define AAC_FIBSTATE_FROMADAP (1<<6)
#define AAC_FIBSTATE_REXPECTED (1<<7)
#define AAC_FIBSTATE_NOREXPECTED (1<<8)
#define AAC_FIBSTATE_DONEADAP (1<<9)
#define AAC_FIBSTATE_DONEHOST (1<<10)
#define AAC_FIBSTATE_NORM (1<<12)
#define AAC_FIBSTATE_ASYNC (1<<13)
#define AAC_FIBSTATE_FAST_RESPONSE (1<<19)
#define AAC_FIBTYPE_TFIB 1
#define TestCommandResponse 1
#define TestAdapterCommand 2
#define LastTestCommand 100
#define ReinitHostNormCommandQueue 101
#define ReinitHostHighCommandQueue 102
#define ReinitHostHighRespQueue 103
#define ReinitHostNormRespQueue 104
#define ReinitAdapNormCommandQueue 105
#define ReinitAdapHighCommandQueue 107
#define ReinitAdapHighRespQueue 108
#define ReinitAdapNormRespQueue 109
#define InterfaceShutdown 110
#define DmaCommandFib 120
#define StartProfile 121
#define TermProfile 122
#define SpeedTest 123
#define TakeABreakPt 124
#define RequestPerfData 125
#define SetInterruptDefTimer 126
#define SetInterruptDefCount 127
#define GetInterruptDefStatus 128
#define LastCommCommand 129
#define NuFileSystem 300
#define UFS 301
#define HostFileSystem 302
#define LastFileSystemCommand 303
#define ContainerCommand 500
#define ContainerCommand64 501
#define RawIo 502
#define ClusterCommand 550
#define ScsiPortCommand 600
#define ScsiPortCommandU64 601
#define AifRequest 700
#define CheckRevision 701
#define FsaHostShutdown 702
#define RequestAdapterInfo 703
#define IsAdapterPaused 704
#define SendHostTime 705
#define RequestSupplementAdapterInfo 706
#define LastMiscCommand 707
#define OnLineDiagnostic 800
#define FduAdapterTest 801
struct FsaRev {
union {
struct {
uint8_t dash;
uint8_t type;
uint8_t minor;
uint8_t major;
} comp;
uint32_t ul;
} external;
uint32_t buildNumber;
};
struct aac_adapter_info {
uint32_t PlatformBase;
uint32_t CpuArchitecture;
uint32_t CpuVariant;
uint32_t ClockSpeed;
uint32_t ExecutionMem;
uint32_t BufferMem;
uint32_t TotalMem;
struct FsaRev KernelRevision;
struct FsaRev MonitorRevision;
struct FsaRev HardwareRevision;
struct FsaRev BIOSRevision;
uint32_t ClusteringEnabled;
uint32_t ClusterChannelMask;
uint64_t SerialNumber;
uint32_t batteryPlatform;
uint32_t SupportedOptions;
uint32_t OemVariant;
};
struct vpd_info {
uint8_t AssemblyPn[8];
uint8_t FruPn[8];
uint8_t BatteryFruPn[8];
uint8_t EcVersionString[8];
uint8_t Tsid[12];
};
#define MFG_PCBA_SERIAL_NUMBER_WIDTH 12
#define MFG_WWN_WIDTH 8
struct aac_supplement_adapter_info {
int8_t AdapterTypeText[17+1];
int8_t Pad[2];
uint32_t FlashMemoryByteSize;
uint32_t FlashImageId;
uint32_t MaxNumberPorts;
uint32_t Version;
uint32_t FeatureBits;
uint8_t SlotNumber;
uint8_t ReservedPad0[3];
uint8_t BuildDate[12];
uint32_t CurrentNumberPorts;
struct vpd_info VpdInfo;
struct FsaRev FlashFirmwareRevision;
uint32_t RaidTypeMorphOptions;
struct FsaRev FlashFirmwareBootRevision;
uint8_t MfgPcbaSerialNo[MFG_PCBA_SERIAL_NUMBER_WIDTH];
uint8_t MfgWWNName[MFG_WWN_WIDTH];
uint32_t SupportedOptions2;
uint32_t ExpansionFlag;
uint32_t FeatureBits3;
uint32_t SupportedPerformanceMode;
uint32_t ReservedGrowth[80];
};
struct aac_container_creation {
uint8_t ViaBuildNumber;
uint8_t MicroSecond;
uint8_t Via;
uint8_t Years;
uint32_t Month:4;
uint32_t Day:6;
uint32_t Hour:6;
uint32_t Minute:6;
uint32_t Second:6;
uint64_t ViaAdapterSerialNumber;
};
struct aac_mntobj {
uint32_t ObjectId;
char FileSystemName[16];
struct aac_container_creation CreateInfo;
uint32_t Capacity;
uint32_t VolType;
uint32_t ObjType;
uint32_t ContentState;
union {
uint32_t pad[8];
} ObjExtension;
uint32_t AlterEgoId;
uint32_t CapacityHigh;
};
struct aac_mntinfo {
uint32_t Command;
uint32_t MntType;
uint32_t MntCount;
};
struct aac_mntinforesp {
uint32_t Status;
uint32_t MntType;
uint32_t MntRespCount;
struct aac_mntobj MntObj;
};
struct aac_bus_info {
uint32_t Command;
uint32_t ObjType;
uint32_t MethodId;
uint32_t ObjectId;
uint32_t CtlCmd;
};
struct aac_bus_info_response {
uint32_t Status;
uint32_t ObjType;
uint32_t MethodId;
uint32_t ObjectId;
uint32_t CtlCmd;
uint32_t ProbeComplete;
uint32_t BusCount;
uint32_t TargetsPerBus;
uint8_t InitiatorBusId[10];
uint8_t BusValid[10];
};
#define CT_FIB_PARAMS 6
#define MAX_FIB_PARAMS 10
#define CT_PACKET_SIZE \
(AAC_FIB_DATASIZE - sizeof (uint32_t) - \
((sizeof (uint32_t)) * (MAX_FIB_PARAMS + 1)))
#define CNT_SIZE 5
typedef enum {
CT_NONE = 0,
CT_VOLUME,
CT_MIRROR,
CT_STRIPE,
CT_RAID5,
CT_SSRW,
CT_SSRO,
CT_MORPH,
CT_PASSTHRU,
CT_RAID4,
CT_RAID10,
CT_RAID00,
CT_VOLUME_OF_MIRRORS,
CT_PSEUDO_RAID3,
CT_RAID50,
CT_RAID5D,
CT_RAID5D0,
CT_RAID1E,
CT_RAID6,
CT_RAID60
} AAC_FSAVolType;
typedef enum {
CT_Null = 0,
CT_GET_SLICE_COUNT,
CT_GET_PARTITION_COUNT,
CT_GET_PARTITION_INFO,
CT_GET_CONTAINER_COUNT,
CT_GET_CONTAINER_INFO_OLD,
CT_WRITE_MBR,
CT_WRITE_PARTITION,
CT_UPDATE_PARTITION,
CT_UNLOAD_CONTAINER,
CT_CONFIG_SINGLE_PRIMARY,
CT_READ_CONFIG_AGE,
CT_WRITE_CONFIG_AGE,
CT_READ_SERIAL_NUMBER,
CT_ZERO_PAR_ENTRY,
CT_READ_MBR,
CT_READ_PARTITION,
CT_DESTROY_CONTAINER,
CT_DESTROY2_CONTAINER,
CT_SLICE_SIZE,
CT_CHECK_CONFLICTS,
CT_MOVE_CONTAINER,
CT_READ_LAST_DRIVE,
CT_WRITE_LAST_DRIVE,
CT_UNMIRROR,
CT_MIRROR_DELAY,
CT_GEN_MIRROR,
CT_GEN_MIRROR2,
CT_TEST_CONTAINER,
CT_MOVE2,
CT_SPLIT,
CT_SPLIT2,
CT_SPLIT_BROKEN,
CT_SPLIT_BROKEN2,
CT_RECONFIG,
CT_BREAK2,
CT_BREAK,
CT_MERGE2,
CT_MERGE,
CT_FORCE_ERROR,
CT_CLEAR_ERROR,
CT_ASSIGN_FAILOVER,
CT_CLEAR_FAILOVER,
CT_GET_FAILOVER_DATA,
CT_VOLUME_ADD,
CT_VOLUME_ADD2,
CT_MIRROR_STATUS,
CT_COPY_STATUS,
CT_COPY,
CT_UNLOCK_CONTAINER,
CT_LOCK_CONTAINER,
CT_MAKE_READ_ONLY,
CT_MAKE_READ_WRITE,
CT_CLEAN_DEAD,
CT_ABORT_MIRROR_COMMAND,
CT_SET,
CT_GET,
CT_GET_NVLOG_ENTRY,
CT_GET_DELAY,
CT_ZERO_CONTAINER_SPACE,
CT_GET_ZERO_STATUS,
CT_SCRUB,
CT_GET_SCRUB_STATUS,
CT_GET_SLICE_INFO,
CT_GET_SCSI_METHOD,
CT_PAUSE_IO,
CT_RELEASE_IO,
CT_SCRUB2,
CT_MCHECK,
CT_CORRUPT,
CT_GET_TASK_COUNT,
CT_PROMOTE,
CT_SET_DEAD,
CT_CONTAINER_OPTIONS,
CT_GET_NV_PARAM,
CT_GET_PARAM,
CT_NV_PARAM_SIZE,
CT_COMMON_PARAM_SIZE,
CT_PLATFORM_PARAM_SIZE,
CT_SET_NV_PARAM,
CT_ABORT_SCRUB,
CT_GET_SCRUB_ERROR,
CT_LABEL_CONTAINER,
CT_CONTINUE_DATA,
CT_STOP_DATA,
CT_GET_PARTITION_TABLE,
CT_GET_DISK_PARTITIONS,
CT_GET_MISC_STATUS,
CT_GET_CONTAINER_PERF_INFO,
CT_GET_TIME,
CT_READ_DATA,
CT_CTR,
CT_CTL,
CT_DRAINIO,
CT_RELEASEIO,
CT_GET_NVRAM,
CT_GET_MEMORY,
CT_PRINT_CT_LOG,
CT_ADD_LEVEL,
CT_NV_ZERO,
CT_READ_SIGNATURE,
CT_THROTTLE_ON,
CT_THROTTLE_OFF,
CT_GET_THROTTLE_STATS,
CT_MAKE_SNAPSHOT,
CT_REMOVE_SNAPSHOT,
CT_WRITE_USER_FLAGS,
CT_READ_USER_FLAGS,
CT_MONITOR,
CT_GEN_MORPH,
CT_GET_SNAPSHOT_INFO,
CT_CACHE_SET,
CT_CACHE_STAT,
CT_TRACE_START,
CT_TRACE_STOP,
CT_TRACE_ENABLE,
CT_TRACE_DISABLE,
CT_FORCE_CORE_DUMP,
CT_SET_SERIAL_NUMBER,
CT_RESET_SERIAL_NUMBER,
CT_ENABLE_RAID5,
CT_CLEAR_VALID_DUMP_FLAG,
CT_GET_MEM_STATS,
CT_GET_CORE_SIZE,
CT_CREATE_CONTAINER_OLD,
CT_STOP_DUMPS,
CT_PANIC_ON_TAKE_A_BREAK,
CT_GET_CACHE_STATS,
CT_MOVE_PARTITION,
CT_FLUSH_CACHE,
CT_READ_NAME,
CT_WRITE_NAME,
CT_TOSS_CACHE,
CT_LOCK_DRAINIO,
CT_CONTAINER_OFFLINE,
CT_SET_CACHE_SIZE,
CT_CLEAN_SHUTDOWN_STATUS,
CT_CLEAR_DISKLOG_ON_DISK,
CT_CLEAR_ALL_DISKLOG,
CT_CACHE_FAVOR,
CT_READ_PASSTHRU_MBR,
CT_SCRUB_NOFIX,
CT_SCRUB2_NOFIX,
CT_FLUSH,
CT_REBUILD,
CT_FLUSH_CONTAINER,
CT_RESTART,
CT_GET_CONFIG_STATUS,
CT_TRACE_FLAG,
CT_RESTART_MORPH,
CT_GET_TRACE_INFO,
CT_GET_TRACE_ITEM,
CT_COMMIT_CONFIG,
CT_CONTAINER_EXISTS,
CT_GET_SLICE_FROM_DEVT,
CT_OPEN_READ_WRITE,
CT_WRITE_MEMORY_BLOCK,
CT_GET_CACHE_PARAMS,
CT_CRAZY_CACHE,
CT_GET_PROFILE_STRUCT,
CT_SET_IO_TRACE_FLAG,
CT_GET_IO_TRACE_STRUCT,
CT_CID_TO_64BITS_UID,
CT_64BITS_UID_TO_CID,
CT_PAR_TO_64BITS_UID,
CT_CID_TO_32BITS_UID,
CT_32BITS_UID_TO_CID,
CT_PAR_TO_32BITS_UID,
CT_SET_FAILOVER_OPTION,
CT_GET_FAILOVER_OPTION,
CT_STRIPE_ADD2,
CT_CREATE_VOLUME_SET,
CT_CREATE_STRIPE_SET,
CT_VERIFY_CONTAINER,
CT_IS_CONTAINER_DEAD,
CT_GET_CONTAINER_OPTION,
CT_GET_SNAPSHOT_UNUSED_STRUCT,
CT_CLEAR_SNAPSHOT_UNUSED_STRUCT,
CT_GET_CONTAINER_INFO,
CT_CREATE_CONTAINER,
CT_CHANGE_CREATIONINFO,
CT_CHECK_CONFLICT_UID,
CT_CONTAINER_UID_CHECK,
CT_IS_CONTAINER_MEATADATA_STANDARD,
CT_IS_SLICE_METADATA_STANDARD,
CT_GET_IMPORT_COUNT,
CT_CANCEL_ALL_IMPORTS,
CT_GET_IMPORT_INFO,
CT_IMPORT_ARRAY,
CT_GET_LOG_SIZE,
CT_ALARM_GET_STATE,
CT_ALARM_SET_STATE,
CT_ALARM_ON_OFF,
CT_GET_EE_OEM_ID,
CT_GET_PPI_HEADERS,
CT_GET_PPI_DATA,
CT_GET_PPI_ENTRIES,
CT_DELETE_PPI_BUNDLE,
CT_GET_PARTITION_TABLE_2,
CT_GET_PARTITION_INFO_2,
CT_GET_DISK_PARTITIONS_2,
CT_QUIESCE_ADAPTER,
CT_CLEAR_PPI_TABLE,
CT_SET_DEVICE_CACHE_POLICY,
CT_GET_DEVICE_CACHE_POLICY,
CT_SET_VERIFY_DELAY,
CT_GET_VERIFY_DELAY,
CT_DELETE_PPI_BUNDLES_FOR_DEVT,
CT_READ_SW_SECTOR,
CT_WRITE_SW_SECTOR,
CT_GET_CACHE_SYNC_INFO,
CT_SET_CACHE_SYNC_MODE,
CT_PM_DRIVER_SUPPORT,
CT_PM_CONFIGURATION,
CT_LAST_COMMAND
} AAC_CTCommand;
#define CT_OK 218
typedef enum {
AAC_PM_DRIVERSUP_GET_STATUS = 1,
AAC_PM_DRIVERSUP_START_UNIT,
AAC_PM_DRIVERSUP_STOP_UNIT
} AAC_CT_PM_DRIVER_SUPPORT_SUB_COM;
struct aac_fsa_ctm {
uint32_t command;
uint32_t param[CT_FIB_PARAMS];
int8_t data[CT_PACKET_SIZE];
};
struct aac_Container {
uint32_t Command;
struct aac_fsa_ctm CTCommand;
};
struct aac_fsa_ctr {
uint32_t response;
uint32_t param[CT_FIB_PARAMS];
int8_t data[CT_PACKET_SIZE];
};
struct aac_Container_resp {
uint32_t Status;
struct aac_fsa_ctr CTResponse;
};
struct aac_cf_status_header {
uint32_t action;
uint16_t flags;
int16_t recordcount;
};
enum aac_cf_action_type {
CFACT_CONTINUE = 0,
CFACT_PAUSE,
CFACT_ABORT
};
enum aac_mpe {
AACMPE_OK = 0x0,
AACMPE_GET_CONFIG_STATUS = 0x1,
AACMPE_CONFIG_STATUS = 0x2,
AACMPE_COMMIT_CONFIG = 0x3
};
struct aac_pause_command {
uint32_t Command;
uint32_t Type;
uint32_t Timeout;
uint32_t Min;
uint32_t NoRescan;
uint32_t Parm3;
uint32_t Parm4;
uint32_t Count;
};
struct aac_synchronize_command {
uint32_t Command;
uint32_t Type;
uint32_t Cid;
uint32_t Parm1;
uint32_t Parm2;
uint32_t Parm3;
uint32_t Parm4;
uint32_t Count;
};
struct aac_synchronize_reply {
uint32_t Dummy0;
uint32_t Dummy1;
uint32_t Status;
uint32_t Parm1;
uint32_t Parm2;
uint32_t Parm3;
uint32_t Parm4;
uint32_t Parm5;
uint8_t Data[16];
};
typedef enum {
ST_OK = 0,
ST_PERM = 1,
ST_NOENT = 2,
ST_IO = 5,
ST_NXIO = 6,
ST_E2BIG = 7,
ST_ACCES = 13,
ST_EXIST = 17,
ST_XDEV = 18,
ST_NODEV = 19,
ST_NOTDIR = 20,
ST_ISDIR = 21,
ST_INVAL = 22,
ST_FBIG = 27,
ST_NOSPC = 28,
ST_ROFS = 30,
ST_MLINK = 31,
ST_WOULDBLOCK = 35,
ST_NAMETOOLONG = 63,
ST_NOTEMPTY = 66,
ST_DQUOT = 69,
ST_STALE = 70,
ST_REMOTE = 71,
ST_BADHANDLE = 10001,
ST_NOT_SYNC = 10002,
ST_BAD_COOKIE = 10003,
ST_NOTSUPP = 10004,
ST_TOOSMALL = 10005,
ST_SERVERFAULT = 10006,
ST_BADTYPE = 10007,
ST_JUKEBOX = 10008,
ST_NOTMOUNTED = 10009,
ST_MAINTMODE = 10010,
ST_STALEACL = 10011
} AAC_FSAStatus;
typedef enum {
VM_Null = 0,
VM_NameServe,
VM_ContainerConfig,
VM_Ioctl,
VM_FilesystemIoctl,
VM_CloseAll,
VM_CtBlockRead,
VM_CtBlockWrite,
VM_SliceBlockRead,
VM_SliceBlockWrite,
VM_DriveBlockRead,
VM_DriveBlockWrite,
VM_EnclosureMgt,
VM_Unused,
VM_CtBlockVerify,
VM_CtPerf,
VM_CtBlockRead64,
VM_CtBlockWrite64,
VM_CtBlockVerify64,
VM_CtHostRead64,
VM_CtHostWrite64,
VM_NameServe64 = 22,
MAX_VMCOMMAND_NUM
} AAC_VMCommand;
typedef enum {
FT_REG = 1,
FT_DIR,
FT_BLK,
FT_CHR,
FT_LNK,
FT_SOCK,
FT_FIFO,
FT_FILESYS,
FT_DRIVE,
FT_SLICE,
FT_PARTITION,
FT_VOLUME,
FT_STRIPE,
FT_MIRROR,
FT_RAID5,
FT_DATABASE
} AAC_FType;
struct aac_sg_entry {
uint32_t SgAddress;
uint32_t SgByteCount;
};
struct aac_sg_entry64 {
uint64_t SgAddress;
uint32_t SgByteCount;
};
struct aac_sg_entryraw {
uint32_t Next;
uint32_t Prev;
uint64_t SgAddress;
uint32_t SgByteCount;
uint32_t Flags;
};
struct aac_sg_table {
uint32_t SgCount;
struct aac_sg_entry SgEntry[1];
};
struct aac_sg_table64 {
uint32_t SgCount;
struct aac_sg_entry64 SgEntry64[1];
};
struct aac_sg_tableraw {
uint32_t SgCount;
struct aac_sg_entryraw SgEntryRaw[1];
};
struct aac_blockread {
uint32_t Command;
uint32_t ContainerId;
uint32_t BlockNumber;
uint32_t ByteCount;
struct aac_sg_table SgMap;
};
struct aac_blockread64 {
uint32_t Command;
uint16_t ContainerId;
uint16_t SectorCount;
uint32_t BlockNumber;
uint16_t Pad;
uint16_t Flags;
struct aac_sg_table64 SgMap64;
};
struct aac_blockread_response {
uint32_t Status;
uint32_t ByteCount;
};
struct aac_blockwrite {
uint32_t Command;
uint32_t ContainerId;
uint32_t BlockNumber;
uint32_t ByteCount;
uint32_t Stable;
struct aac_sg_table SgMap;
};
struct aac_blockwrite64 {
uint32_t Command;
uint16_t ContainerId;
uint16_t SectorCount;
uint32_t BlockNumber;
uint16_t Pad;
uint16_t Flags;
struct aac_sg_table64 SgMap64;
};
struct aac_blockwrite_response {
uint32_t Status;
uint32_t ByteCount;
uint32_t Committed;
};
struct aac_raw_io {
uint64_t BlockNumber;
uint32_t ByteCount;
uint16_t ContainerId;
uint16_t Flags;
uint16_t BpTotal;
uint16_t BpComplete;
struct aac_sg_tableraw SgMapRaw;
};
struct aac_close_command {
uint32_t Command;
uint32_t ContainerId;
};
struct aac_ctcfg {
uint32_t Command;
uint32_t cmd;
uint32_t param;
};
struct aac_ctcfg_resp {
uint32_t Status;
uint32_t resp;
uint32_t param;
};
#define CSTABLE 1
#define CUNSTABLE 2
#define AAC_ADAPTER_FIBS 8
#define AAC_HOST_FIBS 256
#define AAC_ADAPTER_PRINT_BUFSIZE 256
#define AAC_INIT_STRUCT_REVISION 3
#define AAC_INIT_STRUCT_REVISION_4 4
#define AAC_INIT_STRUCT_MINIPORT_REVISION 1
#define AAC_INIT_FLAGS_NEW_COMM_SUPPORTED 1
#define AAC_INIT_FLAGS_DRIVER_USES_UTC_TIME 0x10
#define AAC_INIT_FLAGS_DRIVER_SUPPORTS_PM 0x20
#define AAC_PAGE_SIZE 4096
struct aac_adapter_init {
uint32_t InitStructRevision;
uint32_t MiniPortRevision;
uint32_t FilesystemRevision;
uint32_t CommHeaderAddress;
uint32_t FastIoCommAreaAddress;
uint32_t AdapterFibsPhysicalAddress;
uint32_t AdapterFibsVirtualAddress;
uint32_t AdapterFibsSize;
uint32_t AdapterFibAlign;
uint32_t PrintfBufferAddress;
uint32_t PrintfBufferSize;
uint32_t HostPhysMemPages;
uint32_t HostElapsedSeconds;
uint32_t InitFlags;
uint32_t MaxIoCommands;
uint32_t MaxIoSize;
uint32_t MaxFibSize;
};
#define AAC_QUEUE_ALIGN 16
#define AAC_QUEUE_COUNT 8
#define AAC_PRODUCER_INDEX 0
#define AAC_CONSUMER_INDEX 1
struct aac_queue_entry {
uint32_t aq_fib_size;
uint32_t aq_fib_addr;
};
#define AAC_HOST_NORM_CMD_Q 0
#define AAC_HOST_HIGH_CMD_Q 1
#define AAC_ADAP_NORM_CMD_Q 2
#define AAC_ADAP_HIGH_CMD_Q 3
#define AAC_HOST_NORM_RESP_Q 4
#define AAC_HOST_HIGH_RESP_Q 5
#define AAC_ADAP_NORM_RESP_Q 6
#define AAC_ADAP_HIGH_RESP_Q 7
#define AAC_HOST_NORM_CMD_ENTRIES 8
#define AAC_HOST_HIGH_CMD_ENTRIES 4
#define AAC_ADAP_NORM_CMD_ENTRIES 512
#define AAC_ADAP_HIGH_CMD_ENTRIES 4
#define AAC_HOST_NORM_RESP_ENTRIES 512
#define AAC_HOST_HIGH_RESP_ENTRIES 4
#define AAC_ADAP_NORM_RESP_ENTRIES 8
#define AAC_ADAP_HIGH_RESP_ENTRIES 4
#define AAC_TOTALQ_LENGTH (AAC_HOST_HIGH_CMD_ENTRIES + \
AAC_HOST_NORM_CMD_ENTRIES + \
AAC_ADAP_HIGH_CMD_ENTRIES + \
AAC_ADAP_NORM_CMD_ENTRIES + \
AAC_HOST_HIGH_RESP_ENTRIES + \
AAC_HOST_NORM_RESP_ENTRIES + \
AAC_ADAP_HIGH_RESP_ENTRIES + \
AAC_ADAP_NORM_RESP_ENTRIES)
struct aac_queue_table {
uint32_t qt_qindex[AAC_QUEUE_COUNT][2];
struct aac_queue_entry qt_HostNormCmdQueue \
[AAC_HOST_NORM_CMD_ENTRIES];
struct aac_queue_entry qt_HostHighCmdQueue \
[AAC_HOST_HIGH_CMD_ENTRIES];
struct aac_queue_entry qt_AdapNormCmdQueue \
[AAC_ADAP_NORM_CMD_ENTRIES];
struct aac_queue_entry qt_AdapHighCmdQueue \
[AAC_ADAP_HIGH_CMD_ENTRIES];
struct aac_queue_entry qt_HostNormRespQueue \
[AAC_HOST_NORM_RESP_ENTRIES];
struct aac_queue_entry qt_HostHighRespQueue \
[AAC_HOST_HIGH_RESP_ENTRIES];
struct aac_queue_entry qt_AdapNormRespQueue \
[AAC_ADAP_NORM_RESP_ENTRIES];
struct aac_queue_entry qt_AdapHighRespQueue \
[AAC_ADAP_HIGH_RESP_ENTRIES];
};
typedef enum {
NVBATTSTATUS_NONE = 0,
NVBATTSTATUS_LOW,
NVBATTSTATUS_OK,
NVBATTSTATUS_RECONDITIONING
} AAC_NVBATTSTATUS;
typedef enum {
NVBATT_TRANSITION_NONE = 0,
NVBATT_TRANSITION_LOW,
NVBATT_TRANSITION_OK
} AAC_NVBATT_TRANSITION;
typedef enum {
AifJobStsSuccess = 1,
AifJobStsFinished,
AifJobStsAborted,
AifJobStsFailed,
AifJobStsLastReportMarker = 100,
AifJobStsSuspended,
AifJobStsRunning
} AAC_AifJobStatus;
typedef enum {
AifJobScsiMin = 1,
AifJobScsiZero,
AifJobScsiVerify,
AifJobScsiExercise,
AifJobScsiVerifyRepair,
AifJobScsiWritePattern,
AifJobScsiMax = 99,
AifJobCtrMin,
AifJobCtrZero,
AifJobCtrCopy,
AifJobCtrCreateMirror,
AifJobCtrMergeMirror,
AifJobCtrScrubMirror,
AifJobCtrRebuildRaid5,
AifJobCtrScrubRaid5,
AifJobCtrMorph,
AifJobCtrPartCopy,
AifJobCtrRebuildMirror,
AifJobCtrCrazyCache,
AifJobCtrCopyback,
AifJobCtrCompactRaid5D,
AifJobCtrExpandRaid5D,
AifJobCtrRebuildRaid6,
AifJobCtrScrubRaid6,
AifJobCtrSSBackup,
AifJobCtrMax = 199,
AifJobFsMin,
AifJobFsCreate,
AifJobFsVerify,
AifJobFsExtend,
AifJobFsMax = 299,
AifJobApiFormatNTFS,
AifJobApiFormatFAT,
AifJobApiUpdateSnapshot,
AifJobApiFormatFAT32,
AifJobApiMax = 399,
AifJobCtlContinuousCtrVerify,
AifJobCtlMax = 499
} AAC_AifJobType;
struct aac_AifContainers {
uint32_t src;
uint32_t dst;
};
union aac_AifJobClient {
struct aac_AifContainers container;
int32_t scsi_dh;
};
struct aac_AifJobDesc {
uint32_t jobID;
AAC_AifJobType type;
union aac_AifJobClient client;
};
struct aac_AifJobProgressReport {
struct aac_AifJobDesc jd;
AAC_AifJobStatus status;
uint32_t finalTick;
uint32_t currentTick;
uint32_t jobSpecificData1;
uint32_t jobSpecificData2;
};
typedef enum {
AifEnGeneric = 1,
AifEnTaskComplete,
AifEnConfigChange,
AifEnContainerChange,
AifEnDeviceFailure,
AifEnMirrorFailover,
AifEnContainerEvent,
AifEnFileSystemChange,
AifEnConfigPause,
AifEnConfigResume,
AifEnFailoverChange,
AifEnRAID5RebuildDone,
AifEnEnclosureManagement,
AifEnBatteryEvent,
AifEnAddContainer,
AifEnDeleteContainer,
AifEnSMARTEvent,
AifEnBatteryNeedsRecond,
AifEnClusterEvent,
AifEnDiskSetEvent,
AifEnAddJBOD = 30,
AifEnDeleteJBOD = 31,
AifDriverNotifyStart = 199,
AifDenMorphComplete,
AifDenVolumeExtendComplete
} AAC_AifEventNotifyType;
struct aac_AifEnsGeneric {
char text[132];
};
struct aac_AifEnsDeviceFailure {
uint32_t deviceHandle;
};
struct aac_AifEnsMirrorFailover {
uint32_t container;
uint32_t failedSlice;
uint32_t creatingSlice;
};
struct aac_AifEnsContainerChange {
uint32_t container[2];
};
struct aac_AifEnsContainerEvent {
uint32_t container;
uint32_t eventType;
};
struct aac_AifEnsEnclosureEvent {
uint32_t empID;
uint32_t unitID;
uint32_t eventType;
};
struct aac_AifEnsBatteryEvent {
AAC_NVBATT_TRANSITION transition_type;
AAC_NVBATTSTATUS current_state;
AAC_NVBATTSTATUS prior_state;
};
struct aac_AifEnsDiskSetEvent {
uint32_t eventType;
uint64_t DsNum;
uint64_t CreatorId;
};
typedef enum {
CLUSTER_NULL_EVENT = 0,
CLUSTER_PARTNER_NAME_EVENT,
CLUSTER_PARTNER_NULL_NAME_EVENT
} AAC_ClusterAifEvent;
struct aac_AifEnsClusterEvent {
AAC_ClusterAifEvent eventType;
};
struct aac_AifEventNotify {
AAC_AifEventNotifyType type;
union {
struct aac_AifEnsGeneric EG;
struct aac_AifEnsDeviceFailure EDF;
struct aac_AifEnsMirrorFailover EMF;
struct aac_AifEnsContainerChange ECC;
struct aac_AifEnsContainerEvent ECE;
struct aac_AifEnsEnclosureEvent EEE;
struct aac_AifEnsBatteryEvent EBE;
struct aac_AifEnsDiskSetEvent EDS;
struct aac_AifEnsClusterEvent ECLE;
} data;
};
#define AAC_AIF_REPORT_MAX_SIZE 64
typedef enum {
AifCmdEventNotify = 1,
AifCmdJobProgress,
AifCmdAPIReport,
AifCmdDriverNotify,
AifReqJobList = 100,
AifReqJobsForCtr,
AifReqJobsForScsi,
AifReqJobReport,
AifReqTerminateJob,
AifReqSuspendJob,
AifReqResumeJob,
AifReqSendAPIReport,
AifReqAPIJobStart,
AifReqAPIJobUpdate,
AifReqAPIJobFinish
} AAC_AifCommand;
struct aac_aif_command {
AAC_AifCommand command;
uint32_t seqNumber;
union {
struct aac_AifEventNotify EN;
struct aac_AifJobProgressReport PR[1];
uint8_t AR[AAC_AIF_REPORT_MAX_SIZE];
uint8_t data[AAC_FIB_DATASIZE - 8];
} data;
};
#define CT_PUP_MISSING_DRIVE 27
typedef enum {
CL_NULL = 0,
DS_INIT = 1,
DS_RESCAN,
DS_CREATE,
DS_DELETE,
DS_ADD_DISK,
DS_REMOVE_DISK,
DS_MOVE_DISK,
DS_TAKE_OWNERSHIP,
DS_RELEASE_OWNERSHIP,
DS_FORCE_OWNERSHIP,
DS_GET_DISK_SET_PARAM,
DS_GET_DRIVE_PARAM,
DS_GET_SLICE_PARAM,
DS_GET_DISK_SETS,
DS_GET_DRIVES,
DS_SET_DISK_SET_PARAM,
DS_ONLINE,
DS_OFFLINE,
DS_ONLINE_CONTAINERS,
DS_FSAPRINT,
CL_CFG_SET_HOST_IDS = 0x100,
CL_CFG_SET_PARTNER_HOST_IDS,
CL_CFG_GET_CLUSTER_CONFIG,
CC_CLI_CLEAR_MESSAGE_BUFFER = 0x200,
CC_SRV_CLEAR_MESSAGE_BUFFER,
CC_CLI_SHOW_MESSAGE_BUFFER,
CC_SRV_SHOW_MESSAGE_BUFFER,
CC_CLI_SEND_MESSAGE,
CC_SRV_SEND_MESSAGE,
CC_CLI_GET_MESSAGE,
CC_SRV_GET_MESSAGE,
CC_SEND_TEST_MESSAGE,
CC_GET_BUSINFO,
CC_GET_PORTINFO,
CC_GET_NAMEINFO,
CC_GET_CONFIGINFO,
CQ_QUORUM_OP = 0x300,
CL_LAST_COMMAND
} AAC_CLCommand;
#define Reserved_IOCTL 0x0000
#define GetDeviceHandle 0x0001
#define BusTargetLun_to_DeviceHandle 0x0002
#define DeviceHandle_to_BusTargetLun 0x0003
#define RescanBus 0x0004
#define GetDeviceProbeInfo 0x0005
#define GetDeviceCapacity 0x0006
#define GetContainerProbeInfo 0x0007
#define GetRequestedMemorySize 0x0008
#define GetBusInfo 0x0009
#define GetVendorSpecific 0x000a
#define EnhancedGetDeviceProbeInfo 0x000b
#define EnhancedGetBusInfo 0x000c
#define SetupExtendedCounters 0x000d
#define GetPerformanceCounters 0x000f
#define ResetPerformanceCounters 0x0010
#define ReadModePage 0x0011
#define WriteModePage 0x0012
#define ReadDriveParameter 0x0013
#define WriteDriveParameter 0x0014
#define ResetAdapter 0x0015
#define ResetBus 0x0016
#define ResetBusDevice 0x0017
#define ExecuteSrb 0x0018
#define Create_IO_Task 0x0030
#define Delete_IO_Task 0x0031
#define Get_IO_Task_Info 0x0032
#define Check_Task_Progress 0x0033
#define InjectError 0x0040
#define GetDeviceDefectCounts 0x0041
#define GetDeviceDefectInfo 0x0042
#define GetDeviceStatus 0x0043
#define ClearDeviceStatus 0x0044
#define DiskSpinControl 0x0045
#define DiskSmartControl 0x0046
#define WriteSame 0x0047
#define ReadWriteLong 0x0048
#define FormatUnit 0x0049
#define TargetDeviceControl 0x0050
#define TargetChannelControl 0x0051
#define FlashNewCode 0x0052
#define DiskCheck 0x0053
#define RequestSense 0x0054
#define DiskPERControl 0x0055
#define Read10 0x0056
#define Write10 0x0057
struct aac_srb
{
uint32_t function;
uint32_t channel;
uint32_t id;
uint32_t lun;
uint32_t timeout;
uint32_t flags;
uint32_t count;
uint32_t retry_limit;
uint32_t cdb_size;
uint8_t cdb[16];
struct aac_sg_table sg;
};
#define AAC_SENSE_BUFFERSIZE 30
struct aac_srb_reply
{
uint32_t status;
uint32_t srb_status;
uint32_t scsi_status;
uint32_t data_xfer_length;
uint32_t sense_data_size;
uint8_t sense_data[AAC_SENSE_BUFFERSIZE];
};
#define SRB_NoDataXfer 0x0000
#define SRB_DisableDisconnect 0x0004
#define SRB_DisableSynchTransfer 0x0008
#define SRB_BypassFrozenQueue 0x0010
#define SRB_DisableAutosense 0x0020
#define SRB_DataIn 0x0040
#define SRB_DataOut 0x0080
#define SRBF_ExecuteScsi 0x0000
#define SRBF_ClaimDevice 0x0001
#define SRBF_IO_Control 0x0002
#define SRBF_ReceiveEvent 0x0003
#define SRBF_ReleaseQueue 0x0004
#define SRBF_AttachDevice 0x0005
#define SRBF_ReleaseDevice 0x0006
#define SRBF_Shutdown 0x0007
#define SRBF_Flush 0x0008
#define SRBF_AbortCommand 0x0010
#define SRBF_ReleaseRecovery 0x0011
#define SRBF_ResetBus 0x0012
#define SRBF_ResetDevice 0x0013
#define SRBF_TerminateIO 0x0014
#define SRBF_FlushQueue 0x0015
#define SRBF_RemoveDevice 0x0016
#define SRBF_DomainValidation 0x0017
#define SRB_STATUS_PENDING 0x00
#define SRB_STATUS_SUCCESS 0x01
#define SRB_STATUS_ABORTED 0x02
#define SRB_STATUS_ABORT_FAILED 0x03
#define SRB_STATUS_ERROR 0x04
#define SRB_STATUS_BUSY 0x05
#define SRB_STATUS_INVALID_REQUEST 0x06
#define SRB_STATUS_INVALID_PATH_ID 0x07
#define SRB_STATUS_NO_DEVICE 0x08
#define SRB_STATUS_TIMEOUT 0x09
#define SRB_STATUS_SELECTION_TIMEOUT 0x0A
#define SRB_STATUS_COMMAND_TIMEOUT 0x0B
#define SRB_STATUS_MESSAGE_REJECTED 0x0D
#define SRB_STATUS_BUS_RESET 0x0E
#define SRB_STATUS_PARITY_ERROR 0x0F
#define SRB_STATUS_REQUEST_SENSE_FAILED 0x10
#define SRB_STATUS_NO_HBA 0x11
#define SRB_STATUS_DATA_OVERRUN 0x12
#define SRB_STATUS_UNEXPECTED_BUS_FREE 0x13
#define SRB_STATUS_PHASE_SEQUENCE_FAILURE 0x14
#define SRB_STATUS_BAD_SRB_BLOCK_LENGTH 0x15
#define SRB_STATUS_REQUEST_FLUSHED 0x16
#define SRB_STATUS_DELAYED_RETRY 0x17
#define SRB_STATUS_INVALID_LUN 0x20
#define SRB_STATUS_INVALID_TARGET_ID 0x21
#define SRB_STATUS_BAD_FUNCTION 0x22
#define SRB_STATUS_ERROR_RECOVERY 0x23
#define SRB_STATUS_NOT_STARTED 0x24
#define SRB_STATUS_NOT_IN_USE 0x30
#define SRB_STATUS_FORCE_ABORT 0x31
#define SRB_STATUS_DOMAIN_VALIDATION_FAIL 0x32
#pragma pack()
union aac_fib_align {
struct aac_fib d;
uint32_t dumb;
};
struct aac_comm_space {
struct aac_fib adapter_fibs[AAC_ADAPTER_FIBS];
struct aac_adapter_init init_data;
struct aac_queue_table qtable;
char qt_align_pad[AAC_QUEUE_ALIGN];
char adapter_print_buf[AAC_ADAPTER_PRINT_BUFSIZE];
};
#ifdef __cplusplus
}
#endif
#endif