10Sstevel@tonic-gate /* 2*6932Sjw219769 * Copyright 2008 Sun Microsystems, Inc. All rights reserved. 30Sstevel@tonic-gate * Use is subject to license terms. 40Sstevel@tonic-gate */ 50Sstevel@tonic-gate 60Sstevel@tonic-gate #ifndef _SYS_MPI_IOC_H 70Sstevel@tonic-gate #define _SYS_MPI_IOC_H 80Sstevel@tonic-gate 90Sstevel@tonic-gate #pragma ident "%Z%%M% %I% %E% SMI" 100Sstevel@tonic-gate 110Sstevel@tonic-gate #ifdef __cplusplus 120Sstevel@tonic-gate extern "C" { 130Sstevel@tonic-gate #endif 140Sstevel@tonic-gate 150Sstevel@tonic-gate /* 160Sstevel@tonic-gate * IOCInit message 170Sstevel@tonic-gate */ 180Sstevel@tonic-gate typedef struct msg_ioc_init { 190Sstevel@tonic-gate uint8_t WhoInit; 200Sstevel@tonic-gate uint8_t Reserved; 210Sstevel@tonic-gate uint8_t ChainOffset; 220Sstevel@tonic-gate uint8_t Function; 230Sstevel@tonic-gate uint8_t Flags; 240Sstevel@tonic-gate uint8_t MaxDevices; 250Sstevel@tonic-gate uint8_t MaxBuses; 260Sstevel@tonic-gate uint8_t MsgFlags; 270Sstevel@tonic-gate uint32_t MsgContext; 280Sstevel@tonic-gate uint16_t ReplyFrameSize; 290Sstevel@tonic-gate uint8_t Reserved1[2]; 300Sstevel@tonic-gate uint32_t HostMfaHighAddr; 310Sstevel@tonic-gate uint32_t SenseBufferHighAddr; 320Sstevel@tonic-gate /* following used in new mpi implementations */ 330Sstevel@tonic-gate uint32_t ReplyFifoHostSignalingAddr; 340Sstevel@tonic-gate sge_simple_union_t HostPageBufferSGE; 350Sstevel@tonic-gate uint16_t MsgVersion; 360Sstevel@tonic-gate uint16_t HeaderVersion; 370Sstevel@tonic-gate } msg_ioc_init_t; 380Sstevel@tonic-gate 390Sstevel@tonic-gate typedef struct msg_ioc_init_reply { 400Sstevel@tonic-gate uint8_t WhoInit; 410Sstevel@tonic-gate uint8_t Reserved; 420Sstevel@tonic-gate uint8_t MsgLength; 430Sstevel@tonic-gate uint8_t Function; 440Sstevel@tonic-gate uint8_t Flags; 450Sstevel@tonic-gate uint8_t MaxDevices; 460Sstevel@tonic-gate uint8_t MaxBuses; 470Sstevel@tonic-gate uint8_t MsgFlags; 480Sstevel@tonic-gate uint32_t MsgContext; 490Sstevel@tonic-gate uint16_t Reserved2; 500Sstevel@tonic-gate uint16_t IOCStatus; 510Sstevel@tonic-gate uint32_t IOCLogInfo; 520Sstevel@tonic-gate } msg_ioc_init_reply_t; 530Sstevel@tonic-gate 540Sstevel@tonic-gate /* 550Sstevel@tonic-gate * WhoInit values 560Sstevel@tonic-gate */ 570Sstevel@tonic-gate #define MPI_WHOINIT_NO_ONE 0x00 580Sstevel@tonic-gate #define MPI_WHOINIT_SYSTEM_BIOS 0x01 590Sstevel@tonic-gate #define MPI_WHOINIT_ROM_BIOS 0x02 600Sstevel@tonic-gate #define MPI_WHOINIT_PCI_PEER 0x03 610Sstevel@tonic-gate #define MPI_WHOINIT_HOST_DRIVER 0x04 620Sstevel@tonic-gate #define MPI_WHOINIT_MANUFACTURER 0x05 630Sstevel@tonic-gate 640Sstevel@tonic-gate /* 650Sstevel@tonic-gate * Flags values 660Sstevel@tonic-gate */ 670Sstevel@tonic-gate #define MPI_IOCINIT_FLAGS_DISCARD_FW_IMAGE 0x01 680Sstevel@tonic-gate #define MPI_IOCINIT_FLAGS_REPLY_FIFO_HOST_SIGNAL 0x02 690Sstevel@tonic-gate 700Sstevel@tonic-gate #define MPI_IOCINIT_MSGVERSION_MAJOR_MASK (0xFF00) 710Sstevel@tonic-gate #define MPI_IOCINIT_MSGVERSION_MAJOR_SHIFT (8) 720Sstevel@tonic-gate #define MPI_IOCINIT_MSGVERSION_MINOR_MASK (0x00FF) 730Sstevel@tonic-gate #define MPI_IOCINIT_MSGVERSION_MINOR_SHIFT (0) 740Sstevel@tonic-gate 750Sstevel@tonic-gate #define MPI_IOCINIT_HEADERVERSION_UNIT_MASK (0xFF00) 760Sstevel@tonic-gate #define MPI_IOCINIT_HEADERVERSION_UNIT_SHIFT (8) 770Sstevel@tonic-gate #define MPI_IOCINIT_HEADERVERSION_DEV_MASK (0x00FF) 780Sstevel@tonic-gate #define MPI_IOCINIT_HEADERVERSION_DEV_SHIFT (0) 790Sstevel@tonic-gate 800Sstevel@tonic-gate 810Sstevel@tonic-gate /* 820Sstevel@tonic-gate * IOC Facts message 830Sstevel@tonic-gate */ 840Sstevel@tonic-gate typedef struct msg_ioc_facts { 850Sstevel@tonic-gate uint8_t Reserved[2]; 860Sstevel@tonic-gate uint8_t ChainOffset; 870Sstevel@tonic-gate uint8_t Function; 880Sstevel@tonic-gate uint8_t Reserved1[3]; 890Sstevel@tonic-gate uint8_t MsgFlags; 900Sstevel@tonic-gate uint32_t MsgContext; 910Sstevel@tonic-gate } msg_ioc_facts_t; 920Sstevel@tonic-gate 930Sstevel@tonic-gate /* 940Sstevel@tonic-gate * FW version 950Sstevel@tonic-gate */ 960Sstevel@tonic-gate typedef struct mpi_fw_version_struct { 970Sstevel@tonic-gate uint8_t Dev; 980Sstevel@tonic-gate uint8_t Unit; 990Sstevel@tonic-gate uint8_t Minor; 1000Sstevel@tonic-gate uint8_t Major; 1010Sstevel@tonic-gate } mpi_fw_version_struct_t; 1020Sstevel@tonic-gate 1030Sstevel@tonic-gate typedef union mpi_fw_version { 1040Sstevel@tonic-gate mpi_fw_version_struct_t Struct; 1050Sstevel@tonic-gate uint32_t Word; 1060Sstevel@tonic-gate } mpi_fw_version_t; 1070Sstevel@tonic-gate 1080Sstevel@tonic-gate /* 1090Sstevel@tonic-gate * IOC Facts Reply 1100Sstevel@tonic-gate */ 1110Sstevel@tonic-gate typedef struct msg_ioc_facts_reply { 1120Sstevel@tonic-gate uint16_t MsgVersion; 1130Sstevel@tonic-gate uint8_t MsgLength; 1140Sstevel@tonic-gate uint8_t Function; 1150Sstevel@tonic-gate uint16_t HeaderVersion; 1160Sstevel@tonic-gate uint8_t IOCNumber; 1170Sstevel@tonic-gate uint8_t MsgFlags; 1180Sstevel@tonic-gate uint32_t MsgContext; 1190Sstevel@tonic-gate uint16_t IOCExceptions; 1200Sstevel@tonic-gate uint16_t IOCStatus; 1210Sstevel@tonic-gate uint32_t IOCLogInfo; 1220Sstevel@tonic-gate uint8_t MaxChainDepth; 1230Sstevel@tonic-gate uint8_t WhoInit; 1240Sstevel@tonic-gate uint8_t BlockSize; 1250Sstevel@tonic-gate uint8_t Flags; 1260Sstevel@tonic-gate uint16_t ReplyQueueDepth; 1270Sstevel@tonic-gate uint16_t RequestFrameSize; 1280Sstevel@tonic-gate uint16_t Reserved_0101_FWVersion; /* obsolete */ 1290Sstevel@tonic-gate uint16_t ProductID; 1300Sstevel@tonic-gate uint32_t CurrentHostMfaHighAddr; 1310Sstevel@tonic-gate uint16_t GlobalCredits; 1320Sstevel@tonic-gate uint8_t NumberOfPorts; 1330Sstevel@tonic-gate uint8_t EventState; 1340Sstevel@tonic-gate uint32_t CurrentSenseBufferHighAddr; 1350Sstevel@tonic-gate uint16_t CurReplyFrameSize; 1360Sstevel@tonic-gate uint8_t MaxDevices; 1370Sstevel@tonic-gate uint8_t MaxBuses; 1380Sstevel@tonic-gate uint32_t FWImageSize; 1390Sstevel@tonic-gate uint32_t IOCCapabilities; 1400Sstevel@tonic-gate mpi_fw_version_t FWVersion; 1410Sstevel@tonic-gate /* following used in newer mpi implementations */ 1420Sstevel@tonic-gate uint16_t HighPriorityQueueDepth; 1430Sstevel@tonic-gate uint16_t Reserved2; 1440Sstevel@tonic-gate sge_simple_union_t HostPageBufferSGE; 1450Sstevel@tonic-gate } msg_ioc_facts_reply_t; 1460Sstevel@tonic-gate 1470Sstevel@tonic-gate #define MPI_IOCFACTS_MSGVERSION_MAJOR_MASK 0xFF00 1480Sstevel@tonic-gate #define MPI_IOCFACTS_MSGVERSION_MINOR_MASK 0x00FF 1490Sstevel@tonic-gate 1500Sstevel@tonic-gate #define MPI_IOCFACTS_HEADERVERSION_UNIT_MASK 0xFF00 1510Sstevel@tonic-gate #define MPI_IOCFACTS_HEADERVERSION_DEV_MASK 0x00FF 1520Sstevel@tonic-gate 1530Sstevel@tonic-gate #define MPI_IOCFACTS_EXCEPT_CONFIG_CHECKSUM_FAIL 0x0001 1540Sstevel@tonic-gate #define MPI_IOCFACTS_EXCEPT_RAID_CONFIG_INVALID 0x0002 1550Sstevel@tonic-gate #define MPI_IOCFACTS_EXCEPT_FW_CHECKSUM_FAIL 0x0004 1560Sstevel@tonic-gate #define MPI_IOCFACTS_EXCEPT_PERSISTENT_TABLE_FULL 0x0008 1570Sstevel@tonic-gate 1580Sstevel@tonic-gate #define MPI_IOCFACTS_FLAGS_FW_DOWNLOAD_BOOT 0x01 1590Sstevel@tonic-gate 1600Sstevel@tonic-gate #define MPI_IOCFACTS_EVENTSTATE_DISABLED 0x00 1610Sstevel@tonic-gate #define MPI_IOCFACTS_EVENTSTATE_ENABLED 0x01 1620Sstevel@tonic-gate 1630Sstevel@tonic-gate #define MPI_IOCFACTS_CAPABILITY_HIGH_PRI_Q 0x00000001 1640Sstevel@tonic-gate #define MPI_IOCFACTS_CAPABILITY_REPLY_HOST_SIGNAL 0x00000002 1650Sstevel@tonic-gate #define MPI_IOCFACTS_CAPABILITY_QUEUE_FULL_HANDLING 0x00000004 1660Sstevel@tonic-gate #define MPI_IOCFACTS_CAPABILITY_DIAG_TRACE_BUFFER 0x00000008 1670Sstevel@tonic-gate #define MPI_IOCFACTS_CAPABILITY_SNAPSHOT_BUFFER 0x00000010 1680Sstevel@tonic-gate #define MPI_IOCFACTS_CAPABILITY_EXTENDED_BUFFER 0x00000020 1690Sstevel@tonic-gate #define MPI_IOCFACTS_CAPABILITY_EEDP 0x00000040 1700Sstevel@tonic-gate 1710Sstevel@tonic-gate /* 1720Sstevel@tonic-gate * Port Facts message and Reply 1730Sstevel@tonic-gate */ 1740Sstevel@tonic-gate typedef struct msg_port_facts { 1750Sstevel@tonic-gate uint8_t Reserved[2]; 1760Sstevel@tonic-gate uint8_t ChainOffset; 1770Sstevel@tonic-gate uint8_t Function; 1780Sstevel@tonic-gate uint8_t Reserved1[2]; 1790Sstevel@tonic-gate uint8_t PortNumber; 1800Sstevel@tonic-gate uint8_t MsgFlags; 1810Sstevel@tonic-gate uint32_t MsgContext; 1820Sstevel@tonic-gate } msg_port_facts_t; 1830Sstevel@tonic-gate 1840Sstevel@tonic-gate typedef struct msg_port_facts_reply { 1850Sstevel@tonic-gate uint16_t Reserved; 1860Sstevel@tonic-gate uint8_t MsgLength; 1870Sstevel@tonic-gate uint8_t Function; 1880Sstevel@tonic-gate uint16_t Reserved1; 1890Sstevel@tonic-gate uint8_t PortNumber; 1900Sstevel@tonic-gate uint8_t MsgFlags; 1910Sstevel@tonic-gate uint32_t MsgContext; 1920Sstevel@tonic-gate uint16_t Reserved2; 1930Sstevel@tonic-gate uint16_t IOCStatus; 1940Sstevel@tonic-gate uint32_t IOCLogInfo; 1950Sstevel@tonic-gate uint8_t Reserved3; 1960Sstevel@tonic-gate uint8_t PortType; 1970Sstevel@tonic-gate uint16_t MaxDevices; 1980Sstevel@tonic-gate uint16_t PortSCSIID; 1990Sstevel@tonic-gate uint16_t ProtocolFlags; 2000Sstevel@tonic-gate uint16_t MaxPostedCmdBuffers; 2010Sstevel@tonic-gate uint16_t MaxPersistentIDs; 2020Sstevel@tonic-gate uint16_t MaxLanBuckets; 2030Sstevel@tonic-gate uint16_t Reserved4; 2040Sstevel@tonic-gate uint32_t Reserved5; 2050Sstevel@tonic-gate } msg_port_facts_reply_t; 2060Sstevel@tonic-gate 2070Sstevel@tonic-gate /* 2080Sstevel@tonic-gate * PortTypes values 2090Sstevel@tonic-gate */ 2100Sstevel@tonic-gate #define MPI_PORTFACTS_PORTTYPE_INACTIVE 0x00 2110Sstevel@tonic-gate #define MPI_PORTFACTS_PORTTYPE_SCSI 0x01 2120Sstevel@tonic-gate #define MPI_PORTFACTS_PORTTYPE_FC 0x10 2130Sstevel@tonic-gate #define MPI_PORTFACTS_PORTTYPE_ISCSI 0x20 2140Sstevel@tonic-gate #define MPI_PORTFACTS_PORTTYPE_SAS 0x30 2150Sstevel@tonic-gate 2160Sstevel@tonic-gate /* 2170Sstevel@tonic-gate * ProtocolFlags values 2180Sstevel@tonic-gate */ 2190Sstevel@tonic-gate #define MPI_PORTFACTS_PROTOCOL_LOGBUSADDR 0x01 2200Sstevel@tonic-gate #define MPI_PORTFACTS_PROTOCOL_LAN 0x02 2210Sstevel@tonic-gate #define MPI_PORTFACTS_PROTOCOL_TARGET 0x04 2220Sstevel@tonic-gate #define MPI_PORTFACTS_PROTOCOL_INITIATOR 0x08 2230Sstevel@tonic-gate 2240Sstevel@tonic-gate /* 2250Sstevel@tonic-gate * Port Enable Message 2260Sstevel@tonic-gate */ 2270Sstevel@tonic-gate typedef struct msg_port_enable { 2280Sstevel@tonic-gate uint8_t Reserved[2]; 2290Sstevel@tonic-gate uint8_t ChainOffset; 2300Sstevel@tonic-gate uint8_t Function; 2310Sstevel@tonic-gate uint8_t Reserved1[2]; 2320Sstevel@tonic-gate uint8_t PortNumber; 2330Sstevel@tonic-gate uint8_t MsgFlags; 2340Sstevel@tonic-gate uint32_t MsgContext; 2350Sstevel@tonic-gate } msg_port_enable_t; 2360Sstevel@tonic-gate 2370Sstevel@tonic-gate typedef struct msg_port_enable_reply { 2380Sstevel@tonic-gate uint8_t Reserved[2]; 2390Sstevel@tonic-gate uint8_t MsgLength; 2400Sstevel@tonic-gate uint8_t Function; 2410Sstevel@tonic-gate uint8_t Reserved1[2]; 2420Sstevel@tonic-gate uint8_t PortNumber; 2430Sstevel@tonic-gate uint8_t MsgFlags; 2440Sstevel@tonic-gate uint32_t MsgContext; 2450Sstevel@tonic-gate uint16_t Reserved2; 2460Sstevel@tonic-gate uint16_t IOCStatus; 2470Sstevel@tonic-gate uint32_t IOCLogInfo; 2480Sstevel@tonic-gate } msg_port_enable_reply_t; 2490Sstevel@tonic-gate 2500Sstevel@tonic-gate 2510Sstevel@tonic-gate /* 2520Sstevel@tonic-gate * Event Notification messages 2530Sstevel@tonic-gate */ 2540Sstevel@tonic-gate typedef struct msg_event_notify { 2550Sstevel@tonic-gate uint8_t Switch; 2560Sstevel@tonic-gate uint8_t Reserved; 2570Sstevel@tonic-gate uint8_t ChainOffset; 2580Sstevel@tonic-gate uint8_t Function; 2590Sstevel@tonic-gate uint8_t Reserved1[3]; 2600Sstevel@tonic-gate uint8_t MsgFlags; 2610Sstevel@tonic-gate uint32_t MsgContext; 2620Sstevel@tonic-gate } msg_event_notify_t; 2630Sstevel@tonic-gate 2640Sstevel@tonic-gate /* 2650Sstevel@tonic-gate * Event Notification Reply 2660Sstevel@tonic-gate */ 2670Sstevel@tonic-gate typedef struct msg_event_notify_reply { 2680Sstevel@tonic-gate uint16_t EventDataLength; 2690Sstevel@tonic-gate uint8_t MsgLength; 2700Sstevel@tonic-gate uint8_t Function; 2710Sstevel@tonic-gate uint8_t Reserved1[2]; 2720Sstevel@tonic-gate uint8_t AckRequired; 2730Sstevel@tonic-gate uint8_t MsgFlags; 2740Sstevel@tonic-gate uint32_t MsgContext; 2750Sstevel@tonic-gate uint8_t Reserved2[2]; 2760Sstevel@tonic-gate uint16_t IOCStatus; 2770Sstevel@tonic-gate uint32_t IOCLogInfo; 2780Sstevel@tonic-gate uint32_t Event; 2790Sstevel@tonic-gate uint32_t EventContext; 2800Sstevel@tonic-gate uint32_t Data[1]; 2810Sstevel@tonic-gate } msg_event_notify_reply_t; 2820Sstevel@tonic-gate 2830Sstevel@tonic-gate /* 2840Sstevel@tonic-gate * Event Acknowledge 2850Sstevel@tonic-gate */ 2860Sstevel@tonic-gate typedef struct msg_event_ack { 2870Sstevel@tonic-gate uint8_t Reserved[2]; 2880Sstevel@tonic-gate uint8_t ChainOffset; 2890Sstevel@tonic-gate uint8_t Function; 2900Sstevel@tonic-gate uint8_t Reserved1[3]; 2910Sstevel@tonic-gate uint8_t MsgFlags; 2920Sstevel@tonic-gate uint32_t MsgContext; 2930Sstevel@tonic-gate uint32_t Event; 2940Sstevel@tonic-gate uint32_t EventContext; 2950Sstevel@tonic-gate } msg_event_ack_t; 2960Sstevel@tonic-gate 2970Sstevel@tonic-gate typedef struct msg_event_ack_reply { 2980Sstevel@tonic-gate uint8_t Reserved[2]; 2990Sstevel@tonic-gate uint8_t Function; 3000Sstevel@tonic-gate uint8_t MsgLength; 3010Sstevel@tonic-gate uint8_t Reserved1[3]; 3020Sstevel@tonic-gate uint8_t MsgFlags; 3030Sstevel@tonic-gate uint32_t MsgContext; 3040Sstevel@tonic-gate uint16_t Reserved2; 3050Sstevel@tonic-gate uint16_t IOCStatus; 3060Sstevel@tonic-gate uint32_t IOCLogInfo; 3070Sstevel@tonic-gate } msg_event_ack_reply_t; 3080Sstevel@tonic-gate 3090Sstevel@tonic-gate /* 3100Sstevel@tonic-gate * Switch 3110Sstevel@tonic-gate */ 3120Sstevel@tonic-gate #define MPI_EVENT_NOTIFICATION_SWITCH_OFF 0x00 3130Sstevel@tonic-gate #define MPI_EVENT_NOTIFICATION_SWITCH_ON 0x01 3140Sstevel@tonic-gate 3150Sstevel@tonic-gate /* 3160Sstevel@tonic-gate * Event 3170Sstevel@tonic-gate */ 3180Sstevel@tonic-gate #define MPI_EVENT_NONE 0x00000000 3190Sstevel@tonic-gate #define MPI_EVENT_LOG_DATA 0x00000001 3200Sstevel@tonic-gate #define MPI_EVENT_STATE_CHANGE 0x00000002 3210Sstevel@tonic-gate #define MPI_EVENT_UNIT_ATTENTION 0x00000003 3220Sstevel@tonic-gate #define MPI_EVENT_IOC_BUS_RESET 0x00000004 3230Sstevel@tonic-gate #define MPI_EVENT_EXT_BUS_RESET 0x00000005 3240Sstevel@tonic-gate #define MPI_EVENT_RESCAN 0x00000006 3250Sstevel@tonic-gate #define MPI_EVENT_LINK_STATUS_CHANGE 0x00000007 3260Sstevel@tonic-gate #define MPI_EVENT_LOOP_STATE_CHANGE 0x00000008 3270Sstevel@tonic-gate #define MPI_EVENT_LOGOUT 0x00000009 3280Sstevel@tonic-gate #define MPI_EVENT_EVENT_CHANGE 0x0000000A 3290Sstevel@tonic-gate #define MPI_EVENT_INTEGRATED_RAID 0x0000000B 3300Sstevel@tonic-gate #define MPI_EVENT_SCSI_DEVICE_STATUS_CHANGE 0x0000000C 3310Sstevel@tonic-gate #define MPI_EVENT_ON_BUS_TIMER_EXPIRED 0x0000000D 3320Sstevel@tonic-gate #define MPI_EVENT_QUEUE_FULL 0x0000000E 3330Sstevel@tonic-gate #define MPI_EVENT_SAS_DEVICE_STATUS_CHANGE 0x0000000F 3340Sstevel@tonic-gate #define MPI_EVENT_SAS_SES 0x00000010 3350Sstevel@tonic-gate #define MPI_EVENT_PERSISTENT_TABLE_FULL 0x00000011 3360Sstevel@tonic-gate #define MPI_EVENT_SAS_PHY_LINK_STATUS 0x00000012 3370Sstevel@tonic-gate #define MPI_EVENT_SAS_DISCOVERY_ERROR 0x00000013 338840Sjesseb #define MPI_EVENT_IR_RESYNC_UPDATE 0x00000014 339840Sjesseb #define MPI_EVENT_IR2 0x00000015 340840Sjesseb #define MPI_EVENT_SAS_DISCOVERY 0x00000016 3415754Sjw149990 #define MPI_EVENT_SAS_BROADCAST_PRIMITIVE 0x00000017 3425754Sjw149990 #define MPI_EVENT_SAS_INIT_DEVICE_STATUS_CHANGE 0x00000018 3435754Sjw149990 #define MPI_EVENT_SAS_INIT_TABLE_OVERFLOW 0x00000019 3445754Sjw149990 #define MPI_EVENT_SAS_SMP_ERROR 0x0000001A 3455754Sjw149990 #define MPI_EVENT_SAS_EXPANDER_STATUS_CHANGE 0x0000001B 346840Sjesseb #define MPI_EVENT_LOG_ENTRY_ADDED 0x00000021 3470Sstevel@tonic-gate 3480Sstevel@tonic-gate /* 3490Sstevel@tonic-gate * AckRequired field values 3500Sstevel@tonic-gate */ 3510Sstevel@tonic-gate #define MPI_EVENT_NOTIFICATION_ACK_NOT_REQUIRED 0x00 3520Sstevel@tonic-gate #define MPI_EVENT_NOTIFICATION_ACK_REQUIRED 0x01 3530Sstevel@tonic-gate 3540Sstevel@tonic-gate /* 3550Sstevel@tonic-gate * Eventchange event data 3560Sstevel@tonic-gate */ 3570Sstevel@tonic-gate typedef struct event_data_event_change { 3580Sstevel@tonic-gate uint8_t EventState; 3590Sstevel@tonic-gate uint8_t Reserved; 3600Sstevel@tonic-gate uint16_t Reserved1; 3610Sstevel@tonic-gate } event_data_event_change_t; 3620Sstevel@tonic-gate 3630Sstevel@tonic-gate /* 3640Sstevel@tonic-gate * SCSI Event data for Port, Bus and Device forms) 3650Sstevel@tonic-gate */ 3660Sstevel@tonic-gate typedef struct event_data_scsi { 3670Sstevel@tonic-gate uint8_t TargetID; 3680Sstevel@tonic-gate uint8_t BusPort; 3690Sstevel@tonic-gate uint16_t Reserved; 3700Sstevel@tonic-gate } event_data_scsi_t; 3710Sstevel@tonic-gate 3720Sstevel@tonic-gate /* 3730Sstevel@tonic-gate * SCSI Device Status Change Event data 3740Sstevel@tonic-gate */ 3750Sstevel@tonic-gate typedef struct event_data_scsi_device_status_change { 3760Sstevel@tonic-gate uint8_t TargetID; 3770Sstevel@tonic-gate uint8_t Bus; 3780Sstevel@tonic-gate uint8_t ReasonCode; 3790Sstevel@tonic-gate uint8_t LUN; 3800Sstevel@tonic-gate uint8_t ASC; 3810Sstevel@tonic-gate uint8_t ASCQ; 3820Sstevel@tonic-gate uint16_t Reserved; 3830Sstevel@tonic-gate } event_data_scsi_device_status_change_t; 3840Sstevel@tonic-gate 3850Sstevel@tonic-gate /* 3860Sstevel@tonic-gate * SCSI Device Status Change Event data ReasonCode values 3870Sstevel@tonic-gate */ 3880Sstevel@tonic-gate #define MPI_EVENT_SCSI_DEV_STAT_RC_ADDED 0x03 3890Sstevel@tonic-gate #define MPI_EVENT_SCSI_DEV_STAT_RC_NOT_RESPONDING 0x04 3900Sstevel@tonic-gate #define MPI_EVENT_SCSI_DEV_STAT_RC_SMART_DATA 0x05 3910Sstevel@tonic-gate 3920Sstevel@tonic-gate /* 3930Sstevel@tonic-gate * SAS Device Status Change event data 3940Sstevel@tonic-gate */ 3950Sstevel@tonic-gate typedef struct event_data_sas_device_status_change { 3960Sstevel@tonic-gate uint8_t TargetID; 3970Sstevel@tonic-gate uint8_t Bus; 3980Sstevel@tonic-gate uint8_t ReasonCode; 3990Sstevel@tonic-gate uint8_t Reserved; 4000Sstevel@tonic-gate uint8_t ASC; 4010Sstevel@tonic-gate uint8_t ASCQ; 4020Sstevel@tonic-gate uint16_t DevHandle; 4030Sstevel@tonic-gate uint32_t DeviceInfo; 4040Sstevel@tonic-gate uint16_t ParentDevHandle; 4050Sstevel@tonic-gate uint8_t PhyNum; 4060Sstevel@tonic-gate uint8_t Reserved1; 4070Sstevel@tonic-gate uint64_t SASAddress; 4080Sstevel@tonic-gate } event_data_sas_device_status_change_t; 4090Sstevel@tonic-gate 4100Sstevel@tonic-gate #define MPI_EVENT_SAS_DEV_STAT_RC_ADDED 0x03 4110Sstevel@tonic-gate #define MPI_EVENT_SAS_DEV_STAT_RC_NOT_RESPONDING 0x04 4120Sstevel@tonic-gate #define MPI_EVENT_SAS_DEV_STAT_RC_SMART_DATA 0x05 4130Sstevel@tonic-gate #define MPI_EVENT_SAS_DEV_STAT_RC_NO_PERSIST_ADDED 0x06 4140Sstevel@tonic-gate 4150Sstevel@tonic-gate /* 4160Sstevel@tonic-gate * SCSI event data for queue full event 4170Sstevel@tonic-gate */ 4180Sstevel@tonic-gate typedef struct event_data_queue_full { 4190Sstevel@tonic-gate uint8_t TargetID; 4200Sstevel@tonic-gate uint8_t Bus; 4210Sstevel@tonic-gate uint16_t CurrentDepth; 4220Sstevel@tonic-gate } event_data_queue_full_t; 4230Sstevel@tonic-gate 4240Sstevel@tonic-gate /* 4250Sstevel@tonic-gate * MPI Link Status Change Event data 4260Sstevel@tonic-gate */ 4270Sstevel@tonic-gate typedef struct event_data_link_status { 4280Sstevel@tonic-gate uint8_t State; 4290Sstevel@tonic-gate uint8_t Reserved; 4300Sstevel@tonic-gate uint16_t Reserved1; 4310Sstevel@tonic-gate uint8_t Reserved2; 4320Sstevel@tonic-gate uint8_t Port; 4330Sstevel@tonic-gate uint16_t Reserved3; 4340Sstevel@tonic-gate } event_data_link_status_t; 4350Sstevel@tonic-gate 4360Sstevel@tonic-gate #define MPI_EVENT_LINK_STATUS_FAILURE 0x00000000 4370Sstevel@tonic-gate #define MPI_EVENT_LINK_STATUS_ACTIVE 0x00000001 4380Sstevel@tonic-gate 4390Sstevel@tonic-gate /* MPI Loop State Change Event data */ 4400Sstevel@tonic-gate 4410Sstevel@tonic-gate typedef struct event_data_loop_state { 4420Sstevel@tonic-gate uint8_t Character4; 4430Sstevel@tonic-gate uint8_t Character3; 4440Sstevel@tonic-gate uint8_t Type; 4450Sstevel@tonic-gate uint8_t Reserved; 4460Sstevel@tonic-gate uint8_t Reserved1; 4470Sstevel@tonic-gate uint8_t Port; 4480Sstevel@tonic-gate uint16_t Reserved2; 4490Sstevel@tonic-gate } event_data_loop_state_t; 4500Sstevel@tonic-gate 4510Sstevel@tonic-gate #define MPI_EVENT_LOOP_STATE_CHANGE_LIP 0x0001 4520Sstevel@tonic-gate #define MPI_EVENT_LOOP_STATE_CHANGE_LPE 0x0002 4530Sstevel@tonic-gate #define MPI_EVENT_LOOP_STATE_CHANGE_LPB 0x0003 4540Sstevel@tonic-gate 4550Sstevel@tonic-gate /* 4560Sstevel@tonic-gate * MPI LOGOUT Event data 4570Sstevel@tonic-gate */ 4580Sstevel@tonic-gate typedef struct event_data_logout { 4590Sstevel@tonic-gate uint32_t NPortID; 4600Sstevel@tonic-gate uint8_t Reserved; 4610Sstevel@tonic-gate uint8_t Port; 4620Sstevel@tonic-gate uint16_t Reserved1; 4630Sstevel@tonic-gate } event_data_logout_t; 4640Sstevel@tonic-gate 4650Sstevel@tonic-gate /* 4660Sstevel@tonic-gate * MPI RAID Status Change Event Data 4670Sstevel@tonic-gate */ 4680Sstevel@tonic-gate typedef struct event_data_raid { 4690Sstevel@tonic-gate uint8_t VolumeID; 4700Sstevel@tonic-gate uint8_t VolumeBus; 4710Sstevel@tonic-gate uint8_t ReasonCode; 4720Sstevel@tonic-gate uint8_t PhysDiskNum; 4730Sstevel@tonic-gate uint8_t ASC; 4740Sstevel@tonic-gate uint8_t ASCQ; 4750Sstevel@tonic-gate uint16_t Reserved; 4760Sstevel@tonic-gate uint32_t SettingsStatus; 4770Sstevel@tonic-gate } event_data_raid_t; 4780Sstevel@tonic-gate 4790Sstevel@tonic-gate /* MPI RAID Status Change Event data ReasonCode values */ 4800Sstevel@tonic-gate #define MPI_EVENT_RAID_RC_VOLUME_CREATED 0x00 4810Sstevel@tonic-gate #define MPI_EVENT_RAID_RC_VOLUME_DELETED 0x01 4820Sstevel@tonic-gate #define MPI_EVENT_RAID_RC_VOLUME_SETTINGS_CHANGED 0x02 4830Sstevel@tonic-gate #define MPI_EVENT_RAID_RC_VOLUME_STATUS_CHANGED 0x03 4840Sstevel@tonic-gate #define MPI_EVENT_RAID_RC_VOLUME_PHYSDISK_CHANGED 0x04 4850Sstevel@tonic-gate #define MPI_EVENT_RAID_RC_PHYSDISK_CREATED 0x05 4860Sstevel@tonic-gate #define MPI_EVENT_RAID_RC_PHYSDISK_DELETED 0x06 4870Sstevel@tonic-gate #define MPI_EVENT_RAID_RC_PHYSDISK_SETTINGS_CHANGED 0x07 4880Sstevel@tonic-gate #define MPI_EVENT_RAID_RC_PHYSDISK_STATUS_CHANGED 0x08 4890Sstevel@tonic-gate #define MPI_EVENT_RAID_RC_DOMAIN_VAL_NEEDED 0x09 4900Sstevel@tonic-gate #define MPI_EVENT_RAID_RC_SMART_DATA 0x0A 4910Sstevel@tonic-gate #define MPI_EVENT_RAID_RC_REPLACE_ACTION_STARTED 0x0B 4920Sstevel@tonic-gate 4930Sstevel@tonic-gate /* 4940Sstevel@tonic-gate * SAS Phy link down event data 4950Sstevel@tonic-gate */ 4960Sstevel@tonic-gate typedef struct event_data_sas_phy_link_status { 4970Sstevel@tonic-gate uint8_t PhyNum; 4980Sstevel@tonic-gate uint8_t LinkRates; 4990Sstevel@tonic-gate uint16_t DevHandle; 5000Sstevel@tonic-gate uint64_t SASAddress; 5010Sstevel@tonic-gate } event_data_sas_phy_link_status_t; 5020Sstevel@tonic-gate 5030Sstevel@tonic-gate #define MPI_EVENT_SAS_PLS_LR_CURRENT_MASK 0xF0 5040Sstevel@tonic-gate #define MPI_EVENT_SAS_PLS_LR_CURRENT_SHIFT 4 5050Sstevel@tonic-gate #define MPI_EVENT_SAS_PLS_LR_PREVIOUS_MASK 0x0F 5060Sstevel@tonic-gate #define MPI_EVENT_SAS_PLS_LR_PREVIOUS_SHIFT 0 5070Sstevel@tonic-gate #define MPI_EVENT_SAS_PLS_LR_RATE_UNKNOWN 0x00 5080Sstevel@tonic-gate #define MPI_EVENT_SAS_PLS_LR_RATE_PHY_DISABLED 0x01 5090Sstevel@tonic-gate #define MPI_EVENT_SAS_PLS_LR_RATE_FAILED_SPEED_NEGOTIATION 0x02 5100Sstevel@tonic-gate #define MPI_EVENT_SAS_PLS_LR_RATE_SATA_OOB_COMPLETE 0x03 5110Sstevel@tonic-gate #define MPI_EVENT_SAS_PLS_LR_RATE_1_5 0x08 5120Sstevel@tonic-gate #define MPI_EVENT_SAS_PLS_LR_RATE_3_0 0x09 5130Sstevel@tonic-gate 514*6932Sjw219769 /* 515*6932Sjw219769 * sas discovery error structure 516*6932Sjw219769 */ 517*6932Sjw219769 typedef struct event_data_sas_discovery_error { 518*6932Sjw219769 uint32_t DiscoveryStatus; 519*6932Sjw219769 uint8_t Port; 520*6932Sjw219769 uint8_t Reserved[3]; 521*6932Sjw219769 } event_data_sas_discovery_error_t; 522*6932Sjw219769 523*6932Sjw219769 /* 524*6932Sjw219769 * values for DiscoveryStatus field of SAS Discovery Error Event Data 525*6932Sjw219769 */ 526*6932Sjw219769 527*6932Sjw219769 #define MPI_EVENT_SAS_DE_DS_LOOP_DETECTED 0x00000001 528*6932Sjw219769 #define MPI_EVENT_SAS_DE_DS_UNADDRESSABLE_DEVICE 0x00000002 529*6932Sjw219769 #define MPI_EVENT_SAS_DE_DS_MULTIPLE_PORTS 0x00000004 530*6932Sjw219769 #define MPI_EVENT_SAS_DE_DS_EXPANDER_ERR 0x00000008 531*6932Sjw219769 #define MPI_EVENT_SAS_DE_DS_SMP_TIMEOUT 0x00000010 532*6932Sjw219769 #define MPI_EVENT_SAS_DE_DS_OUT_ROUTE_ENTRIES 0x00000020 533*6932Sjw219769 #define MPI_EVENT_SAS_DE_DS_INDEX_NOT_EXIST 0x00000040 534*6932Sjw219769 #define MPI_EVENT_SAS_DE_DS_SMP_FUNCTION_FAILED 0x00000080 535*6932Sjw219769 #define MPI_EVENT_SAS_DE_DS_SMP_CRC_ERR 0x00000100 536*6932Sjw219769 #define MPI_EVENT_SAS_DE_DS_MULTIPLE_SUBTRACTIVE 0x00000200 537*6932Sjw219769 #define MPI_EVENT_SAS_DE_DS_TABLE_TO_TABLE 0x00000400 538*6932Sjw219769 #define MPI_EVENT_SAS_DE_DS_MULTIPLE_PATHS 0x00000800 539*6932Sjw219769 #define MPI_EVENT_SAS_DE_DS_MAX_SATA_TARGS 0x00001000 540*6932Sjw219769 5415754Sjw149990 typedef struct event_data_sas_expander_status_change { 5425754Sjw149990 uint8_t ReasonCode; 5435754Sjw149990 uint8_t Reserved1; 5445754Sjw149990 uint16_t Reserved2; 5455754Sjw149990 uint8_t PhysicalPort; 5465754Sjw149990 uint8_t Reserved3; 5475754Sjw149990 uint16_t EnclosureHandle; 5485754Sjw149990 uint64_t SASAddress; 5495754Sjw149990 uint32_t DiscoveryStatus; 5505754Sjw149990 uint16_t DevHandle; 5515754Sjw149990 uint16_t ParentDevHandle; 5525754Sjw149990 uint16_t ExpanderChangeCount; 5535754Sjw149990 uint16_t ExpanderRouteIndexes; 5545754Sjw149990 uint8_t NumPhys; 5555754Sjw149990 uint8_t SASLevel; 5565754Sjw149990 uint8_t Flags; 5575754Sjw149990 uint8_t Reserved4; 5585754Sjw149990 } event_data_sas_expander_status_change_t; 5595754Sjw149990 5605754Sjw149990 /* 5615754Sjw149990 * values for ReasonCode field of SAS Expander Status Change Event data 5625754Sjw149990 */ 5635754Sjw149990 #define MPI_EVENT_SAS_EXP_RC_ADDED 0x00 5645754Sjw149990 #define MPI_EVENT_SAS_EXP_RC_NOT_RESPONDING 0x01 5655754Sjw149990 5665754Sjw149990 /* 5675754Sjw149990 * values for DiscoveryStatus field of SAS Expander Status Change Event data 5685754Sjw149990 */ 5695754Sjw149990 #define MPI_EVENT_SAS_EXP_DS_LOOP_DETECTED 0x00000001 5705754Sjw149990 #define MPI_EVENT_SAS_EXP_DS_UNADDRESSABLE_DEVICE 0x00000002 5715754Sjw149990 #define MPI_EVENT_SAS_EXP_DS_MULTIPLE_PORTS 0x00000004 5725754Sjw149990 #define MPI_EVENT_SAS_EXP_DS_EXPANDER_ERR 0x00000008 5735754Sjw149990 #define MPI_EVENT_SAS_EXP_DS_SMP_TIMEOUT 0x00000010 5745754Sjw149990 #define MPI_EVENT_SAS_EXP_DS_OUT_ROUTE_ENTRIES 0x00000020 5755754Sjw149990 #define MPI_EVENT_SAS_EXP_DS_INDEX_NOT_EXIST 0x00000040 5765754Sjw149990 #define MPI_EVENT_SAS_EXP_DS_SMP_FUNCTION_FAILED 0x00000080 5775754Sjw149990 #define MPI_EVENT_SAS_EXP_DS_SMP_CRC_ERROR 0x00000100 5785754Sjw149990 #define MPI_EVENT_SAS_EXP_DS_SUBTRACTIVE_LINK 0x00000200 5795754Sjw149990 #define MPI_EVENT_SAS_EXP_DS_TABLE_LINK 0x00000400 5805754Sjw149990 #define MPI_EVENT_SAS_EXP_DS_UNSUPPORTED_DEVICE 0x00000800 5815754Sjw149990 5825754Sjw149990 /* 5835754Sjw149990 * values for Flags field of SAS Expander Status Change Event data 5845754Sjw149990 */ 5855754Sjw149990 #define MPI_EVENT_SAS_EXP_FLAGS_ROUTE_TABLE_CONFIG 0x02 5865754Sjw149990 #define MPI_EVENT_SAS_EXP_FLAGS_CONFIG_IN_PROGRESS 0x01 5875754Sjw149990 5885754Sjw149990 5890Sstevel@tonic-gate /* 5900Sstevel@tonic-gate * Firmware Load Messages 5910Sstevel@tonic-gate */ 5920Sstevel@tonic-gate 5930Sstevel@tonic-gate /* 5940Sstevel@tonic-gate * Firmware download message and associated structures 5950Sstevel@tonic-gate */ 5960Sstevel@tonic-gate typedef struct msg_fw_download { 5970Sstevel@tonic-gate uint8_t ImageType; 5980Sstevel@tonic-gate uint8_t Reserved; 5990Sstevel@tonic-gate uint8_t ChainOffset; 6000Sstevel@tonic-gate uint8_t Function; 6010Sstevel@tonic-gate uint8_t Reserved1[3]; 6020Sstevel@tonic-gate uint8_t MsgFlags; 6030Sstevel@tonic-gate uint32_t MsgContext; 6040Sstevel@tonic-gate sge_mpi_union_t SGL; 6050Sstevel@tonic-gate } msg_fw_download_t; 6060Sstevel@tonic-gate 6070Sstevel@tonic-gate #define MPI_FW_DOWNLOAD_MSGFLGS_LAST_SEGMENT 0x01 6080Sstevel@tonic-gate 6090Sstevel@tonic-gate #define MPI_FW_DOWNLOAD_ITYPE_RESERVED 0x00 6100Sstevel@tonic-gate #define MPI_FW_DOWNLOAD_ITYPE_FW 0x01 6110Sstevel@tonic-gate #define MPI_FW_DOWNLOAD_ITYPE_BIOS 0x02 6120Sstevel@tonic-gate #define MPI_FW_DOWNLOAD_ITYPE_NVDATA 0x03 6130Sstevel@tonic-gate #define MPI_FW_DOWNLOAD_ITYPE_BOOTLOADER 0x04 6140Sstevel@tonic-gate 6150Sstevel@tonic-gate typedef struct fw_download_tcsge { 6160Sstevel@tonic-gate uint8_t Reserved; 6170Sstevel@tonic-gate uint8_t ContextSize; 6180Sstevel@tonic-gate uint8_t DetailsLength; 6190Sstevel@tonic-gate uint8_t Flags; 6200Sstevel@tonic-gate uint32_t Reserved_0100_Checksum; /* obsolete */ 6210Sstevel@tonic-gate uint32_t ImageOffset; 6220Sstevel@tonic-gate uint32_t ImageSize; 6230Sstevel@tonic-gate } fw_download_tcsge_t; 6240Sstevel@tonic-gate 6250Sstevel@tonic-gate typedef struct msg_fw_download_reply { 6260Sstevel@tonic-gate uint8_t ImageType; 6270Sstevel@tonic-gate uint8_t Reserved; 6280Sstevel@tonic-gate uint8_t MsgLength; 6290Sstevel@tonic-gate uint8_t Function; 6300Sstevel@tonic-gate uint8_t Reserved1[3]; 6310Sstevel@tonic-gate uint8_t MsgFlags; 6320Sstevel@tonic-gate uint32_t MsgContext; 6330Sstevel@tonic-gate uint16_t Reserved2; 6340Sstevel@tonic-gate uint16_t IOCStatus; 6350Sstevel@tonic-gate uint32_t IOCLogInfo; 6360Sstevel@tonic-gate } msg_fw_download_reply_t; 6370Sstevel@tonic-gate 6380Sstevel@tonic-gate /* 6390Sstevel@tonic-gate * Firmware upload messages and associated structures 6400Sstevel@tonic-gate */ 6410Sstevel@tonic-gate typedef struct msg_fw_upload { 6420Sstevel@tonic-gate uint8_t ImageType; 6430Sstevel@tonic-gate uint8_t Reserved; 6440Sstevel@tonic-gate uint8_t ChainOffset; 6450Sstevel@tonic-gate uint8_t Function; 6460Sstevel@tonic-gate uint8_t Reserved1[3]; 6470Sstevel@tonic-gate uint8_t MsgFlags; 6480Sstevel@tonic-gate uint32_t MsgContext; 6490Sstevel@tonic-gate sge_mpi_union_t SGL; 6500Sstevel@tonic-gate } msg_fw_upload_t; 6510Sstevel@tonic-gate 6520Sstevel@tonic-gate #define MPI_FW_UPLOAD_ITYPE_FW_IOC_MEM 0x00 6530Sstevel@tonic-gate #define MPI_FW_UPLOAD_ITYPE_FW_FLASH 0x01 6540Sstevel@tonic-gate #define MPI_FW_UPLOAD_ITYPE_BIOS_FLASH 0x02 6550Sstevel@tonic-gate #define MPI_FW_UPLOAD_ITYPE_NVDATA 0x03 6560Sstevel@tonic-gate #define MPI_FW_UPLOAD_ITYPE_BOOTLOADER 0x04 6570Sstevel@tonic-gate 6580Sstevel@tonic-gate typedef struct fw_upload_tcsge { 6590Sstevel@tonic-gate uint8_t Reserved; 6600Sstevel@tonic-gate uint8_t ContextSize; 6610Sstevel@tonic-gate uint8_t DetailsLength; 6620Sstevel@tonic-gate uint8_t Flags; 6630Sstevel@tonic-gate uint32_t Reserved1; 6640Sstevel@tonic-gate uint32_t ImageOffset; 6650Sstevel@tonic-gate uint32_t ImageSize; 6660Sstevel@tonic-gate } fw_upload_tcsge_t; 6670Sstevel@tonic-gate 6680Sstevel@tonic-gate typedef struct msg_fw_upload_reply { 6690Sstevel@tonic-gate uint8_t ImageType; 6700Sstevel@tonic-gate uint8_t Reserved; 6710Sstevel@tonic-gate uint8_t MsgLength; 6720Sstevel@tonic-gate uint8_t Function; 6730Sstevel@tonic-gate uint8_t Reserved1[3]; 6740Sstevel@tonic-gate uint8_t MsgFlags; 6750Sstevel@tonic-gate uint32_t MsgContext; 6760Sstevel@tonic-gate uint16_t Reserved2; 6770Sstevel@tonic-gate uint16_t IOCStatus; 6780Sstevel@tonic-gate uint32_t IOCLogInfo; 6790Sstevel@tonic-gate uint32_t ActualImageSize; 6800Sstevel@tonic-gate } msg_fw_upload_reply_t; 6810Sstevel@tonic-gate 6820Sstevel@tonic-gate typedef struct msg_fw_header { 6830Sstevel@tonic-gate uint32_t ArmBranchInstruction0; 6840Sstevel@tonic-gate uint32_t Signature0; 6850Sstevel@tonic-gate uint32_t Signature1; 6860Sstevel@tonic-gate uint32_t Signature2; 6870Sstevel@tonic-gate uint32_t ArmBranchInstruction1; 6880Sstevel@tonic-gate uint32_t ArmBranchInstruction2; 6890Sstevel@tonic-gate uint32_t Reserved; 6900Sstevel@tonic-gate uint32_t Checksum; 6910Sstevel@tonic-gate uint16_t VendorId; 6920Sstevel@tonic-gate uint16_t ProductId; 6930Sstevel@tonic-gate mpi_fw_version_t FWVersion; 6940Sstevel@tonic-gate uint32_t SeqCodeVersion; 6950Sstevel@tonic-gate uint32_t ImageSize; 6960Sstevel@tonic-gate uint32_t NextImageHeaderOffset; 6970Sstevel@tonic-gate uint32_t LoadStartAddress; 6980Sstevel@tonic-gate uint32_t IopResetVectorValue; 6990Sstevel@tonic-gate uint32_t IopResetRegAddr; 7000Sstevel@tonic-gate uint32_t VersionNameWhat; 7010Sstevel@tonic-gate uint8_t VersionName[32]; 7020Sstevel@tonic-gate uint32_t VendorNameWhat; 7030Sstevel@tonic-gate uint8_t VendorName[32]; 7040Sstevel@tonic-gate } msg_fw_header_t; 7050Sstevel@tonic-gate 7060Sstevel@tonic-gate #define MPI_FW_HEADER_WHAT_SIGNATURE 0x29232840 7070Sstevel@tonic-gate 7080Sstevel@tonic-gate /* defines for using the ProductId field */ 7090Sstevel@tonic-gate #define MPI_FW_HEADER_PID_TYPE_MASK 0xF000 7100Sstevel@tonic-gate #define MPI_FW_HEADER_PID_TYPE_SCSI 0x0000 7110Sstevel@tonic-gate #define MPI_FW_HEADER_PID_TYPE_FC 0x1000 7120Sstevel@tonic-gate 7130Sstevel@tonic-gate #define MPI_FW_HEADER_PID_PROD_MASK 0x0F00 7140Sstevel@tonic-gate #define MPI_FW_HEADER_PID_PROD_INITIATOR_SCSI 0x0100 7150Sstevel@tonic-gate #define MPI_FW_HEADER_PID_PROD_TARGET_INITIATOR_SCSI 0x0200 7160Sstevel@tonic-gate #define MPI_FW_HEADER_PID_PROD_TARGET_SCSI 0x0300 7170Sstevel@tonic-gate #define MPI_FW_HEADER_PID_PROD_IM_SCSI 0x0400 7180Sstevel@tonic-gate #define MPI_FW_HEADER_PID_PROD_IS_SCSI 0x0500 7190Sstevel@tonic-gate #define MPI_FW_HEADER_PID_PROD_CTX_SCSI 0x0600 7200Sstevel@tonic-gate #define MPI_FW_HEADER_PID_PROD_IR_SCSI 0x0700 7210Sstevel@tonic-gate 7220Sstevel@tonic-gate #define MPI_FW_HEADER_PID_FAMILY_MASK 0x00FF 7230Sstevel@tonic-gate #define MPI_FW_HEADER_PID_FAMILY_1030A0_SCSI 0x0001 7240Sstevel@tonic-gate #define MPI_FW_HEADER_PID_FAMILY_1030B0_SCSI 0x0002 7250Sstevel@tonic-gate #define MPI_FW_HEADER_PID_FAMILY_1030B1_SCSI 0x0003 7260Sstevel@tonic-gate #define MPI_FW_HEADER_PID_FAMILY_1030C0_SCSI 0x0004 7270Sstevel@tonic-gate #define MPI_FW_HEADER_PID_FAMILY_1020A0_SCSI 0x0005 7280Sstevel@tonic-gate #define MPI_FW_HEADER_PID_FAMILY_1020B0_SCSI 0x0006 7290Sstevel@tonic-gate #define MPI_FW_HEADER_PID_FAMILY_1020B1_SCSI 0x0007 7300Sstevel@tonic-gate #define MPI_FW_HEADER_PID_FAMILY_1020C0_SCSI 0x0008 7310Sstevel@tonic-gate #define MPI_FW_HEADER_PID_FAMILY_1035A0_SCSI 0x0009 7320Sstevel@tonic-gate #define MPI_FW_HEADER_PID_FAMILY_1035B0_SCSI 0x000A 7330Sstevel@tonic-gate #define MPI_FW_HEADER_PID_FAMILY_1030TA0_SCSI 0x000B 7340Sstevel@tonic-gate #define MPI_FW_HEADER_PID_FAMILY_1020TA0_SCSI 0x000C 7350Sstevel@tonic-gate #define MPI_FW_HEADER_PID_FAMILY_909_FC 0x0000 7360Sstevel@tonic-gate #define MPI_FW_HEADER_PID_FAMILY_919_FC 0x0001 7370Sstevel@tonic-gate #define MPI_FW_HEADER_PID_FAMILY_919X_FC 0x0002 7380Sstevel@tonic-gate #define MPI_FW_HEADER_PID_FAMILY_1064_SAS 0x0001 7390Sstevel@tonic-gate #define MPI_FW_HEADER_PID_FAMILY_1068_SAS 0x0002 7400Sstevel@tonic-gate #define MPI_FW_HEADER_PID_FAMILY_1078_SAS 0x0003 7410Sstevel@tonic-gate 7420Sstevel@tonic-gate typedef struct mpi_ext_image_header { 7430Sstevel@tonic-gate uint8_t ImageType; 7440Sstevel@tonic-gate uint8_t Reserved; 7450Sstevel@tonic-gate uint16_t Reserved1; 7460Sstevel@tonic-gate uint32_t Checksum; 7470Sstevel@tonic-gate uint32_t ImageSize; 7480Sstevel@tonic-gate uint32_t NextImageHeaderOffset; 7490Sstevel@tonic-gate uint32_t LoadStartAddress; 7500Sstevel@tonic-gate uint32_t Reserved2; 7510Sstevel@tonic-gate } mpi_ext_image_header_t; 7520Sstevel@tonic-gate 7530Sstevel@tonic-gate #define MPI_EXT_IMAGE_TYPE_UNSPECIFIED 0x00 7540Sstevel@tonic-gate #define MPI_EXT_IMAGE_TYPE_FW 0x01 7550Sstevel@tonic-gate #define MPI_EXT_IMAGE_TYPE_NVDATA 0x03 7560Sstevel@tonic-gate #define MPI_EXT_IMAGE_TYPE_BOOTLOADER 0x04 7570Sstevel@tonic-gate 7580Sstevel@tonic-gate #ifdef __cplusplus 7590Sstevel@tonic-gate } 7600Sstevel@tonic-gate #endif 7610Sstevel@tonic-gate 7620Sstevel@tonic-gate #endif /* _SYS_MPI_IOC_H */ 763