arcmsr.h

来自「linux 内核源代码」· C头文件 代码 · 共 560 行 · 第 1/2 页

H
560
字号
#define ARCMSR_CDB_FLAG_SGL_BSIZE          0x01#define ARCMSR_CDB_FLAG_BIOS               0x02#define ARCMSR_CDB_FLAG_WRITE              0x04#define ARCMSR_CDB_FLAG_SIMPLEQ            0x00#define ARCMSR_CDB_FLAG_HEADQ              0x08#define ARCMSR_CDB_FLAG_ORDEREDQ           0x10	uint8_t							Reserved1;	uint32_t						Context;	uint32_t						DataLength;	uint8_t							Cdb[16];	uint8_t							DeviceStatus;#define ARCMSR_DEV_CHECK_CONDITION	    0x02#define ARCMSR_DEV_SELECT_TIMEOUT	    0xF0#define ARCMSR_DEV_ABORTED		    0xF1#define ARCMSR_DEV_INIT_FAIL		    0xF2	uint8_t							SenseData[15];	union	{		struct SG32ENTRY                sg32entry[ARCMSR_MAX_SG_ENTRIES];		struct SG64ENTRY                sg64entry[ARCMSR_MAX_SG_ENTRIES];	} u;};/**********************************************************************************     Messaging Unit (MU) of the Intel R 80331 I/O processor(Type A) and Type B processor********************************************************************************/struct MessageUnit_A{	uint32_t	resrved0[4];			/*0000 000F*/	uint32_t	inbound_msgaddr0;		/*0010 0013*/	uint32_t	inbound_msgaddr1;		/*0014 0017*/	uint32_t	outbound_msgaddr0;		/*0018 001B*/	uint32_t	outbound_msgaddr1;		/*001C 001F*/	uint32_t	inbound_doorbell;		/*0020 0023*/	uint32_t	inbound_intstatus;		/*0024 0027*/	uint32_t	inbound_intmask;		/*0028 002B*/	uint32_t	outbound_doorbell;		/*002C 002F*/	uint32_t	outbound_intstatus;		/*0030 0033*/	uint32_t	outbound_intmask;		/*0034 0037*/	uint32_t	reserved1[2];			/*0038 003F*/	uint32_t	inbound_queueport;		/*0040 0043*/	uint32_t	outbound_queueport;     	/*0044 0047*/	uint32_t	reserved2[2];			/*0048 004F*/	uint32_t	reserved3[492];			/*0050 07FF 492*/	uint32_t	reserved4[128];			/*0800 09FF 128*/	uint32_t	message_rwbuffer[256];		/*0a00 0DFF 256*/	uint32_t	message_wbuffer[32];		/*0E00 0E7F  32*/	uint32_t	reserved5[32];			/*0E80 0EFF  32*/	uint32_t	message_rbuffer[32];		/*0F00 0F7F  32*/	uint32_t	reserved6[32];			/*0F80 0FFF  32*/};struct MessageUnit_B{	uint32_t	post_qbuffer[ARCMSR_MAX_HBB_POSTQUEUE];	uint32_t	done_qbuffer[ARCMSR_MAX_HBB_POSTQUEUE];	uint32_t	postq_index;	uint32_t	doneq_index;	uint32_t	__iomem *drv2iop_doorbell_reg;	uint32_t	__iomem *drv2iop_doorbell_mask_reg;	uint32_t	__iomem *iop2drv_doorbell_reg;	uint32_t	__iomem *iop2drv_doorbell_mask_reg;	uint32_t	__iomem *msgcode_rwbuffer_reg;	uint32_t	__iomem *ioctl_wbuffer_reg;	uint32_t	__iomem *ioctl_rbuffer_reg;};/**********************************************************************************                 Adapter Control Block********************************************************************************/struct AdapterControlBlock{	uint32_t  adapter_type;                /* adapter A,B..... */	#define ACB_ADAPTER_TYPE_A            0x00000001	/* hba I IOP */	#define ACB_ADAPTER_TYPE_B            0x00000002	/* hbb M IOP */	#define ACB_ADAPTER_TYPE_C            0x00000004	/* hbc P IOP */	#define ACB_ADAPTER_TYPE_D            0x00000008	/* hbd A IOP */	struct pci_dev *		pdev;	struct Scsi_Host *		host;	unsigned long			vir2phy_offset;	/* Offset is used in making arc cdb physical to virtual calculations */	uint32_t			outbound_int_enable;	union {		struct MessageUnit_A __iomem *	pmuA;		struct MessageUnit_B *		pmuB;	};	/* message unit ATU inbound base address0 */	uint32_t			acb_flags;	#define ACB_F_SCSISTOPADAPTER         	0x0001	#define ACB_F_MSG_STOP_BGRB     	0x0002	/* stop RAID background rebuild */	#define ACB_F_MSG_START_BGRB          	0x0004	/* stop RAID background rebuild */	#define ACB_F_IOPDATA_OVERFLOW        	0x0008	/* iop message data rqbuffer overflow */	#define ACB_F_MESSAGE_WQBUFFER_CLEARED	0x0010	/* message clear wqbuffer */	#define ACB_F_MESSAGE_RQBUFFER_CLEARED  0x0020	/* message clear rqbuffer */	#define ACB_F_MESSAGE_WQBUFFER_READED   0x0040	#define ACB_F_BUS_RESET               	0x0080	#define ACB_F_IOP_INITED              	0x0100	/* iop init */	struct CommandControlBlock *			pccb_pool[ARCMSR_MAX_FREECCB_NUM];	/* used for memory free */	struct list_head		ccb_free_list;	/* head of free ccb list */	atomic_t			ccboutstandingcount;	/*The present outstanding command number that in the IOP that					waiting for being handled by FW*/	void *				dma_coherent;	/* dma_coherent used for memory free */	dma_addr_t			dma_coherent_handle;	/* dma_coherent_handle used for memory free */	uint8_t				rqbuffer[ARCMSR_MAX_QBUFFER];	/* data collection buffer for read from 80331 */	int32_t				rqbuf_firstindex;	/* first of read buffer  */	int32_t				rqbuf_lastindex;	/* last of read buffer   */	uint8_t				wqbuffer[ARCMSR_MAX_QBUFFER];	/* data collection buffer for write to 80331  */	int32_t				wqbuf_firstindex;	/* first of write buffer */	int32_t				wqbuf_lastindex;	/* last of write buffer  */	uint8_t				devstate[ARCMSR_MAX_TARGETID][ARCMSR_MAX_TARGETLUN];	/* id0 ..... id15, lun0...lun7 */#define ARECA_RAID_GONE               0x55#define ARECA_RAID_GOOD               0xaa	uint32_t			num_resets;	uint32_t			num_aborts;	uint32_t			firm_request_len;	uint32_t			firm_numbers_queue;	uint32_t			firm_sdram_size;	uint32_t			firm_hd_channels;	char				firm_model[12];	char				firm_version[20];};/* HW_DEVICE_EXTENSION *//**********************************************************************************                   Command Control Block**             this CCB length must be 32 bytes boundary********************************************************************************/struct CommandControlBlock{	struct ARCMSR_CDB		arcmsr_cdb;	/*	** 0-503 (size of CDB = 504):	** arcmsr messenger scsi command descriptor size 504 bytes	*/	uint32_t			cdb_shifted_phyaddr;	/* 504-507 */	uint32_t			reserved1;	/* 508-511 */#if BITS_PER_LONG == 64	/*  ======================512+64 bytes========================  */	struct list_head		list;	/* 512-527 16 bytes next/prev ptrs for ccb lists */	struct scsi_cmnd *		pcmd;	/* 528-535 8 bytes pointer of linux scsi command */	struct AdapterControlBlock *	acb;	/* 536-543 8 bytes pointer of acb */	uint16_t			ccb_flags;	/* 544-545 */	#define		CCB_FLAG_READ			0x0000	#define		CCB_FLAG_WRITE			0x0001	#define		CCB_FLAG_ERROR			0x0002	#define		CCB_FLAG_FLUSHCACHE		0x0004	#define		CCB_FLAG_MASTER_ABORTED		0x0008	uint16_t			startdone;	/* 546-547 */	#define		ARCMSR_CCB_DONE			0x0000	#define		ARCMSR_CCB_START		0x55AA	#define		ARCMSR_CCB_ABORTED		0xAA55	#define		ARCMSR_CCB_ILLEGAL		0xFFFF	uint32_t			reserved2[7];	/* 548-551 552-555 556-559 560-563 564-567 568-571 572-575 */#else	/*  ======================512+32 bytes========================  */	struct list_head		list;	/* 512-519 8 bytes next/prev ptrs for ccb lists */	struct scsi_cmnd *		pcmd;	/* 520-523 4 bytes pointer of linux scsi command */	struct AdapterControlBlock *	acb;	/* 524-527 4 bytes pointer of acb */	uint16_t			ccb_flags;	/* 528-529 */	#define		CCB_FLAG_READ			0x0000	#define		CCB_FLAG_WRITE			0x0001	#define		CCB_FLAG_ERROR			0x0002	#define		CCB_FLAG_FLUSHCACHE		0x0004	#define		CCB_FLAG_MASTER_ABORTED		0x0008	uint16_t			startdone;	/* 530-531 */	#define		ARCMSR_CCB_DONE			0x0000	#define		ARCMSR_CCB_START		0x55AA	#define		ARCMSR_CCB_ABORTED		0xAA55	#define		ARCMSR_CCB_ILLEGAL		0xFFFF	uint32_t			reserved2[3];	/* 532-535 536-539 540-543 */#endif	/*  ==========================================================  */};/**********************************************************************************    ARECA SCSI sense data********************************************************************************/struct SENSE_DATA{	uint8_t				ErrorCode:7;#define SCSI_SENSE_CURRENT_ERRORS	0x70#define SCSI_SENSE_DEFERRED_ERRORS	0x71	uint8_t				Valid:1;	uint8_t				SegmentNumber;	uint8_t				SenseKey:4;	uint8_t				Reserved:1;	uint8_t				IncorrectLength:1;	uint8_t				EndOfMedia:1;	uint8_t				FileMark:1;	uint8_t				Information[4];	uint8_t				AdditionalSenseLength;	uint8_t				CommandSpecificInformation[4];	uint8_t				AdditionalSenseCode;	uint8_t				AdditionalSenseCodeQualifier;	uint8_t				FieldReplaceableUnitCode;	uint8_t				SenseKeySpecific[3];};/**********************************************************************************  Outbound Interrupt Status Register - OISR********************************************************************************/#define     ARCMSR_MU_OUTBOUND_INTERRUPT_STATUS_REG                 0x30#define     ARCMSR_MU_OUTBOUND_PCI_INT                              0x10#define     ARCMSR_MU_OUTBOUND_POSTQUEUE_INT                        0x08#define     ARCMSR_MU_OUTBOUND_DOORBELL_INT                         0x04#define     ARCMSR_MU_OUTBOUND_MESSAGE1_INT                         0x02#define     ARCMSR_MU_OUTBOUND_MESSAGE0_INT                         0x01#define     ARCMSR_MU_OUTBOUND_HANDLE_INT                 \                    (ARCMSR_MU_OUTBOUND_MESSAGE0_INT      \                     |ARCMSR_MU_OUTBOUND_MESSAGE1_INT     \                     |ARCMSR_MU_OUTBOUND_DOORBELL_INT     \                     |ARCMSR_MU_OUTBOUND_POSTQUEUE_INT    \                     |ARCMSR_MU_OUTBOUND_PCI_INT)/**********************************************************************************  Outbound Interrupt Mask Register - OIMR********************************************************************************/#define     ARCMSR_MU_OUTBOUND_INTERRUPT_MASK_REG                   0x34#define     ARCMSR_MU_OUTBOUND_PCI_INTMASKENABLE                    0x10#define     ARCMSR_MU_OUTBOUND_POSTQUEUE_INTMASKENABLE              0x08#define     ARCMSR_MU_OUTBOUND_DOORBELL_INTMASKENABLE               0x04#define     ARCMSR_MU_OUTBOUND_MESSAGE1_INTMASKENABLE               0x02#define     ARCMSR_MU_OUTBOUND_MESSAGE0_INTMASKENABLE               0x01#define     ARCMSR_MU_OUTBOUND_ALL_INTMASKENABLE                    0x1Fextern void arcmsr_post_ioctldata2iop(struct AdapterControlBlock *);extern void arcmsr_iop_message_read(struct AdapterControlBlock *);extern struct QBUFFER __iomem *arcmsr_get_iop_rqbuffer(struct AdapterControlBlock *);extern struct class_device_attribute *arcmsr_host_attrs[];extern int arcmsr_alloc_sysfs_attr(struct AdapterControlBlock *);void arcmsr_free_sysfs_attr(struct AdapterControlBlock *acb);

⌨️ 快捷键说明

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