📄 qlogicpti.h
字号:
/* 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 + -