📄 hubio.h
字号:
/* PIO Read address Table Entries */#define IIO_IPCA 0x400300 /* PRB Counter adjust */#define IIO_NUM_PRTES 8 /* Total number of PRB table entries */#define IIO_PRTE_0 0x400308 /* PIO Read address table entry 0 */#define IIO_PRTE(_x) (IIO_PRTE_0 + (8 * (_x)))#define IIO_WIDPRTE(x) IIO_PRTE(((x) - 8)) /* widget ID to its PRTE num */#define IIO_IPDR 0x400388 /* PIO table entry deallocation */#define IIO_ICDR 0x400390 /* CRB Entry Deallocation */#define IIO_IFDR 0x400398 /* IOQ FIFO Depth */#define IIO_IIAP 0x4003a0 /* IIQ Arbitration Parameters */#define IIO_IMMR IIO_IIAP#define IIO_ICMR 0x4003a8 /* CRB Managment Register */#define IIO_ICCR 0x4003b0 /* CRB Control Register */#define IIO_ICTO 0x4003b8 /* CRB Time Out Register */#define IIO_ICTP 0x4003c0 /* CRB Time Out Prescalar *//* * ICMR register fields */#define IIO_ICMR_PC_VLD_SHFT 36#define IIO_ICMR_PC_VLD_MASK (0x7fffUL << IIO_ICMR_PC_VLD_SHFT)#define IIO_ICMR_CRB_VLD_SHFT 20#define IIO_ICMR_CRB_VLD_MASK (0x7fffUL << IIO_ICMR_CRB_VLD_SHFT)#define IIO_ICMR_FC_CNT_SHFT 16#define IIO_ICMR_FC_CNT_MASK (0xf << IIO_ICMR_FC_CNT_SHFT)#define IIO_ICMR_C_CNT_SHFT 4#define IIO_ICMR_C_CNT_MASK (0xf << IIO_ICMR_C_CNT_SHFT)#define IIO_ICMR_P_CNT_SHFT 0#define IIO_ICMR_P_CNT_MASK (0xf << IIO_ICMR_P_CNT_SHFT)#define IIO_ICMR_PRECISE (1UL << 52)#define IIO_ICMR_CLR_RPPD (1UL << 13)#define IIO_ICMR_CLR_RQPD (1UL << 12)/* * IIO PIO Deallocation register field masks : (IIO_IPDR) */#define IIO_IPDR_PND (1 << 4)/* * IIO CRB deallocation register field masks: (IIO_ICDR) */#define IIO_ICDR_PND (1 << 4)/* * IIO CRB control register Fields: IIO_ICCR */#define IIO_ICCR_PENDING (0x10000)#define IIO_ICCR_CMD_MASK (0xFF)#define IIO_ICCR_CMD_SHFT (7)#define IIO_ICCR_CMD_NOP (0x0) /* No Op */#define IIO_ICCR_CMD_WAKE (0x100) /* Reactivate CRB entry and process */#define IIO_ICCR_CMD_TIMEOUT (0x200) /* Make CRB timeout & mark invalid */#define IIO_ICCR_CMD_EJECT (0x400) /* Contents of entry written to memory * via a WB */#define IIO_ICCR_CMD_FLUSH (0x800)/* * CRB manipulation macros * The CRB macros are slightly complicated, since there are up to * four registers associated with each CRB entry. */#define IIO_NUM_CRBS 15 /* Number of CRBs */#define IIO_NUM_NORMAL_CRBS 12 /* Number of regular CRB entries */#define IIO_NUM_PC_CRBS 4 /* Number of partial cache CRBs */#define IIO_ICRB_OFFSET 8#define IIO_ICRB_0 0x400400/* XXX - This is now tuneable: #define IIO_FIRST_PC_ENTRY 12 */#define IIO_ICRB_A(_x) (IIO_ICRB_0 + (4 * IIO_ICRB_OFFSET * (_x)))#define IIO_ICRB_B(_x) (IIO_ICRB_A(_x) + 1*IIO_ICRB_OFFSET)#define IIO_ICRB_C(_x) (IIO_ICRB_A(_x) + 2*IIO_ICRB_OFFSET)#define IIO_ICRB_D(_x) (IIO_ICRB_A(_x) + 3*IIO_ICRB_OFFSET)/* XXX - IBUE register coming for Hub 2 *//* * * CRB Register description. * * WARNING * WARNING * WARNING * WARNING * WARNING * WARNING * WARNING * WARNING * WARNING * WARNING * WARNING * WARNING * WARNING * WARNING * WARNING * WARNING * WARNING * WARNING * WARNING * WARNING * WARNING * WARNING * WARNING * WARNING * WARNING * WARNING * WARNING * WARNING * WARNING * WARNING * WARNING * WARNING * WARNING * WARNING * WARNING * * Many of the fields in CRB are status bits used by hardware * for implementation of the protocol. It's very dangerous to * mess around with the CRB registers. * * It's OK to read the CRB registers and try to make sense out of the * fields in CRB. * * Updating CRB requires all activities in Hub IIO to be quiesced. * otherwise, a write to CRB could corrupt other CRB entries. * CRBs are here only as a back door peek to hub IIO's status. * Quiescing implies no dmas no PIOs * either directly from the cpu or from sn0net. * this is not something that can be done easily. So, AVOID updating * CRBs. *//* * Fields in CRB Register A */#ifndef __ASSEMBLY__typedef union icrba_u { u64 reg_value; struct { u64 resvd: 6, stall_bte0: 1, /* Stall BTE 0 */ stall_bte1: 1, /* Stall BTE 1 */ error: 1, /* CRB has an error */ ecode: 3, /* Error Code */ lnetuce: 1, /* SN0net Uncorrectable error */ mark: 1, /* CRB Has been marked */ xerr: 1, /* Error bit set in xtalk header */ sidn: 4, /* SIDN field from xtalk */ tnum: 5, /* TNUM field in xtalk */ addr: 38, /* Address of request */ valid: 1, /* Valid status */ iow: 1; /* IO Write operation */ } icrba_fields_s;} icrba_t;/* This is an alternate typedef for the HUB1 CRB A in order to allow runtime selection of the format based on the REV_ID field of the NI_STATUS_REV_ID register. */typedef union h1_icrba_u { u64 reg_value; struct { u64 resvd: 6, unused: 1, /* Unused but RW!! */ error: 1, /* CRB has an error */ ecode: 4, /* Error Code */ lnetuce: 1, /* SN0net Uncorrectable error */ mark: 1, /* CRB Has been marked */ xerr: 1, /* Error bit set in xtalk header */ sidn: 4, /* SIDN field from xtalk */ tnum: 5, /* TNUM field in xtalk */ addr: 38, /* Address of request */ valid: 1, /* Valid status */ iow: 1; /* IO Write operation */ } h1_icrba_fields_s;} h1_icrba_t;/* XXX - Is this still right? Check the spec. */#define ICRBN_A_CERR_SHFT 54#define ICRBN_A_ERR_MASK 0x3ff/* * Easy access macros. */#define a_error icrba_fields_s.error#define a_ecode icrba_fields_s.ecode#define a_lnetuce icrba_fields_s.lnetuce#define a_mark icrba_fields_s.mark#define a_xerr icrba_fields_s.xerr#define a_sidn icrba_fields_s.sidn#define a_tnum icrba_fields_s.tnum#define a_addr icrba_fields_s.addr#define a_valid icrba_fields_s.valid#define a_iow icrba_fields_s.iow#endif /* !__ASSEMBLY__ */#define IIO_ICRB_ADDR_SHFT 2 /* Shift to get proper address *//* * values for "ecode" field */#define IIO_ICRB_ECODE_DERR 0 /* Directory error due to IIO access */#define IIO_ICRB_ECODE_PERR 1 /* Poison error on IO access */#define IIO_ICRB_ECODE_WERR 2 /* Write error by IIO access * e.g. WINV to a Read only line. */#define IIO_ICRB_ECODE_AERR 3 /* Access error caused by IIO access */#define IIO_ICRB_ECODE_PWERR 4 /* Error on partial write */#define IIO_ICRB_ECODE_PRERR 5 /* Error on partial read */#define IIO_ICRB_ECODE_TOUT 6 /* CRB timeout before deallocating */#define IIO_ICRB_ECODE_XTERR 7 /* Incoming xtalk pkt had error bit *//* * Fields in CRB Register B */#ifndef __ASSEMBLY__typedef union icrbb_u { u64 reg_value; struct { u64 rsvd1: 5, btenum: 1, /* BTE to which entry belongs to */ cohtrans: 1, /* Coherent transaction */ xtsize: 2, /* Xtalk operation size * 0: Double Word * 1: 32 Bytes. * 2: 128 Bytes, * 3: Reserved. */ srcnode: 9, /* Source Node ID */ srcinit: 2, /* Source Initiator: * See below for field values. */ useold: 1, /* Use OLD command for processing */ imsgtype: 2, /* Incoming message type * see below for field values */ imsg: 8, /* Incoming message */ initator: 3, /* Initiator of original request * See below for field values. */ reqtype: 5, /* Identifies type of request * See below for field values. */ rsvd2: 7, ackcnt: 11, /* Invalidate ack count */ resp: 1, /* data response given to processor */ ack: 1, /* indicates data ack received */ hold: 1, /* entry is gathering inval acks */ wb_pend:1, /* waiting for writeback to complete */ intvn: 1, /* Intervention */ stall_ib: 1, /* Stall Ibuf (from crosstalk) */ stall_intr: 1; /* Stall internal interrupts */ } icrbb_field_s;} icrbb_t;/* This is an alternate typedef for the HUB1 CRB B in order to allow runtime selection of the format based on the REV_ID field of the NI_STATUS_REV_ID register. */typedef union h1_icrbb_u { u64 reg_value; struct { u64 rsvd1: 5, btenum: 1, /* BTE to which entry belongs to */ cohtrans: 1, /* Coherent transaction */ xtsize: 2, /* Xtalk operation size * 0: Double Word * 1: 32 Bytes. * 2: 128 Bytes, * 3: Reserved. */ srcnode: 9, /* Source Node ID */ srcinit: 2, /* Source Initiator: * See below for field values. */ useold: 1, /* Use OLD command for processing */ imsgtype: 2, /* Incoming message type * see below for field values */ imsg: 8, /* Incoming message */ initator: 3, /* Initiator of original request * See below for field values. */ rsvd2: 1, pcache: 1, /* entry belongs to partial cache */ reqtype: 5, /* Identifies type of request * See below for field values. */ stl_ib: 1, /* stall Ibus coming from xtalk */ stl_intr: 1, /* Stall internal interrupts */ stl_bte0: 1, /* Stall BTE 0 */ stl_bte1: 1, /* Stall BTE 1 */ intrvn: 1, /* Req was target of intervention */ ackcnt: 11, /* Invalidate ack count */ resp: 1, /* data response given to processor */ ack: 1, /* indicates data ack received */ hold: 1, /* entry is gathering inval acks */ wb_pend:1, /* waiting for writeback to complete */ sleep: 1, /* xtalk req sleeping till IO-sync */ pnd_reply: 1, /* replies not issed due to IOQ full */ pnd_req: 1; /* reqs not issued due to IOQ full */ } h1_icrbb_field_s;} h1_icrbb_t;#define b_imsgtype icrbb_field_s.imsgtype#define b_btenum icrbb_field_s.btenum#define b_cohtrans icrbb_field_s.cohtrans#define b_xtsize icrbb_field_s.xtsize#define b_srcnode icrbb_field_s.srcnode#define b_srcinit icrbb_field_s.srcinit#define b_imsgtype icrbb_field_s.imsgtype#define b_imsg icrbb_field_s.imsg#define b_initiator icrbb_field_s.initiator#endif /* !__ASSEMBLY__ *//* * values for field xtsize */#define IIO_ICRB_XTSIZE_DW 0 /* Xtalk operation size is 8 bytes */#define IIO_ICRB_XTSIZE_32 1 /* Xtalk operation size is 32 bytes */#define IIO_ICRB_XTSIZE_128 2 /* Xtalk operation size is 128 bytes *//* * values for field srcinit */#define IIO_ICRB_PROC0 0 /* Source of request is Proc 0 */#define IIO_ICRB_PROC1 1 /* Source of request is Proc 1 */#define IIO_ICRB_GB_REQ 2 /* Source is Guranteed BW request */#define IIO_ICRB_IO_REQ 3 /* Source is Normal IO request *//* * Values for field imsgtype */#define IIO_ICRB_IMSGT_XTALK 0 /* Incoming Meessage from Xtalk */#define IIO_ICRB_IMSGT_BTE 1 /* Incoming message from BTE */#define IIO_ICRB_IMSGT_SN0NET 2 /* Incoming message from SN0 net */#define IIO_ICRB_IMSGT_CRB 3 /* Incoming message from CRB ??? *//* * values for field initiator. */#define IIO_ICRB_INIT_XTALK 0 /* Message originated in xtalk */#define IIO_ICRB_INIT_BTE0 0x1 /* Message originated in BTE 0 */#define IIO_ICRB_INIT_SN0NET 0x2 /* Message originated in SN0net */#define IIO_ICRB_INIT_CRB 0x3 /* Message originated in CRB ? */#define IIO_ICRB_INIT_BTE1 0x5 /* MEssage originated in BTE 1 */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -