cregit-Linux how code gets into the kernel

Release 4.14 arch/ia64/sn/include/xtalk/xbow.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.
 *
 * 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 */

Overall Contributors

PersonTokensPropCommitsCommitProp
Patrick Gefre83992.50%150.00%
Prarit Bhargava687.50%150.00%
Total907100.00%2100.00%
Information contained on this website is for historical information purposes only and does not indicate or represent copyright ownership.
Created with cregit.