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

📄 xtalk.c

📁 上传linux-jx2410的源代码
💻 C
📖 第 1 页 / 共 3 页
字号:
iopaddr_txtalk_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 */    return DEV_FUNC(dev, dmatrans_addr)	(dev, dev_desc, paddr, byte_count, flags);}alenlist_txtalk_dmatrans_list(devfs_handle_t dev,	/* translate for this device */		    device_desc_t dev_desc,	/* device descriptor */		    alenlist_t palenlist,	/* system address/length list */		    unsigned flags){				/* defined in dma.h */    return DEV_FUNC(dev, dmatrans_list)	(dev, dev_desc, palenlist, flags);}voidxtalk_dmamap_drain(xtalk_dmamap_t map){    DMAMAP_FUNC(map, dmamap_drain)	(CAST_DMAMAP(map));}voidxtalk_dmaaddr_drain(devfs_handle_t dev, paddr_t addr, size_t size){    DEV_FUNC(dev, dmaaddr_drain)	(dev, addr, size);}voidxtalk_dmalist_drain(devfs_handle_t dev, alenlist_t list){    DEV_FUNC(dev, dmalist_drain)	(dev, list);}/* ===================================================================== *                    INTERRUPT MANAGEMENT * *      Allow crosstalk devices to establish interrupts *//* * Allocate resources required for an interrupt as specified in intr_desc. * Return resource handle in intr_hdl. */xtalk_intr_txtalk_intr_alloc(devfs_handle_t dev,	/* which Crosstalk device */		 device_desc_t dev_desc,	/* device descriptor */		 devfs_handle_t owner_dev){				/* owner of this interrupt */    return (xtalk_intr_t) DEV_FUNC(dev, intr_alloc)	(dev, dev_desc, owner_dev);}/* * Allocate resources required for an interrupt as specified in dev_desc. * Unconditionally setup resources to be non-threaded. * Return resource handle in intr_hdl. */xtalk_intr_txtalk_intr_alloc_nothd(devfs_handle_t dev,	/* which Crosstalk device */		 	device_desc_t dev_desc,	/* device descriptor */		 	devfs_handle_t owner_dev)	/* owner of this interrupt */{    return (xtalk_intr_t) DEV_FUNC(dev, intr_alloc_nothd)	(dev, dev_desc, owner_dev);}/* * Free resources consumed by intr_alloc. */voidxtalk_intr_free(xtalk_intr_t intr_hdl){    INTR_FUNC(intr_hdl, intr_free)	(CAST_INTR(intr_hdl));}/* * Associate resources allocated with a previous xtalk_intr_alloc call with the * described handler, arg, name, etc. * * Returns 0 on success, returns <0 on failure. */intxtalk_intr_connect(xtalk_intr_t intr_hdl,	/* xtalk intr resource handle */		   intr_func_t intr_func,	/* xtalk intr handler */		   intr_arg_t 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 */    return INTR_FUNC(intr_hdl, intr_connect)	(CAST_INTR(intr_hdl), intr_func, intr_arg, setfunc, setfunc_arg, thread);}/* * Disassociate handler with the specified interrupt. */voidxtalk_intr_disconnect(xtalk_intr_t intr_hdl){    INTR_FUNC(intr_hdl, intr_disconnect)	(CAST_INTR(intr_hdl));}/* * Return a hwgraph vertex that represents the CPU currently * targeted by an interrupt. */devfs_handle_txtalk_intr_cpu_get(xtalk_intr_t intr_hdl){    return INTR_FUNC(intr_hdl, intr_cpu_get)	(CAST_INTR(intr_hdl));}/* * ===================================================================== *                      ERROR MANAGEMENT *//* * xtalk_error_handler: * pass this error on to the handler registered * at the specified xtalk connecdtion point, * or complain about it here if there is no handler. * * This routine plays two roles during error delivery * to most widgets: first, the external agent (heart, * hub, or whatever) calls in with the error and the * connect point representing the crosstalk switch, * or whatever crosstalk device is directly connected * to the agent. * * If there is a switch, it will generally look at the * widget number stashed in the ioerror structure; and, * if the error came from some widget other than the * switch, it will call back into xtalk_error_handler * with the connection point of the offending port. */intxtalk_error_handler(		       devfs_handle_t xconn,		       int error_code,		       ioerror_mode_t mode,		       ioerror_t *ioerror){    xwidget_info_t          xwidget_info;#if DEBUG && ERROR_DEBUG#ifdef SUPPORT_PRINTING_V_FORMAT    printk("%v: xtalk_error_handler\n", xconn);#else    printk("%x: xtalk_error_handler\n", xconn);#endif#endif    xwidget_info = xwidget_info_get(xconn);    /* Make sure that xwidget_info is a valid pointer before derefencing it.     * We could come in here during very early initialization.      */    if (xwidget_info && xwidget_info->w_efunc)	return xwidget_info->w_efunc	    (xwidget_info->w_einfo,	     error_code, mode, ioerror);    /*     * no error handler registered for     * the offending port. it's not clear     * what needs to be done, but reporting     * it would be a good thing, unless it     * is a mode that requires nothing.     */    if ((mode == MODE_DEVPROBE) || (mode == MODE_DEVUSERERROR) ||	(mode == MODE_DEVREENABLE))	return IOERROR_HANDLED;#ifdef	LATER#ifdef SUPPORT_PRINTING_V_FORMAT    PRINT_WARNING("Xbow at %v encountered Fatal error", xconn);#else    PRINT_WARNING("Xbow at %x encountered Fatal error", xconn);#endif#endif	/* LATER */    ioerror_dump("xtalk", error_code, mode, ioerror);    return IOERROR_UNHANDLED;}intxtalk_error_devenable(devfs_handle_t xconn_vhdl, int devnum, int error_code){    return DEV_FUNC(xconn_vhdl, error_devenable) (xconn_vhdl, devnum, error_code);}/* ===================================================================== *                    CONFIGURATION MANAGEMENT *//* * Startup a crosstalk provider */voidxtalk_provider_startup(devfs_handle_t xtalk_provider){    DEV_FUNC(xtalk_provider, provider_startup)	(xtalk_provider);}/* * Shutdown a crosstalk provider */voidxtalk_provider_shutdown(devfs_handle_t xtalk_provider){    DEV_FUNC(xtalk_provider, provider_shutdown)	(xtalk_provider);}/*  * Enable a device on a xtalk widget  */voidxtalk_widgetdev_enable(devfs_handle_t xconn_vhdl, int devnum){    DEV_FUNC(xconn_vhdl, widgetdev_enable) (xconn_vhdl, devnum);}/*  * Shutdown a device on a xtalk widget  */voidxtalk_widgetdev_shutdown(devfs_handle_t xconn_vhdl, int devnum){    DEV_FUNC(xconn_vhdl, widgetdev_shutdown) (xconn_vhdl, devnum);}intxtalk_dma_enabled(devfs_handle_t xconn_vhdl){    return DEV_FUNC(xconn_vhdl, dma_enabled) (xconn_vhdl);}/* * Generic crosstalk functions, for use with all crosstalk providers * and all crosstalk devices. *//****** Generic crosstalk interrupt interfaces ******/devfs_handle_txtalk_intr_dev_get(xtalk_intr_t xtalk_intr){    return (xtalk_intr->xi_dev);}xwidgetnum_txtalk_intr_target_get(xtalk_intr_t xtalk_intr){    return (xtalk_intr->xi_target);}xtalk_intr_vector_txtalk_intr_vector_get(xtalk_intr_t xtalk_intr){    return (xtalk_intr->xi_vector);}iopaddr_txtalk_intr_addr_get(struct xtalk_intr_s *xtalk_intr){    return (xtalk_intr->xi_addr);}void                   *xtalk_intr_sfarg_get(xtalk_intr_t xtalk_intr){    return (xtalk_intr->xi_sfarg);}/****** Generic crosstalk pio interfaces ******/devfs_handle_txtalk_pio_dev_get(xtalk_piomap_t xtalk_piomap){    return (xtalk_piomap->xp_dev);}xwidgetnum_txtalk_pio_target_get(xtalk_piomap_t xtalk_piomap){    return (xtalk_piomap->xp_target);}iopaddr_txtalk_pio_xtalk_addr_get(xtalk_piomap_t xtalk_piomap){    return (xtalk_piomap->xp_xtalk_addr);}ulongxtalk_pio_mapsz_get(xtalk_piomap_t xtalk_piomap){    return (xtalk_piomap->xp_mapsz);}caddr_txtalk_pio_kvaddr_get(xtalk_piomap_t xtalk_piomap){    return (xtalk_piomap->xp_kvaddr);}/****** Generic crosstalk dma interfaces ******/devfs_handle_txtalk_dma_dev_get(xtalk_dmamap_t xtalk_dmamap){    return (xtalk_dmamap->xd_dev);}xwidgetnum_txtalk_dma_target_get(xtalk_dmamap_t xtalk_dmamap){    return (xtalk_dmamap->xd_target);}/****** Generic crosstalk widget information interfaces ******//* xwidget_info_chk: * check to see if this vertex is a widget; * if so, return its widget_info (if any). * if not, return NULL. */xwidget_info_txwidget_info_chk(devfs_handle_t xwidget){    arbitrary_info_t        ainfo = 0;    hwgraph_info_get_LBL(xwidget, INFO_LBL_XWIDGET, &ainfo);    return (xwidget_info_t) ainfo;}xwidget_info_txwidget_info_get(devfs_handle_t xwidget){    xwidget_info_t          widget_info;    widget_info = (xwidget_info_t)	hwgraph_fastinfo_get(xwidget);#ifdef	LATER    if ((widget_info != NULL) &&	(widget_info->w_fingerprint != widget_info_fingerprint))#ifdef SUPPORT_PRINTING_V_FORMAT	PRINT_PANIC("%v bad xwidget_info", xwidget);#else	PRINT_PANIC("%x bad xwidget_info", xwidget);#endif#endif	/* LATER */    return (widget_info);}voidxwidget_info_set(devfs_handle_t xwidget, xwidget_info_t widget_info){

⌨️ 快捷键说明

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