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 + -
显示快捷键?