mirror of https://github.com/lianthony/NT4.0
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
325 lines
9.5 KiB
325 lines
9.5 KiB
/***************************************************************************
|
|
* *
|
|
* Copyright 1995 Symbios Logic Incorporated. All rights reserved. *
|
|
* *
|
|
* This file is confidential and a trade secret of Symbios 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 Symbios Logic Incorporated. *
|
|
* *
|
|
***************************************************************************/
|
|
|
|
/* Name: SYMNVM.H
|
|
* Title: NT's header file for NVRAM support
|
|
* $Workfile: symnvm.h $
|
|
* $Revision: 1.1 $
|
|
* $Modtime: 22 Sep 1995 13:03:58 $
|
|
* Programmer: Scott Masterson
|
|
* Creation Date: July 14, 1995
|
|
*
|
|
* Version History
|
|
* ---------------
|
|
*
|
|
* Date Who? Description
|
|
* -------- ---- -------------------------------------------------------
|
|
#BeginRevision
|
|
* 7/14/95 SAM Initial check in. For definitions of fields see the SDMS4.0
|
|
* bootrom files.
|
|
* 7/18/95 SAM updated structures to match major 0 minor 0x30 rev levels
|
|
* added IoPort field to HBA_INIT structure
|
|
#EndRevision
|
|
*
|
|
*
|
|
#BeginDescription
|
|
*
|
|
* This include file contains the definitions for the NT driver to read user
|
|
* set values in the nvram chip. The driver looks at the HBA ID and scam ID values.
|
|
* The structure version number for this code is major -0x00 minor -0x21.
|
|
* To get the definitions of the fields look at the SDMS4.0 bootrom include files
|
|
* ROMTYPES.H
|
|
* ROMPUBLC.H
|
|
* ROMSTRUC.H
|
|
* ROMSCAM.H
|
|
* ROMHW.H
|
|
* ROMBIOS.H
|
|
|
|
*
|
|
#EndDescription
|
|
*
|
|
*-------------------------------------------------------------------------
|
|
*
|
|
* $Header: P:/VCS/WINNT/DULUTH/SYMNVM.H_v 1.1 29 Feb 1996 13:50:46 SDENNY $
|
|
*
|
|
*/
|
|
|
|
/* If this header file has not been included yet */
|
|
#if ! defined SYMNVM_H
|
|
#define SYMNVM_H
|
|
|
|
/* Since all data structures must be byte aligned throughout this file, we
|
|
* issue the commands to perform that alignment once, and then restore the
|
|
* compilers default alignment at the end of this file.
|
|
*/
|
|
|
|
/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
|
* Non Volatile Memory types
|
|
*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
|
*/
|
|
|
|
/* NVS_VERSION_MAJOR and NVS_VERSION_MINOR are #defined to the revision of the
|
|
* main data structure (NON_VOLATILE_SETTINGS) in this document.
|
|
*/
|
|
|
|
#define NVS_VERSION_MAJOR (0x00)
|
|
#define NVS_VERSION_MINOR (0x30)
|
|
|
|
#define BI_MAX_HBA 4
|
|
#define HW_MAX_DEVICES 16
|
|
#define HW_MAX_SCAM_DEVICES 4
|
|
#define NVMDATAOFFSET 0x100
|
|
|
|
#define DATA_MASK 0x01
|
|
#define CLOCK_MASK 0x02
|
|
|
|
#define FAILURE (0)
|
|
#define SUCCESS (1)
|
|
|
|
typedef enum _HEADER_TYPE
|
|
{
|
|
HT_BOOT_ROM = 0,
|
|
HT_DOS_ASPI = 1,
|
|
HT_WINDOWS_ASPI = 2,
|
|
HT_NETWARE = 3,
|
|
HT_UNIXWARE = 4,
|
|
HT_SCO_UNIX = 5,
|
|
HT_WINDOWS_NT = 6,
|
|
HT_WINDOWS95 = 7,
|
|
HT_OS_2 = 8,
|
|
HT_SOLARIS = 9,
|
|
HT_INTERACTIVE = 10,
|
|
HT_NEXTSTEP = 11,
|
|
HT_END_MEMORY_BLOCK = 0xFEFE
|
|
} HEADER_TYPE;
|
|
|
|
typedef unsigned int UINT;
|
|
typedef unsigned char UINT8;
|
|
typedef unsigned int UINT16;
|
|
typedef unsigned long UINT32;
|
|
|
|
#define WIDE_NONE (8)
|
|
#define WIDE_16 (16)
|
|
#define WIDE_32 (32)
|
|
#define WIDE_NO_CHANGE (0xFF)
|
|
|
|
typedef UINT8 WIDE_PARAMETERS;
|
|
typedef USHORT IO_ADDRESS;
|
|
typedef UINT32 PHYS_ADDRESS;
|
|
|
|
typedef USHORT HBA_FLAGS;
|
|
#define HF_SCAM_ENABLED (0x0001)
|
|
#define HF_PARITY_ENABLED (0x0002)
|
|
#define HF_DISPLAY_VERBOSE_ENABLED (0x0004)
|
|
#define HF_NO_NON_VOLATILE_MEMORY (0x0008)
|
|
|
|
typedef UINT8 DEVICE_FLAGS;
|
|
#define DF_DISCONNECT_ENABLED (0x01)
|
|
#define DF_SCAN_ENABLED (0x02)
|
|
#define DF_LUNS_ENABLED (0x04)
|
|
#define DF_QT_ENABLED (0x08)
|
|
#define DF_ALL_FEATURES_ENABLED (DF_DISCONNECT_ENABLED | DF_SCAN_ENABLED | \
|
|
DF_LUNS_ENABLED | DF_QT_ENABLED)
|
|
|
|
typedef enum MEMORY_STATUS
|
|
{
|
|
MS_GOOD = 0,
|
|
MS_ILLEGAL_ADDRESS,
|
|
MS_GENERAL_ERROR
|
|
} MEMORY_STATUS;
|
|
|
|
typedef enum _TERMINATION_STATE
|
|
{
|
|
TS_CANT_PROGRAM = 0,
|
|
TS_ENABLED = 1,
|
|
TS_DISABLED = 2
|
|
} TERMINATION_STATE;
|
|
|
|
typedef enum _ADAPTER_TYPE
|
|
{
|
|
AT_UNKNOWN = 0,
|
|
AT_400A = 1,
|
|
AT_406A = 2,
|
|
AT_416 = 3,
|
|
AT_8XX = 4
|
|
} ADAPTER_TYPE;
|
|
|
|
typedef struct _ADAPTER_IO_INFO
|
|
{
|
|
USHORT RangeSize;
|
|
IO_ADDRESS IoBasePort;
|
|
} ADAPTER_IO_INFO, * PTR_ADAPTER_IO_INFO;
|
|
|
|
typedef struct _ADAPTER_MEMORY_INFO
|
|
{
|
|
PHYS_ADDRESS PhyMemoryBase;
|
|
UINT8 *VirtMemoryBase;
|
|
} ADAPTER_MEMORY_INFO, * PTR_ADAPTER_MEMORY_INFO;
|
|
|
|
typedef struct _ADAPTER_416_INFO
|
|
{
|
|
UINT32 DeviceId;
|
|
UINT32 SerialNumber;
|
|
} ADAPTER_416_INFO, * PTR_ADAPTER_416_INFO;
|
|
|
|
typedef struct _ADAPTER_8XX_INFO
|
|
{
|
|
USHORT DeviceId;
|
|
USHORT VendorId;
|
|
UINT8 BusNumber;
|
|
UINT8 BusIndex;
|
|
} ADAPTER_8XX_INFO, * PTR_ADAPTER_8XX_INFO;
|
|
|
|
typedef union _ADAPTER_INFO
|
|
{
|
|
ADAPTER_416_INFO Hba416;
|
|
ADAPTER_8XX_INFO Hba8xx;
|
|
ADAPTER_IO_INFO HbaIo;
|
|
ADAPTER_MEMORY_INFO HbaMemory;
|
|
} ADAPTER_INFO, * PTR_ADAPTER_INFO;
|
|
|
|
typedef enum _SCAN_ORDER
|
|
{
|
|
SO_LOW_TO_HIGH = 0,
|
|
SO_HIGH_TO_LOW = 1
|
|
} SCAN_ORDER;
|
|
|
|
typedef enum _REMOVABLE_MEDIA
|
|
{
|
|
RM_NO_SUPPORT = 0,
|
|
RM_BOOT_DEVICE_ONLY = 1,
|
|
RM_MEDIA_INSTALLED_ONLY = 2
|
|
} REMOVABLE_MEDIA;
|
|
|
|
typedef struct _HBA_INIT
|
|
{
|
|
USHORT Type;
|
|
ADAPTER_INFO HbaInfo;
|
|
BOOLEAN InitStatus;
|
|
IO_ADDRESS IoPort;
|
|
} HBA_INIT, * PTR_HBA_INIT;
|
|
|
|
typedef struct _DEVICE_TABLE
|
|
{
|
|
USHORT Flags; // 8 bits
|
|
UINT8 Reserved;
|
|
USHORT WideDataBits; // 8 bits
|
|
UINT8 SyncOffset;
|
|
USHORT SyncPeriodNs;
|
|
USHORT Timeout;
|
|
} DEVICE_TABLE, * PTR_DEVICE_TABLE;
|
|
|
|
typedef struct _SCAM_IDENTIFIER
|
|
{
|
|
UINT8 DeviceType[ 2 ];
|
|
char VendorId[ 8 ];
|
|
char VendorSpecific[ 21 ];
|
|
UINT8 Reserved;
|
|
} SCAM_IDENTIFIER, * PTR_SCAM_IDENTIFIER;
|
|
|
|
typedef enum _SCAM_ID_METHOD
|
|
{
|
|
SIM_DEFAULT_METHOD = 0,
|
|
SIM_DONT_ASSIGN = 1,
|
|
SIM_SET_SPECIFIC_ID = 2,
|
|
SIM_USE_ORDER_GIVEN = 3
|
|
} SCAM_ID_METHOD;
|
|
|
|
typedef enum _SCAM_STATUS
|
|
{
|
|
SS_UNKNOWN = 0,
|
|
SS_DEVICE_NOT_FOUND = 1,
|
|
SS_ID_NOT_SET = 2,
|
|
SS_ID_VALID = 3
|
|
} SCAM_STATUS;
|
|
|
|
typedef struct _SCAM_TABLE
|
|
{
|
|
USHORT ScamId;
|
|
USHORT HowToSetId;
|
|
USHORT ScamStatus;
|
|
UINT8 ScamTargetId;
|
|
UINT8 Reserved;
|
|
} SCAM_TABLE, * PTR_SCAM_TABLE;
|
|
|
|
typedef struct _NVM_HEADER
|
|
{
|
|
USHORT Type;
|
|
USHORT Length;
|
|
USHORT CheckSum;
|
|
} NVM_HEADER, * PTR_NVM_HEADER;
|
|
|
|
typedef SCAM_TABLE NVM_SCAM_DATA;
|
|
typedef PTR_SCAM_TABLE PTR_NVM_SCAM_DATA;
|
|
|
|
|
|
typedef struct _NON_VOLATILE_SETTINGS
|
|
{
|
|
UINT8 VersionMajor;
|
|
UINT8 VersionMinor;
|
|
UINT8 BootCrc[4]; // changed def. to match our compiler
|
|
USHORT HbaFlags;
|
|
USHORT ScanOrder;
|
|
USHORT TerminatorState;
|
|
USHORT RemovableMediaSetting;
|
|
UINT8 HostScsiId;
|
|
UINT8 NumHba;
|
|
UINT8 NumDevices;
|
|
UINT8 MaxScamDevices;
|
|
UINT8 NumValidScamDevices;
|
|
UINT8 Reserved;
|
|
HBA_INIT HbaInit[ BI_MAX_HBA ];
|
|
DEVICE_TABLE DeviceTable[ HW_MAX_DEVICES ];
|
|
NVM_SCAM_DATA ScamTable[ HW_MAX_SCAM_DEVICES ];
|
|
UINT8 freespace[1024]; // this added by NT so we can read past end
|
|
// of the NVRAM structure to get all data
|
|
// used for checksum
|
|
|
|
} NON_VOLATILE_SETTINGS, * PTR_NON_VOLATILE_SETTINGS;
|
|
|
|
|
|
/* Define some macros to access the offsets of particular portions of this
|
|
* data structure. These macros are then used to allow the code to more
|
|
* easily program only those parts of non-volatile memory which might have
|
|
* changed when the user issues a set NVM call.
|
|
*/
|
|
|
|
#define NVS_ADAPTER_BEGIN (offsetof(struct _NON_VOLATILE_SETTINGS, HbaFlags))
|
|
#define NVS_ADAPTER_END (offsetof(struct _NON_VOLATILE_SETTINGS, \
|
|
DeviceTable[ 0 ]))
|
|
#define NVS_ADAPTER_LENGTH (NVS_ADAPTER_END - NVS_ADAPTER_BEGIN)
|
|
|
|
#define NVS_DEVICE_BEGIN(x) (offsetof(struct _NON_VOLATILE_SETTINGS, \
|
|
DeviceTable[(x)]))
|
|
#define NVS_DEVICE_END(x) (offsetof(struct _NON_VOLATILE_SETTINGS, \
|
|
DeviceTable[(x)+1]))
|
|
#define NVS_DEVICE_LENGTH (sizeof( DEVICE_TABLE ))
|
|
|
|
#if HW_MAX_SCAM_DEVICES != 0
|
|
#define NVS_SCAM_BEGIN (offsetof(struct _NON_VOLATILE_SETTINGS, \
|
|
ScamTable[0]))
|
|
#define NVS_SCAM_END (sizeof(NON_VOLATILE_SETTINGS))
|
|
#define NVS_SCAM_LENGTH (NVS_SCAM_END - NVS_SCAM_BEGIN)
|
|
#endif
|
|
|
|
/* NVM_DATA_SIZE defines the number of bytes of data we need to access the
|
|
* NVM header structure and the NVM data structure for our ROM.
|
|
*/
|
|
|
|
#define NVM_DATA_SIZE (sizeof(NVM_HEADER) + sizeof(NON_VOLATILE_SETTINGS))
|
|
|
|
/* We are now done with the requirement of forcing byte alignment on all
|
|
* elements so restore the compilers default structure alignment.
|
|
*/
|
|
|
|
#endif /* End of if SYMNVM_H */
|
|
|