444 lines
15 KiB
C
444 lines
15 KiB
C
|
#ifndef _DMI_IOCTL_H_
|
||
|
#define _DMI_IOCTL_H_
|
||
|
|
||
|
/***************************************************************************
|
||
|
* *
|
||
|
* Copyright 1998 LSI Logic Corporation. All rights reserved. *
|
||
|
* *
|
||
|
* This file is confidential and a trade secret of LSI Logic. The *
|
||
|
* receipt of or possession of this file does not convey any rights to *
|
||
|
* reproduce or disclose its contents or to manufacture, use, or sell *
|
||
|
* anything it may describe, in whole, or in part, without the specific *
|
||
|
* written consent of LSI Logic Corporation. *
|
||
|
* *
|
||
|
***************************************************************************/
|
||
|
|
||
|
/* Name: DMI_IOCTL.H
|
||
|
* Title: Solaris O/S Character mode IOCTL definitions
|
||
|
* Programmer: Russell A. Johnson
|
||
|
* Creation Date: May 26, 1998
|
||
|
*
|
||
|
* Version History
|
||
|
* ---------------
|
||
|
*
|
||
|
* Date Who? Description
|
||
|
* -------- ---- -------------------------------------------------------
|
||
|
#BeginRevision
|
||
|
* 05/17/00 RAJ Added bus mode support for fibre channel devices.
|
||
|
* 12/19/99 RAJ Added new flags for scsi-3 options.
|
||
|
* 11/09/98 RAJ Changed copyright notice to LSI Logic.
|
||
|
#EndRevision
|
||
|
* Version 4.02.01
|
||
|
* 07/22/98 RAJ Added some more data to the DMI data structure. This
|
||
|
* includes the PCI bus number, device number, and function
|
||
|
* number. Also added a major version number for the data
|
||
|
* structure. That version number indicates major changes.
|
||
|
* When it changes then the entire data format may have
|
||
|
* changed. See the comments below for more details.
|
||
|
#EndRevision
|
||
|
* Version 4.00.04
|
||
|
* 05/26/98 RAJ Initial version.
|
||
|
#EndRevision
|
||
|
*
|
||
|
#BeginDescription
|
||
|
*
|
||
|
* This file contains the Solaris 2.6 character mode driver interface
|
||
|
* definitions needed in order to provide IOCTL's for our SCSI HBA driver.
|
||
|
*
|
||
|
#EndDescription
|
||
|
*
|
||
|
*-------------------------------------------------------------------------
|
||
|
*/
|
||
|
|
||
|
/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
||
|
* HEADER FILE DEPENDANCIES
|
||
|
*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
||
|
*
|
||
|
* This file is dependent on the following files:
|
||
|
*
|
||
|
* SALIOS.H - type defintions UINT8, UINT16, UINT32, UINT64
|
||
|
*/
|
||
|
|
||
|
/* The following data is for our character mode ioctl interface. Per the
|
||
|
* Solaris standard mechanism, we define SYMIOCTL as a unique number in the
|
||
|
* upper 8 bits and a command value in the lower 8 bits.
|
||
|
*/
|
||
|
#define SYMIOCTL ('H' << 8)
|
||
|
#define SYMIOCTL_GET_DMI_DATA (SYMIOCTL | 1)
|
||
|
#define SYMIOCTL_GET_TIMERS (SYMIOCTL | 2)
|
||
|
#define SYMIOCTL_UPDATE_FLASH (SYMIOCTL | 3)
|
||
|
#define SYMIOCTL_RESET_ADAPTER (SYMIOCTL | 4)
|
||
|
#define SYMIOCTL_GET_PROPERTY (SYMIOCTL | 5)
|
||
|
#define SYMIOCTL_PASS_THRU (SYMIOCTL | 6)
|
||
|
#define SYMIOCTL_REG_ACCESS (SYMIOCTL | 7)
|
||
|
#define SYMIOCTL_EVENT_QUERY (SYMIOCTL | 8)
|
||
|
#define SYMIOCTL_EVENT_ENABLE (SYMIOCTL | 9)
|
||
|
#define SYMIOCTL_EVENT_REPORT (SYMIOCTL | 10)
|
||
|
#define SYMIOCTL_GET_PCI_INFO (SYMIOCTL | 11)
|
||
|
#define SYMIOCTL_BTDH_MAPPING (SYMIOCTL | 12)
|
||
|
#define SYMIOCTL_DIAG_ACTION (SYMIOCTL | 13)
|
||
|
#define SYMIOCTL_PASS_THRU_TIMEOUT (SYMIOCTL | 14)
|
||
|
|
||
|
/* The following are our ioctl() return status values. If everything went
|
||
|
* well, we return good status. If the buffer length sent to us is too short
|
||
|
* we return a status to tell the user.
|
||
|
*/
|
||
|
#define SYMIOCTL_STATUS_GOOD 0
|
||
|
#define SYMIOCTL_STATUS_LEN_TOO_SHORT 1
|
||
|
|
||
|
/* The data structures defined in this file are marked with a data structure
|
||
|
* length and data structure version. The length value is the first value in
|
||
|
* the structure and is used to make sure the buffer is large enough for
|
||
|
* communication between the driver and the application. The version number is
|
||
|
* a major version number. If the data structure changes and only has a new
|
||
|
* element appended, then the version number will remain the same but the
|
||
|
* length will increase. If the data structure changes in any other way, such
|
||
|
* as re-arranging all of its elements, then the version number will increase.
|
||
|
*
|
||
|
* The following macro defines the current version number of the data
|
||
|
* structure.
|
||
|
*/
|
||
|
#define SYMHI_DMI_DATA_VERSION 1
|
||
|
|
||
|
/* The following is the SYMIOCTL_GET_DMI_DATA data structure. This data
|
||
|
* structure is setup so that we hopefully are properly aligned for both 32-bit
|
||
|
* and 64-bit mode applications.
|
||
|
*
|
||
|
* StructureLength - This value is the amount of data the caller has allocated
|
||
|
* for the structure when they first call us. After we have filled in the
|
||
|
* structure, this indicates the length our data structure is.
|
||
|
*
|
||
|
* MajorVersion - This value is used by the driver to tell the application what
|
||
|
* version of the data structure is being provided. It only changes if the
|
||
|
* data ordering of the data below is changed.
|
||
|
*
|
||
|
* MinSyncPeriodNs - This is the minimum period in nano-seconds (ns) that we
|
||
|
* will negotiate for on this adapter. The smaller value the faster
|
||
|
* synchronous speed except if this value is zero then asynchronous transfers
|
||
|
* is all we support.
|
||
|
*
|
||
|
* MaxWidth - This value indicates the maximum width this bus can be used as.
|
||
|
* If the PciDeviceId indicates a width capability of 16 devices and this is
|
||
|
* set to 8 devices then the PCI Subsystem ID value has limited our use of this
|
||
|
* adapter to 8 devices. This value also indicates the number of valid
|
||
|
* elements in the DevSpeed[] and DevWidth[] array's.
|
||
|
*
|
||
|
* HostScsiId - This is the host adapter SCSI ID being used by this adapter.
|
||
|
*
|
||
|
* PciBusNumber - The number of the PCI bus this adapter is on. If for some
|
||
|
* reason the driver is unable to determine the bus number, device number, or
|
||
|
* function number, these values will be set to 0xFF.
|
||
|
*
|
||
|
* PciDeviceNumber - The PCI device number for this device.
|
||
|
*
|
||
|
* PciFunctionNumber - The PCI function number for this device.
|
||
|
*
|
||
|
* PciDeviceId - This is the PCI device ID from PCI configuration space for
|
||
|
* this adapter.
|
||
|
*
|
||
|
* PciRevision - This is the PCI revision value from PCI configuration space
|
||
|
* for this adapter.
|
||
|
*
|
||
|
* HwBusMode - This value indicates the mode the bus is currently in. See the
|
||
|
* SYM_HW_BUS_MODE_xx macros.
|
||
|
*
|
||
|
* DevSpeed - This array is indexed by the target ID and indicates the
|
||
|
* currently negotiated synchronous speed in nano-seconds (ns). A value of
|
||
|
* zero ns indicates asynchronous mode.
|
||
|
*
|
||
|
* DevWidth - This array is indexed by the target ID and indicates the
|
||
|
* currently negotiated width in bits. A value of 8 indicates narrow mode, a
|
||
|
* value of 16 indicates wide.
|
||
|
*
|
||
|
* DriverVersion - This is an ascii null-terminated string indicating the
|
||
|
* version of this driver.
|
||
|
*
|
||
|
* DevFlags - This array is indexed by the target ID and indicates the
|
||
|
* currently negotiated options such as DT and async protection capabilities.
|
||
|
*/
|
||
|
#pragma pack(1)
|
||
|
typedef struct _SYMHI_DMI_DATA
|
||
|
{ /* Offset */
|
||
|
UINT32 StructureLength; /* 0x00..0x03 */
|
||
|
UINT32 Reserved1; /* 0x04..0x07 */
|
||
|
UINT32 MajorVersion; /* 0x08..0x0B */
|
||
|
UINT16 MinSyncPeriodNs; /* 0x0C..0x0D */
|
||
|
UINT8 MaxWidth; /* 0x0E */
|
||
|
UINT8 HostScsiId; /* 0x0F */
|
||
|
UINT8 PciBusNumber; /* 0x10 */
|
||
|
UINT8 PciDeviceNumber; /* 0x11 */
|
||
|
UINT8 PciFunctionNumber; /* 0x12 */
|
||
|
UINT8 Reserved2; /* 0x13 */
|
||
|
UINT16 PciDeviceId; /* 0x14..0x15 */
|
||
|
UINT8 PciRevision; /* 0x16 */
|
||
|
UINT8 HwBusMode; /* 0x17 */
|
||
|
UINT8 Reserved3[8]; /* 0x18..0x1F */
|
||
|
#if defined TARGET_MPTx
|
||
|
/* MPI adapters can have many more devices per SCSI bus than non-MPI
|
||
|
* adapters.
|
||
|
*/
|
||
|
UINT16 DevSpeed[256]; /* 0x20..0x21F */
|
||
|
UINT8 DevWidth[256]; /* 0x220..0x31F */
|
||
|
UINT32 DevFlags[256]; /* 0x320..0x71F */
|
||
|
char DriverVersion[80]; /* 0x720..0x76F */
|
||
|
#elif defined TARGET_HIHW || defined TARGET_SRHW
|
||
|
UINT16 DevSpeed[16]; /* 0x20..0x3F */
|
||
|
UINT8 DevWidth[16]; /* 0x40..0x4F */
|
||
|
char DriverVersion[80]; /* 0x50..0x9F */
|
||
|
UINT32 DevFlags[16]; /* 0xA0..0xDF */
|
||
|
#else
|
||
|
#error "Unknown hardware type"
|
||
|
#endif /* defined TARGET_xxx */
|
||
|
} SYMHI_DMI_DATA, * PTR_SYMHI_DMI_DATA;
|
||
|
#pragma pack()
|
||
|
|
||
|
/* The following are definitions for the value of HwBusMode in the
|
||
|
* SYMHI_DMI_DATA data structure.
|
||
|
*
|
||
|
* SYM_HW_BUS_MODE_UNKNOWN - The bus mode is not known yet
|
||
|
* SYM_HW_BUS_MODE_SINGLE - The bus is in single ended mode
|
||
|
* SYM_HW_BUS_MODE_HVD - The bus is in high voltage differential mode
|
||
|
* SYM_HW_BUS_MODE_LVD - The bus is in low voltage differential mode
|
||
|
* SYM_HW_BUS_MODE_FC - The bus is a fibre channel bus
|
||
|
*/
|
||
|
#define SYM_HW_BUS_MODE_UNKNOWN (0x00)
|
||
|
#define SYM_HW_BUS_MODE_SINGLE (0x01)
|
||
|
#define SYM_HW_BUS_MODE_HVD (0x02)
|
||
|
#define SYM_HW_BUS_MODE_LVD (0x03)
|
||
|
#define SYM_HW_BUS_MODE_FC (0x04)
|
||
|
|
||
|
/* The following are definitions for the DevFlags[] array. Each bit is set
|
||
|
* only when the feature is currently in use for the given device.
|
||
|
*
|
||
|
* SYM_DEV_DT - Set when Dual Transfers (ie. dual edge clock in use) enabled
|
||
|
* SYM_DEV_ASYNC_PROT - Set when asynchronous phase protection is enabled
|
||
|
*/
|
||
|
#define SYM_DEV_DT (0x00000001)
|
||
|
#define SYM_DEV_ASYNC_PROT (0x00000002)
|
||
|
|
||
|
#pragma pack(1)
|
||
|
typedef struct _SYM_UPDATE_FLASH
|
||
|
{
|
||
|
UINT64 PtrBuffer;
|
||
|
UINT32 ImageChecksum;
|
||
|
UINT32 ImageOffset;
|
||
|
UINT32 ImageSize;
|
||
|
UINT32 ImageType;
|
||
|
} SYM_UPDATE_FLASH, * PTR_SYM_UPDATE_FLASH;
|
||
|
#pragma pack()
|
||
|
|
||
|
#pragma pack(1)
|
||
|
typedef struct _SYM_GET_PROPERTY
|
||
|
{
|
||
|
UINT64 PtrName;
|
||
|
UINT64 PtrBuffer;
|
||
|
UINT32 NameLen;
|
||
|
UINT32 BufferLen;
|
||
|
UINT32 PropertyLen;
|
||
|
} SYM_GET_PROPERTY, * PTR_SYM_GET_PROPERTY;
|
||
|
#pragma pack()
|
||
|
|
||
|
#define SYM_PASS_THRU_NONE 0
|
||
|
#define SYM_PASS_THRU_READ 1
|
||
|
#define SYM_PASS_THRU_WRITE 2
|
||
|
#define SYM_PASS_THRU_BOTH 3
|
||
|
|
||
|
#pragma pack(1)
|
||
|
typedef struct _SYM_PASS_THRU
|
||
|
{
|
||
|
UINT64 PtrRequest;
|
||
|
UINT64 PtrReply;
|
||
|
UINT64 PtrData;
|
||
|
UINT32 RequestSize;
|
||
|
UINT32 ReplySize;
|
||
|
UINT32 DataSize;
|
||
|
UINT32 DataDirection;
|
||
|
UINT64 PtrDataOut;
|
||
|
UINT32 DataOutSize;
|
||
|
} SYM_PASS_THRU, * PTR_SYM_PASS_THRU;
|
||
|
#pragma pack()
|
||
|
|
||
|
#pragma pack(1)
|
||
|
typedef struct _SYM_PASS_THRU_TIMEOUT
|
||
|
{
|
||
|
UINT64 PtrRequest;
|
||
|
UINT64 PtrReply;
|
||
|
UINT64 PtrData;
|
||
|
UINT32 RequestSize;
|
||
|
UINT32 ReplySize;
|
||
|
UINT32 DataSize;
|
||
|
UINT32 DataDirection;
|
||
|
UINT64 PtrDataOut;
|
||
|
UINT32 DataOutSize;
|
||
|
UINT32 Timeout;
|
||
|
} SYM_PASS_THRU_TIMEOUT, * PTR_SYM_PASS_THRU_TIMEOUT;
|
||
|
#pragma pack()
|
||
|
|
||
|
#define REG_IO_READ 1
|
||
|
#define REG_IO_WRITE 2
|
||
|
#define REG_MEM_READ 3
|
||
|
#define REG_MEM_WRITE 4
|
||
|
|
||
|
#pragma pack(1)
|
||
|
typedef struct _SYM_REG_ACCESS
|
||
|
{
|
||
|
UINT32 Command;
|
||
|
UINT32 RegOffset;
|
||
|
UINT32 RegData;
|
||
|
} SYM_REG_ACCESS, * PTR_SYM_REG_ACCESS;
|
||
|
#pragma pack()
|
||
|
|
||
|
#pragma pack(1)
|
||
|
typedef struct _SYM_EVENT_QUERY
|
||
|
{
|
||
|
UINT32 Entries;
|
||
|
UINT32 Types;
|
||
|
} SYM_EVENT_QUERY, * PTR_SYM_EVENT_QUERY;
|
||
|
#pragma pack()
|
||
|
|
||
|
#pragma pack(1)
|
||
|
typedef struct _SYM_EVENT_ENABLE
|
||
|
{
|
||
|
UINT32 Types;
|
||
|
} SYM_EVENT_ENABLE, * PTR_SYM_EVENT_ENABLE;
|
||
|
#pragma pack()
|
||
|
|
||
|
#if defined TARGET_MPT2
|
||
|
#define EVENT_ENTRY_NUM 48
|
||
|
#else
|
||
|
#define EVENT_ENTRY_NUM 2
|
||
|
#endif
|
||
|
|
||
|
#pragma pack(1)
|
||
|
typedef struct _SYM_EVENT_ENTRY
|
||
|
{
|
||
|
UINT32 Type;
|
||
|
UINT32 Number;
|
||
|
UINT32 Data[EVENT_ENTRY_NUM];
|
||
|
} SYM_EVENT_ENTRY, * PTR_SYM_EVENT_ENTRY;
|
||
|
#pragma pack()
|
||
|
|
||
|
#pragma pack(1)
|
||
|
typedef struct _SYM_EVENT_REPORT
|
||
|
{
|
||
|
UINT32 Size;
|
||
|
SYM_EVENT_ENTRY Events[1];
|
||
|
} SYM_EVENT_REPORT, * PTR_SYM_EVENT_REPORT;
|
||
|
#pragma pack()
|
||
|
|
||
|
#pragma pack(1)
|
||
|
typedef struct _SYM_PCI_INFO
|
||
|
{
|
||
|
UINT32 BusNumber;
|
||
|
UINT8 DeviceNumber;
|
||
|
UINT8 FunctionNumber;
|
||
|
UINT16 InterruptVector;
|
||
|
UINT8 PciHeader[256];
|
||
|
} SYM_PCI_INFO, * PTR_SYM_PCI_INFO;
|
||
|
#pragma pack()
|
||
|
|
||
|
#pragma pack(1)
|
||
|
typedef struct _SYM_BTDH_MAPPING
|
||
|
{
|
||
|
UINT16 TargetID;
|
||
|
UINT16 Bus;
|
||
|
UINT16 DevHandle;
|
||
|
UINT16 Reserved;
|
||
|
} SYM_BTDH_MAPPING, * PTR_SYM_BTDH_MAPPING;
|
||
|
#pragma pack()
|
||
|
|
||
|
#pragma pack(1)
|
||
|
typedef struct _SYM_DIAG_ACTION
|
||
|
{
|
||
|
UINT32 Action;
|
||
|
UINT32 Length;
|
||
|
UINT64 PtrDiagAction;
|
||
|
UINT32 ReturnCode;
|
||
|
} SYM_DIAG_ACTION, * PTR_SYM_DIAG_ACTION;
|
||
|
#pragma pack()
|
||
|
|
||
|
#define FW_DIAGNOSTIC_BUFFER_COUNT (3)
|
||
|
#define FW_DIAGNOSTIC_UID_NOT_FOUND (0xFF)
|
||
|
|
||
|
#define MPI_FW_DIAG_NEW (0x806E6577)
|
||
|
|
||
|
#define MPI_FW_DIAG_TYPE_REGISTER (0x00000001)
|
||
|
#define MPI_FW_DIAG_TYPE_UNREGISTER (0x00000002)
|
||
|
#define MPI_FW_DIAG_TYPE_QUERY (0x00000003)
|
||
|
#define MPI_FW_DIAG_TYPE_READ_BUFFER (0x00000004)
|
||
|
#define MPI_FW_DIAG_TYPE_RELEASE (0x00000005)
|
||
|
|
||
|
#define MPI_FW_DIAG_INVALID_UID (0x00000000)
|
||
|
|
||
|
#define MPI_FW_DIAG_ERROR_SUCCESS (0x00000000)
|
||
|
#define MPI_FW_DIAG_ERROR_FAILURE (0x00000001)
|
||
|
#define MPI_FW_DIAG_ERROR_INVALID_PARAMETER (0x00000002)
|
||
|
#define MPI_FW_DIAG_ERROR_POST_FAILED (0x00000010)
|
||
|
#define MPI_FW_DIAG_ERROR_INVALID_UID (0x00000011)
|
||
|
#define MPI_FW_DIAG_ERROR_RELEASE_FAILED (0x00000012)
|
||
|
#define MPI_FW_DIAG_ERROR_NO_BUFFER (0x00000013)
|
||
|
#define MPI_FW_DIAG_ERROR_ALREADY_RELEASED (0x00000014)
|
||
|
|
||
|
#pragma pack(1)
|
||
|
typedef struct _MPI_FW_DIAG_REGISTER
|
||
|
{
|
||
|
UINT8 TraceLevel;
|
||
|
UINT8 BufferType;
|
||
|
UINT16 Flags;
|
||
|
UINT32 ExtendedType;
|
||
|
UINT32 ProductSpecific[4];
|
||
|
UINT32 RequestedBufferSize;
|
||
|
UINT32 UniqueId;
|
||
|
} MPI_FW_DIAG_REGISTER, * PTR_MPI_FW_DIAG_REGISTER;
|
||
|
#pragma pack()
|
||
|
|
||
|
#pragma pack(1)
|
||
|
typedef struct _MPI_FW_DIAG_UNREGISTER
|
||
|
{
|
||
|
UINT32 UniqueId;
|
||
|
} MPI_FW_DIAG_UNREGISTER, * PTR_MPI_FW_DIAG_UNREGISTER;
|
||
|
#pragma pack()
|
||
|
|
||
|
#define MPI_FW_DIAG_FLAG_APP_OWNED (0x0001)
|
||
|
#define MPI_FW_DIAG_FLAG_BUFFER_VALID (0x0002)
|
||
|
#define MPI_FW_DIAG_FLAG_FW_BUFFER_ACCESS (0x0004)
|
||
|
|
||
|
#pragma pack(1)
|
||
|
typedef struct _MPI_FW_DIAG_QUERY
|
||
|
{
|
||
|
UINT8 TraceLevel;
|
||
|
UINT8 BufferType;
|
||
|
UINT16 Flags;
|
||
|
UINT32 ExtendedType;
|
||
|
UINT32 ProductSpecific[4];
|
||
|
UINT32 TotalBufferSize;
|
||
|
UINT32 DriverAddedBufferSize;
|
||
|
UINT32 UniqueId;
|
||
|
} MPI_FW_DIAG_QUERY, * PTR_MPI_FW_DIAG_QUERY;
|
||
|
#pragma pack()
|
||
|
|
||
|
#pragma pack(1)
|
||
|
typedef struct _MPI_FW_DIAG_RELEASE
|
||
|
{
|
||
|
UINT32 UniqueId;
|
||
|
} MPI_FW_DIAG_RELEASE, * PTR_MPI_FW_DIAG_RELEASE;
|
||
|
#pragma pack()
|
||
|
|
||
|
#define MPI_FW_DIAG_FLAG_REREGISTER (0x0001)
|
||
|
#define MPI_FW_DIAG_FLAG_FORCE_RELEASE (0x0002)
|
||
|
|
||
|
#pragma pack(1)
|
||
|
typedef struct _MPI_FW_DIAG_READ_BUFFER
|
||
|
{
|
||
|
UINT8 Status;
|
||
|
UINT8 Reserved;
|
||
|
UINT16 Flags;
|
||
|
UINT32 StartingOffset;
|
||
|
UINT32 BytesToRead;
|
||
|
UINT32 UniqueId;
|
||
|
UINT32 DataBuffer[1];
|
||
|
} MPI_FW_DIAG_READ_BUFFER, * PTR_MPI_FW_DIAG_READ_BUFFER;
|
||
|
#pragma pack()
|
||
|
|
||
|
#endif
|