3w-9xxx.h

来自「Linux Kernel 2.6.9 for OMAP1710」· C头文件 代码 · 共 705 行 · 第 1/2 页

H
705
字号
#define TW_ESCALADE_MAX_SGL_LENGTH 41#define TW_APACHE_CMD_PKT_SIZE 5#else#define TW_APACHE_MAX_SGL_LENGTH 109#define TW_ESCALADE_MAX_SGL_LENGTH 62#define TW_APACHE_CMD_PKT_SIZE 4#endif#define TW_ATA_PASS_SGL_MAX                   60#define TW_Q_LENGTH			      256#define TW_Q_START			      0#define TW_MAX_SLOT			      32#define TW_MAX_RESET_TRIES		      2#define TW_MAX_CMDS_PER_LUN		      254#define TW_MAX_RESPONSE_DRAIN		      256#define TW_MAX_AEN_DRAIN		      40#define TW_IN_IOCTL                           2#define TW_IN_CHRDEV_IOCTL                    3#define TW_IN_ATTENTION_LOOP		      4#define TW_MAX_SECTORS                        256#define TW_AEN_WAIT_TIME                      1000#define TW_IOCTL_WAIT_TIME                    (1 * HZ) /* 1 second */#define TW_MAX_CDB_LEN                        16#define TW_ISR_DONT_COMPLETE                  2#define TW_ISR_DONT_RESULT                    3#define TW_IOCTL_CHRDEV_TIMEOUT               60 /* 60 seconds */#define TW_IOCTL_CHRDEV_FREE                  -1#define TW_COMMAND_OFFSET                     128 /* 128 bytes */#define TW_VERSION_TABLE                      0x0402#define TW_TIMEKEEP_TABLE		      0x040A#define TW_INFORMATION_TABLE		      0x0403#define TW_PARAM_FWVER			      3#define TW_PARAM_FWVER_LENGTH		      16#define TW_PARAM_BIOSVER		      4#define TW_PARAM_BIOSVER_LENGTH		      16#define TW_PARAM_PORTCOUNT		      3#define TW_PARAM_PORTCOUNT_LENGTH	      1#define TW_MIN_SGL_LENGTH                     0x200 /* 512 bytes */#define TW_MAX_SENSE_LENGTH                   256#define TW_EVENT_SOURCE_AEN                   0x1000#define TW_EVENT_SOURCE_COMMAND               0x1001#define TW_EVENT_SOURCE_PCHIP                 0x1002#define TW_EVENT_SOURCE_DRIVER                0x1003#define TW_IOCTL_GET_COMPATIBILITY_INFO	      0x101#define TW_IOCTL_GET_LAST_EVENT               0x102#define TW_IOCTL_GET_FIRST_EVENT              0x103#define TW_IOCTL_GET_NEXT_EVENT               0x104#define TW_IOCTL_GET_PREVIOUS_EVENT           0x105#define TW_IOCTL_GET_LOCK                     0x106#define TW_IOCTL_RELEASE_LOCK                 0x107#define TW_IOCTL_FIRMWARE_PASS_THROUGH        0x108#define TW_IOCTL_ERROR_STATUS_NOT_LOCKED      0x1001 // Not locked#define TW_IOCTL_ERROR_STATUS_LOCKED          0x1002 // Already locked#define TW_IOCTL_ERROR_STATUS_NO_MORE_EVENTS  0x1003 // No more events#define TW_IOCTL_ERROR_STATUS_AEN_CLOBBER     0x1004 // AEN clobber occurred#define TW_IOCTL_ERROR_OS_EFAULT	      -EFAULT // Bad address#define TW_IOCTL_ERROR_OS_EINTR		      -EINTR  // Interrupted system call#define TW_IOCTL_ERROR_OS_EINVAL	      -EINVAL // Invalid argument#define TW_IOCTL_ERROR_OS_ENOMEM	      -ENOMEM // Out of memory#define TW_IOCTL_ERROR_OS_ERESTARTSYS	      -ERESTARTSYS // Restart system call#define TW_IOCTL_ERROR_OS_EIO		      -EIO // I/O error#define TW_IOCTL_ERROR_OS_ENOTTY	      -ENOTTY // Not a typewriter#define TW_IOCTL_ERROR_OS_ENODEV	      -ENODEV // No such device#define TW_ALLOCATION_LENGTH		      128#define TW_SENSE_DATA_LENGTH		      18#define TW_STATUS_CHECK_CONDITION	      2#define TW_ERROR_LOGICAL_UNIT_NOT_SUPPORTED   0x10a#define TW_ERROR_UNIT_OFFLINE                 0x128#define TW_MESSAGE_SOURCE_CONTROLLER_ERROR    3#define TW_MESSAGE_SOURCE_CONTROLLER_EVENT    4#define TW_MESSAGE_SOURCE_LINUX_DRIVER        6#define TW_DRIVER TW_MESSAGE_SOURCE_LINUX_DRIVER#define TW_MESSAGE_SOURCE_LINUX_OS            9#define TW_OS TW_MESSAGE_SOURCE_LINUX_OS#if BITS_PER_LONG > 32#define TW_COMMAND_SIZE			      5#define TW_DMA_MASK			      DMA_64BIT_MASK#else#define TW_COMMAND_SIZE			      4#define TW_DMA_MASK			      DMA_32BIT_MASK#endif#ifndef PCI_DEVICE_ID_3WARE_9000#define PCI_DEVICE_ID_3WARE_9000 0x1002#endif/* Bitmask macros to eliminate bitfields *//* opcode: 5, reserved: 3 */#define TW_OPRES_IN(x,y) ((x << 5) | (y & 0x1f))#define TW_OP_OUT(x) (x & 0x1f)/* opcode: 5, sgloffset: 3 */#define TW_OPSGL_IN(x,y) ((x << 5) | (y & 0x1f))#define TW_SGL_OUT(x) ((x >> 5) & 0x7)/* severity: 3, reserved: 5 */#define TW_SEV_OUT(x) (x & 0x7)/* reserved_1: 4, response_id: 8, reserved_2: 20 */#define TW_RESID_OUT(x) ((x >> 4) & 0xff)/* Macros */#define TW_CONTROL_REG_ADDR(x) (x->base_addr)#define TW_STATUS_REG_ADDR(x) ((unsigned char *)x->base_addr + 0x4)#if BITS_PER_LONG > 32#define TW_COMMAND_QUEUE_REG_ADDR(x) ((unsigned char *)x->base_addr + 0x20)#else#define TW_COMMAND_QUEUE_REG_ADDR(x) ((unsigned char *)x->base_addr + 0x8)#endif#define TW_RESPONSE_QUEUE_REG_ADDR(x) ((unsigned char *)x->base_addr + 0xC)#define TW_CLEAR_ALL_INTERRUPTS(x) (writel(TW_STATUS_VALID_INTERRUPT, TW_CONTROL_REG_ADDR(x)))#define TW_CLEAR_ATTENTION_INTERRUPT(x) (writel(TW_CONTROL_CLEAR_ATTENTION_INTERRUPT, TW_CONTROL_REG_ADDR(x)))#define TW_CLEAR_HOST_INTERRUPT(x) (writel(TW_CONTROL_CLEAR_HOST_INTERRUPT, TW_CONTROL_REG_ADDR(x)))#define TW_DISABLE_INTERRUPTS(x) (writel(TW_CONTROL_DISABLE_INTERRUPTS, TW_CONTROL_REG_ADDR(x)))#define TW_ENABLE_AND_CLEAR_INTERRUPTS(x) (writel(TW_CONTROL_CLEAR_ATTENTION_INTERRUPT | TW_CONTROL_UNMASK_RESPONSE_INTERRUPT | TW_CONTROL_ENABLE_INTERRUPTS, TW_CONTROL_REG_ADDR(x)))#define TW_MASK_COMMAND_INTERRUPT(x) (writel(TW_CONTROL_MASK_COMMAND_INTERRUPT, TW_CONTROL_REG_ADDR(x)))#define TW_UNMASK_COMMAND_INTERRUPT(x) (writel(TW_CONTROL_UNMASK_COMMAND_INTERRUPT, TW_CONTROL_REG_ADDR(x)))#define TW_SOFT_RESET(x) (writel(TW_CONTROL_ISSUE_SOFT_RESET | \			TW_CONTROL_CLEAR_HOST_INTERRUPT | \			TW_CONTROL_CLEAR_ATTENTION_INTERRUPT | \			TW_CONTROL_MASK_COMMAND_INTERRUPT | \			TW_CONTROL_MASK_RESPONSE_INTERRUPT | \			TW_CONTROL_CLEAR_ERROR_STATUS | \			TW_CONTROL_DISABLE_INTERRUPTS, TW_CONTROL_REG_ADDR(x)))#define TW_PRINTK(h,a,b,c) { \if (h) \printk(KERN_WARNING "3w-9xxx: scsi%d: ERROR: (0x%02X:0x%04X): %s.\n",h->host_no,a,b,c); \else \printk(KERN_WARNING "3w-9xxx: ERROR: (0x%02X:0x%04X): %s.\n",a,b,c); \}#pragma pack(1)/* Scatter Gather List Entry */typedef struct TAG_TW_SG_Entry {	unsigned long address;	u32 length;} TW_SG_Entry;/* Command Packet */typedef struct TW_Command {	unsigned char opcode__sgloffset;	unsigned char size;	unsigned char request_id;	unsigned char unit__hostid;	/* Second DWORD */	unsigned char status;	unsigned char flags;	union {		unsigned short block_count;		unsigned short parameter_count;	} byte6_offset;	union {		struct {			u32 lba;			TW_SG_Entry sgl[TW_ESCALADE_MAX_SGL_LENGTH];#if BITS_PER_LONG > 32			u32 padding[2];	/* pad to 512 bytes */#else			u32 padding;#endif		} io;		struct {			TW_SG_Entry sgl[TW_ESCALADE_MAX_SGL_LENGTH];#if BITS_PER_LONG > 32			u32 padding[3];#else			u32 padding[2];#endif		} param;	} byte8_offset;} TW_Command;/* Scatter gather element for 9000+ controllers */typedef struct TAG_TW_SG_Apache {	unsigned long address;	u32 length;} TW_SG_Apache;/* Command Packet for 9000+ controllers */typedef struct TAG_TW_Command_Apache {	unsigned char opcode__reserved;	unsigned char unit;	unsigned short request_id;	unsigned char status;	unsigned char sgl_offset;	unsigned short sgl_entries;	unsigned char cdb[16];	TW_SG_Apache sg_list[TW_APACHE_MAX_SGL_LENGTH];#if BITS_PER_LONG > 32	unsigned char padding[8];#endif} TW_Command_Apache;/* New command packet header */typedef struct TAG_TW_Command_Apache_Header {	unsigned char sense_data[TW_SENSE_DATA_LENGTH];	struct {		char reserved[4];		unsigned short error;		unsigned char padding;		unsigned char severity__reserved;	} status_block;	unsigned char err_specific_desc[98];	struct {		unsigned char size_header;		unsigned short reserved;		unsigned char size_sense;	} header_desc;} TW_Command_Apache_Header;/* This struct is a union of the 2 command packets */typedef struct TAG_TW_Command_Full {	TW_Command_Apache_Header header;	union {		TW_Command oldcommand;		TW_Command_Apache newcommand;	} command;} TW_Command_Full;/* Initconnection structure */typedef struct TAG_TW_Initconnect {	unsigned char opcode__reserved;	unsigned char size;	unsigned char request_id;	unsigned char res2;	unsigned char status;	unsigned char flags;	unsigned short message_credits;	u32 features;	unsigned short fw_srl;	unsigned short fw_arch_id;	unsigned short fw_branch;	unsigned short fw_build;	u32 result;} TW_Initconnect;/* Event info structure */typedef struct TAG_TW_Event{	unsigned int sequence_id;	unsigned int time_stamp_sec;	unsigned short aen_code;	unsigned char severity;	unsigned char retrieved;	unsigned char repeat_count;	unsigned char parameter_len;	unsigned char parameter_data[98];} TW_Event;typedef struct TAG_TW_Ioctl_Driver_Command {	unsigned int control_code;	unsigned int status;	unsigned int unique_id;	unsigned int sequence_id;	unsigned int os_specific;	unsigned int buffer_length;} TW_Ioctl_Driver_Command;typedef struct TAG_TW_Ioctl_Apache {	TW_Ioctl_Driver_Command driver_command;        char padding[488];	TW_Command_Full firmware_command;	char data_buffer[1];} TW_Ioctl_Buf_Apache;/* Lock structure for ioctl get/release lock */typedef struct TAG_TW_Lock {	unsigned long timeout_msec;	unsigned long time_remaining_msec;	unsigned long force_flag;} TW_Lock;/* GetParam descriptor */typedef struct {	unsigned short	table_id;	unsigned short	parameter_id;	unsigned short	parameter_size_bytes;	unsigned short  actual_parameter_size_bytes;	unsigned char	data[1];} TW_Param_Apache, *PTW_Param_Apache;/* Response queue */typedef union TAG_TW_Response_Queue {	u32 response_id;	u32 value;} TW_Response_Queue;typedef struct TAG_TW_Info {	char *buffer;	int length;	int offset;	int position;} TW_Info;/* Compatibility information structure */typedef struct TAG_TW_Compatibility_Info{	char driver_version[32];	unsigned short working_srl;	unsigned short working_branch;	unsigned short working_build;} TW_Compatibility_Info;typedef struct TAG_TW_Device_Extension {	u32                     *base_addr;	unsigned long	       	*generic_buffer_virt[TW_Q_LENGTH];	unsigned long	       	generic_buffer_phys[TW_Q_LENGTH];	TW_Command_Full	       	*command_packet_virt[TW_Q_LENGTH];	unsigned long		command_packet_phys[TW_Q_LENGTH];	struct pci_dev		*tw_pci_dev;	struct scsi_cmnd	*srb[TW_Q_LENGTH];	unsigned char		free_queue[TW_Q_LENGTH];	unsigned char		free_head;	unsigned char		free_tail;	unsigned char		pending_queue[TW_Q_LENGTH];	unsigned char		pending_head;	unsigned char		pending_tail;	int     		state[TW_Q_LENGTH];	unsigned int		posted_request_count;	unsigned int		max_posted_request_count;	unsigned int	        pending_request_count;	unsigned int		max_pending_request_count;	unsigned int		max_sgl_entries;	unsigned int		sgl_entries;	unsigned int		num_aborts;	unsigned int		num_resets;	unsigned int		sector_count;	unsigned int		max_sector_count;	unsigned int		aen_count;	struct Scsi_Host	*host;	long			flags;	int			reset_print;	TW_Event                *event_queue[TW_Q_LENGTH];	unsigned char           error_index;	unsigned char		event_queue_wrapped;	unsigned int            error_sequence_id;	int                     ioctl_sem_lock;	u32                     ioctl_msec;	int			chrdev_request_id;	wait_queue_head_t	ioctl_wqueue;	struct semaphore	ioctl_sem;	char			aen_clobber;	unsigned short		working_srl;	unsigned short		working_branch;	unsigned short		working_build;} TW_Device_Extension;#pragma pack()#endif /* _3W_9XXX_H */

⌨️ 快捷键说明

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