| Viewing file:  xwidget.h (4.94 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.
 *
 * xwidget.h - generic crosstalk widget header file, derived from IRIX
 * <sys/xtalk/xtalkwidget.h>, revision 1.32.
 *
 * Copyright (C) 1996, 1999 Silcon Graphics, Inc.
 * Copyright (C) 1999 Ralf Baechle (ralf@gnu.org)
 */
 #ifndef _ASM_XTALK_XWIDGET_H
 #define _ASM_XTALK_XWIDGET_H
 
 #include <linux/types.h>
 #include <asm/xtalk/xtalk.h>
 
 #define WIDGET_ID            0x04
 #define WIDGET_STATUS            0x0c
 #define WIDGET_ERR_UPPER_ADDR        0x14
 #define WIDGET_ERR_LOWER_ADDR        0x1c
 #define WIDGET_CONTROL            0x24
 #define WIDGET_REQ_TIMEOUT        0x2c
 #define WIDGET_INTDEST_UPPER_ADDR    0x34
 #define WIDGET_INTDEST_LOWER_ADDR    0x3c
 #define WIDGET_ERR_CMD_WORD        0x44
 #define WIDGET_LLP_CFG            0x4c
 #define WIDGET_TFLUSH            0x54
 
 /* WIDGET_ID */
 #define WIDGET_REV_NUM            0xf0000000
 #define WIDGET_PART_NUM            0x0ffff000
 #define WIDGET_MFG_NUM            0x00000ffe
 #define WIDGET_REV_NUM_SHFT        28
 #define WIDGET_PART_NUM_SHFT        12
 #define WIDGET_MFG_NUM_SHFT        1
 
 #define XWIDGET_PART_NUM(widgetid) (((widgetid) & WIDGET_PART_NUM) >> WIDGET_PART_NUM_SHFT)
 #define XWIDGET_REV_NUM(widgetid) (((widgetid) & WIDGET_REV_NUM) >> WIDGET_REV_NUM_SHFT)
 #define XWIDGET_MFG_NUM(widgetid) (((widgetid) & WIDGET_MFG_NUM) >> WIDGET_MFG_NUM_SHFT)
 
 /* WIDGET_STATUS */
 #define WIDGET_LLP_REC_CNT        0xff000000
 #define WIDGET_LLP_TX_CNT        0x00ff0000
 #define WIDGET_PENDING            0x0000001f
 
 /* WIDGET_ERR_UPPER_ADDR */
 #define WIDGET_ERR_UPPER_ADDR_ONLY    0x0000ffff
 
 /* WIDGET_CONTROL */
 #define WIDGET_F_BAD_PKT        0x00010000
 #define WIDGET_LLP_XBAR_CRD        0x0000f000
 #define WIDGET_LLP_XBAR_CRD_SHFT    12
 #define WIDGET_CLR_RLLP_CNT        0x00000800
 #define WIDGET_CLR_TLLP_CNT        0x00000400
 #define WIDGET_SYS_END            0x00000200
 #define WIDGET_MAX_TRANS        0x000001f0
 #define WIDGET_WIDGET_ID        0x0000000f
 
 /* WIDGET_INTDEST_UPPER_ADDR */
 #define WIDGET_INT_VECTOR        0xff000000
 #define WIDGET_INT_VECTOR_SHFT        24
 #define WIDGET_TARGET_ID        0x000f0000
 #define WIDGET_TARGET_ID_SHFT        16
 #define WIDGET_UPP_ADDR            0x0000ffff
 
 /* WIDGET_ERR_CMD_WORD */
 #define WIDGET_DIDN            0xf0000000
 #define WIDGET_SIDN            0x0f000000
 #define WIDGET_PACTYP            0x00f00000
 #define WIDGET_TNUM            0x000f8000
 #define WIDGET_COHERENT            0x00004000
 #define WIDGET_DS            0x00003000
 #define WIDGET_GBR            0x00000800
 #define WIDGET_VBPM            0x00000400
 #define WIDGET_ERROR            0x00000200
 #define WIDGET_BARRIER            0x00000100
 
 /* WIDGET_LLP_CFG */
 #define WIDGET_LLP_MAXRETRY        0x03ff0000
 #define WIDGET_LLP_MAXRETRY_SHFT    16
 #define WIDGET_LLP_NULLTIMEOUT        0x0000fc00
 #define WIDGET_LLP_NULLTIMEOUT_SHFT    10
 #define WIDGET_LLP_MAXBURST        0x000003ff
 #define WIDGET_LLP_MAXBURST_SHFT    0
 
 /*
 * according to the crosstalk spec, only 32-bits access to the widget
 * configuration registers is allowed.    some widgets may allow 64-bits
 * access but software should not depend on it.     registers beyond the
 * widget target flush register are widget dependent thus will not be
 * defined here
 */
 #ifndef __ASSEMBLY__
 typedef u32 widgetreg_t;
 
 /* widget configuration registers */
 typedef volatile struct widget_cfg {
 widgetreg_t        w_pad_0;        /* 0x00 */
 widgetreg_t        w_id;            /* 0x04 */
 widgetreg_t        w_pad_1;        /* 0x08 */
 widgetreg_t        w_status;        /* 0x0c */
 widgetreg_t        w_pad_2;        /* 0x10 */
 widgetreg_t        w_err_upper_addr;    /* 0x14 */
 widgetreg_t        w_pad_3;        /* 0x18 */
 widgetreg_t        w_err_lower_addr;    /* 0x1c */
 widgetreg_t        w_pad_4;        /* 0x20 */
 widgetreg_t        w_control;        /* 0x24 */
 widgetreg_t        w_pad_5;        /* 0x28 */
 widgetreg_t        w_req_timeout;        /* 0x2c */
 widgetreg_t        w_pad_6;        /* 0x30 */
 widgetreg_t        w_intdest_upper_addr;    /* 0x34 */
 widgetreg_t        w_pad_7;        /* 0x38 */
 widgetreg_t        w_intdest_lower_addr;    /* 0x3c */
 widgetreg_t        w_pad_8;        /* 0x40 */
 widgetreg_t        w_err_cmd_word;        /* 0x44 */
 widgetreg_t        w_pad_9;        /* 0x48 */
 widgetreg_t        w_llp_cfg;        /* 0x4c */
 widgetreg_t        w_pad_10;        /* 0x50 */
 widgetreg_t        w_tflush;        /* 0x54 */
 } widget_cfg_t;
 
 typedef struct {
 unsigned    didn:4;
 unsigned    sidn:4;
 unsigned    pactyp:4;
 unsigned    tnum:5;
 unsigned    ct:1;
 unsigned    ds:2;
 unsigned    gbr:1;
 unsigned    vbpm:1;
 unsigned    error:1;
 unsigned    bo:1;
 unsigned    other:8;
 } w_err_cmd_word_f;
 
 typedef union {
 widgetreg_t        r;
 w_err_cmd_word_f    f;
 } w_err_cmd_word_u;
 
 typedef struct xwidget_info_s *xwidget_info_t;
 
 /*
 * Crosstalk Widget Hardware Identification, as defined in the Crosstalk spec.
 */
 typedef struct xwidget_hwid_s {
 xwidget_part_num_t    part_num;
 xwidget_rev_num_t    rev_num;
 xwidget_mfg_num_t    mfg_num;
 } *xwidget_hwid_t;
 
 
 /*
 * Returns 1 if a driver that handles devices described by hwid1 is able
 * to manage a device with hardwareid hwid2.  NOTE: We don't check rev
 * numbers at all.
 */
 #define XWIDGET_HARDWARE_ID_MATCH(hwid1, hwid2) \
 (((hwid1)->part_num == (hwid2)->part_num) && \
 (((hwid1)->mfg_num == XWIDGET_MFG_NUM_NONE) || \
 ((hwid2)->mfg_num == XWIDGET_MFG_NUM_NONE) || \
 ((hwid1)->mfg_num == (hwid2)->mfg_num)))
 
 #endif /* !__ASSEMBLY__ */
 
 #endif /* _ASM_XTALK_XWIDGET_H */
 
 |