xref: /onnv-gate/usr/src/uts/common/sys/mpt/mpi_ioc.h (revision 6932:595f7a63520c)
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