Files
scst/qla_isp/linux/exioct.h
Vladislav Bolkhovitin 1213800b2f Patch from Bart Van Assche <bart.vanassche@gmail.com>, except few chuncks from qla2x00t/ obviously not related to the target mode addon:
One of the Linux kernel patch submission requirements is that source files do
not contain trailing whitespace. The patch below removes trailing whitespace
from .c and .h source files.

Note: it might be more convenient to run the script I used to generate this
patch than to review and apply the patch below. This is how I generated and
verified the patch below:

cat <<EOF >./strip-trailing-whitespace
#!/bin/bash
trap "rm -f $t" EXIT
t=/tmp/temporary-file.$$
for f in "$@"
do
  sed 's/[	 ]*$//' <"$f" >"$t" && mv "$t" "$f"
done
EOF
chmod a+x ./strip-trailing-whitespace
find -name '*.[ch]' | xargs ./strip-trailing-whitespace
svn diff -x -w

Signed-off-by: <bart.vanassche@gmail.com>



git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@377 d57e44dd-8a1f-0410-8b47-8ef2f437770f
2008-05-19 10:21:41 +00:00

1114 lines
34 KiB
C

/******************************************************************************
* QLOGIC LINUX SOFTWARE
*
* QLogic ISP2x00 device driver for Linux 2.4.x
* Copyright (C) 2005 QLogic Corporation
* (www.qlogic.com)
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
* Free Software Foundation; either version 2, or (at your option) any
* later version.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
******************************************************************************/
/*
* File Name: exioct.h
*
* San/Device Management Ioctl Header
* File is created to adhere to Solaris requirement using 8-space tabs.
*
* !!!!! PLEASE DO NOT REMOVE THE TABS !!!!!
* !!!!! PLEASE NO SINGLE LINE COMMENTS: // !!!!!
* !!!!! PLEASE NO MORE THAN 80 CHARS PER LINE !!!!!
*
* Revision History:
*
* Rev. 0 March 1, 2000
* YPL - Created.
*
* Rev. 1 March 2, 2000
* RLU - Updated with latest definitions. Added more comments.
*
* Rev. 2 May 16, 2000
* SP - Updated definitions and changed structures (March 27, 2000)
* SP - Addded structures
*
* Rev. 3 June 1, 2000
* THL - Made major changes to include all changes talked in our meeting.
*
* Rev. 4 June 5, 2000
* RLU - Added new definitions/structures for SDM_GET_AEN and SDM_REG_AEN
* functions.
* - Major definition/structure name changes as discussed in meetings.
* - Deleted duplicated command code and structure definitions.
*
* Rev. 4.1 June 14, 2000
* WTR - Moved Solaris specific defines to exioctso.h. This makes it
* possible for application developers to include only exioct.h
* in their Solaris application development.
*
* Rev. 4.2 June 15, 2000
* THL - Changed UINT16 and UINT32 back to WORD and DWORD for NT; otherwise,
* NT will get a compilation error for redefining UINT16 and UINT32.
* Added RISC_CODE/FLASH_RAM macros.
*
* Rev. 4.3 June 22, 2000
* THL - Changed SDM_FC_ADDR according to External Ioctls document.
* Added SDM_DEF_TYPE macros.
*
* Rev. 4.4 June 22, 2000
* THL - Moved NT specific defines to exioctnt.h.
*
* Rev. 4.5 August 15, 2000
* SP - Rolled back some changes made by Todd R.
* Kept new status code SDM_STATUS_NO_MEMORY
* Port types fabric and tape device
*
* Rev. 4.7 Sep 6, 2000
* YPL - Replace SDM_ with EXT_, _ISP with _CHIP.
* Add vendor specific statuses, device update, config defines.
*
* Rev. 5.0 Sep 13, 2000
* YPL - Update version to 5, remove max defines, make port type bit.
* Change HBA_PORT_PROPERTY to have bus/target/lun defined as UINT16
*
* Rev. 5.1 Sep 22, 2000
* THL - Add destination address for specify scsi address or FC address.
* Remove "not support" comment and add more macros.
*
* Rev. 5.2 Sep 27, 2000
* THL - Add new macros and structure for add and swap target device.
* Create new data structure for get port database.
* TLE - Merge changes needed for FailOver
*
* Rev. 5.3 Sep 29, 2000
* THL - Add access mode for NVRAM.
*
* Rev. 5.4 Oct 03, 2000
* THL - Add EXT_SC_GET_FC_STATISTICS.
*
* Rev. 5.5 Oct 18, 2000
* THL - Remove duplicated EXT_DEF_ADDR_MODE_32 and EXT_DEF_ADDR_MODE_16.
* Reformat new data structures and defines.
*
* Rev. 5.6 Oct 19, 2000
* RLU - Changed file name from ExIoct.h to exioct.h.
* - Added definition of EXT_RNID_DATA for API implementation.
* - Reformat some lines to conform to the format agreed
* upon in IOCTL meeting (and mentioned at beginning of
* this file).
*
* Rev. 5.7 Oct 25, 2000
* BN - Added LUN bitmask structure and macros
*
* Rev. 5.8 Oct 25, 2000
* BN - Added EXT_CC_DRIVER_PROP define
*
* Rev. 5.9 Oct 26, 2000
* BN - Sync with UnixApi project
*
* Rev. 5.10 Oct 30, 2000
* BN - Remove not needed #define for EXT_CC_DRIVER_PROP
* - Add EXT_ to IS_LUN_BIT_SET, SET_LUN_BIT, CLR_LUN_BIT
*
* Rev. 5.11 Nov 1, 2000
* BN - Increased [1] of EXT_DEVICEDATA to [EXT_MAX_TARGET]
* TLE - Decreased [EXT_MAX_TARGET] of EXT_DEVICEDATA to [1]
*
* Rev. 5.12 Nov 7, 2000
* RLU - Deleted EXT_DEF_MAX_LUNS define and changed all references
* to it to use EXT_MAX_LUN.
* - Changed the revision numbers for the last 2 revisions down
* to use 5.x.
*
* Rev. 5.13 Nov 14, 2000
* WTR - Fixed pointer referencing problem in the LUN_BIT_MASK macros.
* Updated comment at bit mask definition.
*
* Rev. 5.14 Dec 6, 2000
* THL - Added Local and LoopID to discovered port/target property.
*
* Rev. 5.15 Dec 24, 2000
* YPL - Enhance port connection modes and driver attrib
*
* Rev. 5.16 Dec 27, 2000
* TLE - Add BufferHandle member to _EXT_ASYNC_EVENT data structure for
* SCTP support
*
* Rev. 5.17 Jan 10, 2001
* YPL - Add edtov, ratov & fabric name in port property
*
* Rev. 5.18 Feb 28, 2001
* YPL - Remove SCTP fields and add fabric parameter flags in port property
*
* Rev. 5.19 Mar 08, 2001
* YPL - Remove SCTP fields from hba port prop
*
* Rev. 5.20 June 11, 2001
* YPL - Change to reserved fields and add fabric name field in port property
*
* Rev. 5.21 June 29, 2001
* YPL - Merge in changes decided long time ago (use _DEF_ for defines) &
* reserved some EXT_CC for legacy ioctls, plus add RNID dataformat
* values definition
*
* Rev. 5.21 Sep 18, 2001
* SP - Added New return status codes
*
* Rev. 5.22 Oct 23, 2001
* SP - Change reserve fields to add fields to EXT_HBA_PORT
* Added port speeds and FC4Types fields and related definitions
*
* Rev. 5.23 Dec 04, 2001
* RL - Added port speed value definition.
*
* Rev. 5.24 Jan 20, 2002
* JJ - Added PCI device function bits field in EXT_CHIP structure.
*
* Rev. 5.25 Feb 04, 2002
* JJ - Added 16 bytes CDB support. Also added SenseLength field
* in SCSI_PASSTHRU structure.
*
* Rev. 5.26 Feb 12, 2002
* AV - Changed type size used in SCSI_PASSTHRU structure definitions
* to re-enable gcc's automatic structure padding for backward
* compatibility.
*
* Rev. 5.27 Mar 01, 2002
* RL - Added new SC value for SCSI3 command passthru.
*
* Rev. 5.28 Dec 09, 2002
* Sync up with NT version of exioct.h:
* TLE - Modify EXT_RNID_REQ data structure for IBM SendRNID workaround
* YPL - Add firmware state (online diagnostics)
* YPL - Add ELS PS
* YPL - Add els event, # of els buffers & size
*
* Rev. 5.29 April 21, 2003
* RA - Defined the structure EXT_BEACON_CONTROL and subcommand code:
* EXT_SC_GET_BEACON_STATE,EXT_SC_SET_BEACON_STATE for the
* led blinking feature.
*
* Rev. 5.30 July 21, 2003
* RL - Added new statistics fields in HBA_PORT_STAT struct.
*
* Rev. 5.31 September 19, 2003
* RL - Added new command subcode EXT_SC_GET_FC4_STATISTICS.
*
* Rev. 5.32 September 29, 2003
* RL - Define new command subcodes for both EXT_CC_REG_AEN & EXT_CC_GET_AEN:
* EXT_SC_REG_AEN_DEFAULT, EXT_SC_REG_AEN_HBA_PORT, EXT_SC_REG_AEN_TGTS,
* EXT_SC_GET_AEN_DEFAULT, EXT_SC_GET_AEN_HBA_PORT, EXT_SC_GET_AEN_TGTS.
* - Modified EXT_REG_AEN structure to return the buffer length allocated
* for the given type of event queue registered.
*
* Rev. 5.33 August 20, 2004
* RL - Changed references to UINT64 to UINT64_O so that UINT64 can be
* changed to true 64bit uint64_t.
* - Added new EXT_IOCTL structure definition and renamed old structure.
*
* Rev. 5.34 September 29, 2004
* RL - Packing the EXT_IOCTL structure.
*
* Rev. 5.35 February 18, 2005
* RL - Added DomainNr field in the EXT_CHIP structure to return PCI
* domain number used in Linux 2.6 kernel.
* - Added new PORTSPEED definitions.
*
* Rev. 5.36 October 11, 2005
* RL - Added EXT_SC_GET_LUN_BY_Q subcode.
*/
#ifndef _EXIOCT_H
#define _EXIOCT_H
/*
* NOTE: the following version defines must be updated each time the
* changes made may affect the backward compatibility of the
* input/output relations of the SDM IOCTL functions.
*/
#define EXT_VERSION 7
#define EXT_VERSION_O 5
/*
* OS independent General definitions
*/
#define EXT_DEF_SIGNATURE_SIZE 8
#define EXT_DEF_WWN_NAME_SIZE 8
#define EXT_DEF_WWP_NAME_SIZE 8
#define EXT_DEF_SERIAL_NUM_SIZE 4
#define EXT_DEF_PORTID_SIZE 4
#define EXT_DEF_PORTID_SIZE_ACTUAL 3
#define EXT_DEF_MAX_STR_SIZE 128
#define EXT_DEF_SCSI_PASSTHRU_CDB_LENGTH 16
#define EXT_DEF_ADDR_MODE_32 1
#define EXT_DEF_ADDR_MODE_64 2
/*
* ***********************************************************************
* X OS type definitions
* ***********************************************************************
*/
#ifdef _MSC_VER /* NT */
#pragma pack(1)
#include "ExIoctNT.h"
#elif defined(linux) /* Linux */
#include "exioctln.h"
#elif defined(sun) || defined(__sun) /* Solaris */
#include "exioctso.h"
#endif
/*
* ***********************************************************************
* OS dependent General configuration defines
* ***********************************************************************
*/
#define EXT_DEF_MAX_HBA EXT_DEF_MAX_HBA_OS
#define EXT_DEF_MAX_BUS EXT_DEF_MAX_BUS_OS
#define EXT_DEF_MAX_TARGET EXT_DEF_MAX_TARGET_OS
#define EXT_DEF_MAX_LUN EXT_DEF_MAX_LUN_OS
/*
* ***********************************************************************
* Common header struct definitions for San/Device Mgmt
* ***********************************************************************
*/
typedef struct {
UINT64_O Signature; /* 8 or 4 */
UINT16 AddrMode; /* 2 */
UINT16 Version; /* 2 */
UINT16 SubCode; /* 2 */
UINT16 Instance; /* 2 */
UINT32 Status; /* 4 */
UINT32 DetailStatus; /* 4 */
UINT32 Reserved1; /* 4 */
UINT32 RequestLen; /* 4 */
UINT32 ResponseLen; /* 4 */
UINT64_O RequestAdr; /* 8 or 4 */
UINT64_O ResponseAdr; /* 8 or 4 */
UINT16 HbaSelect; /* 2 */
UINT16 VendorSpecificStatus[11]; /* 22 */
UINT64_O VendorSpecificData; /* 8 or 4 */
} EXT_IOCTL_O, *PEXT_IOCTL_O; /* 84 or 68 / 0x54 or 0x44 */
typedef struct {
UINT64 Signature; /* 8 chars string */
UINT16 AddrMode; /* 2 */
UINT16 Version; /* 2 */
UINT16 SubCode; /* 2 */
UINT16 Instance; /* 2 */
UINT32 Status; /* 4 */
UINT32 DetailStatus; /* 4 */
UINT32 Reserved1; /* 4 */
UINT32 RequestLen; /* 4 */
UINT32 ResponseLen; /* 4 */
UINT64 RequestAdr; /* 8 */
UINT64 ResponseAdr; /* 8 */
UINT16 HbaSelect; /* 2 */
UINT16 VendorSpecificStatus[11]; /* 22 */
UINT64 VendorSpecificData; /* 8 chars string */
UINT16 Reserved2[16]; /* 32 */
} __attribute__((packed)) EXT_IOCTL, *PEXT_IOCTL; /* 116 / 0x74 */
/*
* Addressing mode used by the user application
*/
#define EXT_ADDR_MODE EXT_ADDR_MODE_OS
/*
* Status. These macros are being used for setting Status field in
* EXT_IOCTL structure.
*/
#define EXT_STATUS_OK 0
#define EXT_STATUS_ERR 1
#define EXT_STATUS_BUSY 2
#define EXT_STATUS_PENDING 3
#define EXT_STATUS_SUSPENDED 4
#define EXT_STATUS_RETRY_PENDING 5
#define EXT_STATUS_INVALID_PARAM 6
#define EXT_STATUS_DATA_OVERRUN 7
#define EXT_STATUS_DATA_UNDERRUN 8
#define EXT_STATUS_DEV_NOT_FOUND 9
#define EXT_STATUS_COPY_ERR 10
#define EXT_STATUS_MAILBOX 11
#define EXT_STATUS_UNSUPPORTED_SUBCODE 12
#define EXT_STATUS_UNSUPPORTED_VERSION 13
#define EXT_STATUS_MS_NO_RESPONSE 14
#define EXT_STATUS_SCSI_STATUS 15
#define EXT_STATUS_BUFFER_TOO_SMALL 16
#define EXT_STATUS_NO_MEMORY 17
#define EXT_STATUS_UNKNOWN 18
#define EXT_STATUS_UNKNOWN_DSTATUS 19
#define EXT_STATUS_INVALID_REQUEST 20
#define EXT_STATUS_DEVICE_NOT_READY 21
#define EXT_STATUS_DEVICE_OFFLINE 22
#define EXT_STATUS_HBA_NOT_READY 23
#define EXT_STATUS_HBA_QUEUE_FULL 24
/*
* Detail Status contains the SCSI bus status codes.
*/
#define EXT_DSTATUS_GOOD 0x00
#define EXT_DSTATUS_CHECK_CONDITION 0x02
#define EXT_DSTATUS_CONDITION_MET 0x04
#define EXT_DSTATUS_BUSY 0x08
#define EXT_DSTATUS_INTERMEDIATE 0x10
#define EXT_DSTATUS_INTERMEDIATE_COND_MET 0x14
#define EXT_DSTATUS_RESERVATION_CONFLICT 0x18
#define EXT_DSTATUS_COMMAND_TERMINATED 0x22
#define EXT_DSTATUS_QUEUE_FULL 0x28
/*
* Detail Status contains the needed Response buffer space(bytes)
* when Status = EXT_STATUS_BUFFER_TOO_SMALL
*/
/*
* Detail Status contains one of the following codes
* when Status = EXT_STATUS_INVALID_PARAM or
* = EXT_STATUS_DEV_NOT_FOUND
*/
#define EXT_DSTATUS_NOADNL_INFO 0x00
#define EXT_DSTATUS_HBA_INST 0x01
#define EXT_DSTATUS_TARGET 0x02
#define EXT_DSTATUS_LUN 0x03
#define EXT_DSTATUS_REQUEST_LEN 0x04
#define EXT_DSTATUS_PATH_INDEX 0x05
/*
* Currently supported DeviceControl / ioctl command codes
*/
#define EXT_CC_QUERY EXT_CC_QUERY_OS
#define EXT_CC_SEND_FCCT_PASSTHRU EXT_CC_SEND_FCCT_PASSTHRU_OS
#define EXT_CC_REG_AEN EXT_CC_REG_AEN_OS
#define EXT_CC_GET_AEN EXT_CC_GET_AEN_OS
#define EXT_CC_SEND_ELS_RNID EXT_CC_SEND_ELS_RNID_OS
#define EXT_CC_SEND_SCSI_PASSTHRU EXT_CC_SCSI_PASSTHRU_OS
#define EXT_CC_SEND_ELS_PASSTHRU EXT_CC_SEND_ELS_PASSTHRU_OS
/*
* HBA port operations
*/
#define EXT_CC_GET_DATA EXT_CC_GET_DATA_OS
#define EXT_CC_SET_DATA EXT_CC_SET_DATA_OS
/* Reserved command codes. */
#define EXT_CC_RESERVED0A EXT_CC_RESERVED0A_OS
#define EXT_CC_RESERVED0B EXT_CC_RESERVED0B_OS
#define EXT_CC_RESERVED0C EXT_CC_RESERVED0C_OS
#define EXT_CC_RESERVED0D EXT_CC_RESERVED0D_OS
#define EXT_CC_RESERVED0E EXT_CC_RESERVED0E_OS
#define EXT_CC_RESERVED0F EXT_CC_RESERVED0F_OS
#define EXT_CC_RESERVED0G EXT_CC_RESERVED0G_OS
#define EXT_CC_RESERVED0H EXT_CC_RESERVED0H_OS
#define EXT_CC_RESERVED0I EXT_CC_RESERVED0I_OS
#define EXT_CC_RESERVED0J EXT_CC_RESERVED0J_OS
#define EXT_CC_RESERVED0Z EXT_CC_RESERVED0Z_OS
/*
* ***********************************************************************
* EXT_IOCTL SubCode definition.
* These macros are being used for setting SubCode field in EXT_IOCTL
* structure.
* ***********************************************************************
*/
/*
* Query.
* Uses with EXT_QUERY as the ioctl code.
*/
#define EXT_SC_QUERY_HBA_NODE 1
#define EXT_SC_QUERY_HBA_PORT 2
#define EXT_SC_QUERY_DISC_PORT 3
#define EXT_SC_QUERY_DISC_TGT 4
#define EXT_SC_QUERY_DISC_LUN 5 /* Currently Not Supported */
#define EXT_SC_QUERY_DRIVER 6
#define EXT_SC_QUERY_FW 7
#define EXT_SC_QUERY_CHIP 8
/*
* Sub codes for Reg AEN.
* Use in combination with EXT_CC_REG_AEN
*/
#define EXT_SC_REG_AEN_DEFAULT 0 /* default events to record.*/
#define EXT_SC_REG_AEN_HBA_PORT 1 /* enable hba port events */
#define EXT_SC_REG_AEN_TGTS 2 /* enable target events */
/*
* Sub codes for Get AEN.
* Use in combination with EXT_CC_GET_AEN
*/
#define EXT_SC_GET_AEN_DEFAULT 0 /* default events to record.*/
#define EXT_SC_GET_AEN_HBA_PORT 1 /* get hba port events */
#define EXT_SC_GET_AEN_TGTS 2 /* get target events */
/*
* Sub codes for Get Data.
* Use in combination with EXT_GET_DATA as the ioctl code
*/
/* 1 - 99 Common */
#define EXT_SC_GET_SCSI_ADDR 1 /* Currently Not Supported */
#define EXT_SC_GET_ERR_DETECTIONS 2 /* Currently Not Supported */
#define EXT_SC_GET_STATISTICS 3
#define EXT_SC_GET_BUS_MODE 4 /* Currently Not Supported */
#define EXT_SC_GET_DR_DUMP_BUF 5 /* Currently Not Supported */
#define EXT_SC_GET_RISC_CODE 6 /* Currently Not Supported */
#define EXT_SC_GET_FLASH_RAM 7 /* for backward compatible */
#define EXT_SC_GET_BEACON_STATE 8
#define EXT_SC_GET_FC4_STATISTICS 9
#define EXT_SC_GET_LUN_BY_Q 10
/* 100 - 199 FC_INTF_TYPE */
#define EXT_SC_GET_LINK_STATUS 101 /* Currently Not Supported */
#define EXT_SC_GET_LOOP_ID 102 /* Currently Not Supported */
#define EXT_SC_GET_LUN_BITMASK 103
#define EXT_SC_GET_PORT_DATABASE 104 /* Currently Not Supported */
#define EXT_SC_GET_PORT_DATABASE_MEM 105 /* Currently Not Supported */
#define EXT_SC_GET_PORT_SUMMARY 106
#define EXT_SC_GET_POSITION_MAP 107
#define EXT_SC_GET_RETRY_CNT 108 /* Currently Not Supported */
#define EXT_SC_GET_RNID 109
#define EXT_SC_GET_RTIN 110 /* Currently Not Supported */
#define EXT_SC_GET_FC_LUN_BITMASK 111
#define EXT_SC_GET_FC_STATISTICS 112 /* for backward compatible */
/* 200 - 299 SCSI_INTF_TYPE */
#define EXT_SC_GET_SEL_TIMEOUT 201 /* Currently Not Supported */
/*
* Sub codes for Set Data.
* Use in combination with EXT_SET_DATA as the ioctl code
*/
/* 1 - 99 Common */
#define EXT_SC_RST_STATISTICS 3
#define EXT_SC_RESERVED_BC7 7
#define EXT_SC_SET_BEACON_STATE 8
/* 100 - 199 FC_INTF_TYPE */
#define EXT_SC_SET_LUN_BITMASK 103
#define EXT_SC_SET_RNID 109
#define EXT_SC_SET_FC_LUN_BITMASK 111
#define EXT_SC_RESERVED_BC112 112
#define EXT_SC_RESERVED_BC113 113
/* 200 - 299 SCSI_INTF_TYPE */
/* SCSI passthrough */
#define EXT_SC_SEND_SCSI_PASSTHRU 0
#define EXT_SC_SEND_FC_SCSI_PASSTHRU 1
#define EXT_SC_SCSI3_PASSTHRU 2
/* Read */
/* Write */
/* Reset */
/* Request struct */
#define EXT_HN_BI_FW_VALID 1
#define EXT_HN_BI_EFI_VALID 2
#define EXT_HN_BI_FCODE_VALID 4
/*
* Response struct
*/
typedef struct _EXT_HBA_NODE {
UINT8 WWNN [EXT_DEF_WWN_NAME_SIZE]; /* 8 */
UINT8 Manufacturer [EXT_DEF_MAX_STR_SIZE]; /* 128; "QLOGIC" */
UINT8 Model [EXT_DEF_MAX_STR_SIZE]; /* 128; "QLA2200" */
UINT8 SerialNum [EXT_DEF_SERIAL_NUM_SIZE];/* 4; 123 */
UINT8 DriverVersion[EXT_DEF_MAX_STR_SIZE]; /* 128; "7.4.3" */
UINT8 FWVersion [EXT_DEF_MAX_STR_SIZE]; /* 128; "2.1.6" */
/* The following field is currently not supported */
UINT8 OptRomVersion[EXT_DEF_MAX_STR_SIZE]; /* 128; "1.44" */
UINT16 PortCount; /* 2; 1 */
UINT16 InterfaceType; /* 2; FC/SCSI */
/* The following two fields are not yet supported */
UINT32 DriverAttr; /* 4 */
UINT32 FWAttr; /* 4 */
UINT32 BIValid; /* 4 */
UINT8 BIFwVersion[4]; /* 4 */
UINT8 BIEfiVersion[4]; /* 4 */
UINT8 BIFCodeVersion[4]; /* 4 */
UINT32 Reserved[4]; /* 16 */
} EXT_HBA_NODE, *PEXT_HBA_NODE; /* 696 */
/* HBA node query interface type */
#define EXT_DEF_FC_INTF_TYPE 1
#define EXT_DEF_SCSI_INTF_TYPE 2
typedef struct _EXT_HBA_PORT {
UINT8 WWPN[EXT_DEF_WWN_NAME_SIZE]; /* 8 */
UINT8 Id [EXT_DEF_PORTID_SIZE]; /* 4; 3 bytes valid Port Id. */
UINT16 Type; /* 2; Port Type */
UINT16 State; /* 2; Port State */
UINT16 Mode; /* 2 */
UINT16 DiscPortCount; /* 2 */
UINT16 DiscPortNameType; /* 2; USE_NODE_NAME or */
/* USE_PORT_NAME */
UINT16 DiscTargetCount; /* 2 */
UINT16 Bus; /* 2 */
UINT16 Target; /* 2 */
UINT16 Lun; /* 2 */
/* 2 */
UINT8 PortSupportedFC4Types;
UINT8 PortActiveFC4Types;
UINT8 FabricName[EXT_DEF_WWN_NAME_SIZE]; /* 8 */
/* 2*/
UINT8 PortSupportedSpeed;
UINT8 PortSpeed;
UINT16 Unused; /* 2 */
UINT32 Reserved[3]; /* 12 */
} EXT_HBA_PORT, *PEXT_HBA_PORT; /* 56 */
/* port type */
#define EXT_DEF_INITIATOR_DEV 1
#define EXT_DEF_TARGET_DEV 2
#define EXT_DEF_TAPE_DEV 4
#define EXT_DEF_FABRIC_DEV 8
/* HBA port state */
#define EXT_DEF_HBA_OK 0
#define EXT_DEF_HBA_SUSPENDED 1
#define EXT_DEF_HBA_LOOP_DOWN 2
/* Connection mode */
#define EXT_DEF_UNKNOWN_MODE 0
#define EXT_DEF_P2P_MODE 1
#define EXT_DEF_LOOP_MODE 2
#define EXT_DEF_FL_MODE 3
#define EXT_DEF_N_MODE 4
/* Valid name type for Disc. port/target */
#define EXT_DEF_USE_NODE_NAME 1
#define EXT_DEF_USE_PORT_NAME 2
/* FC4 type values */
#define EXT_DEF_FC4_TYPE_SCSI 0x1
#define EXT_DEF_FC4_TYPE_IP 0x2
#define EXT_DEF_FC4_TYPE_SCTP 0x4
#define EXT_DEF_FC4_TYPE_VI 0x8
/* Port Speed values */
#define EXT_DEF_PORTSPEED_1GBIT 1
#define EXT_DEF_PORTSPEED_2GBIT 2
#define EXT_DEF_PORTSPEED_4GBIT 4
#define EXT_DEF_PORTSPEED_8GBIT 8
#define EXT_DEF_PORTSPEED_10GBIT 0x10
typedef struct _EXT_DISC_PORT {
UINT8 WWNN[EXT_DEF_WWN_NAME_SIZE]; /* 8 */
UINT8 WWPN[EXT_DEF_WWN_NAME_SIZE]; /* 8 */
UINT8 Id [EXT_DEF_PORTID_SIZE];
/* 4; last 3 bytes used. big endian */
/* The following fields currently are not supported */
UINT16 Type; /* 2; Port Type */
UINT16 Status; /* 2; Port Status */
UINT16 Bus; /* 2; n/a for Solaris */
UINT16 TargetId; /* 2 */
UINT8 Local; /* 1; Local or Remote */
UINT8 ReservedByte[1]; /* 1 */
UINT16 LoopID; /* 2; Loop ID */
UINT32 Reserved[7]; /* 28 */
} EXT_DISC_PORT, *PEXT_DISC_PORT; /* 60 */
typedef struct _EXT_DISC_TARGET {
UINT8 WWNN[EXT_DEF_WWN_NAME_SIZE]; /* 8 */
UINT8 WWPN[EXT_DEF_WWN_NAME_SIZE]; /* 8 */
UINT8 Id [EXT_DEF_PORTID_SIZE];
/* 4; last 3 bytes used. big endian */
/* The following fields currently are not supported */
UINT16 Type; /* 2; Target Type */
UINT16 Status; /* 2; Target Status*/
UINT16 Bus; /* 2; n/a for Solaris */
UINT16 TargetId; /* 2 */
/* The following field is currently not supported */
UINT16 LunCount; /* 2; n/a for nt */
UINT8 Local; /* 1; Local or Remote */
UINT8 ReservedByte[1]; /* 1 */
UINT16 LoopID; /* 2; Loop ID */
UINT16 Reserved[13]; /* 26 */
} EXT_DISC_TARGET, *PEXT_DISC_TARGET; /* 60 */
/* The following command is not supported */
typedef struct _EXT_DISC_LUN { /* n/a for nt */
UINT16 Id; /* 2 */
UINT16 State; /* 2 */
UINT16 IoCount; /* 2 */
UINT16 Reserved[15]; /* 30 */
} EXT_DISC_LUN, *PEXT_DISC_LUN; /* 36 */
/* SCSI address */
typedef struct _EXT_SCSI_ADDR {
UINT16 Bus; /* 2 */
UINT16 Target; /* 2 */
UINT16 Lun; /* 2 */
UINT16 Padding[5]; /* 10 */
} EXT_SCSI_ADDR, *PEXT_SCSI_ADDR; /* 16 */
/* Fibre Channel address */
typedef struct _EXT_FC_ADDR {
union {
UINT8 WWNN[EXT_DEF_WWN_NAME_SIZE]; /* 8 */
UINT8 WWPN[EXT_DEF_WWN_NAME_SIZE]; /* 8 */
UINT8 Id[EXT_DEF_PORTID_SIZE]; /* 4 */
} FcAddr;
UINT16 Type; /* 2 */
UINT16 Padding[2]; /* 2 */
} EXT_FC_ADDR, *PEXT_FC_ADDR; /* 24 */
#define EXT_DEF_TYPE_WWNN 1
#define EXT_DEF_TYPE_WWPN 2
#define EXT_DEF_TYPE_PORTID 3
#define EXT_DEF_TYPE_FABRIC 4
/* Destination address */
typedef struct _EXT_DEST_ADDR {
union {
UINT8 WWNN[EXT_DEF_WWN_NAME_SIZE]; /* 8 */
UINT8 WWPN[EXT_DEF_WWN_NAME_SIZE]; /* 8 */
UINT8 Id[EXT_DEF_PORTID_SIZE]; /* 4 */
struct {
UINT16 Bus; /* 2 */
UINT16 Target; /* 2 */
} ScsiAddr;
} DestAddr;
UINT16 DestType; /* 2 */
UINT16 Lun; /* 2 */
UINT16 Padding[2]; /* 4 */
} EXT_DEST_ADDR, *PEXT_DEST_ADDR; /* 16 */
#define EXT_DEF_DESTTYPE_WWNN 1
#define EXT_DEF_DESTTYPE_WWPN 2
#define EXT_DEF_DESTTYPE_PORTID 3
#define EXT_DEF_DESTTYPE_FABRIC 4
#define EXT_DEF_DESTTYPE_SCSI 5
/* Statistic */
typedef struct _EXT_HBA_PORT_STAT {
UINT32 ControllerErrorCount; /* 4 */
UINT32 DeviceErrorCount; /* 4 */
UINT32 TotalIoCount; /* 4 */
UINT32 TotalMBytes; /* 4; MB of data processed */
UINT32 TotalLipResets; /* 4; Total no. of LIP Reset */
UINT32 Reserved2; /* 4 */
UINT32 TotalLinkFailures; /* 4 */
UINT32 TotalLossOfSync; /* 4 */
UINT32 TotalLossOfSignals; /* 4 */
UINT32 PrimitiveSeqProtocolErrorCount;/* 4 */
UINT32 InvalidTransmissionWordCount; /* 4 */
UINT32 InvalidCRCCount; /* 4 */
uint64_t InputRequestCount; /* 8 */
uint64_t OutputRequestCount; /* 8 */
uint64_t ControlRequestCount; /* 8 */
uint64_t InputMBytes; /* 8 */
uint64_t OutputMBytes; /* 8 */
UINT32 Reserved[6]; /* 24 */
} EXT_HBA_PORT_STAT, *PEXT_HBA_PORT_STAT; /* 112 */
/* Driver property */
typedef struct _EXT_DRIVER {
UINT8 Version[EXT_DEF_MAX_STR_SIZE];/* 128 */
UINT16 NumOfBus; /* 2; Port Type */
UINT16 TargetsPerBus; /* 2; Port Status */
UINT16 LunsPerTarget; /* 2 */
UINT32 MaxTransferLen; /* 4 */
UINT32 MaxDataSegments; /* 4 */
UINT16 DmaBitAddresses; /* 2 */
UINT16 IoMapType; /* 2 */
UINT32 Attrib; /* 4 */
UINT32 InternalFlags[4]; /* 16 */
UINT32 Reserved[8]; /* 32 */
} EXT_DRIVER, *PEXT_DRIVER; /* 198 */
/* Firmware property */
typedef struct _EXT_FW {
UINT8 Version[EXT_DEF_MAX_STR_SIZE];/* 128 */
UINT32 Attrib; /* 4 */
UINT16 Reserved[33]; /* 66 */
} EXT_FW, *PEXT_FW; /* 198 */
/* ISP/Chip property */
typedef struct _EXT_CHIP {
UINT16 VendorId; /* 2 */
UINT16 DeviceId; /* 2 */
UINT16 SubVendorId; /* 2 */
UINT16 SubSystemId; /* 2 */
UINT16 PciBusNumber; /* 2 */
UINT16 PciSlotNumber; /* 2 */
UINT32 IoAddr; /* 4 */
UINT32 IoAddrLen; /* 4 */
UINT32 MemAddr; /* 4 */
UINT32 MemAddrLen; /* 4 */
UINT16 ChipType; /* 2 */
UINT16 InterruptLevel; /* 2 */
UINT16 OutMbx[8]; /* 16 */
UINT16 PciDevFunc; /* 2 */
UINT16 DomainNr; /* 2 */
UINT16 Reserved[14]; /* 28 */
} EXT_CHIP, *PEXT_CHIP; /* 80 */
/* Request Buffer for RNID */
typedef struct _EXT_RNID_REQ {
EXT_FC_ADDR Addr; /* 14 */
UINT8 DataFormat; /* 1 */
UINT8 Pad; /* 1 */
UINT8 OptWWN[EXT_DEF_WWN_NAME_SIZE]; /* 8 */
UINT8 OptPortId[EXT_DEF_PORTID_SIZE]; /* 4 */
UINT32 Reserved[12]; /* 48 */
UINT8 Pad1[3]; /* 3 */
} EXT_RNID_REQ, *PEXT_RNID_REQ; /* 79 */
#define EXT_DEF_RNID_DFORMAT_NONE 0
#define EXT_DEF_RNID_DFORMAT_TOPO_DISC 0xDF
/* Request Buffer for Set RNID */
typedef struct _EXT_SET_RNID_REQ {
UINT8 IPVersion[2];
UINT8 UDPPortNumber[2];
UINT8 IPAddress[16];
UINT32 Reserved[16];
} EXT_SET_RNID_REQ, *PEXT_SET_RNID_REQ;
/* RNID definition and data struct */
#define SEND_RNID_RSP_SIZE 72
typedef struct _RNID_DATA
{
UINT8 WWN[16]; /* 16 */
UINT32 UnitType; /* 4 */
UINT8 PortId[4]; /* 4 */
UINT32 NumOfAttachedNodes; /* 4 */
UINT8 IPVersion[2]; /* 2 */
UINT8 UDPPortNumber[2]; /* 2 */
UINT8 IPAddress[16]; /* 16 */
UINT16 Reserved; /* 2 */
UINT16 TopoDiscFlags; /* 2 */
} EXT_RNID_DATA, *PEXT_RNID_DATA; /* 52 */
/* SCSI pass-through */
typedef struct _EXT_SCSI_PASSTHRU {
EXT_SCSI_ADDR TargetAddr;
UINT8 Direction;
UINT8 CdbLength;
UINT8 Cdb[EXT_DEF_SCSI_PASSTHRU_CDB_LENGTH];
UINT32 Timeout;
UINT32 Reserved[13];
UINT16 Reserved2;
UINT16 SenseLength;
UINT8 SenseData[256];
} EXT_SCSI_PASSTHRU, *PEXT_SCSI_PASSTHRU;
/* FC SCSI pass-through */
typedef struct _EXT_FC_SCSI_PASSTHRU {
EXT_DEST_ADDR FCScsiAddr;
UINT8 Direction;
UINT8 CdbLength;
UINT8 Cdb[EXT_DEF_SCSI_PASSTHRU_CDB_LENGTH];
UINT32 Timeout;
UINT32 Reserved[13];
UINT16 Reserved2;
UINT16 SenseLength;
UINT8 SenseData[256];
} EXT_FC_SCSI_PASSTHRU, *PEXT_FC_SCSI_PASSTHRU;
/* SCSI pass-through direction */
#define EXT_DEF_SCSI_PASSTHRU_DATA_IN 1
#define EXT_DEF_SCSI_PASSTHRU_DATA_OUT 2
/* EXT_REG_AEN_xxx Request struct */
typedef struct _EXT_REG_AEN {
UINT32 Enable; /* 4; non-0 to enable, 0 to disable. */
UINT16 BufLength; /* 2; to RECEIVE buf len expected by driver. */
UINT16 Reserved; /* 2 */
} EXT_REG_AEN, *PEXT_REG_AEN; /* 8 */
/* EXT_SC_GET_AEN_DEFAULT and EXT_SC_GET_AEN_HBA_PORT Response struct */
typedef struct _EXT_ASYNC_EVENT {
UINT32 AsyncEventCode; /* 4 */
union {
struct {
UINT8 RSCNInfo[EXT_DEF_PORTID_SIZE_ACTUAL];/* 3, BE */
UINT8 AddrFormat; /* 1 */
UINT32 Rsvd_1[2]; /* 8 */
} RSCN;
UINT32 Reserved[3]; /* 12 */
} Payload;
} EXT_ASYNC_EVENT, *PEXT_ASYNC_EVENT; /* 16 */
/* Asynchronous Event Codes */
#define EXT_DEF_LIP_OCCURRED 0x8010
#define EXT_DEF_LINK_UP 0x8011
#define EXT_DEF_LINK_DOWN 0x8012
#define EXT_DEF_LIP_RESET 0x8013
#define EXT_DEF_RSCN 0x8015
#define EXT_DEF_DEVICE_UPDATE 0x8014
#define EXT_DEF_ELS 0x8200
/* Driver Defined Event Codes; only valid as hba port event. */
#define EXT_DEF_EV_TGT_ADD 0xA000 /* New target added */
/* EXT_SC_REG_AEN_TGTS Request struct */
typedef struct _EXT_REG_TGTEV {
UINT32 Enable; /* 4; non-0 to enable, 0 to disable. */
UINT32 BufLength; /* 4; to RECEIVE buf len expected by driver. */
UINT32 AllTargets; /* 4 */
UINT8 TgtPortName[EXT_DEF_WWP_NAME_SIZE];/* 8, BE */
UINT32 Reserved; /* 4 */
} EXT_REG_TGTEV, *PEXT_REG_TGTEV; /* 24 */
/* EXT_SC_GET_AEN_TGTS Response struct */
typedef struct _EXT_AEN_TARGETS {
UINT8 TgtEventCode; /* 1 */
struct {
UINT8 TgtPortName[EXT_DEF_WWP_NAME_SIZE];/* 8, BE */
UINT8 Rsvd_1[11]; /* 11 */
} TgtInfo;
} EXT_AEN_TARGETS, *PEXT_AEN_TARGETS; /* 20 */
/* Target Event Codes */
#define EXT_DEF_EV_TGT_OFFLINE 1
#define EXT_DEF_EV_TGT_ONLINE 2
#define EXT_DEF_EV_TGT_REMOVED 3
/* Required # of entries in the queue buffer allocated. */
#define EXT_DEF_MAX_AEN_QUEUE EXT_DEF_MAX_AEN_QUEUE_OS
#define EXT_DEF_MAX_TGTEV_QUEUE EXT_DEF_MAX_TGTEV_QUEUE_OS
#define EXT_DEF_MAX_ELS_BUFS EXT_DEF_MAX_ELS_BUFS_OS
#define EXT_DEF_SIZE_ELS_BUF EXT_DEF_SIZE_ELS_BUF_OS
/* Device type to get for EXT_SC_GET_PORT_SUMMARY */
#define EXT_DEF_GET_KNOWN_DEVICE 0x1
#define EXT_DEF_GET_VISIBLE_DEVICE 0x2
#define EXT_DEF_GET_HIDDEN_DEVICE 0x4
#define EXT_DEF_GET_FABRIC_DEVICE 0x8
#define EXT_DEF_GET_LOOP_DEVICE 0x10
#define EXT_DEF_GET_TRUE_NN_DEVICE 0x1000
/* Each entry in device database */
typedef struct _EXT_DEVICEDATAENTRY
{
UINT8 NodeWWN[8]; /* Node World Wide Name for device */
UINT8 PortWWN[8]; /* Port World Wide Name for device */
UINT8 PortID[3]; /* Current PortId for device */
UINT8 ControlFlags; /* Control flag */
EXT_SCSI_ADDR TargetAddress; /* scsi address */
UINT32 DeviceFlags; /* Flags for device */
UINT16 LoopID; /* Loop ID */
UINT16 BaseLunNumber;
UINT32 Reserved[32];
} EXT_DEVICEDATAENTRY, *PEXT_DEVICEDATAENTRY;
/* Device database information */
typedef struct _EXT_DEVICEDATA
{
UINT32 TotalDevices; /* Set to total number of device. */
UINT32 ReturnListEntryCount; /* Set to number of device entries */
/* returned in list. */
EXT_DEVICEDATAENTRY EntryList[1]; /* Variable length */
} EXT_DEVICEDATA, *PEXT_DEVICEDATA;
/* Swap Target Device Data structure */
typedef struct _EXT_SWAPTARGETDEVICE
{
EXT_DEVICEDATAENTRY CurrentExistDevice;
EXT_DEVICEDATAENTRY NewDevice;
} EXT_SWAPTARGETDEVICE, *PEXT_SWAPTARGETDEVICE;
/* LUN BitMask structure definition, array of 8bit bytes,
* 1 bit per lun. When bit == 1, the lun is masked.
* Most significant bit of mask[0] is lun 0.
* Least significant bit of mask[0] is lun 7.
*/
typedef struct _EXT_LUN_BIT_MASK {
#if ((EXT_DEF_MAX_LUN & 0x7) == 0)
UINT8 mask[EXT_DEF_MAX_LUN >> 3];
#else
UINT8 mask[(EXT_DEF_MAX_LUN + 8) >> 3 ];
#endif
} EXT_LUN_BIT_MASK, *PEXT_LUN_BIT_MASK;
/*
* LUN mask bit manipulation macros
*
* P = Pointer to an EXT_LUN_BIT_MASK union.
* L = LUN number.
*/
#define EXT_IS_LUN_BIT_SET(P,L) \
(((P)->mask[L/8] & (0x80 >> (L%8)))?1:0)
#define EXT_SET_LUN_BIT(P,L) \
((P)->mask[L/8] |= (0x80 >> (L%8)))
#define EXT_CLR_LUN_BIT(P,L) \
((P)->mask[L/8] &= ~(0x80 >> (L%8)))
#define EXT_DEF_LUN_BITMASK_LIST_MIN_ENTRIES 1
#define EXT_DEF_LUN_BITMASK_LIST_MAX_ENTRIES 256
#ifdef _WIN64
#define EXT_DEF_LUN_BITMASK_LIST_HEADER_SIZE 32
#else
#define EXT_DEF_LUN_BITMASK_LIST_HEADER_SIZE \
offsetof(LUN_BITMASK_LIST_BUFFER, asBitmaskEntry)
#endif
#define EXT_DEF_LUN_COUNT 2048
#define EXT_DEF_LUN_BITMASK_BYTES (EXT_DEF_LUN_COUNT / 8)
typedef struct _EXT_LUN_BITMASK_ENTRY
{
UINT8 NodeName[EXT_DEF_WWN_NAME_SIZE];
UINT8 PortName[EXT_DEF_WWN_NAME_SIZE];
UINT32 Reserved2;
UINT32 Reserved3;
UINT32 Reserved4;
UINT32 Reserved5; /* Pad to 32-byte header.*/
UINT8 Bitmask[EXT_DEF_LUN_BITMASK_BYTES];
} EXT_LUN_BITMASK_ENTRY, *PEXT_LUN_BITMASK_ENTRY;
/* Structure as it is stored in the config file.*/
typedef struct _LUN_BITMASK_LIST
{
UINT16 Version; /* Should be LUN_BITMASK_REGISTRY_VERSION */
UINT16 EntryCount; /* Count of variable entries following.*/
UINT32 Reserved1;
UINT32 Reserved2;
UINT32 Reserved3;
UINT32 Reserved4;
UINT32 Reserved5;
UINT32 Reserved6;
UINT32 Reserved7; /* Pad to 32-byte header.*/
EXT_LUN_BITMASK_ENTRY BitmaskEntry[1]; /* Variable-length data.*/
} EXT_LUN_BITMASK_LIST, *PEXT_LUN_BITMASK_LIST;
#define EXT_DEF_LUN_BITMASK_LIST_MIN_SIZE \
(EXT_DEF_LUN_BITMASK_LIST_HEADER_SIZE + \
(sizeof(EXT_DEF_LUN_BITMASK_ENTRY) * EXT_DEF_LUN_BITMASK_LIST_MIN_ENTRIES))
#define EXT_DEF_LUN_BITMASK_LIST_MAX_SIZE \
(EXT_DEF_LUN_BITMASK_LIST_HEADER_SIZE + \
(sizeof(EXT_DEF_LUN_BITMASK_ENTRY) * EXT_DEF_LUN_BITMASK_LIST_MAX_ENTRIES))
/* Request Buffer for ELS PT*/
#define EXT_DEF_WWPN_VALID 1
#define EXT_DEF_WWNN_VALID 2
#define EXT_DEF_PID_VALID 4
typedef struct _EXT_ELS_PT_REQ {
UINT8 WWNN[EXT_DEF_WWN_NAME_SIZE]; /* 8 */
UINT8 WWPN[EXT_DEF_WWN_NAME_SIZE]; /* 8 */
UINT8 Id[EXT_DEF_PORTID_SIZE]; /* 4 */
UINT16 ValidMask; /* 2 */
UINT16 Lid; /* 2 */
UINT16 Rxid; /* 2 */
UINT16 AccRjt; /* 2 */
UINT32 Reserved; /* 4 */
} EXT_ELS_PT_REQ, *PEXT_ELS_PT_REQ; /* 32 */
/* LED state information */
#define EXT_DEF_GRN_BLINK_ON 0x01ED0017
#define EXT_DEF_GRN_BLINK_OFF 0x01ED00FF
typedef struct _EXT_BEACON_CONTROL {
UINT32 State; /* 4 */
UINT32 Reserved[3]; /* 12 */
} EXT_BEACON_CONTROL , *PEXT_BEACON_CONTROL ; /* 16 */
#ifndef EXTERNAL_LUN_COUNT
#define EXTERNAL_LUN_COUNT 2048
#endif
typedef struct _TGT_LUN_DATA_ENTRY {
UINT8 NodeName[EXT_DEF_WWN_NAME_SIZE];
UINT8 PortName[EXT_DEF_WWP_NAME_SIZE];
UINT16 LunCount; /* Valid entries in Data array. */
UINT8 BusNumber;
UINT8 TargetId;
UINT8 DevType; /* Discovered target type */
UINT8 LoopId;
UINT16 Reserved3;
UINT8 PortId[4];
UINT32 Reserved5; /* Pad to 32-byte header.*/
UINT8 Data[EXTERNAL_LUN_COUNT];
} TGT_LUN_DATA_ENTRY, *PTGT_LUN_DATA_ENTRY;
typedef struct _TGT_LUN_DATA_LIST {
UINT16 Version; /* Should be LUN_DATA_REGISTRY_VERSION.*/
UINT16 EntryCount; /* Number of DataEntry entries.*/
UINT32 Reserved1;
UINT32 Reserved2;
UINT32 Reserved3;
UINT32 Reserved4;
UINT32 Reserved5;
UINT32 Reserved6;
UINT32 Reserved7; /* Pad to 32-byte header.*/
TGT_LUN_DATA_ENTRY DataEntry[1]; /* Variable-length data.*/
} TGT_LUN_DATA_LIST, *PTGT_LUN_DATA_LIST;
#ifdef _MSC_VER
#pragma pack()
#endif
#endif /* _EXIOCT_H */