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

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

?? hcl.c

?? 根據添加了fs2410平臺的arch目錄
?? C
?? 第 1 頁 / 共 3 頁
字號:
			"char",			/* path */		    	0,			/* major */		    	0,			/* minor */		    	DEVFS_SPECIAL_CHR,	/* char | block */		    	1));			/* traverse symlinks */}/* * hwgraph_cdevsw_get - returns the fops of the given devfs entry. */struct file_operations *hwgraph_cdevsw_get(devfs_handle_t de){	struct file_operations *fops = devfs_get_ops(de);	devfs_put_ops(de); /*  FIXME: this may need to be moved to callers  */	return(fops);}/* * hwgraph_bdevsw_get - returns the fops of the given devfs entry.*/struct file_operations *    /*  FIXME: shouldn't this be a blkdev?  */hwgraph_bdevsw_get(devfs_handle_t de){	struct file_operations *fops = devfs_get_ops(de);	devfs_put_ops(de); /*  FIXME: this may need to be moved to callers  */	return(fops);}/*** Inventory is now associated with a vertex in the graph.  For items that** belong in the inventory but have no vertex ** (e.g. old non-graph-aware drivers), we create a bogus vertex under the ** INFO_LBL_INVENT name.**** For historical reasons, we prevent exact duplicate entries from being added** to a single vertex.*//* * hwgraph_inventory_add - Adds an inventory entry into de. */inthwgraph_inventory_add(	devfs_handle_t de,			int class,			int type,			major_t controller,			minor_t unit,			int state){	inventory_t *pinv = NULL, *old_pinv = NULL, *last_pinv = NULL;	int rv;	/*	 * Add our inventory data to the list of inventory data	 * associated with this vertex.	 */again:	/* GRAPH_LOCK_UPDATE(&invent_lock); */	rv = labelcl_info_get_LBL(de,			INFO_LBL_INVENT,			NULL, (arbitrary_info_t *)&old_pinv);	if ((rv != LABELCL_SUCCESS) && (rv != LABELCL_NOT_FOUND))		goto failure;	/*	 * Seek to end of inventory items associated with this	 * vertex.  Along the way, make sure we're not duplicating	 * an inventory item (for compatibility with old add_to_inventory)	 */	for (;old_pinv; last_pinv = old_pinv, old_pinv = old_pinv->inv_next) {		if ((int)class != -1 && old_pinv->inv_class != class)			continue;		if ((int)type != -1 && old_pinv->inv_type != type)			continue;		if ((int)state != -1 && old_pinv->inv_state != state)			continue;		if ((int)controller != -1		    && old_pinv->inv_controller != controller)			continue;		if ((int)unit != -1 && old_pinv->inv_unit != unit)			continue;		/* exact duplicate of previously-added inventory item */		rv = LABELCL_DUP;		goto failure;	}	/* Not a duplicate, so we know that we need to add something. */	if (pinv == NULL) {		/* Release lock while we wait for memory. */		/* GRAPH_LOCK_DONE_UPDATE(&invent_lock); */		pinv = (inventory_t *)kmalloc(sizeof(inventory_t), GFP_KERNEL);		replace_in_inventory(pinv, class, type, controller, unit, state);		goto again;	}	pinv->inv_next = NULL;	if (last_pinv) {		last_pinv->inv_next = pinv;	} else {		rv = labelcl_info_add_LBL(de, INFO_LBL_INVENT, 			sizeof(inventory_t), (arbitrary_info_t)pinv);		if (!rv)			goto failure;	}	/* GRAPH_LOCK_DONE_UPDATE(&invent_lock); */	return(0);failure:	/* GRAPH_LOCK_DONE_UPDATE(&invent_lock); */	if (pinv)		kfree(pinv);	return(rv);}/* * hwgraph_inventory_remove - Removes an inventory entry. * *	Remove an inventory item associated with a vertex.   It is the caller's *	responsibility to make sure that there are no races between removing *	inventory from a vertex and simultaneously removing that vertex.*/inthwgraph_inventory_remove(	devfs_handle_t de,				int class,				int type,				major_t controller,				minor_t unit,				int state){	inventory_t *pinv = NULL, *last_pinv = NULL, *next_pinv = NULL;	labelcl_error_t rv;	/*	 * We never remove stuff from ".invent" ..	 */	if (!de)		return (-1);	/*	 * Remove our inventory data to the list of inventory data	 * associated with this vertex.	 */	/* GRAPH_LOCK_UPDATE(&invent_lock); */	rv = labelcl_info_get_LBL(de,			INFO_LBL_INVENT,			NULL, (arbitrary_info_t *)&pinv);	if (rv != LABELCL_SUCCESS)		goto failure;	/*	 * Search through inventory items associated with this	 * vertex, looking for a match.	 */	for (;pinv; pinv = next_pinv) {		next_pinv = pinv->inv_next;		if(((int)class == -1 || pinv->inv_class == class) &&		   ((int)type == -1 || pinv->inv_type == type) &&		   ((int)state == -1 || pinv->inv_state == state) &&		   ((int)controller == -1 || pinv->inv_controller == controller) &&		   ((int)unit == -1 || pinv->inv_unit == unit)) {			/* Found a matching inventory item. Remove it. */			if (last_pinv) {				last_pinv->inv_next = pinv->inv_next;			} else {				rv = hwgraph_info_replace_LBL(de, INFO_LBL_INVENT, (arbitrary_info_t)pinv->inv_next, NULL);				if (rv != LABELCL_SUCCESS)					goto failure;			}			pinv->inv_next = NULL; /* sanity */			kfree(pinv);		} else			last_pinv = pinv;	}	if (last_pinv == NULL) {		rv = hwgraph_info_remove_LBL(de, INFO_LBL_INVENT, NULL);		if (rv != LABELCL_SUCCESS)			goto failure;	}	rv = LABELCL_SUCCESS;failure:	/* GRAPH_LOCK_DONE_UPDATE(&invent_lock); */	return(rv);}/* * hwgraph_inventory_get_next - Get next inventory item associated with the  *	specified vertex. * *	No locking is really needed.  We don't yet have the ability *	to remove inventory items, and new items are always added to *	the end of a vertex' inventory list. * * 	However, a devfs entry can be removed!*/inthwgraph_inventory_get_next(devfs_handle_t de, invplace_t *place, inventory_t **ppinv){	inventory_t *pinv;	labelcl_error_t rv;	if (de == NULL)		return(LABELCL_BAD_PARAM);	if (place->invplace_vhdl == NULL) {		place->invplace_vhdl = de;		place->invplace_inv = NULL;	}	if (de != place->invplace_vhdl)		return(LABELCL_BAD_PARAM);	if (place->invplace_inv == NULL) {		/* Just starting on this vertex */		rv = labelcl_info_get_LBL(de, INFO_LBL_INVENT,						NULL, (arbitrary_info_t *)&pinv);		if (rv != LABELCL_SUCCESS)			return(LABELCL_NOT_FOUND);	} else {		/* Advance to next item on this vertex */		pinv = place->invplace_inv->inv_next;	}	place->invplace_inv = pinv;	*ppinv = pinv;	return(LABELCL_SUCCESS);}/* * hwgraph_controller_num_get - Returns the controller number in the inventory  *	entry. */inthwgraph_controller_num_get(devfs_handle_t device){	inventory_t *pinv;	invplace_t invplace = { NULL, NULL, NULL };	int val = -1;	if ((pinv = device_inventory_get_next(device, &invplace)) != NULL) {		val = (pinv->inv_class == INV_NETWORK)? pinv->inv_unit: pinv->inv_controller;	}#ifdef DEBUG	/*	 * It does not make any sense to call this on vertexes with multiple	 * inventory structs chained together	 */	if ( device_inventory_get_next(device, &invplace) != NULL ) {		printk("Should panic here ... !\n");#endif	return (val);	}/* * hwgraph_controller_num_set - Sets the controller number in the inventory  *	entry. */voidhwgraph_controller_num_set(devfs_handle_t device, int contr_num){	inventory_t *pinv;	invplace_t invplace = { NULL, NULL, NULL };	if ((pinv = device_inventory_get_next(device, &invplace)) != NULL) {		if (pinv->inv_class == INV_NETWORK)			pinv->inv_unit = contr_num;		else {			if (pinv->inv_class == INV_FCNODE)				pinv = device_inventory_get_next(device, &invplace);			if (pinv != NULL)				pinv->inv_controller = contr_num;		}	}#ifdef DEBUG	/*	 * It does not make any sense to call this on vertexes with multiple	 * inventory structs chained together	 */	if(pinv != NULL)		ASSERT(device_inventory_get_next(device, &invplace) == NULL);#endif}/* * Find the canonical name for a given vertex by walking back through * connectpt's until we hit the hwgraph root vertex (or until we run * out of buffer space or until something goes wrong). * *	COMPATIBILITY FUNCTIONALITY * Walks back through 'parents', not necessarily the same as connectpts. * * Need to resolve the fact that devfs does not return the path from  * "/" but rather it just stops right before /dev .. */inthwgraph_vertex_name_get(devfs_handle_t vhdl, char *buf, uint buflen){	char *locbuf;	int   pos;	if (buflen < 1)		return(-1);	/* XXX should be GRAPH_BAD_PARAM ? */	locbuf = kmalloc(buflen, GFP_KERNEL);	pos = devfs_generate_path(vhdl, locbuf, buflen);	if (pos < 0) {		kfree(locbuf);		return pos;	}	strcpy(buf, &locbuf[pos]);	kfree(locbuf);	return 0;}/*** vertex_to_name converts a vertex into a canonical name by walking** back through connect points until we hit the hwgraph root (or until** we run out of buffer space).**** Usually returns a pointer to the original buffer, filled in as** appropriate.  If the buffer is too small to hold the entire name,** or if anything goes wrong while determining the name, vertex_to_name** returns "UnknownDevice".*/#define DEVNAME_UNKNOWN "UnknownDevice"char *vertex_to_name(devfs_handle_t vhdl, char *buf, uint buflen){	if (hwgraph_vertex_name_get(vhdl, buf, buflen) == GRAPH_SUCCESS)		return(buf);	else		return(DEVNAME_UNKNOWN);}#ifdef LATER/*** Return the compact node id of the node that ultimately "owns" the specified** vertex.  In order to do this, we walk back through masters and connect points** until we reach a vertex that represents a node.*/cnodeid_tmaster_node_get(devfs_handle_t vhdl){	cnodeid_t cnodeid;	devfs_handle_t master;	for (;;) {		cnodeid = nodevertex_to_cnodeid(vhdl);		if (cnodeid != CNODEID_NONE)			return(cnodeid);		master = device_master_get(vhdl);		/* Check for exceptional cases */		if (master == vhdl) {			/* Since we got a reference to the "master" thru			 * device_master_get() we should decrement			 * its reference count by 1			 */			hwgraph_vertex_unref(master);			return(CNODEID_NONE);		}		if (master == GRAPH_VERTEX_NONE) {			master = hwgraph_connectpt_get(vhdl);			if ((master == GRAPH_VERTEX_NONE) ||			    (master == vhdl)) {				if (master == vhdl)					/* Since we got a reference to the					 * "master" thru					 * hwgraph_connectpt_get() we should					 * decrement its reference count by 1					 */					hwgraph_vertex_unref(master);				return(CNODEID_NONE);			}		}				vhdl = master;		/* Decrement the reference to "master" which was got		 * either thru device_master_get() or hwgraph_connectpt_get()		 * above.		 */		hwgraph_vertex_unref(master);	}}/* * Using the canonical path name to get hold of the desired vertex handle will * not work on multi-hub sn0 nodes. Hence, we use the following (slightly * convoluted) algorithm. * * - Start at the vertex corresponding to the driver (provided as input parameter) * - Loop till you reach a vertex which has EDGE_LBL_MEMORY *    - If EDGE_LBL_CONN exists, follow that up. *      else if EDGE_LBL_MASTER exists, follow that up. *      else follow EDGE_LBL_DOTDOT up. * * * We should be at desired hub/heart vertex now * * - Follow EDGE_LBL_CONN to the widget vertex. * * - return vertex handle of this widget. */devfs_handle_tmem_vhdl_get(devfs_handle_t drv_vhdl){devfs_handle_t cur_vhdl, cur_upper_vhdl;devfs_handle_t tmp_mem_vhdl, mem_vhdl;graph_error_t loop_rv;  /* Initializations */  cur_vhdl = drv_vhdl;  loop_rv = ~GRAPH_SUCCESS;  /* Loop till current vertex has EDGE_LBL_MEMORY */  while (loop_rv != GRAPH_SUCCESS) {    if ((hwgraph_edge_get(cur_vhdl, EDGE_LBL_CONN, &cur_upper_vhdl)) == GRAPH_SUCCESS) {    } else if ((hwgraph_edge_get(cur_vhdl, EDGE_LBL_MASTER, &cur_upper_vhdl)) == GRAPH_SUCCESS) {      } else { /* Follow HWGRAPH_EDGELBL_DOTDOT up */           (void) hwgraph_edge_get(cur_vhdl, HWGRAPH_EDGELBL_DOTDOT, &cur_upper_vhdl);        }    cur_vhdl = cur_upper_vhdl;#if DEBUG && HWG_DEBUG    printf("Current vhdl %d \n", cur_vhdl);#endif /* DEBUG */    loop_rv = hwgraph_edge_get(cur_vhdl, EDGE_LBL_MEMORY, &tmp_mem_vhdl);  }  /* We should be at desired hub/heart vertex now */  if ((hwgraph_edge_get(cur_vhdl, EDGE_LBL_CONN, &mem_vhdl)) != GRAPH_SUCCESS)    return (GRAPH_VERTEX_NONE);  return (mem_vhdl);}#endif /* LATER *//*** Add a char device -- if the driver supports it -- at a specified vertex.*/graph_error_thwgraph_char_device_add(        devfs_handle_t from,                                char *path,                                char *prefix,                                devfs_handle_t *devhdl){	devfs_handle_t xx = NULL;	printk("WARNING: hwgraph_char_device_add() not supported .. use hwgraph_register.\n");	*devhdl = xx;	// Must set devhdl	return(GRAPH_SUCCESS);}graph_error_thwgraph_edge_remove(devfs_handle_t from, char *name, devfs_handle_t *toptr){	printk("WARNING: hwgraph_edge_remove NOT supported.\n");	return(GRAPH_ILLEGAL_REQUEST);}graph_error_thwgraph_vertex_unref(devfs_handle_t vhdl){	return(GRAPH_ILLEGAL_REQUEST);}EXPORT_SYMBOL(hwgraph_mk_dir);EXPORT_SYMBOL(hwgraph_path_add);EXPORT_SYMBOL(hwgraph_char_device_add);EXPORT_SYMBOL(hwgraph_register);EXPORT_SYMBOL(hwgraph_vertex_destroy);EXPORT_SYMBOL(hwgraph_fastinfo_get);EXPORT_SYMBOL(hwgraph_edge_get);EXPORT_SYMBOL(hwgraph_fastinfo_set);EXPORT_SYMBOL(hwgraph_connectpt_set);EXPORT_SYMBOL(hwgraph_connectpt_get);EXPORT_SYMBOL(hwgraph_edge_get_next);EXPORT_SYMBOL(hwgraph_info_add_LBL);EXPORT_SYMBOL(hwgraph_info_remove_LBL);EXPORT_SYMBOL(hwgraph_info_replace_LBL);EXPORT_SYMBOL(hwgraph_info_get_LBL);EXPORT_SYMBOL(hwgraph_info_get_exported_LBL);EXPORT_SYMBOL(hwgraph_info_get_next_LBL);EXPORT_SYMBOL(hwgraph_info_export_LBL);EXPORT_SYMBOL(hwgraph_info_unexport_LBL);EXPORT_SYMBOL(hwgraph_path_lookup);EXPORT_SYMBOL(hwgraph_traverse);EXPORT_SYMBOL(hwgraph_path_to_vertex);EXPORT_SYMBOL(hwgraph_path_to_dev);EXPORT_SYMBOL(hwgraph_block_device_get);EXPORT_SYMBOL(hwgraph_char_device_get);EXPORT_SYMBOL(hwgraph_cdevsw_get);EXPORT_SYMBOL(hwgraph_bdevsw_get);EXPORT_SYMBOL(hwgraph_vertex_name_get);

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
三级一区在线视频先锋| 伊人性伊人情综合网| 不卡一区二区中文字幕| 一区二区三区在线观看欧美| 日韩欧美一二三四区| 粉嫩欧美一区二区三区高清影视 | 国产精品中文字幕日韩精品 | www.亚洲精品| 亚洲成在人线在线播放| 久久久三级国产网站| 91久久精品日日躁夜夜躁欧美| 亚洲日本成人在线观看| 精品久久久久久无| 欧美最新大片在线看| 国产毛片精品国产一区二区三区| 亚洲免费观看高清完整版在线观看熊| 91麻豆精品91久久久久久清纯| 成人av在线一区二区三区| 免费久久99精品国产| 亚洲欧洲av在线| 欧美成人vps| 欧美日韩一区二区三区高清| 国产成人免费视频| 久久99久久精品| 亚洲成人7777| 一区二区三区在线观看动漫| 欧美国产亚洲另类动漫| 精品久久国产字幕高潮| 91麻豆文化传媒在线观看| 精品一区二区日韩| 日韩中文字幕不卡| 一区二区三区精品久久久| 国产精品网曝门| 欧美精品一区二区三区蜜臀 | 国产欧美一区二区精品忘忧草| 欧美久久久一区| 99久久99久久精品免费观看 | 久久理论电影网| 欧美一卡二卡在线| 欧美日韩精品一区二区天天拍小说| 成人精品gif动图一区| 丰满少妇在线播放bd日韩电影| 国产综合色在线| 激情综合色播激情啊| 日韩av在线播放中文字幕| 亚洲一区二区三区美女| 亚洲精品免费在线| 亚洲人成电影网站色mp4| 国产精品乱码妇女bbbb| 久久久久久亚洲综合影院红桃| 制服丝袜激情欧洲亚洲| 欧美伦理影视网| 欧美视频在线一区二区三区 | 亚洲男人的天堂网| 国产精品久久久久久久久免费桃花| 久久久欧美精品sm网站| 久久久精品国产免大香伊| 精品国产青草久久久久福利| 成人精品国产福利| 色呦呦网站一区| 欧美日韩国产在线观看| 欧美人体做爰大胆视频| 欧美一区二区三区在| 欧美一级日韩不卡播放免费| 欧美一级二级三级蜜桃| 欧美一区二区三区精品| 91.麻豆视频| 日韩精品中午字幕| 日本一区二区视频在线| 亚洲天堂免费看| 一区二区三区久久久| 日日嗨av一区二区三区四区| 久久精品国产网站| 成人做爰69片免费看网站| 99re在线精品| 欧美精品色综合| 欧美成人一区二区三区片免费 | 精品国产乱码久久久久久老虎 | 欧美日韩精品三区| 日韩欧美一区二区视频| 欧美疯狂性受xxxxx喷水图片| 欧美一卡二卡三卡| 日本一区免费视频| 亚洲综合成人在线| 麻豆久久久久久| 成熟亚洲日本毛茸茸凸凹| 91麻豆国产福利在线观看| 欧美色图免费看| 精品成人一区二区三区四区| 国产精品视频一二三区| 亚洲国产精品久久人人爱蜜臀 | 国产欧美日韩不卡| 亚洲一区影音先锋| 国产又黄又大久久| 欧美亚洲国产怡红院影院| 日韩一区二区视频在线观看| 国产日韩欧美不卡| 亚洲国产精品久久艾草纯爱| 国产高清成人在线| 在线免费观看日本一区| 欧美α欧美αv大片| 亚洲另类在线视频| 激情五月婷婷综合| 欧美在线观看视频在线| 亚洲国产成人在线| 日韩中文字幕区一区有砖一区 | 一本大道综合伊人精品热热| 日韩欧美一二三区| 亚洲精品免费在线| 国产黄色成人av| 欧美一区2区视频在线观看| 亚洲视频一区二区免费在线观看| 久久精品99国产精品| 99精品欧美一区| 久久综合色一综合色88| 亚洲福利电影网| 波多野结衣欧美| 亚洲精品一区二区三区精华液| 亚洲成人激情自拍| 99视频在线精品| 色欧美88888久久久久久影院| 欧美r级电影在线观看| 蜜臀av性久久久久av蜜臀妖精| 欧美体内she精视频| 一级特黄大欧美久久久| 91亚洲国产成人精品一区二区三| 欧美国产欧美综合| 丁香婷婷综合网| 欧美高清在线一区二区| 懂色一区二区三区免费观看| 久久精品一级爱片| 国产一区二区不卡| 国产视频一区二区在线观看| 国产91露脸合集magnet| 国产欧美日产一区| av在线不卡免费看| 亚洲欧美日韩一区二区三区在线观看| 成人黄页在线观看| 亚洲欧洲制服丝袜| 欧美日韩综合在线免费观看| 五月激情综合色| 欧美大片日本大片免费观看| 久久99精品视频| 国产日产精品1区| 成人小视频免费在线观看| 国产精品久久久久久久久免费樱桃| 一本大道av伊人久久综合| 亚洲一区二区黄色| 91精品国产一区二区| 精品无人码麻豆乱码1区2区| 久久久久国产精品厨房| 99久久国产综合精品女不卡| 亚洲午夜激情av| 日韩亚洲欧美在线观看| 国产不卡视频在线观看| 亚洲少妇中出一区| 欧美日韩一区 二区 三区 久久精品| 天天影视网天天综合色在线播放| 欧美r级在线观看| av动漫一区二区| 五月天一区二区三区| 亚洲精品一区二区三区在线观看| 成人小视频在线| 首页综合国产亚洲丝袜| 久久亚洲春色中文字幕久久久| eeuss鲁片一区二区三区 | 中文字幕日韩欧美一区二区三区| 色婷婷综合久久久久中文| 午夜精品久久久久久久久久久| 精品国产成人系列| 91丨九色丨蝌蚪富婆spa| 日韩二区三区四区| 国产精品久久午夜| 69久久99精品久久久久婷婷| 国产成人8x视频一区二区 | 美美哒免费高清在线观看视频一区二区 | 日韩欧美国产系列| 波多野结衣91| 美女脱光内衣内裤视频久久网站 | 美女一区二区三区| 中文字幕不卡在线观看| 欧美精品久久久久久久多人混战 | 欧美猛男男办公室激情| 国产91露脸合集magnet| 午夜精品爽啪视频| 最新热久久免费视频| 精品日韩一区二区| 欧美视频在线一区二区三区| 成人激情电影免费在线观看| 日本中文字幕一区| 亚洲精品国久久99热| 久久综合色之久久综合| 56国语精品自产拍在线观看| 91同城在线观看| 国产精品一区二区无线| 日韩电影网1区2区| 亚洲午夜视频在线观看| 中文字幕在线观看一区二区| 欧美v亚洲v综合ⅴ国产v| 欧美精品一卡二卡|