⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 hubio_next.h

📁 ARM S3C2410 linux2.4 内核源码
💻 H
📖 第 1 页 / 共 2 页
字号:
#define c_doresp        ii_icrb0_c_fld_s.ic_resprqd#define c_gbr           ii_icrb0_c_fld_s.ic_gbr#define c_regvalue	ii_icrb0_c_regvaltypedef ii_icrb0_d_u_t icrbd_t;#define icrbd_ctxtvld   ii_icrb0_d_fld_s.id_cvld#define icrbd_toutvld   ii_icrb0_d_fld_s.id_tvld#define icrbd_context   ii_icrb0_d_fld_s.id_context#define d_regvalue	ii_icrb0_d_regval#endif /* LANGUAGE_C *//* Number of widgets supported by hub */#define HUB_NUM_WIDGET          9#define HUB_WIDGET_ID_MIN       0x8#define HUB_WIDGET_ID_MAX       0xf#define HUB_WIDGET_PART_NUM     0xc110#define MAX_HUBS_PER_XBOW       2#ifdef _LANGUAGE_C/* A few more #defines for backwards compatibility */#define iprb_t          ii_iprb0_u_t#define iprb_regval     ii_iprb0_regval#define iprb_mult_err	ii_iprb0_fld_s.i_mult_err#define iprb_spur_rd	ii_iprb0_fld_s.i_spur_rd#define iprb_spur_wr	ii_iprb0_fld_s.i_spur_wr#define iprb_rd_to	ii_iprb0_fld_s.i_rd_to#define iprb_ovflow     ii_iprb0_fld_s.i_of_cnt#define iprb_error      ii_iprb0_fld_s.i_error#define iprb_ff         ii_iprb0_fld_s.i_f#define iprb_mode       ii_iprb0_fld_s.i_m#define iprb_bnakctr    ii_iprb0_fld_s.i_nb#define iprb_anakctr    ii_iprb0_fld_s.i_na#define iprb_xtalkctr   ii_iprb0_fld_s.i_c#endif#define LNK_STAT_WORKING        0x2#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)   /* should be 0xFF?? */#define IIO_WSTAT_TXRETRY_SHFT  (16)#define IIO_WSTAT_TXRETRY_CNT(w)        (((w) >> IIO_WSTAT_TXRETRY_SHFT) & \                                          IIO_WSTAT_TXRETRY_MASK)/* Number of II perf. counters we can multiplex at once */#define IO_PERF_SETS	32#if __KERNEL__#if _LANGUAGE_C/* XXX moved over from SN/SN0/hubio.h -- each should be checked for SN1 */#include <asm/sn/alenlist.h>#include <asm/sn/dmamap.h>#include <asm/sn/iobus.h>#include <asm/sn/xtalk/xtalk.h>/* Bit for the widget in inbound access register */#define IIO_IIWA_WIDGET(_w)     ((uint64_t)(1ULL << _w))/* Bit for the widget in outbound access register */#define IIO_IOWA_WIDGET(_w)     ((uint64_t)(1ULL << _w))/* NOTE: The following define assumes that we are going to get * widget numbers from 8 thru F and the device numbers within * widget from 0 thru 7. */#define IIO_IIDEM_WIDGETDEV_MASK(w, d)  ((uint64_t)(1ULL << (8 * ((w) - 8) + (d))))/* 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_PI_ID_SHIFT   8#define IIO_IIDSR_PI_ID_MASK    0x00000010#define IIO_IIDSR_LVL_SHIFT     0#define IIO_IIDSR_LVL_MASK      0x0000007f/* Xtalk timeout threshhold register (IIO_IXTT) */#define IXTT_RRSP_TO_SHFT	55	   /* read response timeout */#define IXTT_RRSP_TO_MASK	(0x1FULL << IXTT_RRSP_TO_SHFT)#define IXTT_RRSP_PS_SHFT	32	   /* read responsed TO prescalar */#define IXTT_RRSP_PS_MASK	(0x7FFFFFULL << IXTT_RRSP_PS_SHFT)#define IXTT_TAIL_TO_SHFT	0	   /* tail timeout counter threshold */#define IXTT_TAIL_TO_MASK	(0x3FFFFFFULL << IXTT_TAIL_TO_SHFT)/* * The IO LLP control status register and widget control register */#ifdef LITTLE_ENDIANtypedef union hubii_wcr_u {        uint64_t      wcr_reg_value;        struct {	  uint64_t	wcr_widget_id:   4,     /* LLP crossbar credit */			wcr_tag_mode:	 1,	/* Tag mode */			wcr_rsvd1:	 8,	/* Reserved */			wcr_xbar_crd:	 3,	/* LLP crossbar credit */			wcr_f_bad_pkt:	 1,	/* Force bad llp pkt enable */			wcr_dir_con:	 1,	/* widget direct connect */			wcr_e_thresh:	 5,	/* elasticity threshold */			wcr_rsvd:	41;	/* unused */        } wcr_fields_s;} hubii_wcr_t;#elsetypedef union hubii_wcr_u {	uint64_t	wcr_reg_value;	struct {	    uint64_t	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;#endif#define iwcr_dir_con    wcr_fields_s.wcr_dir_con/* 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 */#ifdef LITTLE_ENDIANtypedef union io_perf_sel {        uint64_t perf_sel_reg;        struct {               uint64_t	perf_ippr0 :  4,				perf_ippr1 :  4,				perf_icct  :  8,				perf_rsvd  : 48;        } perf_sel_bits;} io_perf_sel_t;#elsetypedef union io_perf_sel {	uint64_t perf_sel_reg;	struct {		uint64_t	perf_rsvd  : 48,				perf_icct  :  8,				perf_ippr1 :  4,				perf_ippr0 :  4;	} perf_sel_bits;} io_perf_sel_t;#endif/* io_perf_cnt is to extract the count from the hub registers. Due to   hardware problems there is only one counter, not two. */#ifdef LITTLE_ENDIANtypedef union io_perf_cnt {        uint64_t      perf_cnt;        struct {               uint64_t	perf_cnt   : 20,				perf_rsvd2 : 12,				perf_rsvd1 : 32;        } perf_cnt_bits;} io_perf_cnt_t;#elsetypedef union io_perf_cnt {	uint64_t	perf_cnt;	struct {		uint64_t	perf_rsvd1 : 32,				perf_rsvd2 : 12,				perf_cnt   : 20;	} perf_cnt_bits;} io_perf_cnt_t;#endif#ifdef LITTLE_ENDIANtypedef union iprte_a {	bdrkreg_t	entry;	struct {		bdrkreg_t	i_rsvd_1                  :	 3;		bdrkreg_t	i_addr			  :	38;		bdrkreg_t	i_init			  :	 3;		bdrkreg_t	i_source		  :	 8;		bdrkreg_t	i_rsvd			  :	 2;		bdrkreg_t	i_widget		  :	 4;		bdrkreg_t	i_to_cnt		  :	 5;		bdrkreg_t       i_vld                     :      1;	} iprte_fields;} iprte_a_t;#elsetypedef union iprte_a {	bdrkreg_t	entry;	struct {		bdrkreg_t	i_vld			  :	 1;		bdrkreg_t	i_to_cnt		  :	 5;		bdrkreg_t	i_widget		  :	 4;		bdrkreg_t	i_rsvd			  :	 2;		bdrkreg_t	i_source		  :	 8;		bdrkreg_t	i_init			  :	 3;		bdrkreg_t	i_addr			  :	38;		bdrkreg_t	i_rsvd_1		  :	 3;	} iprte_fields;} iprte_a_t;#endif/* PIO MANAGEMENT */typedef struct hub_piomap_s *hub_piomap_t;extern hub_piomap_thub_piomap_alloc(devfs_handle_t dev,      /* set up mapping for this device */                device_desc_t dev_desc, /* device descriptor */                iopaddr_t xtalk_addr,   /* map for this xtalk_addr range */                size_t byte_count,                size_t byte_count_max,  /* maximum size of a mapping */                unsigned flags);                /* defined in sys/pio.h */extern void hub_piomap_free(hub_piomap_t hub_piomap);extern caddr_thub_piomap_addr(hub_piomap_t hub_piomap,        /* mapping resources */                iopaddr_t xtalk_addr,           /* map for this xtalk addr */                size_t byte_count);             /* map this many bytes */extern voidhub_piomap_done(hub_piomap_t hub_piomap);extern caddr_thub_piotrans_addr(      devfs_handle_t dev,       /* translate to this device */                        device_desc_t dev_desc, /* device descriptor */                        iopaddr_t xtalk_addr,   /* Crosstalk address */                        size_t byte_count,      /* map this many bytes */                        unsigned flags);        /* (currently unused) *//* DMA MANAGEMENT */typedef struct hub_dmamap_s *hub_dmamap_t;extern hub_dmamap_thub_dmamap_alloc(       devfs_handle_t dev,       /* set up mappings for dev */                        device_desc_t dev_desc, /* device descriptor */                        size_t byte_count_max,  /* max size of a mapping */                        unsigned flags);        /* defined in dma.h */extern voidhub_dmamap_free(hub_dmamap_t dmamap);extern iopaddr_thub_dmamap_addr(        hub_dmamap_t dmamap,    /* use mapping resources */                        paddr_t paddr,          /* map for this address */                        size_t byte_count);     /* map this many bytes */extern alenlist_thub_dmamap_list(        hub_dmamap_t dmamap,    /* use mapping resources */                        alenlist_t alenlist,    /* map this Addr/Length List */                        unsigned flags);extern voidhub_dmamap_done(        hub_dmamap_t dmamap);   /* done w/ mapping resources */extern iopaddr_thub_dmatrans_addr(      devfs_handle_t dev,       /* translate for this device */                        device_desc_t dev_desc, /* device descriptor */                        paddr_t paddr,          /* system physical address */                        size_t byte_count,      /* length */                        unsigned flags);                /* defined in dma.h */extern alenlist_thub_dmatrans_list(      devfs_handle_t dev,       /* translate for this device */                        device_desc_t dev_desc, /* device descriptor */                        alenlist_t palenlist,   /* system addr/length list */                        unsigned flags);                /* defined in dma.h */extern voidhub_dmamap_drain(       hub_dmamap_t map);extern voidhub_dmaaddr_drain(      devfs_handle_t vhdl,                        paddr_t addr,                        size_t bytes);extern voidhub_dmalist_drain(      devfs_handle_t vhdl,                        alenlist_t list);/* INTERRUPT MANAGEMENT */typedef struct hub_intr_s *hub_intr_t;extern hub_intr_thub_intr_alloc( devfs_handle_t dev,               /* which device */                device_desc_t dev_desc,         /* device descriptor */                devfs_handle_t owner_dev);        /* owner of this interrupt */extern hub_intr_thub_intr_alloc_nothd(devfs_handle_t dev,          /* which device */                device_desc_t dev_desc,         /* device descriptor */                devfs_handle_t owner_dev);        /* owner of this interrupt */extern voidhub_intr_free(hub_intr_t intr_hdl);extern inthub_intr_connect(       hub_intr_t intr_hdl,    /* xtalk intr resource hndl */                        intr_func_t intr_func,  /* xtalk intr handler */                        void *intr_arg,         /* arg to intr handler */                        xtalk_intr_setfunc_t setfunc,                                                /* func to set intr hw */                        void *setfunc_arg,      /* arg to setfunc */                        void *thread);          /* intr thread to use */extern voidhub_intr_disconnect(hub_intr_t intr_hdl);extern devfs_handle_thub_intr_cpu_get(hub_intr_t intr_hdl);/* CONFIGURATION MANAGEMENT */extern voidhub_provider_startup(devfs_handle_t hub);extern voidhub_provider_shutdown(devfs_handle_t hub);#define HUB_PIO_CONVEYOR        0x1     /* PIO in conveyor belt mode */#define HUB_PIO_FIRE_N_FORGET   0x2     /* PIO in fire-and-forget mode *//* Flags that make sense to hub_widget_flags_set */#define HUB_WIDGET_FLAGS        (                               \				 HUB_PIO_CONVEYOR       |       \				 HUB_PIO_FIRE_N_FORGET          \				)typedef int     hub_widget_flags_t;/* Set the PIO mode for a widget.  These two functions perform the * same operation, but hub_device_flags_set() takes a hardware graph * vertex while hub_widget_flags_set() takes a nasid and widget * number.  In most cases, hub_device_flags_set() should be used. */extern int      hub_widget_flags_set(nasid_t            nasid,                                     xwidgetnum_t       widget_num,                                     hub_widget_flags_t flags);/* Depending on the flags set take the appropriate actions */extern int      hub_device_flags_set(devfs_handle_t       widget_dev,                                     hub_widget_flags_t flags);                                                    /* Error Handling. */extern int hub_ioerror_handler(devfs_handle_t, int, int, struct io_error_s *);extern int kl_ioerror_handler(cnodeid_t, cnodeid_t, cpuid_t,                              int, paddr_t, caddr_t, ioerror_mode_t);extern void hub_widget_reset(devfs_handle_t, xwidgetnum_t);extern int hub_error_devenable(devfs_handle_t, int, int);extern void hub_widgetdev_enable(devfs_handle_t, int);extern void hub_widgetdev_shutdown(devfs_handle_t, int);extern int  hub_dma_enabled(devfs_handle_t);#endif /* _LANGUAGE_C */#endif /* _KERNEL */#endif  /* _ASM_SN_SN1_HUBIO_NEXT_H */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -