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

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

?? hubspc.c

?? 根據添加了fs2410平臺的arch目錄
?? C
字號:
/* $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 *//* * hubspc.c - Hub Memory Space Management Driver * This driver implements the managers for the following * memory resources: * 1) reference counters */#include <linux/types.h>#include <linux/config.h>#include <linux/slab.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>#include <asm/sn/mem_refcnt.h>#include <asm/sn/agent.h>#include <asm/sn/addrs.h>#if defined(CONFIG_SGI_IP35) || defined(CONFIG_IA64_SGI_SN1) || defined(CONFIG_IA64_GENERIC)#include <asm/sn/sn1/ip27config.h>#include <asm/sn/sn1/hubdev.h>#include <asm/sn/ksys/elsc.h>#endif#include <asm/sn/hubspc.h>/* Uncomment the following line for tracing *//* #define HUBSPC_DEBUG 1 */int hubspc_devflag = D_MP;extern void *device_info_get(devfs_handle_t device);extern void device_info_set(devfs_handle_t device, void *info);/***********************************************************************//* CPU Prom Space 						       *//***********************************************************************/typedef struct cpuprom_info {	devfs_handle_t	prom_dev;	devfs_handle_t	nodevrtx;	struct	cpuprom_info *next;}cpuprom_info_t;static cpuprom_info_t	*cpuprom_head;static spinlock_t	cpuprom_spinlock;#define	PROM_LOCK()	mutex_spinlock(&cpuprom_spinlock)#define	PROM_UNLOCK(s)	mutex_spinunlock(&cpuprom_spinlock, (s))/* * Add prominfo to the linked list maintained. */voidprominfo_add(devfs_handle_t hub, devfs_handle_t prom){	cpuprom_info_t	*info;	unsigned long	s;	info = kmalloc(sizeof(cpuprom_info_t), GFP_KERNEL);	ASSERT(info);	info->prom_dev = prom;	info->nodevrtx = hub;	s = PROM_LOCK();	info->next = cpuprom_head;	cpuprom_head = info;	PROM_UNLOCK(s);}voidprominfo_del(devfs_handle_t prom){	unsigned long	s;	cpuprom_info_t	*info;	cpuprom_info_t	**prev;	s = PROM_LOCK();	prev = &cpuprom_head;	while ( (info = *prev) ) {		if (info->prom_dev == prom) {			*prev = info->next;			PROM_UNLOCK(s);			return;		}				prev = &info->next;	}	PROM_UNLOCK(s);	ASSERT(0);}devfs_handle_tprominfo_nodeget(devfs_handle_t prom){	unsigned long	s;	cpuprom_info_t	*info;	s = PROM_LOCK();	info = cpuprom_head;	while (info) {		if(info->prom_dev == prom) {			PROM_UNLOCK(s);			return info->nodevrtx;		}		info = info->next;	}	PROM_UNLOCK(s);	return 0;}#if defined(CONFIG_SGI_IP35) || defined(CONFIG_IA64_SGI_SN1) || defined(CONFIG_IA64_GENERIC)#define	SN_PROMVERSION		INV_IP35PROM#endif/* Add "detailed" labelled inventory information to the * prom vertex  */voidcpuprom_detailed_inventory_info_add(devfs_handle_t prom_dev,devfs_handle_t node){	invent_miscinfo_t 	*cpuprom_inventory_info;	extern invent_generic_t *klhwg_invent_alloc(cnodeid_t cnode, 						     int class, int size);	cnodeid_t		cnode = hubdev_cnodeid_get(node);	/* Allocate memory for the extra inventory information	 * for the  prom	 */	cpuprom_inventory_info = (invent_miscinfo_t *) 		klhwg_invent_alloc(cnode, INV_PROM, sizeof(invent_miscinfo_t));	ASSERT(cpuprom_inventory_info);	/* Set the enabled flag so that the hinv interprets this	 * information	 */	cpuprom_inventory_info->im_gen.ig_flag = INVENT_ENABLED;	cpuprom_inventory_info->im_type = SN_PROMVERSION;	/* Store prom revision into inventory information */	cpuprom_inventory_info->im_rev = IP27CONFIG.pvers_rev;	cpuprom_inventory_info->im_version = IP27CONFIG.pvers_vers;	/* Store this info as labelled information hanging off the	 * prom device vertex	 */	hwgraph_info_add_LBL(prom_dev, INFO_LBL_DETAIL_INVENT, 			     (arbitrary_info_t) cpuprom_inventory_info);	/* Export this information so that user programs can get to	 * this by using attr_get()	 */        hwgraph_info_export_LBL(prom_dev, INFO_LBL_DETAIL_INVENT,				sizeof(invent_miscinfo_t));}intcpuprom_attach(devfs_handle_t node){        devfs_handle_t prom_dev;        hwgraph_char_device_add(node, EDGE_LBL_PROM, "hubspc_", &prom_dev);#ifdef	HUBSPC_DEBUG	printf("hubspc: prom_attach hub: 0x%x prom: 0x%x\n", node, prom_dev);#endif	/* HUBSPC_DEBUG */	device_inventory_add(prom_dev, INV_PROM, SN_PROMVERSION,				(major_t)0, (minor_t)0, 0);	/* Add additional inventory info about the cpu prom like	 * revision & version numbers etc.	 */	cpuprom_detailed_inventory_info_add(prom_dev,node);        device_info_set(prom_dev, (void*)(ulong)HUBSPC_PROM);	prominfo_add(node, prom_dev);        return (0);}#if defined(CONFIG_SGI_IP35) || defined(CONFIG_IA64_SGI_SN1) || defined(CONFIG_IA64_GENERIC)#define FPROM_CONFIG_ADDR	MD_JUNK_BUS_TIMING#define FPROM_ENABLE_MASK	MJT_FPROM_ENABLE_MASK#define FPROM_ENABLE_SHFT	MJT_FPROM_ENABLE_SHFT#define FPROM_SETUP_MASK	MJT_FPROM_SETUP_MASK#define FPROM_SETUP_SHFT	MJT_FPROM_SETUP_SHFT#endif/*ARGSUSED*/intcpuprom_map(devfs_handle_t dev, vhandl_t *vt, off_t addr, size_t len){        int 		errcode;	caddr_t 	kvaddr;	devfs_handle_t		node;	cnodeid_t 	cnode;	node = prominfo_nodeget(dev);	if (!node)		return EIO;        	kvaddr = hubdev_prombase_get(node);	cnode  = hubdev_cnodeid_get(node);#ifdef	HUBSPC_DEBUG	printf("cpuprom_map: hubnode %d kvaddr 0x%x\n", node, kvaddr);#endif	if (len > RBOOT_SIZE)		len = RBOOT_SIZE;        /*         * Map in the prom space         */	errcode = v_mapphys(vt, kvaddr, len);	if (errcode == 0 ){		/*		 * Set the MD configuration registers suitably.		 */		nasid_t		nasid;		uint64_t	value;		volatile hubreg_t	*regaddr;		nasid = COMPACT_TO_NASID_NODEID(cnode);		regaddr = REMOTE_HUB_ADDR(nasid, FPROM_CONFIG_ADDR);		value = HUB_L(regaddr);		value &= ~(FPROM_SETUP_MASK | FPROM_ENABLE_MASK);		{			value |= (((long)CONFIG_FPROM_SETUP << FPROM_SETUP_SHFT) | 				  ((long)CONFIG_FPROM_ENABLE << FPROM_ENABLE_SHFT));		}		HUB_S(regaddr, value);	}        return (errcode);}/*ARGSUSED*/intcpuprom_unmap(devfs_handle_t dev, vhandl_t *vt){        return 0;}/***********************************************************************//* Base Hub Space Driver                                               *//***********************************************************************/// extern int l1_attach( devfs_handle_t );/* * hubspc_init * Registration of the hubspc devices with the hub manager */voidhubspc_init(void){        /*         * Register with the hub manager         */        /* The reference counters */        hubdev_register(mem_refcnt_attach);	/* Prom space */	hubdev_register(cpuprom_attach);#if defined(CONFIG_SERIAL_SGI_L1_PROTOCOL)	/* L1 system controller link */	if ( !IS_RUNNING_ON_SIMULATOR() ) {		/* initialize the L1 link */		void l1_cons_init( l1sc_t *sc );		elsc_t *get_elsc(void);		l1_cons_init((l1sc_t *)get_elsc());	}#endif#ifdef	HUBSPC_DEBUG	printf("hubspc_init: Completed\n");#endif	/* HUBSPC_DEBUG */	/* Initialize spinlocks */	mutex_spinlock_init(&cpuprom_spinlock);}/* ARGSUSED */inthubspc_open(devfs_handle_t *devp, mode_t oflag, int otyp, cred_t *crp){        int errcode = 0;                switch ((hubspc_subdevice_t)(ulong)device_info_get(*devp)) {        case HUBSPC_REFCOUNTERS:                errcode = mem_refcnt_open(devp, oflag, otyp, crp);                break;        case HUBSPC_PROM:                break;        default:                errcode = ENODEV;        }#ifdef	HUBSPC_DEBUG	printf("hubspc_open: Completed open for type %d\n",               (hubspc_subdevice_t)(ulong)device_info_get(*devp));#endif	/* HUBSPC_DEBUG */        return (errcode);}/* ARGSUSED */inthubspc_close(devfs_handle_t dev, int oflag, int otyp, cred_t *crp){        int errcode = 0;                switch ((hubspc_subdevice_t)(ulong)device_info_get(dev)) {        case HUBSPC_REFCOUNTERS:                errcode = mem_refcnt_close(dev, oflag, otyp, crp);                break;        case HUBSPC_PROM:                break;        default:                errcode = ENODEV;        }#ifdef	HUBSPC_DEBUG	printf("hubspc_close: Completed close for type %d\n",               (hubspc_subdevice_t)(ulong)device_info_get(dev));#endif	/* HUBSPC_DEBUG */        return (errcode);}/* ARGSUSED */inthubspc_map(devfs_handle_t dev, vhandl_t *vt, off_t off, size_t len, uint prot){	/*REFERENCED*/        hubspc_subdevice_t subdevice;        int errcode = 0;	/* check validity of request */	if( len == 0 ) {		return ENXIO;        }        subdevice = (hubspc_subdevice_t)(ulong)device_info_get(dev);#ifdef	HUBSPC_DEBUG	printf("hubspc_map: subdevice: %d vaddr: 0x%x phyaddr: 0x%x len: 0x%x\n",	       subdevice, v_getaddr(vt), off, len);#endif /* HUBSPC_DEBUG */        switch ((hubspc_subdevice_t)(ulong)device_info_get(dev)) {        case HUBSPC_REFCOUNTERS:                errcode = mem_refcnt_mmap(dev, vt, off, len, prot);                break;        case HUBSPC_PROM:		errcode = cpuprom_map(dev, vt, off, len);                break;        default:                errcode = ENODEV;        }#ifdef	HUBSPC_DEBUG	printf("hubspc_map finished: spctype: %d vaddr: 0x%x len: 0x%x\n",	       (hubspc_subdevice_t)(ulong)device_info_get(dev), v_getaddr(vt), len);#endif /* HUBSPC_DEBUG */	return errcode;}/* ARGSUSED */inthubspc_unmap(devfs_handle_t dev, vhandl_t *vt){        int errcode = 0;                switch ((hubspc_subdevice_t)(ulong)device_info_get(dev)) {        case HUBSPC_REFCOUNTERS:                errcode = mem_refcnt_unmap(dev, vt);                break;        case HUBSPC_PROM:                errcode = cpuprom_unmap(dev, vt);                break;        default:                errcode = ENODEV;        }	return errcode;}/* ARGSUSED */inthubspc_ioctl(devfs_handle_t dev,             int cmd,             void *arg,             int mode,             cred_t *cred_p,             int *rvalp){        int errcode = 0;                switch ((hubspc_subdevice_t)(ulong)device_info_get(dev)) {        case HUBSPC_REFCOUNTERS:                errcode = mem_refcnt_ioctl(dev, cmd, arg, mode, cred_p, rvalp);                break;        case HUBSPC_PROM:                break;        default:                errcode = ENODEV;        }	return errcode;}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
免费高清在线一区| 在线精品视频免费播放| 色天天综合色天天久久| 日韩一级片在线观看| 亚洲卡通动漫在线| 国产99精品在线观看| 91精品国产综合久久福利软件| 亚洲欧洲99久久| 国产 欧美在线| 精品免费日韩av| 亚洲va国产va欧美va观看| www.日本不卡| 中文天堂在线一区| 国产一区欧美二区| 日韩一级片网站| 视频一区视频二区中文字幕| 91女厕偷拍女厕偷拍高清| 国产精品国产三级国产aⅴ入口| 国产精一品亚洲二区在线视频| 日韩午夜在线播放| 天天综合色天天| 欧美日韩黄色影视| 丝袜诱惑亚洲看片| 欧美高清一级片在线| 亚洲成人动漫精品| 欧美精品自拍偷拍动漫精品| 亚洲在线视频免费观看| 在线免费观看日本欧美| 一区二区日韩av| 欧洲av一区二区嗯嗯嗯啊| 亚洲激情在线播放| 欧美日韩一区三区| 五月天一区二区| 91精品国产一区二区三区香蕉| 日日摸夜夜添夜夜添国产精品| 欧美日韩国产综合久久| 天堂av在线一区| 欧美一区二区三区免费大片| 美女网站视频久久| 久久久国产精品麻豆| 成人美女视频在线观看| 中文字幕在线观看一区二区| 成人黄色软件下载| 一区二区三区免费观看| 欧美日本国产视频| 黄网站免费久久| 欧美激情中文字幕| 色八戒一区二区三区| 午夜私人影院久久久久| 日韩手机在线导航| 成人一级片在线观看| 亚洲精品亚洲人成人网| 91精品国产综合久久婷婷香蕉| 日本美女视频一区二区| 国产亚洲精品超碰| 色88888久久久久久影院按摩| 亚洲国产成人av好男人在线观看| 欧美福利视频导航| 东方欧美亚洲色图在线| 亚洲黄色录像片| 日韩精品一区二区三区视频播放| 成人综合婷婷国产精品久久| 一区二区三区免费观看| 久久嫩草精品久久久精品一| 97精品国产97久久久久久久久久久久| 一区二区欧美国产| 久久精品一级爱片| 欧美老女人第四色| 成人黄色777网| 美女视频免费一区| 亚洲精品乱码久久久久久日本蜜臀| 欧美肥妇bbw| 99免费精品在线| 美女www一区二区| 亚洲日穴在线视频| 久久久www成人免费毛片麻豆| 色8久久人人97超碰香蕉987| 国产麻豆9l精品三级站| 婷婷一区二区三区| 亚洲少妇30p| 国产网站一区二区| 日韩欧美一区二区视频| 欧洲中文字幕精品| 成人高清免费在线播放| 久久66热re国产| 性久久久久久久久| 亚洲精选视频在线| 国产精品伦一区二区三级视频| 日韩精品中午字幕| 欧美精品第1页| 在线中文字幕不卡| a亚洲天堂av| 高清成人免费视频| 国内精品免费在线观看| 男女男精品视频| 亚洲mv大片欧洲mv大片精品| 日韩伦理av电影| 国产人成亚洲第一网站在线播放 | 日韩一级免费观看| 色综合天天综合色综合av | 韩国v欧美v日本v亚洲v| 性做久久久久久久免费看| 亚洲欧美一区二区久久| 国产精品久久久久毛片软件| 国产亚洲制服色| 久久精品视频在线免费观看| 精品国产区一区| 欧美v日韩v国产v| 日韩一区二区在线免费观看| 在线播放欧美女士性生活| 欧美妇女性影城| 欧美一区二区三区在线电影| 欧美另类一区二区三区| 欧美美女激情18p| 911国产精品| 日韩欧美黄色影院| 久久久精品tv| 亚洲欧洲一区二区三区| 一区二区三区中文字幕电影| 亚洲主播在线观看| 日韩vs国产vs欧美| 国内精品伊人久久久久av影院| 国产精品一区在线观看乱码 | 久久精品久久99精品久久| 美女网站色91| 成人网在线播放| 色综合激情久久| 4438x成人网最大色成网站| 日韩精品一区二区三区四区视频| 精品三级在线观看| 亚洲国产成人自拍| 一区二区日韩av| 理论电影国产精品| 成人免费视频国产在线观看| 日本韩国一区二区| 欧美大胆一级视频| 成人欧美一区二区三区1314| 亚洲午夜激情网站| 精品在线亚洲视频| jizz一区二区| 欧美一区二区人人喊爽| 国产亚洲精品bt天堂精选| 一区二区在线看| 久久精品国产澳门| 91丨porny丨中文| 日韩免费在线观看| 亚洲视频资源在线| 久久99精品一区二区三区 | 一级日本不卡的影视| 免费观看一级特黄欧美大片| 成人午夜碰碰视频| 欧美一区二视频| ㊣最新国产の精品bt伙计久久| 日韩精品一二三| 成人ar影院免费观看视频| 欧美日韩在线精品一区二区三区激情 | 亚洲曰韩产成在线| 国产成人精品午夜视频免费| 欧美色综合网站| 国产精品看片你懂得| 蜜臀av性久久久久蜜臀aⅴ四虎| 不卡视频一二三四| 精品国产乱码91久久久久久网站| 亚洲伦理在线免费看| 国产不卡在线播放| 欧美一级xxx| 亚洲成av人片| 色综合久久久久综合99| 2021久久国产精品不只是精品| 一区二区三区不卡在线观看| 成人晚上爱看视频| 久久综合999| 美日韩黄色大片| 欧美高清你懂得| 亚洲一区二区三区四区在线| 成人午夜激情影院| 国产色91在线| 精品在线免费观看| 日韩欧美一级二级| 日韩av中文字幕一区二区三区 | 亚洲高清三级视频| 日本丶国产丶欧美色综合| 国产精品视频观看| 国产成人自拍高清视频在线免费播放| 欧美精品在线观看播放| 亚洲香蕉伊在人在线观| 在线精品视频一区二区三四| 成人免费在线播放视频| 粉嫩av一区二区三区粉嫩 | 国产电影精品久久禁18| 日韩免费在线观看| 美女一区二区久久| 欧美mv日韩mv亚洲| 免费观看成人鲁鲁鲁鲁鲁视频| 欧美亚洲综合网| 亚洲成av人影院在线观看网| 欧美性大战久久久久久久蜜臀| 亚洲一区二区偷拍精品| 精品视频一区二区三区免费| 午夜精品免费在线|