📄 hubio.h
字号:
/* * This file is subject to the terms and conditions of the GNU General Public * License. See the file "COPYING" in the main directory of this archive * for more details. * * Derived from IRIX <sys/SN/SN0/hubio.h>, Revision 1.80. * * Copyright (C) 1992 - 1997, 1999 Silicon Graphics, Inc. * Copyright (C) 1999 by Ralf Baechle */#ifndef _ASM_SGI_SN_SN0_HUBIO_H#define _ASM_SGI_SN_SN0_HUBIO_H/* * Hub I/O interface registers * * All registers in this file are subject to change until Hub chip tapeout. * In general, the longer software name should be used when available. *//* * Slightly friendlier names for some common registers. * The hardware definitions follow. */#define IIO_WIDGET IIO_WID /* Widget identification */#define IIO_WIDGET_STAT IIO_WSTAT /* Widget status register */#define IIO_WIDGET_CTRL IIO_WCR /* Widget control register */#define IIO_WIDGET_TOUT IIO_WRTO /* Widget request timeout */#define IIO_WIDGET_FLUSH IIO_WTFR /* Widget target flush */#define IIO_PROTECT IIO_ILAPR /* IO interface protection */#define IIO_PROTECT_OVRRD IIO_ILAPO /* IO protect override */#define IIO_OUTWIDGET_ACCESS IIO_IOWA /* Outbound widget access */#define IIO_INWIDGET_ACCESS IIO_IIWA /* Inbound widget access */#define IIO_INDEV_ERR_MASK IIO_IIDEM /* Inbound device error mask */#define IIO_LLP_CSR IIO_ILCSR /* LLP control and status */#define IIO_LLP_LOG IIO_ILLR /* LLP log */#define IIO_XTALKCC_TOUT IIO_IXCC /* Xtalk credit count timeout*/#define IIO_XTALKTT_TOUT IIO_IXTT /* Xtalk tail timeout */#define IIO_IO_ERR_CLR IIO_IECLR /* IO error clear */#define IIO_BTE_CRB_CNT IIO_IBCN /* IO BTE CRB count */#define IIO_LLP_CSR_IS_UP 0x00002000#define IIO_LLP_CSR_LLP_STAT_MASK 0x00003000#define IIO_LLP_CSR_LLP_STAT_SHFT 12/* key to IIO_PROTECT_OVRRD */#define IIO_PROTECT_OVRRD_KEY 0x53474972756c6573ull /* "SGIrules" *//* BTE register names */#define IIO_BTE_STAT_0 IIO_IBLS_0 /* Also BTE length/status 0 */#define IIO_BTE_SRC_0 IIO_IBSA_0 /* Also BTE source address 0 */#define IIO_BTE_DEST_0 IIO_IBDA_0 /* Also BTE dest. address 0 */#define IIO_BTE_CTRL_0 IIO_IBCT_0 /* Also BTE control/terminate 0 */#define IIO_BTE_NOTIFY_0 IIO_IBNA_0 /* Also BTE notification 0 */#define IIO_BTE_INT_0 IIO_IBIA_0 /* Also BTE interrupt 0 */#define IIO_BTE_OFF_0 0 /* Base offset from BTE 0 regs. */#define IIO_BTE_OFF_1 IIO_IBLS_1 - IIO_IBLS_0 /* Offset from base to BTE 1 *//* BTE register offsets from base */#define BTEOFF_STAT 0#define BTEOFF_SRC (IIO_BTE_SRC_0 - IIO_BTE_STAT_0)#define BTEOFF_DEST (IIO_BTE_DEST_0 - IIO_BTE_STAT_0)#define BTEOFF_CTRL (IIO_BTE_CTRL_0 - IIO_BTE_STAT_0)#define BTEOFF_NOTIFY (IIO_BTE_NOTIFY_0 - IIO_BTE_STAT_0)#define BTEOFF_INT (IIO_BTE_INT_0 - IIO_BTE_STAT_0)/* * The following definitions use the names defined in the IO interface * document for ease of reference. When possible, software should * generally use the longer but clearer names defined above. */#define IIO_BASE 0x400000#define IIO_BASE_BTE0 0x410000#define IIO_BASE_BTE1 0x420000#define IIO_BASE_PERF 0x430000#define IIO_PERF_CNT 0x430008#define IO_PERF_SETS 32#define IIO_WID 0x400000 /* Widget identification */#define IIO_WSTAT 0x400008 /* Widget status */#define IIO_WCR 0x400020 /* Widget control */#define IIO_WSTAT_ECRAZY (1ULL << 32) /* Hub gone crazy */#define IIO_WSTAT_TXRETRY (1ULL << 9) /* Hub Tx Retry timeout */#define IIO_WSTAT_TXRETRY_MASK (0x7F)#define IIO_WSTAT_TXRETRY_SHFT (16)#define IIO_WSTAT_TXRETRY_CNT(w) (((w) >> IIO_WSTAT_TXRETRY_SHFT) & \ IIO_WSTAT_TXRETRY_MASK)#define IIO_ILAPR 0x400100 /* Local Access Protection */#define IIO_ILAPO 0x400108 /* Protection override */#define IIO_IOWA 0x400110 /* outbound widget access */#define IIO_IIWA 0x400118 /* inbound widget access */#define IIO_IIDEM 0x400120 /* Inbound Device Error Mask */#define IIO_ILCSR 0x400128 /* LLP control and status */#define IIO_ILLR 0x400130 /* LLP Log */#define IIO_IIDSR 0x400138 /* Interrupt destination */#define IIO_IIBUSERR 0x1400208 /* Reads here cause a bus error. *//* IO Interrupt Destination Register */#define IIO_IIDSR_SENT_SHIFT 28#define IIO_IIDSR_SENT_MASK 0x10000000#define IIO_IIDSR_ENB_SHIFT 24#define IIO_IIDSR_ENB_MASK 0x01000000#define IIO_IIDSR_NODE_SHIFT 8#define IIO_IIDSR_NODE_MASK 0x0000ff00#define IIO_IIDSR_LVL_SHIFT 0#define IIO_IIDSR_LVL_MASK 0x0000003f/* GFX Flow Control Node/Widget Register */#define IIO_IGFX_0 0x400140 /* gfx node/widget register 0 */#define IIO_IGFX_1 0x400148 /* gfx node/widget register 1 */#define IIO_IGFX_W_NUM_BITS 4 /* size of widget num field */#define IIO_IGFX_W_NUM_MASK ((1<<IIO_IGFX_W_NUM_BITS)-1)#define IIO_IGFX_W_NUM_SHIFT 0#define IIO_IGFX_N_NUM_BITS 9 /* size of node num field */#define IIO_IGFX_N_NUM_MASK ((1<<IIO_IGFX_N_NUM_BITS)-1)#define IIO_IGFX_N_NUM_SHIFT 4#define IIO_IGFX_P_NUM_BITS 1 /* size of processor num field */#define IIO_IGFX_P_NUM_MASK ((1<<IIO_IGFX_P_NUM_BITS)-1)#define IIO_IGFX_P_NUM_SHIFT 16#define IIO_IGFX_VLD_BITS 1 /* size of valid field */#define IIO_IGFX_VLD_MASK ((1<<IIO_IGFX_VLD_BITS)-1)#define IIO_IGFX_VLD_SHIFT 20#define IIO_IGFX_INIT(widget, node, cpu, valid) (\ (((widget) & IIO_IGFX_W_NUM_MASK) << IIO_IGFX_W_NUM_SHIFT) | \ (((node) & IIO_IGFX_N_NUM_MASK) << IIO_IGFX_N_NUM_SHIFT) | \ (((cpu) & IIO_IGFX_P_NUM_MASK) << IIO_IGFX_P_NUM_SHIFT) | \ (((valid) & IIO_IGFX_VLD_MASK) << IIO_IGFX_VLD_SHIFT) )/* Scratch registers (not all bits available) */#define IIO_SCRATCH_REG0 0x400150#define IIO_SCRATCH_REG1 0x400158#define IIO_SCRATCH_MASK 0x0000000f00f11fff#define IIO_SCRATCH_BIT0_0 0x0000000800000000#define IIO_SCRATCH_BIT0_1 0x0000000400000000#define IIO_SCRATCH_BIT0_2 0x0000000200000000#define IIO_SCRATCH_BIT0_3 0x0000000100000000#define IIO_SCRATCH_BIT0_4 0x0000000000800000#define IIO_SCRATCH_BIT0_5 0x0000000000400000#define IIO_SCRATCH_BIT0_6 0x0000000000200000#define IIO_SCRATCH_BIT0_7 0x0000000000100000#define IIO_SCRATCH_BIT0_8 0x0000000000010000#define IIO_SCRATCH_BIT0_9 0x0000000000001000#define IIO_SCRATCH_BIT0_R 0x0000000000000fff/* IO Translation Table Entries */#define IIO_NUM_ITTES 7 /* ITTEs numbered 0..6 */ /* Hw manuals number them 1..7! *//* * As a permanent workaround for a bug in the PI side of the hub, we've * redefined big window 7 as small window 0. */#define HUB_NUM_BIG_WINDOW IIO_NUM_ITTES - 1/* * Use the top big window as a surrogate for the first small window */#define SWIN0_BIGWIN HUB_NUM_BIG_WINDOW#define ILCSR_WARM_RESET 0x100/* * The IO LLP control status register and widget control register */#ifndef __ASSEMBLY__typedef union hubii_wid_u { u64 wid_reg_value; struct { u64 wid_rsvd: 32, /* unused */ wid_rev_num: 4, /* revision number */ wid_part_num: 16, /* the widget type: hub=c101 */ wid_mfg_num: 11, /* Manufacturer id (IBM) */ wid_rsvd1: 1; /* Reserved */ } wid_fields_s;} hubii_wid_t;typedef union hubii_wcr_u { u64 wcr_reg_value; struct { u64 wcr_rsvd: 41, /* unused */ wcr_e_thresh: 5, /* elasticity threshold */ wcr_dir_con: 1, /* widget direct connect */ wcr_f_bad_pkt: 1, /* Force bad llp pkt enable */ wcr_xbar_crd: 3, /* LLP crossbar credit */ wcr_rsvd1: 8, /* Reserved */ wcr_tag_mode: 1, /* Tag mode */ wcr_widget_id: 4; /* LLP crossbar credit */ } wcr_fields_s;} hubii_wcr_t;#define iwcr_dir_con wcr_fields_s.wcr_dir_contypedef union hubii_wstat_u { u64 reg_value; struct { u64 rsvd1: 31, crazy: 1, /* Crazy bit */ rsvd2: 8, llp_tx_cnt: 8, /* LLP Xmit retry counter */ rsvd3: 6, tx_max_rtry: 1, /* LLP Retry Timeout Signal */ rsvd4: 2, xt_tail_to: 1, /* Xtalk Tail Timeout */ xt_crd_to: 1, /* Xtalk Credit Timeout */ pending: 4; /* Pending Requests */ } wstat_fields_s;} hubii_wstat_t;typedef union hubii_ilcsr_u { u64 icsr_reg_value; struct { u64 icsr_rsvd: 22, /* unused */ icsr_max_burst: 10, /* max burst */ icsr_rsvd4: 6, /* reserved */ icsr_max_retry: 10, /* max retry */ icsr_rsvd3: 2, /* reserved */ icsr_lnk_stat: 2, /* link status */ icsr_bm8: 1, /* Bit mode 8 */ icsr_llp_en: 1, /* LLP enable bit */ icsr_rsvd2: 1, /* reserver */ icsr_wrm_reset: 1, /* Warm reset bit */ icsr_rsvd1: 2, /* Data ready offset */ icsr_null_to: 6; /* Null timeout */ } icsr_fields_s;} hubii_ilcsr_t;typedef union hubii_iowa_u { u64 iowa_reg_value; struct { u64 iowa_rsvd: 48, /* unused */ iowa_wxoac: 8, /* xtalk widget access bits */ iowa_rsvd1: 7, /* xtalk widget access bits */ iowa_w0oac: 1; /* xtalk widget access bits */ } iowa_fields_s;} hubii_iowa_t;typedef union hubii_iiwa_u { u64 iiwa_reg_value; struct { u64 iiwa_rsvd: 48, /* unused */ iiwa_wxiac: 8, /* hub wid access bits */ iiwa_rsvd1: 7, /* reserved */ iiwa_w0iac: 1; /* hub wid0 access */ } iiwa_fields_s;} hubii_iiwa_t;typedef union hubii_illr_u { u64 illr_reg_value; struct { u64 illr_rsvd: 32, /* unused */ illr_cb_cnt: 16, /* checkbit error count */ illr_sn_cnt: 16; /* sequence number count */ } illr_fields_s;} hubii_illr_t;/* The structures below are defined to extract and modify the iiperformance registers *//* io_perf_sel allows the caller to specify what tests will be performed */typedef union io_perf_sel { u64 perf_sel_reg; struct { u64 perf_rsvd : 48, perf_icct : 8, perf_ippr1 : 4, perf_ippr0 : 4; } perf_sel_bits;} io_perf_sel_t;/* io_perf_cnt is to extract the count from the hub registers. Due to hardware problems there is only one counter, not two. */typedef union io_perf_cnt { u64 perf_cnt; struct { u64 perf_rsvd1 : 32, perf_rsvd2 : 12, perf_cnt : 20; } perf_cnt_bits;} io_perf_cnt_t;#endif /* !__ASSEMBLY__ */#define LNK_STAT_WORKING 0x2#define IIO_LLP_CB_MAX 0xffff#define IIO_LLP_SN_MAX 0xffff/* IO PRB Entries */#define IIO_NUM_IPRBS (9)#define IIO_IOPRB_0 0x400198 /* PRB entry 0 */#define IIO_IOPRB_8 0x4001a0 /* PRB entry 8 */#define IIO_IOPRB_9 0x4001a8 /* PRB entry 9 */#define IIO_IOPRB_A 0x4001b0 /* PRB entry a */#define IIO_IOPRB_B 0x4001b8 /* PRB entry b */#define IIO_IOPRB_C 0x4001c0 /* PRB entry c */#define IIO_IOPRB_D 0x4001c8 /* PRB entry d */#define IIO_IOPRB_E 0x4001d0 /* PRB entry e */#define IIO_IOPRB_F 0x4001d8 /* PRB entry f */#define IIO_IXCC 0x4001e0 /* Crosstalk credit count timeout */#define IIO_IXTCC IIO_IXCC#define IIO_IMEM 0x4001e8 /* Miscellaneous Enable Mask */#define IIO_IXTT 0x4001f0 /* Crosstalk tail timeout */#define IIO_IECLR 0x4001f8 /* IO error clear */#define IIO_IBCN 0x400200 /* IO BTE CRB count *//* * IIO_IMEM Register fields. */#define IIO_IMEM_W0ESD 0x1 /* Widget 0 shut down due to error */#define IIO_IMEM_B0ESD (1 << 4) /* BTE 0 shut down due to error */#define IIO_IMEM_B1ESD (1 << 8) /* BTE 1 Shut down due to error */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -