| Viewing file:  xbow.h (10.56 KB)      -rw-r--r-- Select action/file-type:
 
  (+) |  (+) |  (+) | Code (+) | Session (+) |  (+) | SDB (+) |  (+) |  (+) |  (+) |  (+) |  (+) | 
 
/** 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.
 *
 * Copyright (C) 1992-1997,2000-2006 Silicon Graphics, Inc. All Rights
 * Reserved.
 */
 #ifndef _ASM_IA64_SN_XTALK_XBOW_H
 #define _ASM_IA64_SN_XTALK_XBOW_H
 
 #define XBOW_PORT_8    0x8
 #define XBOW_PORT_C    0xc
 #define XBOW_PORT_F    0xf
 
 #define MAX_XBOW_PORTS    8    /* number of ports on xbow chip */
 #define BASE_XBOW_PORT    XBOW_PORT_8    /* Lowest external port */
 
 #define    XBOW_CREDIT    4
 
 #define MAX_XBOW_NAME     16
 
 /* Register set for each xbow link */
 typedef volatile struct xb_linkregs_s {
 /*
 * we access these through synergy unswizzled space, so the address
 * gets twiddled (i.e. references to 0x4 actually go to 0x0 and vv.)
 * That's why we put the register first and filler second.
 */
 u32 link_ibf;
 u32 filler0;    /* filler for proper alignment */
 u32 link_control;
 u32 filler1;
 u32 link_status;
 u32 filler2;
 u32 link_arb_upper;
 u32 filler3;
 u32 link_arb_lower;
 u32 filler4;
 u32 link_status_clr;
 u32 filler5;
 u32 link_reset;
 u32 filler6;
 u32 link_aux_status;
 u32 filler7;
 } xb_linkregs_t;
 
 typedef volatile struct xbow_s {
 /* standard widget configuration 0x000000-0x000057 */
 struct widget_cfg xb_widget;  /* 0x000000 */
 
 /* helper fieldnames for accessing bridge widget */
 
 #define xb_wid_id         xb_widget.w_id
 #define xb_wid_stat         xb_widget.w_status
 #define xb_wid_err_upper     xb_widget.w_err_upper_addr
 #define xb_wid_err_lower     xb_widget.w_err_lower_addr
 #define xb_wid_control        xb_widget.w_control
 #define xb_wid_req_timeout     xb_widget.w_req_timeout
 #define xb_wid_int_upper     xb_widget.w_intdest_upper_addr
 #define xb_wid_int_lower     xb_widget.w_intdest_lower_addr
 #define xb_wid_err_cmdword     xb_widget.w_err_cmd_word
 #define xb_wid_llp         xb_widget.w_llp_cfg
 #define xb_wid_stat_clr     xb_widget.w_tflush
 
 /*
 * we access these through synergy unswizzled space, so the address
 * gets twiddled (i.e. references to 0x4 actually go to 0x0 and vv.)
 * That's why we put the register first and filler second.
 */
 /* xbow-specific widget configuration    0x000058-0x0000FF */
 u32 xb_wid_arb_reload; /* 0x00005C */
 u32 _pad_000058;
 u32 xb_perf_ctr_a;    /* 0x000064 */
 u32 _pad_000060;
 u32 xb_perf_ctr_b;    /* 0x00006c */
 u32 _pad_000068;
 u32 xb_nic;        /* 0x000074 */
 u32 _pad_000070;
 
 /* Xbridge only */
 u32 xb_w0_rst_fnc;    /* 0x00007C */
 u32 _pad_000078;
 u32 xb_l8_rst_fnc;    /* 0x000084 */
 u32 _pad_000080;
 u32 xb_l9_rst_fnc;    /* 0x00008c */
 u32 _pad_000088;
 u32 xb_la_rst_fnc;    /* 0x000094 */
 u32 _pad_000090;
 u32 xb_lb_rst_fnc;    /* 0x00009c */
 u32 _pad_000098;
 u32 xb_lc_rst_fnc;    /* 0x0000a4 */
 u32 _pad_0000a0;
 u32 xb_ld_rst_fnc;    /* 0x0000ac */
 u32 _pad_0000a8;
 u32 xb_le_rst_fnc;    /* 0x0000b4 */
 u32 _pad_0000b0;
 u32 xb_lf_rst_fnc;    /* 0x0000bc */
 u32 _pad_0000b8;
 u32 xb_lock;        /* 0x0000c4 */
 u32 _pad_0000c0;
 u32 xb_lock_clr;    /* 0x0000cc */
 u32 _pad_0000c8;
 /* end of Xbridge only */
 u32 _pad_0000d0[12];
 
 /* Link Specific Registers, port 8..15   0x000100-0x000300 */
 xb_linkregs_t xb_link_raw[MAX_XBOW_PORTS];
 } xbow_t;
 
 #define xb_link(p) xb_link_raw[(p) & (MAX_XBOW_PORTS - 1)]
 
 #define XB_FLAGS_EXISTS        0x1    /* device exists */
 #define XB_FLAGS_MASTER        0x2
 #define XB_FLAGS_SLAVE        0x0
 #define XB_FLAGS_GBR        0x4
 #define XB_FLAGS_16BIT        0x8
 #define XB_FLAGS_8BIT        0x0
 
 /* is widget port number valid?  (based on version 7.0 of xbow spec) */
 #define XBOW_WIDGET_IS_VALID(wid) ((wid) >= XBOW_PORT_8 && (wid) <= XBOW_PORT_F)
 
 /* whether to use upper or lower arbitration register, given source widget id */
 #define XBOW_ARB_IS_UPPER(wid)     ((wid) >= XBOW_PORT_8 && (wid) <= XBOW_PORT_B)
 #define XBOW_ARB_IS_LOWER(wid)     ((wid) >= XBOW_PORT_C && (wid) <= XBOW_PORT_F)
 
 /* offset of arbitration register, given source widget id */
 #define XBOW_ARB_OFF(wid)     (XBOW_ARB_IS_UPPER(wid) ? 0x1c : 0x24)
 
 #define    XBOW_WID_ID        WIDGET_ID
 #define    XBOW_WID_STAT        WIDGET_STATUS
 #define    XBOW_WID_ERR_UPPER    WIDGET_ERR_UPPER_ADDR
 #define    XBOW_WID_ERR_LOWER    WIDGET_ERR_LOWER_ADDR
 #define    XBOW_WID_CONTROL    WIDGET_CONTROL
 #define    XBOW_WID_REQ_TO        WIDGET_REQ_TIMEOUT
 #define    XBOW_WID_INT_UPPER    WIDGET_INTDEST_UPPER_ADDR
 #define    XBOW_WID_INT_LOWER    WIDGET_INTDEST_LOWER_ADDR
 #define    XBOW_WID_ERR_CMDWORD    WIDGET_ERR_CMD_WORD
 #define    XBOW_WID_LLP        WIDGET_LLP_CFG
 #define    XBOW_WID_STAT_CLR    WIDGET_TFLUSH
 #define XBOW_WID_ARB_RELOAD     0x5c
 #define XBOW_WID_PERF_CTR_A     0x64
 #define XBOW_WID_PERF_CTR_B     0x6c
 #define XBOW_WID_NIC         0x74
 
 /* Xbridge only */
 #define XBOW_W0_RST_FNC        0x00007C
 #define    XBOW_L8_RST_FNC        0x000084
 #define    XBOW_L9_RST_FNC        0x00008c
 #define    XBOW_LA_RST_FNC        0x000094
 #define    XBOW_LB_RST_FNC        0x00009c
 #define    XBOW_LC_RST_FNC        0x0000a4
 #define    XBOW_LD_RST_FNC        0x0000ac
 #define    XBOW_LE_RST_FNC        0x0000b4
 #define    XBOW_LF_RST_FNC        0x0000bc
 #define XBOW_RESET_FENCE(x) ((x) > 7 && (x) < 16) ? \
 (XBOW_W0_RST_FNC + ((x) - 7) * 8) : \
 ((x) == 0) ? XBOW_W0_RST_FNC : 0
 #define XBOW_LOCK        0x0000c4
 #define XBOW_LOCK_CLR        0x0000cc
 /* End of Xbridge only */
 
 /* used only in ide, but defined here within the reserved portion */
 /* of the widget0 address space (before 0xf4) */
 #define    XBOW_WID_UNDEF        0xe4
 
 /* xbow link register set base, legal value for x is 0x8..0xf */
 #define    XB_LINK_BASE        0x100
 #define    XB_LINK_OFFSET        0x40
 #define    XB_LINK_REG_BASE(x)    (XB_LINK_BASE + ((x) & (MAX_XBOW_PORTS - 1)) * XB_LINK_OFFSET)
 
 #define    XB_LINK_IBUF_FLUSH(x)    (XB_LINK_REG_BASE(x) + 0x4)
 #define    XB_LINK_CTRL(x)        (XB_LINK_REG_BASE(x) + 0xc)
 #define    XB_LINK_STATUS(x)    (XB_LINK_REG_BASE(x) + 0x14)
 #define    XB_LINK_ARB_UPPER(x)    (XB_LINK_REG_BASE(x) + 0x1c)
 #define    XB_LINK_ARB_LOWER(x)    (XB_LINK_REG_BASE(x) + 0x24)
 #define    XB_LINK_STATUS_CLR(x)    (XB_LINK_REG_BASE(x) + 0x2c)
 #define    XB_LINK_RESET(x)    (XB_LINK_REG_BASE(x) + 0x34)
 #define    XB_LINK_AUX_STATUS(x)    (XB_LINK_REG_BASE(x) + 0x3c)
 
 /* link_control(x) */
 #define    XB_CTRL_LINKALIVE_IE        0x80000000    /* link comes alive */
 /* reserved:            0x40000000 */
 #define    XB_CTRL_PERF_CTR_MODE_MSK    0x30000000    /* perf counter mode */
 #define    XB_CTRL_IBUF_LEVEL_MSK        0x0e000000    /* input packet buffer
 level */
 #define    XB_CTRL_8BIT_MODE        0x01000000    /* force link into 8
 bit mode */
 #define XB_CTRL_BAD_LLP_PKT        0x00800000    /* force bad LLP
 packet */
 #define XB_CTRL_WIDGET_CR_MSK        0x007c0000    /* LLP widget credit
 mask */
 #define XB_CTRL_WIDGET_CR_SHFT    18            /* LLP widget credit
 shift */
 #define XB_CTRL_ILLEGAL_DST_IE        0x00020000    /* illegal destination
 */
 #define XB_CTRL_OALLOC_IBUF_IE        0x00010000    /* overallocated input
 buffer */
 /* reserved:            0x0000fe00 */
 #define XB_CTRL_BNDWDTH_ALLOC_IE    0x00000100    /* bandwidth alloc */
 #define XB_CTRL_RCV_CNT_OFLOW_IE    0x00000080    /* rcv retry overflow */
 #define XB_CTRL_XMT_CNT_OFLOW_IE    0x00000040    /* xmt retry overflow */
 #define XB_CTRL_XMT_MAX_RTRY_IE        0x00000020    /* max transmit retry */
 #define XB_CTRL_RCV_IE            0x00000010    /* receive */
 #define XB_CTRL_XMT_RTRY_IE        0x00000008    /* transmit retry */
 /* reserved:            0x00000004 */
 #define    XB_CTRL_MAXREQ_TOUT_IE        0x00000002    /* maximum request
 timeout */
 #define    XB_CTRL_SRC_TOUT_IE        0x00000001    /* source timeout */
 
 /* link_status(x) */
 #define    XB_STAT_LINKALIVE        XB_CTRL_LINKALIVE_IE
 /* reserved:            0x7ff80000 */
 #define    XB_STAT_MULTI_ERR        0x00040000    /* multi error */
 #define    XB_STAT_ILLEGAL_DST_ERR        XB_CTRL_ILLEGAL_DST_IE
 #define    XB_STAT_OALLOC_IBUF_ERR        XB_CTRL_OALLOC_IBUF_IE
 #define    XB_STAT_BNDWDTH_ALLOC_ID_MSK    0x0000ff00    /* port bitmask */
 #define    XB_STAT_RCV_CNT_OFLOW_ERR    XB_CTRL_RCV_CNT_OFLOW_IE
 #define    XB_STAT_XMT_CNT_OFLOW_ERR    XB_CTRL_XMT_CNT_OFLOW_IE
 #define    XB_STAT_XMT_MAX_RTRY_ERR    XB_CTRL_XMT_MAX_RTRY_IE
 #define    XB_STAT_RCV_ERR            XB_CTRL_RCV_IE
 #define    XB_STAT_XMT_RTRY_ERR        XB_CTRL_XMT_RTRY_IE
 /* reserved:            0x00000004 */
 #define    XB_STAT_MAXREQ_TOUT_ERR        XB_CTRL_MAXREQ_TOUT_IE
 #define    XB_STAT_SRC_TOUT_ERR        XB_CTRL_SRC_TOUT_IE
 
 /* link_aux_status(x) */
 #define    XB_AUX_STAT_RCV_CNT    0xff000000
 #define    XB_AUX_STAT_XMT_CNT    0x00ff0000
 #define    XB_AUX_STAT_TOUT_DST    0x0000ff00
 #define    XB_AUX_LINKFAIL_RST_BAD    0x00000040
 #define    XB_AUX_STAT_PRESENT    0x00000020
 #define    XB_AUX_STAT_PORT_WIDTH    0x00000010
 /*    reserved:        0x0000000f */
 
 /*
 * link_arb_upper/link_arb_lower(x), (reg) should be the link_arb_upper
 * register if (x) is 0x8..0xb, link_arb_lower if (x) is 0xc..0xf
 */
 #define    XB_ARB_GBR_MSK        0x1f
 #define    XB_ARB_RR_MSK        0x7
 #define    XB_ARB_GBR_SHFT(x)    (((x) & 0x3) * 8)
 #define    XB_ARB_RR_SHFT(x)    (((x) & 0x3) * 8 + 5)
 #define    XB_ARB_GBR_CNT(reg,x)    ((reg) >> XB_ARB_GBR_SHFT(x) & XB_ARB_GBR_MSK)
 #define    XB_ARB_RR_CNT(reg,x)    ((reg) >> XB_ARB_RR_SHFT(x) & XB_ARB_RR_MSK)
 
 /* XBOW_WID_STAT */
 #define    XB_WID_STAT_LINK_INTR_SHFT    (24)
 #define    XB_WID_STAT_LINK_INTR_MASK    (0xFF << XB_WID_STAT_LINK_INTR_SHFT)
 #define    XB_WID_STAT_LINK_INTR(x) \
 (0x1 << (((x)&7) + XB_WID_STAT_LINK_INTR_SHFT))
 #define    XB_WID_STAT_WIDGET0_INTR    0x00800000
 #define XB_WID_STAT_SRCID_MASK        0x000003c0    /* Xbridge only */
 #define    XB_WID_STAT_REG_ACC_ERR        0x00000020
 #define XB_WID_STAT_RECV_TOUT        0x00000010    /* Xbridge only */
 #define XB_WID_STAT_ARB_TOUT        0x00000008    /* Xbridge only */
 #define    XB_WID_STAT_XTALK_ERR        0x00000004
 #define XB_WID_STAT_DST_TOUT        0x00000002    /* Xbridge only */
 #define    XB_WID_STAT_MULTI_ERR        0x00000001
 
 #define XB_WID_STAT_SRCID_SHFT        6
 
 /* XBOW_WID_CONTROL */
 #define XB_WID_CTRL_REG_ACC_IE        XB_WID_STAT_REG_ACC_ERR
 #define XB_WID_CTRL_RECV_TOUT        XB_WID_STAT_RECV_TOUT
 #define XB_WID_CTRL_ARB_TOUT        XB_WID_STAT_ARB_TOUT
 #define XB_WID_CTRL_XTALK_IE        XB_WID_STAT_XTALK_ERR
 
 /* XBOW_WID_INT_UPPER */
 /* defined in xwidget.h for WIDGET_INTDEST_UPPER_ADDR */
 
 /* XBOW WIDGET part number, in the ID register */
 #define XBOW_WIDGET_PART_NUM    0x0        /* crossbow */
 #define XXBOW_WIDGET_PART_NUM    0xd000        /* Xbridge */
 #define    XBOW_WIDGET_MFGR_NUM    0x0
 #define    XXBOW_WIDGET_MFGR_NUM    0x0
 #define PXBOW_WIDGET_PART_NUM   0xd100        /* PIC */
 
 #define    XBOW_REV_1_0        0x1    /* xbow rev 1.0 is "1" */
 #define    XBOW_REV_1_1        0x2    /* xbow rev 1.1 is "2" */
 #define XBOW_REV_1_2        0x3    /* xbow rev 1.2 is "3" */
 #define XBOW_REV_1_3        0x4    /* xbow rev 1.3 is "4" */
 #define XBOW_REV_2_0        0x5    /* xbow rev 2.0 is "5" */
 
 #define XXBOW_PART_REV_1_0        (XXBOW_WIDGET_PART_NUM << 4 | 0x1 )
 #define XXBOW_PART_REV_2_0        (XXBOW_WIDGET_PART_NUM << 4 | 0x2 )
 
 /* XBOW_WID_ARB_RELOAD */
 #define    XBOW_WID_ARB_RELOAD_INT    0x3f    /* GBR reload interval */
 
 #define IS_XBRIDGE_XBOW(wid) \
 (XWIDGET_PART_NUM(wid) == XXBOW_WIDGET_PART_NUM && \
 XWIDGET_MFG_NUM(wid) == XXBOW_WIDGET_MFGR_NUM)
 
 #define IS_PIC_XBOW(wid) \
 (XWIDGET_PART_NUM(wid) == PXBOW_WIDGET_PART_NUM && \
 XWIDGET_MFG_NUM(wid) == XXBOW_WIDGET_MFGR_NUM)
 
 #define XBOW_WAR_ENABLED(pv, widid) ((1 << XWIDGET_REV_NUM(widid)) & pv)
 
 #endif /* _ASM_IA64_SN_XTALK_XBOW_H */
 
 |