⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ispmbox.h

📁 这个linux源代码是很全面的~基本完整了~使用c编译的~由于时间问题我没有亲自测试~但就算用来做参考资料也是非常好的
💻 H
📖 第 1 页 / 共 2 页
字号:
/* @(#)ispmbox.h 1.17 *//* * Mailbox and Queue Entry Definitions for for Qlogic ISP SCSI adapters. * * Copyright (c) 1997, 1998, 1999, 2000 by Matthew Jacob * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright *    notice immediately at the beginning of the file, without modification, *    this list of conditions, and the following disclaimer. * 2. The name of the author may not be used to endorse or promote products *    derived from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * */#ifndef	_ISPMBOX_H#define	_ISPMBOX_H/* * Mailbox Command Opcodes */#define MBOX_NO_OP			0x0000#define MBOX_LOAD_RAM			0x0001#define MBOX_EXEC_FIRMWARE		0x0002#define MBOX_DUMP_RAM			0x0003#define MBOX_WRITE_RAM_WORD		0x0004#define MBOX_READ_RAM_WORD		0x0005#define MBOX_MAILBOX_REG_TEST		0x0006#define MBOX_VERIFY_CHECKSUM		0x0007#define MBOX_ABOUT_FIRMWARE		0x0008					/*   9 */					/*   a */					/*   b */					/*   c */					/*   d */#define MBOX_CHECK_FIRMWARE		0x000e#define	MBOX_READ_RAM_WORD_EXTENDED	0x000f#define MBOX_INIT_REQ_QUEUE		0x0010#define MBOX_INIT_RES_QUEUE		0x0011#define MBOX_EXECUTE_IOCB		0x0012#define MBOX_WAKE_UP			0x0013#define MBOX_STOP_FIRMWARE		0x0014#define MBOX_ABORT			0x0015#define MBOX_ABORT_DEVICE		0x0016#define MBOX_ABORT_TARGET		0x0017#define MBOX_BUS_RESET			0x0018#define MBOX_STOP_QUEUE			0x0019#define MBOX_START_QUEUE		0x001a#define MBOX_SINGLE_STEP_QUEUE		0x001b#define MBOX_ABORT_QUEUE		0x001c#define MBOX_GET_DEV_QUEUE_STATUS	0x001d					/*  1e */#define MBOX_GET_FIRMWARE_STATUS	0x001f#define MBOX_GET_INIT_SCSI_ID		0x0020#define MBOX_GET_SELECT_TIMEOUT		0x0021#define MBOX_GET_RETRY_COUNT		0x0022#define MBOX_GET_TAG_AGE_LIMIT		0x0023#define MBOX_GET_CLOCK_RATE		0x0024#define MBOX_GET_ACT_NEG_STATE		0x0025#define MBOX_GET_ASYNC_DATA_SETUP_TIME	0x0026#define MBOX_GET_SBUS_PARAMS		0x0027#define		MBOX_GET_PCI_PARAMS	MBOX_GET_SBUS_PARAMS#define MBOX_GET_TARGET_PARAMS		0x0028#define MBOX_GET_DEV_QUEUE_PARAMS	0x0029#define	MBOX_GET_RESET_DELAY_PARAMS	0x002a					/*  2b */					/*  2c */					/*  2d */					/*  2e */					/*  2f */#define MBOX_SET_INIT_SCSI_ID		0x0030#define MBOX_SET_SELECT_TIMEOUT		0x0031#define MBOX_SET_RETRY_COUNT		0x0032#define MBOX_SET_TAG_AGE_LIMIT		0x0033#define MBOX_SET_CLOCK_RATE		0x0034#define MBOX_SET_ACT_NEG_STATE		0x0035#define MBOX_SET_ASYNC_DATA_SETUP_TIME	0x0036#define MBOX_SET_SBUS_CONTROL_PARAMS	0x0037#define		MBOX_SET_PCI_PARAMETERS	0x0037#define MBOX_SET_TARGET_PARAMS		0x0038#define MBOX_SET_DEV_QUEUE_PARAMS	0x0039#define	MBOX_SET_RESET_DELAY_PARAMS	0x003a					/*  3b */					/*  3c */					/*  3d */					/*  3e */					/*  3f */#define	MBOX_RETURN_BIOS_BLOCK_ADDR	0x0040#define	MBOX_WRITE_FOUR_RAM_WORDS	0x0041#define	MBOX_EXEC_BIOS_IOCB		0x0042#define	MBOX_SET_FW_FEATURES		0x004a#define	MBOX_GET_FW_FEATURES		0x004b#define		FW_FEATURE_FAST_POST	0x1#define		FW_FEATURE_LVD_NOTIFY	0x2#define		FW_FEATURE_RIO_32BIT	0x4#define		FW_FEATURE_RIO_16BIT	0x8#define	MBOX_ENABLE_TARGET_MODE		0x0055#define		ENABLE_TARGET_FLAG	0x8000#define		ENABLE_TQING_FLAG	0x0004#define		ENABLE_MANDATORY_DISC	0x0002#define	MBOX_GET_TARGET_STATUS		0x0056/* These are for the ISP2X00 FC cards */#define	MBOX_GET_LOOP_ID		0x0020#define	MBOX_GET_FIRMWARE_OPTIONS	0x0028#define	MBOX_SET_FIRMWARE_OPTIONS	0x0038#define	MBOX_GET_RESOURCE_COUNT		0x0042#define	MBOX_ENHANCED_GET_PDB		0x0047#define	MBOX_EXEC_COMMAND_IOCB_A64	0x0054#define	MBOX_INIT_FIRMWARE		0x0060#define	MBOX_GET_INIT_CONTROL_BLOCK	0x0061#define	MBOX_INIT_LIP			0x0062#define	MBOX_GET_FC_AL_POSITION_MAP	0x0063#define	MBOX_GET_PORT_DB		0x0064#define	MBOX_CLEAR_ACA			0x0065#define	MBOX_TARGET_RESET		0x0066#define	MBOX_CLEAR_TASK_SET		0x0067#define	MBOX_ABORT_TASK_SET		0x0068#define	MBOX_GET_FW_STATE		0x0069#define	MBOX_GET_PORT_NAME		0x006A#define	MBOX_GET_LINK_STATUS		0x006B#define	MBOX_INIT_LIP_RESET		0x006C#define	MBOX_SEND_SNS			0x006E#define	MBOX_FABRIC_LOGIN		0x006F#define	MBOX_SEND_CHANGE_REQUEST	0x0070#define	MBOX_FABRIC_LOGOUT		0x0071#define	MBOX_INIT_LIP_LOGIN		0x0072#define	MBOX_GET_SET_DATA_RATE		0x005D	/* 23XX only */#define		MBGSD_GET_RATE	0#define		MBGSD_SET_RATE	1#define		MBGSD_ONEGB	0#define		MBGSD_TWOGB	1#define		MBGSD_AUTO	2#define	ISP2100_SET_PCI_PARAM		0x00ff#define	MBOX_BUSY			0x04typedef struct {	u_int16_t param[8];} mbreg_t;/* * Mailbox Command Complete Status Codes */#define	MBOX_COMMAND_COMPLETE		0x4000#define	MBOX_INVALID_COMMAND		0x4001#define	MBOX_HOST_INTERFACE_ERROR	0x4002#define	MBOX_TEST_FAILED		0x4003#define	MBOX_COMMAND_ERROR		0x4005#define	MBOX_COMMAND_PARAM_ERROR	0x4006#define	MBOX_PORT_ID_USED		0x4007#define	MBOX_LOOP_ID_USED		0x4008#define	MBOX_ALL_IDS_USED		0x4009#define	MBOX_NOT_LOGGED_IN		0x400A#define	MBLOGALL			0x000f#define	MBLOGNONE			0x0000#define	MBLOGMASK(x)			((x) & 0xf)/* * Asynchronous event status codes */#define	ASYNC_BUS_RESET			0x8001#define	ASYNC_SYSTEM_ERROR		0x8002#define	ASYNC_RQS_XFER_ERR		0x8003#define	ASYNC_RSP_XFER_ERR		0x8004#define	ASYNC_QWAKEUP			0x8005#define	ASYNC_TIMEOUT_RESET		0x8006#define	ASYNC_DEVICE_RESET		0x8007#define	ASYNC_EXTMSG_UNDERRUN		0x800A#define	ASYNC_SCAM_INT			0x800B#define	ASYNC_HUNG_SCSI			0x800C#define	ASYNC_KILLED_BUS		0x800D#define	ASYNC_BUS_TRANSIT		0x800E	/* LVD -> HVD, eg. */#define	ASYNC_LIP_OCCURRED		0x8010#define	ASYNC_LOOP_UP			0x8011#define	ASYNC_LOOP_DOWN			0x8012#define	ASYNC_LOOP_RESET		0x8013#define	ASYNC_PDB_CHANGED		0x8014#define	ASYNC_CHANGE_NOTIFY		0x8015#define	ASYNC_LIP_F8			0x8016#define	ASYNC_CMD_CMPLT			0x8020#define	ASYNC_CTIO_DONE			0x8021#define	ASYNC_IP_XMIT_DONE		0x8022#define	ASYNC_IP_RECV_DONE		0x8023#define	ASYNC_IP_BROADCAST		0x8024#define	ASYNC_IP_RCVQ_LOW		0x8025#define	ASYNC_IP_RCVQ_EMPTY		0x8026#define	ASYNC_IP_RECV_DONE_ALIGNED	0x8027#define	ASYNC_PTPMODE			0x8030#define	ASYNC_RIO1			0x8031#define	ASYNC_RIO2			0x8032#define	ASYNC_RIO3			0x8033#define	ASYNC_RIO4			0x8034#define	ASYNC_RIO5			0x8035#define	ASYNC_CONNMODE			0x8036#define		ISP_CONN_LOOP		1#define		ISP_CONN_PTP		2#define		ISP_CONN_BADLIP		3#define		ISP_CONN_FATAL		4#define		ISP_CONN_LOOPBACK	5#define	ASYNC_RIO_RESP			0x8040#define	ASYNC_RIO_COMP			0x8042/* * 2.01.31 2200 Only. Need Bit 13 in Mailbox 1 for Set Firmware Options * mailbox command to enable this. */#define	ASYNC_QFULL_SENT		0x8049/* * Mailbox Usages */#define	WRITE_REQUEST_QUEUE_IN_POINTER(isp, value)	\	ISP_WRITE(isp, isp->isp_rqstinrp, value)#define	READ_REQUEST_QUEUE_OUT_POINTER(isp)		\	ISP_READ(isp, isp->isp_rqstoutrp)#define	READ_RESPONSE_QUEUE_IN_POINTER(isp)		\	ISP_READ(isp, isp->isp_respinrp)#define	WRITE_RESPONSE_QUEUE_OUT_POINTER(isp, value)	\	ISP_WRITE(isp, isp->isp_respoutrp, value)/* * Command Structure Definitions */typedef struct {	u_int32_t	ds_base;	u_int32_t	ds_count;} ispds_t;typedef struct {	u_int32_t	ds_base;	u_int32_t	ds_basehi;	u_int32_t	ds_count;} ispds64_t;#define	DSTYPE_32BIT	0#define	DSTYPE_64BIT	1typedef struct {	u_int16_t	ds_type;	/* 0-> ispds_t, 1-> ispds64_t */	u_int32_t	ds_segment;	/* unused */	u_int32_t	ds_base;	/* 32 bit address of DSD list */} ispdslist_t;/* * These elements get swizzled around for SBus instances. */#define	ISP_SWAP8(a, b)	{		\	u_int8_t tmp;			\	tmp = a;			\	a = b;				\	b = tmp;			\}typedef struct {	u_int8_t	rqs_entry_type;	u_int8_t	rqs_entry_count;	u_int8_t	rqs_seqno;	u_int8_t	rqs_flags;} isphdr_t;/* RQS Flag definitions */#define	RQSFLAG_CONTINUATION	0x01#define	RQSFLAG_FULL		0x02#define	RQSFLAG_BADHEADER	0x04#define	RQSFLAG_BADPACKET	0x08/* RQS entry_type definitions */#define	RQSTYPE_REQUEST		0x01#define	RQSTYPE_DATASEG		0x02#define	RQSTYPE_RESPONSE	0x03#define	RQSTYPE_MARKER		0x04#define	RQSTYPE_CMDONLY		0x05#define	RQSTYPE_ATIO		0x06	/* Target Mode */#define	RQSTYPE_CTIO		0x07	/* Target Mode */#define	RQSTYPE_SCAM		0x08#define	RQSTYPE_A64		0x09#define	RQSTYPE_A64_CONT	0x0a#define	RQSTYPE_ENABLE_LUN	0x0b	/* Target Mode */#define	RQSTYPE_MODIFY_LUN	0x0c	/* Target Mode */#define	RQSTYPE_NOTIFY		0x0d	/* Target Mode */#define	RQSTYPE_NOTIFY_ACK	0x0e	/* Target Mode */#define	RQSTYPE_CTIO1		0x0f	/* Target Mode */#define	RQSTYPE_STATUS_CONT	0x10#define	RQSTYPE_T2RQS		0x11#define	RQSTYPE_IP_XMIT		0x13#define	RQSTYPE_T4RQS		0x15#define	RQSTYPE_ATIO2		0x16	/* Target Mode */#define	RQSTYPE_CTIO2		0x17	/* Target Mode */#define	RQSTYPE_CSET0		0x18#define	RQSTYPE_T3RQS		0x19#define	RQSTYPE_IP_XMIT_64	0x1b#define	RQSTYPE_CTIO4		0x1e	/* Target Mode */#define	RQSTYPE_CTIO3		0x1f	/* Target Mode */#define	RQSTYPE_RIO1		0x21#define	RQSTYPE_RIO2		0x22#define	RQSTYPE_IP_RECV		0x23#define	RQSTYPE_IP_RECV_CONT	0x24#define	ISP_RQDSEG	4typedef struct {	isphdr_t	req_header;	u_int32_t	req_handle;	u_int8_t	req_lun_trn;	u_int8_t	req_target;	u_int16_t	req_cdblen;#define	req_modifier	req_cdblen	/* marker packet */	u_int16_t	req_flags;	u_int16_t	req_reserved;	u_int16_t	req_time;	u_int16_t	req_seg_count;	u_int8_t	req_cdb[12];	ispds_t		req_dataseg[ISP_RQDSEG];} ispreq_t;/* * A request packet can also be a marker packet. */#define SYNC_DEVICE	0#define SYNC_TARGET	1#define SYNC_ALL	2#define	ISP_RQDSEG_T2		3typedef struct {	isphdr_t	req_header;	u_int32_t	req_handle;	u_int8_t	req_lun_trn;	u_int8_t	req_target;	u_int16_t	req_scclun;	u_int16_t	req_flags;	u_int16_t	_res2;	u_int16_t	req_time;	u_int16_t	req_seg_count;	u_int8_t	req_cdb[16];	u_int32_t	req_totalcnt;	ispds_t		req_dataseg[ISP_RQDSEG_T2];} ispreqt2_t;#define	ISP_RQDSEG_T3		2typedef struct {	isphdr_t	req_header;	u_int32_t	req_handle;	u_int8_t	req_lun_trn;	u_int8_t	req_target;	u_int16_t	req_scclun;	u_int16_t	req_flags;	u_int16_t	_res2;	u_int16_t	req_time;	u_int16_t	req_seg_count;	u_int8_t	req_cdb[16];	u_int32_t	req_totalcnt;	ispds64_t	req_dataseg[ISP_RQDSEG_T3];} ispreqt3_t;/* req_flag values */#define	REQFLAG_NODISCON	0x0001#define	REQFLAG_HTAG		0x0002#define	REQFLAG_OTAG		0x0004#define	REQFLAG_STAG		0x0008#define	REQFLAG_TARGET_RTN	0x0010#define	REQFLAG_NODATA		0x0000#define	REQFLAG_DATA_IN		0x0020#define	REQFLAG_DATA_OUT	0x0040#define	REQFLAG_DATA_UNKNOWN	0x0060#define	REQFLAG_DISARQ		0x0100#define	REQFLAG_FRC_ASYNC	0x0200#define	REQFLAG_FRC_SYNC	0x0400#define	REQFLAG_FRC_WIDE	0x0800#define	REQFLAG_NOPARITY	0x1000#define	REQFLAG_STOPQ		0x2000#define	REQFLAG_XTRASNS		0x4000#define	REQFLAG_PRIORITY	0x8000typedef struct {	isphdr_t	req_header;	u_int32_t	req_handle;	u_int8_t	req_lun_trn;	u_int8_t	req_target;	u_int16_t	req_cdblen;	u_int16_t	req_flags;	u_int16_t	_res1;	u_int16_t	req_time;	u_int16_t	req_seg_count;	u_int8_t	req_cdb[44];} ispextreq_t;#define	ISP_CDSEG	7typedef struct {	isphdr_t	req_header;	u_int32_t	_res1;	ispds_t		req_dataseg[ISP_CDSEG];} ispcontreq_t;#define	ISP_CDSEG64	5typedef struct {	isphdr_t	req_header;	ispds64_t	req_dataseg[ISP_CDSEG64];} ispcontreq64_t;typedef struct {	isphdr_t	req_header;	u_int32_t	req_handle;	u_int16_t	req_scsi_status;	u_int16_t	req_completion_status;	u_int16_t	req_state_flags;	u_int16_t	req_status_flags;	u_int16_t	req_time;#define	req_response_len	req_time	/* FC only */	u_int16_t	req_sense_len;	u_int32_t	req_resid;	u_int8_t	req_response[8];	/* FC only */	u_int8_t	req_sense_data[32];} ispstatusreq_t;typedef struct {	isphdr_t	req_header;	u_int8_t	req_sense_data[60];} ispstatus_cont_t;/*  * For Qlogic 2X00, the high order byte of SCSI status has * additional meaning. */#define	RQCS_RU	0x800	/* Residual Under */#define	RQCS_RO	0x400	/* Residual Over */#define	RQCS_RESID	(RQCS_RU|RQCS_RO)#define	RQCS_SV	0x200	/* Sense Length Valid */#define	RQCS_RV	0x100	/* FCP Response Length Valid *//*  * Completion Status Codes. */#define RQCS_COMPLETE			0x0000#define RQCS_DMA_ERROR			0x0002#define RQCS_RESET_OCCURRED		0x0004

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -