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

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

?? devsupport.c

?? 根據(jù)添加了fs2410平臺(tái)的arch目錄
?? C
?? 第 1 頁 / 共 3 頁
字號(hào):
/* $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/mm.h>#include <linux/slab.h>#include <asm/sn/sgi.h>#include <asm/sn/invent.h>#include <asm/sn/hcl.h>#include <asm/sn/iobus.h>#include <asm/sn/iograph.h>/*  * Interfaces in this file are all platform-independent AND IObus-independent. * Be aware that there may be macro equivalents to each of these hiding in * header files which supercede these functions. *//* =====Generic iobus support===== *//* String table to hold names of interrupts. */#ifdef LATERstatic struct string_table device_desc_string_table;#endif/* One time initialization for device descriptor support. */static voiddevice_desc_init(void){#ifdef LATER	string_table_init(&device_desc_string_table);#endif	FIXME("device_desc_init");}/* Drivers use these interfaces to manage device descriptors */static device_desc_tdevice_desc_alloc(void){#ifdef LATER	device_desc_t device_desc;	device_desc = (device_desc_t)kmem_zalloc(sizeof(struct device_desc_s), 0);	device_desc->intr_target = GRAPH_VERTEX_NONE;	ASSERT(device_desc->intr_policy == 0);	device_desc->intr_swlevel = -1;	ASSERT(device_desc->intr_name == NULL);	ASSERT(device_desc->flags == 0);	ASSERT(!(device_desc->flags & D_IS_ASSOC));	return(device_desc);#else	FIXME("device_desc_alloc");	return((device_desc_t)0);#endif}voiddevice_desc_free(device_desc_t device_desc){#ifdef LATER	if (!(device_desc->flags & D_IS_ASSOC)) /* sanity */		kfree(device_desc);#endif	FIXME("device_desc_free");}device_desc_tdevice_desc_dup(devfs_handle_t dev){#ifdef LATER	device_desc_t orig_device_desc, new_device_desc;	new_device_desc = device_desc_alloc();	orig_device_desc = device_desc_default_get(dev);	if (orig_device_desc)		*new_device_desc = *orig_device_desc;/* small structure copy */	else {		device_driver_t		driver;		ilvl_t			pri;				/* 		 * Use the driver's thread priority in 		 * case the device thread priority has not		 * been given.		 */		if (driver = device_driver_getbydev(dev)) {			pri = device_driver_thread_pri_get(driver);			device_desc_intr_swlevel_set(new_device_desc,pri);		}	}			new_device_desc->flags &= ~D_IS_ASSOC;	return(new_device_desc);#else	FIXME("device_desc_dup");	return((device_desc_t)0);#endif}device_desc_t	device_desc_default_get(devfs_handle_t dev){#ifdef LATER	graph_error_t rc;	device_desc_t device_desc;	rc = hwgraph_info_get_LBL(dev, INFO_LBL_DEVICE_DESC, (arbitrary_info_t *)&device_desc);	if (rc == GRAPH_SUCCESS)		return(device_desc);	else		return(NULL);#else	FIXME("device_desc_default_get");	return((device_desc_t)0);#endif}void		device_desc_default_set(devfs_handle_t dev, device_desc_t new_device_desc){#ifdef LATER	graph_error_t rc;	device_desc_t old_device_desc = NULL;	if (new_device_desc) {		new_device_desc->flags |= D_IS_ASSOC;		rc = hwgraph_info_add_LBL(dev, INFO_LBL_DEVICE_DESC, 						(arbitrary_info_t)new_device_desc);		if (rc == GRAPH_DUP) {			rc = hwgraph_info_replace_LBL(dev, INFO_LBL_DEVICE_DESC, 				(arbitrary_info_t)new_device_desc, 				(arbitrary_info_t *)&old_device_desc);			ASSERT(rc == GRAPH_SUCCESS);		}		hwgraph_info_export_LBL(dev, INFO_LBL_DEVICE_DESC,					sizeof(struct device_desc_s));	} else {		rc = hwgraph_info_remove_LBL(dev, INFO_LBL_DEVICE_DESC,					(arbitrary_info_t *)&old_device_desc);	}	if (old_device_desc) {		ASSERT(old_device_desc->flags & D_IS_ASSOC);		old_device_desc->flags &= ~D_IS_ASSOC;		device_desc_free(old_device_desc);	}#endif	FIXME("device_desc_default_set");}devfs_handle_tdevice_desc_intr_target_get(device_desc_t device_desc){#ifdef LATER	return(device_desc->intr_target);#else	FIXME("device_desc_intr_target_get");	return((devfs_handle_t)0);#endif}intdevice_desc_intr_policy_get(device_desc_t device_desc){#ifdef LATER	return(device_desc->intr_policy);#else	FIXME("device_desc_intr_policy_get");	return(0);#endif}ilvl_tdevice_desc_intr_swlevel_get(device_desc_t device_desc){#ifdef LATER	return(device_desc->intr_swlevel);#else	FIXME("device_desc_intr_swlevel_get");	return((ilvl_t)0);#endif}char *device_desc_intr_name_get(device_desc_t device_desc){#ifdef LATER	return(device_desc->intr_name);#else	FIXME("device_desc_intr_name_get");	return(NULL);#endif}intdevice_desc_flags_get(device_desc_t device_desc){#ifdef LATER	return(device_desc->flags);#else	FIXME("device_desc_flags_get");	return(0);#endif}voiddevice_desc_intr_target_set(device_desc_t device_desc, devfs_handle_t target){	if ( device_desc != (device_desc_t)0 )		device_desc->intr_target = target;}voiddevice_desc_intr_policy_set(device_desc_t device_desc, int policy){	if ( device_desc != (device_desc_t)0 )		device_desc->intr_policy = policy;}voiddevice_desc_intr_swlevel_set(device_desc_t device_desc, ilvl_t swlevel){	if ( device_desc != (device_desc_t)0 )		device_desc->intr_swlevel = swlevel;}voiddevice_desc_intr_name_set(device_desc_t device_desc, char *name){#ifdef LATER	if ( device_desc != (device_desc_t)0 )		device_desc->intr_name = string_table_insert(&device_desc_string_table, name);#else	FIXME("device_desc_intr_name_set");#endif}voiddevice_desc_flags_set(device_desc_t device_desc, int flags){	if ( device_desc != (device_desc_t)0 )		device_desc->flags = flags;}/*============= device admin registry routines ===================== *//* Linked list of <admin-name,admin-val> pairs */typedef struct dev_admin_list_s {	struct dev_admin_list_s		*admin_next; 	/* next entry in the							 * list 							 */	char				*admin_name;	/* info label */	char				*admin_val;	/* actual info */} dev_admin_list_t;/* Device/Driver administration registry */typedef struct dev_admin_registry_s {	mrlock_t			reg_lock;	/* To allow							 * exclusive							 * access							 */	dev_admin_list_t		*reg_first;	/* first entry in 							 * the list							 */	dev_admin_list_t		**reg_last;	/* pointer to the							 * next to last entry							 * in the last which 							 * is also the place							 * where the new							 * entry gets							 * inserted							 */} dev_admin_registry_t;/*** device_driver_s associates a device driver prefix with device switch entries.*/struct device_driver_s {	struct device_driver_s	*dd_next;	/* next element on hash chain */	struct device_driver_s	*dd_prev;	/* previous element on hash chain */	char			*dd_prefix;	/* driver prefix string */	struct bdevsw		*dd_bdevsw;	/* driver's bdevsw */	struct cdevsw		*dd_cdevsw;	/* driver's cdevsw */		/* driver administration specific data structures need to	 * maintain the list of <driver-paramater,value> pairs	 */	dev_admin_registry_t	dd_dev_admin_registry;	ilvl_t			dd_thread_pri;	/* default thread priority for						 *  all this driver's						 * threads.						 */};#define	NEW(_p)		(_p = kmalloc(sizeof(*_p), GFP_KERNEL))#define FREE(_p)	(kmem_free(_p))	/* * helpful lock macros */#define DEV_ADMIN_REGISTRY_INITLOCK(lockp,name)	mrinit(lockp,name)#define DEV_ADMIN_REGISTRY_RDLOCK(lockp)	mraccess(lockp)	       #define DEV_ADMIN_REGISTRY_WRLOCK(lockp)	mrupdate(lockp)	       #define DEV_ADMIN_REGISTRY_UNLOCK(lockp)	mrunlock(lockp)/* Initialize the registry  */static voiddev_admin_registry_init(dev_admin_registry_t *registry){#ifdef LATER	if ( registry != (dev_admin_registry_t *)0 )		DEV_ADMIN_REGISTRY_INITLOCK(&registry->reg_lock,				    "dev_admin_registry_lock");		registry->reg_first = NULL;		registry->reg_last = &registry->reg_first;	}#else	FIXME("dev_admin_registry_init");#endif}/* * add an <name , value > entry to the dev admin registry. * if the name already exists in the registry then change the * value iff the new value differs from the old value. * if the name doesn't exist a new list entry is created and put * at the end. */static voiddev_admin_registry_add(dev_admin_registry_t	*registry,		       char			*name,		       char			*val){#ifdef LATER	dev_admin_list_t	*reg_entry;	dev_admin_list_t	*scan = 0;	DEV_ADMIN_REGISTRY_WRLOCK(&registry->reg_lock);	/* check if the name already exists in the registry */	scan = registry->reg_first;	while (scan) {		if (strcmp(scan->admin_name,name) == 0) {			/* name is there in the registry */			if (strcmp(scan->admin_val,val)) {				/* old value != new value 				 * reallocate  memory and copy the new value				 */				FREE(scan->admin_val);				scan->admin_val = 					(char *)kern_calloc(1,strlen(val)+1);				strcpy(scan->admin_val,val);				goto out;			}			goto out;	/* old value == new value */		}		scan = scan->admin_next;	}	/* name is not there in the registry.	 * allocate memory for the new registry entry 	 */	NEW(reg_entry);		reg_entry->admin_next   	= 0;	reg_entry->admin_name	= (char *)kern_calloc(1,strlen(name)+1);	strcpy(reg_entry->admin_name,name);	reg_entry->admin_val	= (char *)kern_calloc(1,strlen(val)+1);	strcpy(reg_entry->admin_val,val);	/* add the entry at the end of the registry */	*(registry->reg_last)	= reg_entry;	registry->reg_last	= &reg_entry->admin_next;out:	DEV_ADMIN_REGISTRY_UNLOCK(&registry->reg_lock);#endif	FIXME("dev_admin_registry_add");}/* * check if there is an info corr. to a particular * name starting from the cursor position in the  * registry */static char *dev_admin_registry_find(dev_admin_registry_t *registry,char *name){#ifdef LATER	dev_admin_list_t	*scan = 0;		DEV_ADMIN_REGISTRY_RDLOCK(&registry->reg_lock);	scan = registry->reg_first;	while (scan) {		if (strcmp(scan->admin_name,name) == 0) {			DEV_ADMIN_REGISTRY_UNLOCK(&registry->reg_lock);			return scan->admin_val;		}		scan = scan->admin_next;	}	DEV_ADMIN_REGISTRY_UNLOCK(&registry->reg_lock);	return 0;#else	FIXME("dev_admin_registry_find");	return(NULL);#endif}/*============= MAIN DEVICE/ DRIVER ADMINISTRATION INTERFACE================ *//* * return any labelled info associated with a device. * called by any kernel code including device drivers. */char *

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲福利一二三区| 欧美另类z0zxhd电影| 男人的天堂久久精品| 亚洲男女一区二区三区| 国产精品久久久久久久久快鸭| 国产丝袜欧美中文另类| 久久久国际精品| 中文幕一区二区三区久久蜜桃| 久久精品亚洲一区二区三区浴池 | 亚洲综合色噜噜狠狠| 一区二区三区成人在线视频| 亚洲国产另类精品专区| 亚洲大尺度视频在线观看| 日韩主播视频在线| 久久99国产精品久久| 国产精品一级片| 成人免费三级在线| 91香蕉视频在线| 欧美喷潮久久久xxxxx| 欧美成人一区二区| 亚洲国产精品黑人久久久| 亚洲丝袜制服诱惑| 天天av天天翘天天综合网| 老汉av免费一区二区三区| 国产乱码精品一区二区三| 91一区二区三区在线观看| 欧美性大战久久久久久久| 91精品国产综合久久香蕉麻豆| 精品久久久三级丝袜| 最新热久久免费视频| 亚洲成在人线在线播放| 美脚の诱脚舐め脚责91 | 一区二区三区在线视频观看58| 亚洲国产精品麻豆| 激情图区综合网| 日本丶国产丶欧美色综合| 日韩丝袜情趣美女图片| 中文字幕一区二区三区在线不卡 | 亚洲欧洲性图库| 五月天亚洲婷婷| 国产99久久精品| 欧美精品一卡二卡| 国产精品女同互慰在线看| 日韩激情中文字幕| 成人av网站免费| 日韩一区二区三区免费观看| 日韩一区在线看| 韩国精品主播一区二区在线观看 | 国产精品三级av在线播放| 日韩黄色小视频| 成人sese在线| 久久精品欧美一区二区三区不卡| 亚洲国产欧美日韩另类综合| 成人av高清在线| 久久久久久电影| 老司机精品视频线观看86| 欧美日韩久久不卡| 一区二区三区日本| 99久久久免费精品国产一区二区| 欧美白人最猛性xxxxx69交| 亚洲自拍偷拍av| 91美女片黄在线观看| 久久视频一区二区| 精品一区二区国语对白| 欧美日韩国产精选| 亚洲一区av在线| 91免费观看在线| 亚洲视频一区二区免费在线观看| 国内久久婷婷综合| 久久久久久久久久久久久久久99| 青青草97国产精品免费观看 | 国产成人免费在线视频| 久久人人超碰精品| 国产在线一区二区| 26uuu精品一区二区在线观看| 蜜臀av亚洲一区中文字幕| 欧美老年两性高潮| 日韩二区三区在线观看| 欧美一区二区三区免费观看视频 | 国产精品免费av| 成人精品免费看| 国产精品国产三级国产aⅴ中文| 国产成人精品三级| 亚洲国产精华液网站w| www.日韩大片| 日韩毛片高清在线播放| 99久久免费视频.com| 亚洲国产精品二十页| 在线观看国产91| 日产欧产美韩系列久久99| 日韩欧美一级在线播放| 国产乱人伦精品一区二区在线观看 | 亚洲欧美一区二区视频| 欧美制服丝袜第一页| 日本aⅴ精品一区二区三区| 久久日韩粉嫩一区二区三区| 99精品偷自拍| 日本三级亚洲精品| 国产午夜精品一区二区三区视频| 91麻豆国产福利在线观看| 首页欧美精品中文字幕| 精品国产一区二区亚洲人成毛片| 国产精品69毛片高清亚洲| 国产精品久久久久国产精品日日| 国产伦精品一区二区三区在线观看| 久久久久久久网| 免费成人在线播放| 91成人免费在线视频| 久久精品国产成人一区二区三区| 91精品国产综合久久久蜜臀粉嫩| 午夜视频在线观看一区二区| 日本少妇一区二区| 日韩女优毛片在线| 国产成人免费视频网站高清观看视频| 91精品啪在线观看国产60岁| 一卡二卡欧美日韩| 日本一区二区三区四区| 国产xxx精品视频大全| 中文字幕一区二区三区在线不卡| 成人免费黄色大片| 中文字幕一区二区三区在线播放 | 亚洲人成网站影音先锋播放| 日韩欧美国产精品一区| 激情六月婷婷久久| 中文av字幕一区| 在线看日韩精品电影| 日韩av一区二区三区四区| 亚洲精品五月天| 欧美精品一二三区| 韩国一区二区视频| 国产精品久久毛片av大全日韩| 色婷婷av一区| av网站一区二区三区| 亚洲国产综合91精品麻豆| 欧美一卡2卡三卡4卡5免费| 久久99国产精品久久99 | 在线播放日韩导航| caoporen国产精品视频| 婷婷综合久久一区二区三区| 精品入口麻豆88视频| 不卡视频在线看| 亚洲色图欧美激情| 亚洲卡通欧美制服中文| 日韩欧美国产三级| 99久久99久久综合| 美日韩黄色大片| 亚洲欧美激情小说另类| 中文字幕日韩精品一区| 日韩欧美亚洲一区二区| 国产91在线看| 日产欧产美韩系列久久99| 精品免费国产二区三区| 91丨九色丨黑人外教| 精品一区二区三区香蕉蜜桃| 一区二区三区加勒比av| 国产精品毛片无遮挡高清| 欧美一区二区视频网站| 99精品国产热久久91蜜凸| 美女视频免费一区| 国产成人精品一区二| 日韩高清不卡在线| 综合自拍亚洲综合图不卡区| 欧美一区二区视频在线观看2020| 国产自产高清不卡| 成人美女视频在线看| 久99久精品视频免费观看| 亚洲18女电影在线观看| 综合色天天鬼久久鬼色| 一区二区三区四区激情| 中文字幕欧美国产| 日韩三级在线免费观看| 欧美日韩国产成人在线免费| 精品日本一线二线三线不卡| 欧美精品一二三| 欧美日韩一区二区三区在线| 欧洲一区二区三区在线| 91黄色免费观看| www.爱久久.com| 成人免费精品视频| 国产激情视频一区二区在线观看| 亚洲综合久久av| 国模大尺度一区二区三区| 国产一区二区三区国产| 美女一区二区视频| 午夜精品视频在线观看| 成人性视频免费网站| 国产成人8x视频一区二区| 国产精品18久久久久| 国产一区在线看| 欧美视频一区二区三区在线观看| 91麻豆蜜桃一区二区三区| 91在线观看污| 不卡av在线免费观看| 美女视频黄 久久| 色婷婷亚洲一区二区三区| 色综合久久久久综合体| 欧美亚洲高清一区| 在线精品视频小说1| 国产日韩精品一区二区三区| 国产午夜精品理论片a级大结局|