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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? ml_iograph.c

?? 根據添加了fs2410平臺的arch目錄
?? C
?? 第 1 頁 / 共 4 頁
字號:
/* $Id$ * * 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 Silicon Graphics, Inc. * Copyright (C) 2000 by Colin Ngam */#include <linux/types.h>#include <linux/config.h>#include <linux/slab.h>#include <linux/ctype.h>#include <asm/sn/sgi.h>#include <asm/sn/iograph.h>#include <asm/sn/invent.h>#include <asm/sn/hcl.h>#include <asm/sn/hcl_util.h>#include <asm/sn/labelcl.h>#include <asm/sn/xtalk/xbow.h>#include <asm/sn/pci/bridge.h>#include <asm/sn/klconfig.h>#include <asm/sn/eeprom.h>#include <asm/sn/sn_private.h>#include <asm/sn/pci/pcibr.h>#include <asm/sn/xtalk/xtalk.h>#include <asm/sn/xtalk/xswitch.h>#include <asm/sn/xtalk/xwidget.h>#include <asm/sn/xtalk/xtalk_private.h>#include <asm/sn/xtalk/xtalkaddrs.h>extern int maxnodes;/* #define IOGRAPH_DEBUG */#ifdef IOGRAPH_DEBUG#define DBG(x...) printk(x)#else#define DBG(x...)#endif /* IOGRAPH_DEBUG *//* #define PROBE_TEST *//* At most 2 hubs can be connected to an xswitch */#define NUM_XSWITCH_VOLUNTEER 2/* * Track which hubs have volunteered to manage devices hanging off of * a Crosstalk Switch (e.g. xbow).  This structure is allocated, * initialized, and hung off the xswitch vertex early on when the * xswitch vertex is created. */typedef struct xswitch_vol_s {	mutex_t xswitch_volunteer_mutex;	int		xswitch_volunteer_count;	devfs_handle_t	xswitch_volunteer[NUM_XSWITCH_VOLUNTEER];} *xswitch_vol_t;voidxswitch_vertex_init(devfs_handle_t xswitch){	xswitch_vol_t xvolinfo;	int rc;	xvolinfo = kmalloc(sizeof(struct xswitch_vol_s), GFP_KERNEL);	mutex_init(&xvolinfo->xswitch_volunteer_mutex);	xvolinfo->xswitch_volunteer_count = 0;	rc = hwgraph_info_add_LBL(xswitch, 			INFO_LBL_XSWITCH_VOL,			(arbitrary_info_t)xvolinfo);	ASSERT(rc == GRAPH_SUCCESS); rc = rc;}/* * When assignment of hubs to widgets is complete, we no longer need the * xswitch volunteer structure hanging around.  Destroy it. */static voidxswitch_volunteer_delete(devfs_handle_t xswitch){	xswitch_vol_t xvolinfo;	int rc;	rc = hwgraph_info_remove_LBL(xswitch, 				INFO_LBL_XSWITCH_VOL,				(arbitrary_info_t *)&xvolinfo);#ifdef LATER	ASSERT(rc == GRAPH_SUCCESS); rc = rc;#endif	kfree(xvolinfo);}/* * A Crosstalk master volunteers to manage xwidgets on the specified xswitch. *//* ARGSUSED */static voidvolunteer_for_widgets(devfs_handle_t xswitch, devfs_handle_t master){	xswitch_vol_t xvolinfo = NULL;	(void)hwgraph_info_get_LBL(xswitch, 				INFO_LBL_XSWITCH_VOL, 				(arbitrary_info_t *)&xvolinfo);	if (xvolinfo == NULL) {#ifdef LATER	    if (!is_headless_node_vertex(master)) {#if defined(SUPPORT_PRINTING_V_FORMAT)		PRINT_WARNING("volunteer for widgets: vertex %v has no info label",			xswitch);#else		PRINT_WARNING("volunteer for widgets: vertex 0x%x has no info label",			xswitch);#endif	    }#endif	/* LATER */	    return;	}	mutex_lock(&xvolinfo->xswitch_volunteer_mutex);	ASSERT(xvolinfo->xswitch_volunteer_count < NUM_XSWITCH_VOLUNTEER);	xvolinfo->xswitch_volunteer[xvolinfo->xswitch_volunteer_count] = master;	xvolinfo->xswitch_volunteer_count++;	mutex_unlock(&xvolinfo->xswitch_volunteer_mutex);}extern int xbow_port_io_enabled(nasid_t nasid, int widgetnum);/* * Assign all the xwidgets hanging off the specified xswitch to the * Crosstalk masters that have volunteered for xswitch duty. *//* ARGSUSED */static voidassign_widgets_to_volunteers(devfs_handle_t xswitch, devfs_handle_t hubv){	int curr_volunteer, num_volunteer;	xwidgetnum_t widgetnum;	xswitch_info_t xswitch_info;	xswitch_vol_t xvolinfo = NULL;	nasid_t nasid;	hubinfo_t hubinfo;	hubinfo_get(hubv, &hubinfo);	nasid = hubinfo->h_nasid;		xswitch_info = xswitch_info_get(xswitch);	ASSERT(xswitch_info != NULL);	(void)hwgraph_info_get_LBL(xswitch, 				INFO_LBL_XSWITCH_VOL, 				(arbitrary_info_t *)&xvolinfo);	if (xvolinfo == NULL) {#ifdef LATER	    if (!is_headless_node_vertex(hubv)) {#if defined(SUPPORT_PRINTING_V_FORMAT)		PRINT_WARNING("assign_widgets_to_volunteers:vertex %v has "			" no info label",			xswitch);#else		PRINT_WARNING("assign_widgets_to_volunteers:vertex 0x%x has "			" no info label",			xswitch);#endif	    }#endif	/* LATER */	    return;	}	num_volunteer = xvolinfo->xswitch_volunteer_count;	ASSERT(num_volunteer > 0);	curr_volunteer = 0;	/* Assign master hub for xswitch itself.  */	if (HUB_WIDGET_ID_MIN > 0) {		hubv = xvolinfo->xswitch_volunteer[0];		xswitch_info_master_assignment_set(xswitch_info, (xwidgetnum_t)0, hubv);	}	/*	 * TBD: Use administrative information to alter assignment of	 * widgets to hubs.	 */	for (widgetnum=HUB_WIDGET_ID_MIN; widgetnum <= HUB_WIDGET_ID_MAX; widgetnum++) {#ifndef BRINGUP		int i;#endif		/*		 * Ignore disabled/empty ports.		 */		if (!xbow_port_io_enabled(nasid, widgetnum)) 		    continue;		/*		 * If this is the master IO board, assign it to the same 		 * hub that owned it in the prom.		 */		if (is_master_nasid_widget(nasid, widgetnum)) {			int i;			for (i=0; i<num_volunteer; i++) {				hubv = xvolinfo->xswitch_volunteer[i];				hubinfo_get(hubv, &hubinfo);				nasid = hubinfo->h_nasid;				if (nasid == get_console_nasid())					goto do_assignment;			}#ifdef LATER			PRINT_PANIC("Nasid == %d, console nasid == %d",				nasid, get_console_nasid());#endif		}		/*		 * Do a round-robin assignment among the volunteer nodes.		 */		hubv = xvolinfo->xswitch_volunteer[curr_volunteer];		curr_volunteer = (curr_volunteer + 1) % num_volunteer;		/* fall through */do_assignment:		/*		 * At this point, we want to make hubv the master of widgetnum.		 */		xswitch_info_master_assignment_set(xswitch_info, widgetnum, hubv);	}	xswitch_volunteer_delete(xswitch);}/* * Early iograph initialization.  Called by master CPU in mlreset(). * Useful for including iograph.o in kernel.o. */voidiograph_early_init(void){/* * Need new way to get this information .. */	cnodeid_t cnode;	nasid_t nasid;	lboard_t *board;	/*	 * Init. the board-to-hwgraph link early, so FRU analyzer	 * doesn't trip on leftover values if we panic early on.	 */	for(cnode = 0; cnode < numnodes; cnode++) {		nasid = COMPACT_TO_NASID_NODEID(cnode);		board = (lboard_t *)KL_CONFIG_INFO(nasid);		DBG("iograph_early_init: Found board 0x%p\n", board);		/* Check out all the board info stored on a node */		while(board) {			board->brd_graph_link = GRAPH_VERTEX_NONE;			board = KLCF_NEXT(board);			DBG("iograph_early_init: Found board 0x%p\n", board);		}	}	hubio_init();}#ifdef LATER/* There is an identical definition of this in os/scheduler/runq.c */#define INIT_COOKIE(cookie) cookie.must_run = 0; cookie.cpu = PDA_RUNANYWHERE/* * These functions absolutely doesn't belong here.  It's  here, though,  * until the scheduler provides a platform-independent version * that works the way it should.  The interface will definitely change,  * too.  Currently used only in this file and by io/cdl.c in order to * bind various I/O threads to a CPU on the proper node. */cpu_cookie_tsetnoderun(cnodeid_t cnodeid){	int i;	cpuid_t cpunum;	cpu_cookie_t cookie;	INIT_COOKIE(cookie);	if (cnodeid == CNODEID_NONE)		return(cookie);	/*	 * Do a setmustrun to one of the CPUs on the specified	 * node.	 */	if ((cpunum = CNODE_TO_CPU_BASE(cnodeid)) == CPU_NONE) {		return(cookie);	}	cpunum += CNODE_NUM_CPUS(cnodeid) - 1;	for (i = 0; i < CNODE_NUM_CPUS(cnodeid); i++, cpunum--) {		if (cpu_enabled(cpunum)) {			cookie = setmustrun(cpunum);			break;		}	}	return(cookie);}voidrestorenoderun(cpu_cookie_t cookie){	restoremustrun(cookie);}#endif	/* LATER */#ifdef LINUX_KERNEL_THREADSstatic struct semaphore io_init_sema;#endif/* * Let boot processor know that we're done initializing our node's IO * and then exit. *//* ARGSUSED */static voidio_init_done(cnodeid_t cnodeid,cpu_cookie_t c){	/* Let boot processor know that we're done. */#ifdef LINUX_KERNEL_THREADS	up(&io_init_sema);#endif#ifdef LATER	/* This is for the setnoderun done when the io_init thread	 * started 	 */	restorenoderun(c);	sthread_exit();#endif}/*  * Probe to see if this hub's xtalk link is active.  If so, * return the Crosstalk Identification of the widget that we talk to.   * This is called before any of the Crosstalk infrastructure for  * this hub is set up.  It's usually called on the node that we're * probing, but not always. * * TBD: Prom code should actually do this work, and pass through  * hwid for our use. */static voidearly_probe_for_widget(devfs_handle_t hubv, xwidget_hwid_t hwid){	hubreg_t llp_csr_reg;	nasid_t nasid;	hubinfo_t hubinfo;	hubinfo_get(hubv, &hubinfo);	nasid = hubinfo->h_nasid;	llp_csr_reg = REMOTE_HUB_L(nasid, IIO_LLP_CSR);	/* 	 * If link is up, read the widget's part number.	 * A direct connect widget must respond to widgetnum=0.	 */	if (llp_csr_reg & IIO_LLP_CSR_IS_UP) {		/* TBD: Put hub into "indirect" mode */		/*		 * We're able to read from a widget because our hub's 		 * WIDGET_ID was set up earlier.		 */		widgetreg_t widget_id = *(volatile widgetreg_t *)			(RAW_NODE_SWIN_BASE(nasid, 0x0) + WIDGET_ID);		DBG("early_probe_for_widget: Hub Vertex 0x%p is UP widget_id = 0x%x Register 0x%p\n", hubv, widget_id,		(volatile widgetreg_t *)(RAW_NODE_SWIN_BASE(nasid, 0x0) + WIDGET_ID) );		hwid->part_num = XWIDGET_PART_NUM(widget_id);		hwid->rev_num = XWIDGET_REV_NUM(widget_id);		hwid->mfg_num = XWIDGET_MFG_NUM(widget_id);		/* TBD: link reset */	} else {		hwid->part_num = XWIDGET_PART_NUM_NONE;		hwid->rev_num = XWIDGET_REV_NUM_NONE;		hwid->mfg_num = XWIDGET_MFG_NUM_NONE;	}}/* Add inventory information to the widget vertex  * Right now (module,slot,revision) is being * added as inventory information. */static voidxwidget_inventory_add(devfs_handle_t 		widgetv,		      lboard_t 			*board,		      struct xwidget_hwid_s 	hwid){	if (!board)		return;	/* Donot add inventory information for the baseio	 * on a speedo with an xbox. It has already been	 * taken care of in SN00_vmc.	 * Speedo with xbox's baseio comes in at slot io1 (widget 9)	 */	device_inventory_add(widgetv,INV_IOBD,board->brd_type,			     board->brd_module,			     SLOTNUM_GETSLOT(board->brd_slot),			     hwid.rev_num);

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
在线中文字幕一区| 精品国精品自拍自在线| 555www色欧美视频| 国产精品不卡一区二区三区| 久久激情五月婷婷| 日本久久精品电影| 国产精品久久久久久久岛一牛影视| 日精品一区二区三区| 91一区二区在线| 久久蜜桃av一区精品变态类天堂 | 久久99精品久久久久婷婷| 337p亚洲精品色噜噜噜| 亚洲欧美自拍偷拍| 高清不卡在线观看av| 精品国产乱码久久久久久牛牛| 亚洲一区在线视频观看| 成人免费视频视频在线观看免费| 欧美不卡激情三级在线观看| 亚洲国产美国国产综合一区二区| 成人精品电影在线观看| 国产欧美一区二区精品性色超碰| 日本aⅴ精品一区二区三区| 欧美群妇大交群的观看方式| 亚洲精品中文在线影院| 91色综合久久久久婷婷| 国产精品五月天| eeuss影院一区二区三区| 亚洲国产精品激情在线观看| 国产酒店精品激情| 26uuu精品一区二区在线观看| 蜜桃视频一区二区| 欧美一区二区不卡视频| 伦理电影国产精品| 久久综合网色—综合色88| 国产一区二区三区在线观看精品| 日韩三区在线观看| 韩国理伦片一区二区三区在线播放| 欧美一级久久久久久久大片| 日本不卡一区二区三区 | 99久久亚洲一区二区三区青草| 国产欧美精品一区二区色综合 | 欧美日韩中字一区| 天天亚洲美女在线视频| 日韩一区二区三免费高清| 久久电影网站中文字幕| 精品日韩成人av| 福利一区在线观看| 亚洲激情图片小说视频| 7777精品伊人久久久大香线蕉的| 日本va欧美va精品| 国产欧美日韩视频一区二区 | 国产在线播放一区三区四| 国产午夜三级一区二区三| 99精品视频在线观看| 亚洲国产精品久久一线不卡| 日韩欧美一区二区视频| 国产激情一区二区三区四区| 亚洲欧美国产高清| 欧美一二三区精品| 99久久免费视频.com| 天堂成人免费av电影一区| 久久蜜桃av一区二区天堂| 色诱亚洲精品久久久久久| 奇米888四色在线精品| 中文字幕一区二区三区色视频| 在线观看日韩电影| 极品美女销魂一区二区三区| 亚洲欧洲成人自拍| 日韩视频一区二区三区在线播放 | 日韩欧美国产综合| www.日韩av| 麻豆国产91在线播放| 久久99久久久久久久久久久| 国产精品久久久久久久久久免费看| 欧美日韩日日夜夜| 成人午夜又粗又硬又大| 日韩一区精品字幕| 亚洲视频一区在线| 久久久亚洲午夜电影| 精品视频1区2区| 91在线精品一区二区| 国产精品影视网| 亚洲不卡一区二区三区| 中文字幕一区二区5566日韩| 精品国产伦一区二区三区观看体验 | 制服.丝袜.亚洲.中文.综合| 成人午夜视频网站| 久久精品国产网站| 亚洲成精国产精品女| 日韩美女久久久| 久久久高清一区二区三区| 7777精品伊人久久久大香线蕉完整版| 不卡区在线中文字幕| 国产一区二区精品久久99 | 一级女性全黄久久生活片免费| 国产色91在线| 欧美变态tickling挠脚心| 欧美日韩不卡视频| 欧美亚洲日本国产| 色综合天天综合在线视频| 福利电影一区二区| 国产在线精品一区二区三区不卡| 日本免费新一区视频| 亚洲国产日韩a在线播放性色| 成人免费在线视频| 国产精品国产馆在线真实露脸 | 亚洲福利视频一区| 亚洲黄色小视频| 成人免费在线视频| 亚洲丝袜美腿综合| 亚洲素人一区二区| 亚洲欧美国产77777| 亚洲视频一区二区在线观看| 中文字幕在线观看不卡| 自拍偷拍国产亚洲| 一区二区在线观看免费视频播放| 亚洲男人天堂一区| 亚洲一区二区三区中文字幕| 亚洲乱码精品一二三四区日韩在线| 亚洲同性同志一二三专区| 亚洲欧美另类小说视频| 亚洲影院免费观看| 午夜精品一区二区三区免费视频 | 激情文学综合网| 国产剧情一区二区| caoporen国产精品视频| 色狠狠综合天天综合综合| 欧美日韩国产在线播放网站| 日韩欧美国产精品一区| 国产亚洲欧美日韩俺去了| 国产精品麻豆99久久久久久| 亚洲一区二区三区在线看| 美女视频网站久久| 国产成人激情av| 在线一区二区三区| 日韩一区二区三区观看| 亚洲国产aⅴ天堂久久| 日韩和欧美一区二区| 久久91精品国产91久久小草| 成人性生交大片免费| 欧美日韩中文字幕一区二区| 欧美成人伊人久久综合网| 国产精品激情偷乱一区二区∴| 依依成人精品视频| 免费在线成人网| av一区二区久久| 91精品在线免费观看| 国产欧美日韩三级| 五月天欧美精品| 成人黄色在线网站| 欧美精品丝袜中出| 国产精品―色哟哟| 麻豆免费看一区二区三区| 成人av在线影院| 91精品国产色综合久久ai换脸| 国产视频一区不卡| 日韩国产精品久久久| 99精品在线免费| 精品国产免费人成在线观看| 一区二区三区自拍| 国产成人在线视频网址| 在线不卡欧美精品一区二区三区| 国产欧美精品一区| 裸体在线国模精品偷拍| 日本二三区不卡| 国产女人水真多18毛片18精品视频| 亚洲午夜精品在线| 不卡一区二区在线| 久久―日本道色综合久久| 视频一区视频二区中文字幕| 97久久人人超碰| 久久久99久久精品欧美| 美女一区二区视频| 555夜色666亚洲国产免| 亚洲精品视频在线看| 成人ar影院免费观看视频| 久久久久久久久久久久久女国产乱 | 日韩丝袜美女视频| 亚洲va欧美va人人爽午夜| a级精品国产片在线观看| 久久九九99视频| 美女爽到高潮91| 欧美一区二区视频在线观看| 夜夜嗨av一区二区三区| 9久草视频在线视频精品| 国产三级欧美三级日产三级99| 久久99精品国产| 欧美一区二区啪啪| 日本欧美一区二区| 日韩欧美国产wwwww| 日本怡春院一区二区| 在线电影院国产精品| 午夜精彩视频在线观看不卡| 欧美日韩一区在线| 日韩精品乱码av一区二区| 91精品国产aⅴ一区二区| 日韩va亚洲va欧美va久久| 7799精品视频| 免费精品视频在线| 欧美精品一区二区精品网|