/***************************************************************************
* *
* 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 */