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

📄 qlogicpti.h

📁 Linux内核源代码 为压缩文件 是<<Linux内核>>一书中的源代码
💻 H
📖 第 1 页 / 共 2 页
字号:
/* qlogicpti.h: Performance Technologies QlogicISP sbus card defines. * * Copyright (C) 1996 David S. Miller (davem@caipfs.rutgers.edu) */#ifndef _QLOGICPTI_H#define _QLOGICPTI_H/* Qlogic/SBUS controller registers. */#define SBUS_CFG1	0x006UL#define SBUS_CTRL	0x008UL#define SBUS_STAT	0x00aUL#define SBUS_SEMAPHORE	0x00cUL#define CMD_DMA_CTRL	0x022UL#define DATA_DMA_CTRL	0x042UL#define MBOX0		0x080UL#define MBOX1		0x082UL#define MBOX2		0x084UL#define MBOX3		0x086UL#define MBOX4		0x088UL#define MBOX5		0x08aUL#define CPU_CMD		0x214UL#define CPU_ORIDE	0x224UL#define CPU_PCTRL	0x272UL#define CPU_PDIFF	0x276UL#define RISC_PSR	0x420UL#define RISC_MTREG	0x42EUL#define HCCTRL		0x440UL/* SCSI parameters for this driver. */#define MAX_TARGETS	16#define MAX_LUNS	8/* With the qlogic interface, every queue slot can hold a SCSI * command with up to 4 scatter/gather entries.  If we need more * than 4 entries, continuation entries can be used that hold * another 7 entries each.  Unlike for other drivers, this means * that the maximum number of scatter/gather entries we can * support at any given time is a function of the number of queue * slots available.  That is, host->can_queue and host->sg_tablesize * are dynamic and _not_ independent.  This all works fine because * requests are queued serially and the scatter/gather limit is * determined for each queue request anew. */#define QLOGICPTI_REQ_QUEUE_LEN	255	/* must be power of two - 1 */#define QLOGICPTI_MAX_SG(ql)	(4 + ((ql) > 0) ? 7*((ql) - 1) : 0)#ifndef NULL#define NULL (0)#endifint qlogicpti_detect(Scsi_Host_Template *);int qlogicpti_release(struct Scsi_Host *);const char * qlogicpti_info(struct Scsi_Host *);int qlogicpti_queuecommand(Scsi_Cmnd *, void (* done)(Scsi_Cmnd *));int qlogicpti_queuecommand_slow(Scsi_Cmnd *, void (* done)(Scsi_Cmnd *));int qlogicpti_abort(Scsi_Cmnd *);int qlogicpti_reset(Scsi_Cmnd *, unsigned int);/* mailbox command complete status codes */#define MBOX_COMMAND_COMPLETE		0x4000#define INVALID_COMMAND			0x4001#define HOST_INTERFACE_ERROR		0x4002#define TEST_FAILED			0x4003#define COMMAND_ERROR			0x4005#define COMMAND_PARAM_ERROR		0x4006/* async event status codes */#define ASYNC_SCSI_BUS_RESET		0x8001#define SYSTEM_ERROR			0x8002#define REQUEST_TRANSFER_ERROR		0x8003#define RESPONSE_TRANSFER_ERROR		0x8004#define REQUEST_QUEUE_WAKEUP		0x8005#define EXECUTION_TIMEOUT_RESET		0x8006/* Am I fucking pedantic or what? */struct Entry_header {#ifdef __BIG_ENDIAN	u8	entry_cnt;	u8	entry_type;	u8	flags;	u8	sys_def_1;#else /* __LITTLE_ENDIAN */	u8	entry_type;	u8	entry_cnt;	u8	sys_def_1;	u8	flags;#endif};/* entry header type commands */#define ENTRY_COMMAND		1#define ENTRY_CONTINUATION	2#define ENTRY_STATUS		3#define ENTRY_MARKER		4#define ENTRY_EXTENDED_COMMAND	5/* entry header flag definitions */#define EFLAG_CONTINUATION	1#define EFLAG_BUSY		2#define EFLAG_BAD_HEADER	4#define EFLAG_BAD_PAYLOAD	8struct dataseg {	u32	d_base;	u32	d_count;};struct Command_Entry {	struct Entry_header	hdr;	u32			handle;#ifdef __BIG_ENDIAN	u8			target_id;	u8			target_lun;#else /* __LITTLE_ENDIAN */	u8			target_lun;	u8			target_id;#endif	u16			cdb_length;	u16			control_flags;	u16			rsvd;	u16			time_out;	u16			segment_cnt;	u8			cdb[12];	struct dataseg		dataseg[4];};/* command entry control flag definitions */#define CFLAG_NODISC		0x01#define CFLAG_HEAD_TAG		0x02#define CFLAG_ORDERED_TAG	0x04#define CFLAG_SIMPLE_TAG	0x08#define CFLAG_TAR_RTN		0x10#define CFLAG_READ		0x20#define CFLAG_WRITE		0x40struct Ext_Command_Entry {	struct Entry_header	hdr;	u32			handle;#ifdef __BIG_ENDIAN	u8			target_id;	u8			target_lun;#else /* __LITTLE_ENDIAN */	u8			target_lun;	u8			target_id;#endif	u16			cdb_length;	u16			control_flags;	u16			rsvd;	u16			time_out;	u16			segment_cnt;	u8			cdb[44];};struct Continuation_Entry {	struct Entry_header	hdr;	u32			reserved;	struct dataseg		dataseg[7];};struct Marker_Entry {	struct Entry_header	hdr;	u32			reserved;#ifdef __BIG_ENDIAN	u8			target_id;	u8			target_lun;#else /* __LITTLE_ENDIAN */	u8			target_lun;	u8			target_id;#endif#ifdef __BIG_ENDIAN	u8			rsvd;	u8			modifier;#else /* __LITTLE_ENDIAN */	u8			modifier;	u8			rsvd;#endif	u8			rsvds[52];};/* marker entry modifier definitions */#define SYNC_DEVICE	0#define SYNC_TARGET	1#define SYNC_ALL	2struct Status_Entry {	struct Entry_header	hdr;	u32			handle;	u16			scsi_status;	u16			completion_status;	u16			state_flags;	u16			status_flags;	u16			time;	u16			req_sense_len;	u32			residual;	u8			rsvd[8];	u8			req_sense_data[32];};/* status entry completion status definitions */#define CS_COMPLETE			0x0000#define CS_INCOMPLETE			0x0001#define CS_DMA_ERROR			0x0002#define CS_TRANSPORT_ERROR		0x0003#define CS_RESET_OCCURRED		0x0004#define CS_ABORTED			0x0005#define CS_TIMEOUT			0x0006#define CS_DATA_OVERRUN			0x0007#define CS_COMMAND_OVERRUN		0x0008#define CS_STATUS_OVERRUN		0x0009#define CS_BAD_MESSAGE			0x000a#define CS_NO_MESSAGE_OUT		0x000b#define CS_EXT_ID_FAILED		0x000c#define CS_IDE_MSG_FAILED		0x000d#define CS_ABORT_MSG_FAILED		0x000e#define CS_REJECT_MSG_FAILED		0x000f#define CS_NOP_MSG_FAILED		0x0010#define CS_PARITY_ERROR_MSG_FAILED	0x0011#define CS_DEVICE_RESET_MSG_FAILED	0x0012#define CS_ID_MSG_FAILED		0x0013#define CS_UNEXP_BUS_FREE		0x0014#define CS_DATA_UNDERRUN		0x0015#define CS_BUS_RESET			0x001c/* status entry state flag definitions */#define SF_GOT_BUS			0x0100#define SF_GOT_TARGET			0x0200#define SF_SENT_CDB			0x0400#define SF_TRANSFERRED_DATA		0x0800#define SF_GOT_STATUS			0x1000#define SF_GOT_SENSE			0x2000/* status entry status flag definitions */#define STF_DISCONNECT			0x0001#define STF_SYNCHRONOUS			0x0002#define STF_PARITY_ERROR		0x0004#define STF_BUS_RESET			0x0008#define STF_DEVICE_RESET		0x0010#define STF_ABORTED			0x0020#define STF_TIMEOUT			0x0040#define STF_NEGOTIATION			0x0080/* mailbox commands */#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#define MBOX_CHECK_FIRMWARE		0x000e#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#define MBOX_GET_FIRMWARE_STATUS	0x001f

⌨️ 快捷键说明

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