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

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

?? hcl.c

?? 根據添加了fs2410平臺的arch目錄
?? C
?? 第 1 頁 / 共 3 頁
字號:
/* $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. * *  hcl - SGI's Hardware Graph compatibility layer. * * 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 <linux/module.h>#include <linux/init.h>#include <asm/sn/sgi.h>#include <linux/devfs_fs.h>#include <linux/devfs_fs_kernel.h>#include <asm/io.h>#include <asm/sn/iograph.h>#include <asm/sn/invent.h>#include <asm/sn/hcl.h>#include <asm/sn/labelcl.h>#define HCL_NAME "SGI-HWGRAPH COMPATIBILITY DRIVER"#define HCL_TEMP_NAME "HCL_TEMP_NAME_USED_FOR_HWGRAPH_VERTEX_CREATE"#define HCL_TEMP_NAME_LEN 44 #define HCL_VERSION "1.0"devfs_handle_t hwgraph_root = NULL;devfs_handle_t linux_busnum = NULL;/* * Debug flag definition. */#define OPTION_NONE             0x00#define HCL_DEBUG_NONE 0x00000#define HCL_DEBUG_ALL  0x0ffff#if defined(CONFIG_HCL_DEBUG)static unsigned int hcl_debug_init __initdata = HCL_DEBUG_NONE;#endifstatic unsigned int hcl_debug = HCL_DEBUG_NONE;#if defined(CONFIG_HCL_DEBUG) && !defined(MODULE)static unsigned int boot_options = OPTION_NONE;#endif/* * Some Global definitions. */spinlock_t hcl_spinlock;devfs_handle_t hcl_handle = NULL;invplace_t invplace_none = {	GRAPH_VERTEX_NONE,	GRAPH_VERTEX_PLACE_NONE,	NULL};/* * HCL device driver. * The purpose of this device driver is to provide a facility  * for User Level Apps e.g. hinv, ioconfig etc. an ioctl path  * to manipulate label entries without having to implement * system call interfaces.  This methodology will enable us to  * make this feature module loadable. */static int hcl_open(struct inode * inode, struct file * filp){	if (hcl_debug) {        	printk("HCL: hcl_open called.\n");	}        return(0);}static int hcl_close(struct inode * inode, struct file * filp){	if (hcl_debug) {        	printk("HCL: hcl_close called.\n");	}        return(0);}static int hcl_ioctl(struct inode * inode, struct file * file,        unsigned int cmd, unsigned long arg){	if (hcl_debug) {		printk("HCL: hcl_ioctl called.\n");	}	switch (cmd) {		default:			if (hcl_debug) {				printk("HCL: hcl_ioctl cmd = 0x%x\n", cmd);			}	}	return(0);}struct file_operations hcl_fops = {	(struct module *)0,	NULL,		/* lseek - default */	NULL,		/* read - general block-dev read */	NULL,		/* write - general block-dev write */	NULL,		/* readdir - bad */	NULL,		/* poll */	hcl_ioctl,      /* ioctl */	NULL,		/* mmap */	hcl_open,	/* open */	NULL,		/* flush */	hcl_close,	/* release */	NULL,		/* fsync */	NULL,		/* fasync */	NULL,		/* lock */	NULL,		/* readv */	NULL,		/* writev */};/* * init_hcl() - Boot time initialization.  Ensure that it is called  *	after devfs has been initialized. * * For now this routine is being called out of devfs/base.c.  Actually  * Not a bad place to be .. * */#ifdef MODULEint init_module (void)#elseint __init init_hcl(void)#endif{	extern void string_table_init(struct string_table *);	extern struct string_table label_string_table;	int rv = 0;#if defined(CONFIG_HCL_DEBUG) && !defined(MODULE)	printk ("\n%s: v%s Colin Ngam (cngam@sgi.com)\n",		HCL_NAME, HCL_VERSION);	hcl_debug = hcl_debug_init;	printk ("%s: hcl_debug: 0x%0x\n", HCL_NAME, hcl_debug);	printk ("\n%s: boot_options: 0x%0x\n", HCL_NAME, boot_options);#endif	spin_lock_init(&hcl_spinlock);	/*	 * Create the hwgraph_root on devfs.	 */	rv = hwgraph_path_add(NULL, "hw", &hwgraph_root);	if (rv)		printk ("WARNING: init_hcl: Failed to create hwgraph_root. Error = %d.\n", rv);	/*	 * Create the hcl driver to support inventory entry manipulations.	 * By default, it is expected that devfs is mounted on /dev.	 *	 */	hcl_handle = hwgraph_register(hwgraph_root, ".hcl",			0, DEVFS_FL_AUTO_DEVNUM,			0, 0,			S_IFCHR | S_IRUSR | S_IWUSR | S_IRGRP, 0, 0,			&hcl_fops, NULL);	if (hcl_handle == NULL) {		panic("HCL: Unable to create HCL Driver in init_hcl().\n");		return(0);	}	/*	 * Initialize the HCL string table.	 */	string_table_init(&label_string_table);	/*	 * Create the directory that links Linux bus numbers to our Xwidget.	 */	rv = hwgraph_path_add(hwgraph_root, "linux/busnum", &linux_busnum);	if (linux_busnum == NULL) {		panic("HCL: Unable to create hw/linux/busnum\n");		return(0);	}	return(0);}/* * hcl_setup() - Process boot time parameters if given. *	"hcl=" *	This routine gets called only if "hcl=" is given in the  *	boot line and before init_hcl(). * *	We currently do not have any boot options .. when we do,  *	functionalities can be added here. * */static int __init hcl_setup(char *str){    while ( (*str != '\0') && !isspace (*str) )    {#ifdef CONFIG_HCL_DEBUG        if (strncmp (str, "all", 3) == 0) {            hcl_debug_init |= HCL_DEBUG_ALL;            str += 3;        } else         	return 0;#endif        if (*str != ',') return 0;        ++str;    }    return 1;}__setup("hcl=", hcl_setup);/* * Set device specific "fast information". * */voidhwgraph_fastinfo_set(devfs_handle_t de, arbitrary_info_t fastinfo){	if (hcl_debug) {		printk("HCL: hwgraph_fastinfo_set handle 0x%p fastinfo %ld\n",			de, fastinfo);	}			labelcl_info_replace_IDX(de, HWGRAPH_FASTINFO, fastinfo, NULL);}/* * Get device specific "fast information". * */arbitrary_info_thwgraph_fastinfo_get(devfs_handle_t de){	arbitrary_info_t fastinfo;	int rv;	if (!de) {		printk(KERN_WARNING "HCL: hwgraph_fastinfo_get handle given is NULL.\n");		return(-1);	}	rv = labelcl_info_get_IDX(de, HWGRAPH_FASTINFO, &fastinfo);	if (rv == 0)		return(fastinfo);	return(0);}/* * hwgraph_connectpt_set - Sets the connect point handle in de to the  *	given connect_de handle.  By default, the connect point of the  *	devfs node is the parent.  This effectively changes this assumption. */inthwgraph_connectpt_set(devfs_handle_t de, devfs_handle_t connect_de){	int rv;	if (!de)		return(-1);	rv = labelcl_info_connectpt_set(de, connect_de);	return(rv);}/* * hwgraph_connectpt_get: Returns the entry's connect point  in the devfs  *	tree. */devfs_handle_thwgraph_connectpt_get(devfs_handle_t de){	int rv;	arbitrary_info_t info;	devfs_handle_t connect;	rv = labelcl_info_get_IDX(de, HWGRAPH_CONNECTPT, &info);	if (rv != 0) {		return(NULL);	}	connect = (devfs_handle_t)info;	return(connect);}/* * hwgraph_mk_dir - Creates a directory entry with devfs. *	Note that a directory entry in devfs can have children  *	but it cannot be a char|block special file. */devfs_handle_thwgraph_mk_dir(devfs_handle_t de, const char *name,                unsigned int namelen, void *info){	int rv;	labelcl_info_t *labelcl_info = NULL;	devfs_handle_t new_devfs_handle = NULL;	devfs_handle_t parent = NULL;	/*	 * Create the device info structure for hwgraph compatiblity support.	 */	labelcl_info = labelcl_info_create();	if (!labelcl_info)		return(NULL);	/*	 * Create a devfs entry.	 */	new_devfs_handle = devfs_mk_dir(de, name, (void *)labelcl_info);	if (!new_devfs_handle) {		labelcl_info_destroy(labelcl_info);		return(NULL);	}	/*	 * Get the parent handle.	 */	parent = devfs_get_parent (new_devfs_handle);	/*	 * To provide the same semantics as the hwgraph, set the connect point.	 */	rv = hwgraph_connectpt_set(new_devfs_handle, parent);	if (!rv) {		/*		 * We need to clean up!		 */	}	/*	 * If the caller provides a private data pointer, save it in the 	 * labelcl info structure(fastinfo).  This can be retrieved via	 * hwgraph_fastinfo_get()	 */	if (info)		hwgraph_fastinfo_set(new_devfs_handle, (arbitrary_info_t)info);			return(new_devfs_handle);}/* * hwgraph_vertex_create - Create a vertex by giving it a temp name. *//* * hwgraph_path_add - Create a directory node with the given path starting  * from the given devfs_handle_t. */extern char * dev_to_name(devfs_handle_t, char *, uint);inthwgraph_path_add(devfs_handle_t  fromv,		 char *path,		 devfs_handle_t *new_de){	unsigned int	namelen = strlen(path);	int		rv;	/*	 * We need to handle the case when fromv is NULL ..	 * in this case we need to create the path from the 	 * hwgraph root!	 */	if (fromv == NULL)		fromv = hwgraph_root;	/*	 * check the entry doesn't already exist, if it does	 * then we simply want new_de to point to it (otherwise	 * we'll overwrite the existing labelcl_info struct)	 */	rv = hwgraph_edge_get(fromv, path, new_de);	if (rv)	{	/* couldn't find entry so we create it */		*new_de = hwgraph_mk_dir(fromv, path, namelen, NULL);		if (new_de == NULL)			return(-1);		else			return(0);	}	else  		return(0);}/* * hwgraph_register  - Creates a file entry with devfs. *	Note that a file entry cannot have children .. it is like a  *	char|block special vertex in hwgraph. */devfs_handle_thwgraph_register(devfs_handle_t de, const char *name,                unsigned int namelen, unsigned int flags, 		unsigned int major, unsigned int minor,                umode_t mode, uid_t uid, gid_t gid, 		struct file_operations *fops,                void *info){	int rv;        void *labelcl_info = NULL;        devfs_handle_t new_devfs_handle = NULL;	devfs_handle_t parent = NULL;        /*         * Create the labelcl info structure for hwgraph compatiblity support.         */        labelcl_info = labelcl_info_create();        if (!labelcl_info)                return(NULL);        /*         * Create a devfs entry.         */        new_devfs_handle = devfs_register(de, name, flags, major,				minor, mode, fops, labelcl_info);        if (!new_devfs_handle) {                labelcl_info_destroy((labelcl_info_t *)labelcl_info);                return(NULL);        }	/*	 * Get the parent handle.	 */	if (de == NULL)		parent = devfs_get_parent (new_devfs_handle);	else		parent = de;			/*	 * To provide the same semantics as the hwgraph, set the connect point.	 */	rv = hwgraph_connectpt_set(new_devfs_handle, parent);	if (rv) {		/*		 * We need to clean up!		 */		printk(KERN_WARNING "HCL: Unable to set the connect point to it's parent 0x%p\n",			new_devfs_handle);	}        /*         * If the caller provides a private data pointer, save it in the          * labelcl info structure(fastinfo).  This can be retrieved via         * hwgraph_fastinfo_get()         */        if (info)                hwgraph_fastinfo_set(new_devfs_handle, (arbitrary_info_t)info);        return(new_devfs_handle);}/* * hwgraph_mk_symlink - Create a symbolic link. */inthwgraph_mk_symlink(devfs_handle_t de, const char *name, unsigned int namelen,                unsigned int flags, const char *link, unsigned int linklen, 		devfs_handle_t *handle, void *info){	void *labelcl_info = NULL;	int status = 0;	devfs_handle_t new_devfs_handle = NULL;	/*	 * Create the labelcl info structure for hwgraph compatiblity support.	 */	labelcl_info = labelcl_info_create();	if (!labelcl_info)		return(-1);	/*	 * Create a symbolic link devfs entry.	 */	status = devfs_mk_symlink(de, name, flags, link,				&new_devfs_handle, labelcl_info);	if ( (!new_devfs_handle) || (!status) ){		labelcl_info_destroy((labelcl_info_t *)labelcl_info);		return(-1);	}	/*	 * If the caller provides a private data pointer, save it in the 	 * labelcl info structure(fastinfo).  This can be retrieved via	 * hwgraph_fastinfo_get()	 */

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
免费在线一区观看| 亚洲成a人片综合在线| av电影在线观看一区| 奇米色一区二区| 蜜臀av性久久久久av蜜臀妖精| 亚洲精品高清视频在线观看| 亚洲欧美日韩在线| 午夜国产精品一区| 国产偷国产偷亚洲高清人白洁 | 久久蜜桃av一区精品变态类天堂| 9191国产精品| 国产精品久久精品日日| 久久色成人在线| 国产精品伦一区二区三级视频| 99热99精品| 欧洲国产伦久久久久久久| 亚洲v日本v欧美v久久精品| 91麻豆蜜桃一区二区三区| 婷婷国产v国产偷v亚洲高清| 三级久久三级久久久| 免费xxxx性欧美18vr| 国产99精品国产| 成人99免费视频| 欧美性感一区二区三区| 日韩欧美亚洲一区二区| 亚洲国产高清不卡| 99这里只有精品| 欧美优质美女网站| 日本成人在线不卡视频| 国产麻豆午夜三级精品| 国产精品1区二区.| 91片黄在线观看| 久久精品日产第一区二区三区高清版| 亚洲精品网站在线观看| 亚洲伦理在线精品| 国产乱码精品一区二区三区忘忧草 | 国产亚洲午夜高清国产拍精品| 日本国产一区二区| 91精品麻豆日日躁夜夜躁| 亚洲欧美视频一区| 国产aⅴ综合色| 久久久久九九视频| 国内精品视频一区二区三区八戒| 欧美一区二区在线免费观看| 亚洲免费在线看| 在线精品视频免费播放| 日本视频中文字幕一区二区三区| 欧美日韩精品一二三区| 国产精品夜夜嗨| 日韩一区二区三区电影在线观看| 亚洲国产精品一区二区尤物区| 亚洲成人手机在线| 97久久人人超碰| 中文字幕色av一区二区三区| 欧美精选午夜久久久乱码6080| 欧美丰满少妇xxxxx高潮对白| 懂色中文一区二区在线播放| 免费精品视频在线| 色久优优欧美色久优优| 久久精品人人做人人综合| 日韩高清不卡一区二区| 欧美精品一二三| 精品国产乱码久久久久久夜甘婷婷 | 中日韩av电影| 91丝袜美女网| 韩国成人福利片在线播放| 琪琪久久久久日韩精品| 欧美成人女星排名| 99精品久久99久久久久| 激情丁香综合五月| 亚洲国产一区二区在线播放| 精品免费国产二区三区| 亚洲精品免费看| 国产不卡一区视频| 日本亚洲天堂网| 欧美日韩1区2区| 专区另类欧美日韩| 欧美猛男超大videosgay| 亚洲一区国产视频| 亚洲一区视频在线| 日本精品视频一区二区三区| 中文字幕一区二区三中文字幕| 国产99久久久久久免费看农村| 26uuu成人网一区二区三区| 精品一区二区国语对白| 日韩精品中文字幕一区二区三区| 蜜桃久久av一区| 精品久久久久久无| 国模冰冰炮一区二区| 久久色.com| 91美女片黄在线观看| 一区二区在线观看视频在线观看| 在线免费亚洲电影| 奇米一区二区三区| 国产精品丝袜在线| 91视频在线看| 亚洲午夜在线视频| 日韩国产一二三区| 精品制服美女丁香| 97久久超碰国产精品| 久久人人爽爽爽人久久久| 国内久久精品视频| 久久精子c满五个校花| 国产一区二区调教| 日本一区二区三区电影| 成人综合在线观看| 中文字幕人成不卡一区| 高清国产一区二区| 大胆欧美人体老妇| 国产精品欧美久久久久无广告| 91小视频在线免费看| 日本色综合中文字幕| 国产精品女人毛片| 在线播放日韩导航| 在线观看欧美黄色| 久久99精品久久久久久| 国产精品传媒视频| 欧美高清视频在线高清观看mv色露露十八 | 中文字幕中文字幕一区二区| 欧美久久久影院| 成人h动漫精品一区二区| 蜜臀va亚洲va欧美va天堂 | 99精品久久久久久| 精品在线亚洲视频| 亚洲一区二区在线播放相泽| 久久久久亚洲蜜桃| 日韩一区二区在线看| 91免费在线播放| 国产成人精品免费视频网站| 六月婷婷色综合| 午夜精品福利视频网站| 久久精品国产亚洲高清剧情介绍| 久久久不卡影院| 国内精品久久久久影院薰衣草| 国产一本一道久久香蕉| 色婷婷综合五月| 亚洲va欧美va人人爽| 91农村精品一区二区在线| 免费日本视频一区| 99精品视频中文字幕| 国产精品乱码人人做人人爱| 老司机精品视频导航| 久久成人久久爱| 亚洲第一福利视频在线| 国产精品视频第一区| 岛国精品一区二区| 国产福利91精品一区| 日韩一区二区三区视频| 久久久99精品久久| 色婷婷精品久久二区二区蜜臂av | 婷婷国产v国产偷v亚洲高清| 日韩国产精品久久| 国产精品无码永久免费888| 精品动漫一区二区三区在线观看| 奇米影视一区二区三区小说| 天堂资源在线中文精品| 亚洲福利一区二区三区| 国产资源精品在线观看| 在线精品视频小说1| 在线观看日产精品| 懂色av噜噜一区二区三区av| 国产日产欧美一区二区视频| 色av综合在线| 久久国产福利国产秒拍| 综合欧美一区二区三区| 欧美美女bb生活片| 91久久精品一区二区三| 欧美猛男男办公室激情| 秋霞电影网一区二区| 国产欧美一二三区| 欧美天堂一区二区三区| 国产九色sp调教91| 国产精品黄色在线观看| 日韩欧美精品在线视频| 粉嫩嫩av羞羞动漫久久久| 日韩成人免费电影| 国产日韩欧美高清在线| 欧美区视频在线观看| 97精品久久久午夜一区二区三区| 亚洲国产精品av| 色八戒一区二区三区| 欧美日韩国产bt| 中文字幕av一区二区三区免费看 | 亚洲一区二区三区四区五区中文 | 欧美视频一区二区在线观看| 丁香啪啪综合成人亚洲小说 | 久久久久综合网| 欧美色倩网站大全免费| 国产成人免费高清| 不卡在线视频中文字幕| 欧美色综合影院| 欧美zozo另类异族| 亚洲摸摸操操av| 麻豆视频一区二区| 日韩黄色在线观看| 国精产品一区一区三区mba视频| 91精品国产综合久久婷婷香蕉| 久久欧美一区二区| 亚洲一区二区三区自拍| 国产精品白丝jk黑袜喷水|