亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? pciio.c

?? 根據(jù)添加了fs2410平臺的arch目錄
?? C
?? 第 1 頁 / 共 3 頁
字號:
 *      Allow crosstalk devices to establish interrupts *//* * Allocate resources required for an interrupt as specified in intr_desc. * Return resource handle in intr_hdl. */pciio_intr_tpciio_intr_alloc(devfs_handle_t dev,	/* which Crosstalk device */		 device_desc_t dev_desc,	/* device descriptor */		 pciio_intr_line_t lines,	/* INTR line(s) to attach */		 devfs_handle_t owner_dev){					/* owner of this interrupt */    return (pciio_intr_t) DEV_FUNC(dev, intr_alloc)	(dev, dev_desc, lines, owner_dev);}/* * Free resources consumed by intr_alloc. */voidpciio_intr_free(pciio_intr_t intr_hdl){    INTR_FUNC(intr_hdl, intr_free)	(CAST_INTR(intr_hdl));}/* * Associate resources allocated with a previous pciio_intr_alloc call with the * described handler, arg, name, etc. * * Returns 0 on success, returns <0 on failure. */intpciio_intr_connect(pciio_intr_t intr_hdl,	/* pciio intr resource handle */		   intr_func_t intr_func,	/* pciio intr handler */		   intr_arg_t intr_arg,	/* arg to intr handler */		   void *thread){					/* intr thread to use */    return INTR_FUNC(intr_hdl, intr_connect)	(CAST_INTR(intr_hdl), intr_func, intr_arg, thread);}/* * Disassociate handler with the specified interrupt. */voidpciio_intr_disconnect(pciio_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_tpciio_intr_cpu_get(pciio_intr_t intr_hdl){    return INTR_FUNC(intr_hdl, intr_cpu_get)	(CAST_INTR(intr_hdl));}/* ===================================================================== *          ERROR MANAGEMENT */voidpciio_slot_func_to_name(char		       *name,			pciio_slot_t		slot,			pciio_function_t	func){    /*     * standard connection points:     *     * PCIIO_SLOT_NONE:	.../pci/direct     * PCIIO_FUNC_NONE: .../pci/<SLOT>			ie. .../pci/3     * multifunction:   .../pci/<SLOT><FUNC>		ie. .../pci/3c     */    if (slot == PCIIO_SLOT_NONE)	sprintf(name, "direct");    else if (func == PCIIO_FUNC_NONE)	sprintf(name, "%d", slot);    else	sprintf(name, "%d%c", slot, 'a'+func);}/* * pciio_cardinfo_get * * Get the pciio info structure corresponding to the * specified PCI "slot" (we like it when the same index * number is used for the PCI IDSEL, the REQ/GNT pair, * and the interrupt line being used for INTA. We like * it so much we call it the slot number). */static pciio_info_tpciio_cardinfo_get(		      devfs_handle_t pciio_vhdl,		      pciio_slot_t pci_slot){    char                    namebuf[16];    pciio_info_t	    info = 0;    devfs_handle_t	    conn;    pciio_slot_func_to_name(namebuf, pci_slot, PCIIO_FUNC_NONE);    if (GRAPH_SUCCESS ==	hwgraph_traverse(pciio_vhdl, namebuf, &conn)) {	info = pciio_info_chk(conn);	hwgraph_vertex_unref(conn);    }    return info;}/* * pciio_error_handler: * dispatch an error to the appropriate * pciio connection point, or process * it as a generic pci error. * Yes, the first parameter is the * provider vertex at the middle of * the bus; we get to the pciio connect * point using the ioerror widgetdev field. * * This function is called by the * specific PCI provider, after it has figured * out where on the PCI bus (including which slot, * if it can tell) the error came from. *//*ARGSUSED */intpciio_error_handler(		       devfs_handle_t pciio_vhdl,		       int error_code,		       ioerror_mode_t mode,		       ioerror_t *ioerror){    pciio_info_t            pciio_info;    devfs_handle_t            pconn_vhdl;#if USRPCI    devfs_handle_t            usrpci_v;#endif    pciio_slot_t            slot;    int                     retval;#if defined(CONFIG_SGI_IO_ERROR_HANDLING)    error_state_t	    e_state;#endif#if DEBUG && ERROR_DEBUG#if defined(SUPPORT_PRINTING_V_FORMAT)    printk("%v: pciio_error_handler\n", pciio_vhdl);#else    printk("0x%x: pciio_error_handler\n", pciio_vhdl);#endif#endif#if defined(SUPPORT_PRINTING_V_FORMAT)    IOERR_PRINTF(printk("%v: PCI Bus Error: Error code: %d Error mode: %d\n",			 pciio_vhdl, error_code, mode));#else    IOERR_PRINTF(printk("0x%x: PCI Bus Error: Error code: %d Error mode: %d\n",			 pciio_vhdl, error_code, mode));#endif    /* If there is an error handler sitting on     * the "no-slot" connection point, give it     * first crack at the error. NOTE: it is     * quite possible that this function may     * do further refining of the ioerror.     */    pciio_info = pciio_cardinfo_get(pciio_vhdl, PCIIO_SLOT_NONE);    if (pciio_info && pciio_info->c_efunc) {	pconn_vhdl = pciio_info_dev_get(pciio_info);#if defined(CONFIG_SGI_IO_ERROR_HANDLING)	e_state = error_state_get(pciio_vhdl);	if (e_state == ERROR_STATE_ACTION)	    (void)error_state_set(pciio_vhdl, ERROR_STATE_NONE);	if (error_state_set(pconn_vhdl,e_state) ==	    ERROR_RETURN_CODE_CANNOT_SET_STATE)	    return(IOERROR_UNHANDLED);#endif	retval = pciio_info->c_efunc	    (pciio_info->c_einfo, error_code, mode, ioerror);	if (retval != IOERROR_UNHANDLED)	    return retval;    }    /* Is the error associated with a particular slot?     */    if (IOERROR_FIELDVALID(ioerror, widgetdev)) {	/*	 * NOTE : 	 * widgetdev is a 4byte value encoded as slot in the higher order	 * 2 bytes and function in the lower order 2 bytes.	 */#ifdef LATER	slot = pciio_widgetdev_slot_get(IOERROR_GETVALUE(ioerror, widgetdev));#else	slot = 0;#endif	/* If this slot has an error handler,	 * deliver the error to it.	 */	pciio_info = pciio_cardinfo_get(pciio_vhdl, slot);	if (pciio_info != NULL) {	    if (pciio_info->c_efunc != NULL) {		pconn_vhdl = pciio_info_dev_get(pciio_info);#if defined(CONFIG_SGI_IO_ERROR_HANDLING)		e_state = error_state_get(pciio_vhdl);		if (e_state == ERROR_STATE_ACTION)		    (void)error_state_set(pciio_vhdl, ERROR_STATE_NONE);		if (error_state_set(pconn_vhdl,e_state) ==		    ERROR_RETURN_CODE_CANNOT_SET_STATE)		    return(IOERROR_UNHANDLED);#endif		retval = pciio_info->c_efunc		    (pciio_info->c_einfo, error_code, mode, ioerror);		if (retval != IOERROR_UNHANDLED)		    return retval;	    }#if USRPCI	    /* If the USRPCI driver is available and	     * knows about this connection point,	     * deliver the error to it.	     *	     * OK to use pconn_vhdl here, even though we	     * have already UNREF'd it, since we know that	     * it is not going away.	     */	    pconn_vhdl = pciio_info_dev_get(pciio_info);	    if (GRAPH_SUCCESS ==		hwgraph_traverse(pconn_vhdl, EDGE_LBL_USRPCI, &usrpci_v)) {		retval = usrpci_error_handler		    (usrpci_v, error_code, IOERROR_GETVALUE(ioerror, busaddr));		hwgraph_vertex_unref(usrpci_v);		if (retval != IOERROR_UNHANDLED) {		    /*		     * This unref is not needed.  If this code is called often enough,		     * the system will crash, due to vertex reference count reaching 0,		     * causing vertex to be unallocated.  -jeremy		     * hwgraph_vertex_unref(pconn_vhdl);		     */		    return retval;		}	    }#endif	}    }    return (mode == MODE_DEVPROBE)	? IOERROR_HANDLED	/* probes are OK */	: IOERROR_UNHANDLED;	/* otherwise, foo! */}intpciio_error_devenable(devfs_handle_t pconn_vhdl, int error_code){    return DEV_FUNC(pconn_vhdl, error_devenable)	(pconn_vhdl, error_code);    /* no cleanup specific to this layer. */}/* ===================================================================== *          CONFIGURATION MANAGEMENT *//* * Startup a crosstalk provider */voidpciio_provider_startup(devfs_handle_t pciio_provider){    DEV_FUNC(pciio_provider, provider_startup)	(pciio_provider);}/* * Shutdown a crosstalk provider */voidpciio_provider_shutdown(devfs_handle_t pciio_provider){    DEV_FUNC(pciio_provider, provider_shutdown)	(pciio_provider);}/* * Specify endianness constraints.  The driver tells us what the device * does and how it would like to see things in memory.  We reply with * how things will actually appear in memory. */pciio_endian_tpciio_endian_set(devfs_handle_t dev,		 pciio_endian_t device_end,		 pciio_endian_t desired_end){    ASSERT((device_end == PCIDMA_ENDIAN_BIG) || (device_end == PCIDMA_ENDIAN_LITTLE));    ASSERT((desired_end == PCIDMA_ENDIAN_BIG) || (desired_end == PCIDMA_ENDIAN_LITTLE));#if DEBUG#if defined(SUPPORT_PRINTING_V_FORMAT)    PRINT_ALERT("%v: pciio_endian_set is going away.\n"	    "\tplease use PCIIO_BYTE_STREAM or PCIIO_WORD_VALUES in your\n"	    "\tpciio_dmamap_alloc and pciio_dmatrans calls instead.\n",	    dev);#else    PRINT_ALERT("0x%x: pciio_endian_set is going away.\n"	    "\tplease use PCIIO_BYTE_STREAM or PCIIO_WORD_VALUES in your\n"	    "\tpciio_dmamap_alloc and pciio_dmatrans calls instead.\n",	    dev);#endif#endif    return DEV_FUNC(dev, endian_set)	(dev, device_end, desired_end);}/* * Specify PCI arbitration priority. */pciio_priority_tpciio_priority_set(devfs_handle_t dev,		   pciio_priority_t device_prio){    ASSERT((device_prio == PCI_PRIO_HIGH) || (device_prio == PCI_PRIO_LOW));    return DEV_FUNC(dev, priority_set)	(dev, device_prio);}/* * Read value of configuration register */uint64_tpciio_config_get(devfs_handle_t	dev,		 unsigned	reg,		 unsigned	size){    uint64_t	value = 0;    unsigned	shift = 0;    /* handle accesses that cross words here,     * since that's common code between all     * possible providers.     */    while (size > 0) {	unsigned	biw = 4 - (reg&3);	if (biw > size)	    biw = size;	value |= DEV_FUNC(dev, config_get)	    (dev, reg, biw) << shift;	shift += 8*biw;	reg += biw;	size -= biw;    }    return value;}/* * Change value of configuration register */voidpciio_config_set(devfs_handle_t	dev,		 unsigned	reg,		 unsigned	size,		 uint64_t	value){    /* handle accesses that cross words here,     * since that's common code between all     * possible providers.     */    while (size > 0) {	unsigned	biw = 4 - (reg&3);	if (biw > size)	    biw = size;	    	DEV_FUNC(dev, config_set)	    (dev, reg, biw, value);	reg += biw;	size -= biw;	value >>= biw * 8;    }}/* ===================================================================== *          GENERIC PCI SUPPORT FUNCTIONS */pciio_slot_tpciio_error_extract(devfs_handle_t 	dev,		   pciio_space_t 	*space,		   iopaddr_t		*offset){	ASSERT(dev != NODEV);	return DEV_FUNC(dev,error_extract)(dev,space,offset);}/* * Issue a hardware reset to a card. */intpciio_reset(devfs_handle_t dev){    return DEV_FUNC(dev, reset) (dev);}/* * flush write gather buffers */intpciio_write_gather_flush(devfs_handle_t dev){    return DEV_FUNC(dev, write_gather_flush) (dev);}devfs_handle_tpciio_intr_dev_get(pciio_intr_t pciio_intr){    return (pciio_intr->pi_dev);}/****** Generic crosstalk pio interfaces ******/devfs_handle_tpciio_pio_dev_get(pciio_piomap_t pciio_piomap){    return (pciio_piomap->pp_dev);}pciio_slot_tpciio_pio_slot_get(pciio_piomap_t pciio_piomap){    return (pciio_piomap->pp_slot);}pciio_space_tpciio_pio_space_get(pciio_piomap_t pciio_piomap){    return (pciio_piomap->pp_space);}iopaddr_tpciio_pio_pciaddr_get(pciio_piomap_t pciio_piomap){    return (pciio_piomap->pp_pciaddr);}ulongpciio_pio_mapsz_get(pciio_piomap_t pciio_piomap){    return (pciio_piomap->pp_mapsz);}caddr_tpciio_pio_kvaddr_get(pciio_piomap_t pciio_piomap){    return (pciio_piomap->pp_kvaddr);}/****** Generic crosstalk dma interfaces ******/devfs_handle_tpciio_dma_dev_get(pciio_dmamap_t pciio_dmamap){    return (pciio_dmamap->pd_dev);}pciio_slot_tpciio_dma_slot_get(pciio_dmamap_t pciio_dmamap){    return (pciio_dmamap->pd_slot);}/****** Generic pci slot information interfaces ******/pciio_info_tpciio_info_chk(devfs_handle_t pciio){    arbitrary_info_t        ainfo = 0;    hwgraph_info_get_LBL(pciio, INFO_LBL_PCIIO, &ainfo);    return (pciio_info_t) ainfo;}pciio_info_tpciio_info_get(devfs_handle_t pciio){    pciio_info_t            pciio_info;    pciio_info = (pciio_info_t) hwgraph_fastinfo_get(pciio);#ifdef DEBUG_PCIIO    {	int pos;	char dname[256];	pos = devfs_generate_path(pciio, dname, 256);	printk("%s : path= %s\n", __FUNCTION__, &dname[pos]);    }#endif /* DEBUG_PCIIO */#ifdef BRINGUP    if ((pciio_info != NULL) &&	(pciio_info->c_fingerprint != pciio_info_fingerprint)	&& (pciio_info->c_fingerprint != NULL)) {#else    if ((pciio_info != NULL) &&	(pciio_info->c_fingerprint != pciio_info_fingerprint)) {#endif /* BRINGUP */	return((pciio_info_t)-1); /* Should panic .. */    }	    return pciio_info;}voidpciio_info_set(devfs_handle_t pciio, pciio_info_t pciio_info){    if (pciio_info != NULL)	pciio_info->c_fingerprint = pciio_info_fingerprint;    hwgraph_fastinfo_set(pciio, (arbitrary_info_t) pciio_info);    /* Also, mark this vertex as a PCI slot     * and use the pciio_info, so pciio_info_chk     * can work (and be fairly efficient).     */    hwgraph_info_add_LBL(pciio, INFO_LBL_PCIIO,			 (arbitrary_info_t) pciio_info);}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
五月婷婷激情综合| 亚洲一区二区三区国产| 亚洲色图自拍偷拍美腿丝袜制服诱惑麻豆| 国产精品久久久久久久蜜臀| 亚洲一区二区三区美女| 国产白丝网站精品污在线入口| 在线观看亚洲精品视频| 国产偷v国产偷v亚洲高清| 天天操天天干天天综合网| 色婷婷一区二区三区四区| 久久蜜臀精品av| 免费的国产精品| 欧美三级在线视频| 日韩美女视频一区| 成人免费不卡视频| 久久精品夜夜夜夜久久| 麻豆国产精品777777在线| 欧美少妇bbb| 亚洲激情一二三区| 99久久精品免费| 国产欧美日韩中文久久| 久久99精品国产.久久久久久| 欧美午夜精品一区二区蜜桃| 亚洲欧美一区二区三区久本道91| 国产精品一区二区三区乱码| 欧美www视频| 久久99精品国产麻豆婷婷洗澡| 欧美日韩另类一区| 午夜精品在线看| 欧美久久久久久久久久| 午夜一区二区三区视频| 欧美日韩一级片网站| 亚洲国产视频在线| 欧美三级中文字| 五月天久久比比资源色| 制服丝袜中文字幕亚洲| 五月综合激情网| 欧美一区二区三区播放老司机| 亚洲成人在线网站| 日韩欧美资源站| 国产精品自在在线| 亚洲欧美影音先锋| 日本高清视频一区二区| 午夜私人影院久久久久| 制服丝袜在线91| 九九视频精品免费| 久久精品人人做人人综合| 成人av网址在线观看| 综合激情成人伊人| 精品视频色一区| 经典三级视频一区| 国产欧美日韩不卡免费| 色先锋资源久久综合| 久久精工是国产品牌吗| 久久久亚洲综合| 白白色 亚洲乱淫| 亚洲图片欧美色图| 欧美不卡123| 成人av电影免费观看| 一区二区三区欧美| 欧美va亚洲va| 99精品黄色片免费大全| 午夜精品久久久久久久99水蜜桃| 91精品国产全国免费观看| 国产中文一区二区三区| 国产精品久久久久久一区二区三区| 91黄色在线观看| 蜜桃av一区二区| 中文字幕在线不卡| 欧美大片顶级少妇| 91视频在线观看| 国内久久精品视频| 1024成人网| 欧美电影精品一区二区| 91美女在线看| 极品少妇一区二区三区精品视频| 国产精品视频观看| 欧美成人在线直播| 在线一区二区三区四区五区| 麻豆91小视频| 亚洲与欧洲av电影| 国产亚洲一区二区在线观看| 欧美吻胸吃奶大尺度电影| 国产成人精品一区二| 日本亚洲视频在线| 亚洲综合一二区| 国产精品美女久久久久aⅴ| 欧美成人一区二区三区在线观看| 色一区在线观看| 国产宾馆实践打屁股91| 另类欧美日韩国产在线| 久久99精品久久久久久| 亚洲观看高清完整版在线观看 | www国产成人| 欧美综合天天夜夜久久| 国产成人在线色| 久久99精品一区二区三区三区| 亚洲国产精品一区二区久久| 欧美国产精品一区二区三区| 日韩免费成人网| 欧美二区乱c少妇| 欧美日韩电影在线播放| 色婷婷综合中文久久一本| 成人动漫一区二区三区| 从欧美一区二区三区| 国产麻豆91精品| 免费成人在线视频观看| 午夜精品久久久久久久久久久| 亚洲综合在线五月| 一区二区三区色| 亚洲欧美区自拍先锋| 国产精品久久久久9999吃药| 国产欧美视频在线观看| 久久精品夜夜夜夜久久| 久久精品亚洲国产奇米99| 久久久久久久久免费| 欧美精彩视频一区二区三区| 久久久www免费人成精品| 精品国产一区二区三区久久久蜜月 | 精品国产一区久久| 欧美va亚洲va香蕉在线| 精品久久久久久久久久久久包黑料| 欧美美女直播网站| 欧美一二三区在线| 日韩欧美国产麻豆| 久久久久国产精品麻豆ai换脸| 久久综合九色综合欧美98| 国产午夜精品一区二区三区四区| 精品粉嫩aⅴ一区二区三区四区| 久久伊人中文字幕| 国产精品污网站| 亚洲毛片av在线| 午夜精品国产更新| 久久疯狂做爰流白浆xx| 国产一区啦啦啦在线观看| 成人永久免费视频| 色婷婷综合在线| 日韩免费在线观看| 日本一区二区三区dvd视频在线| 综合久久给合久久狠狠狠97色| 亚洲综合免费观看高清完整版在线| 午夜国产不卡在线观看视频| 麻豆91精品91久久久的内涵| 国产伦精品一区二区三区视频青涩| 国产不卡免费视频| 欧美日韩精品专区| 2024国产精品视频| 亚洲在线免费播放| 成人网男人的天堂| 欧美视频精品在线观看| www国产成人| 亚洲精品乱码久久久久久日本蜜臀| 亚洲va国产天堂va久久en| 激情六月婷婷久久| 在线精品视频一区二区三四| 日韩精品一区二区三区老鸭窝| 久久久精品免费免费| 亚洲人xxxx| 狠狠网亚洲精品| 色婷婷激情久久| 久久综合九色综合欧美亚洲| 一区二区在线观看不卡| 精彩视频一区二区三区| 欧美视频一区二区三区四区 | 国产成人免费xxxxxxxx| 欧美日韩视频专区在线播放| 国产欧美日韩综合精品一区二区| 亚洲国产sm捆绑调教视频| 波多野洁衣一区| 欧美成人一区二区| 日韩高清在线观看| 91高清在线观看| 中文字幕免费不卡| 国产综合色在线视频区| 欧美久久婷婷综合色| 亚洲激情图片小说视频| 成人av资源在线观看| 亚洲精品在线免费播放| 免费观看在线综合| 欧美日韩国产首页| 一区二区三区资源| 色哟哟一区二区在线观看| 国产精品久久久久久久蜜臀| 国产成人av资源| 欧美激情综合五月色丁香小说| 日韩va亚洲va欧美va久久| 欧美视频精品在线| 亚洲一区欧美一区| 日本高清不卡视频| 亚洲欧美日韩电影| 色94色欧美sute亚洲13| 亚洲婷婷综合色高清在线| av激情亚洲男人天堂| 18成人在线观看| 色欧美日韩亚洲| 亚洲一区二区在线视频| 欧美日韩国产中文| 日韩av一级片| 欧美成人福利视频| 国产精品国产a|