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

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

?? pciba.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/module.h>#include <asm/sn/sgi.h>#include <asm/sn/addrs.h>#include <asm/sn/arch.h>#include <asm/sn/iograph.h>#include <asm/sn/invent.h>#include <asm/sn/hcl.h>#include <asm/sn/labelcl.h>#include <asm/sn/xtalk/xwidget.h>#include <asm/sn/pci/bridge.h>#include <asm/sn/pci/pciio.h>#include <asm/sn/pci/pcibr.h>#include <asm/sn/pci/pcibr_private.h>#include <asm/sn/pci/pci_defs.h>#include <asm/sn/prio.h>#include <asm/sn/ioerror_handling.h>#include <asm/sn/xtalk/xbow.h>#include <asm/sn/ioc3.h>#include <asm/sn/eeprom.h>#include <asm/sn/sn1/bedrock.h>#include <asm/sn/sn_private.h>#if defined(CONFIG_SGI_IP35) || defined(CONFIG_IA64_SGI_SN1) || defined(CONFIG_IA64_GENERIC)#include <asm/sn/sn1/hubio.h>#include <asm/sn/sn1/hubio_next.h>#endif#define copyin(_a, _b, _c)	copy_from_user(_b, _a, _c)#ifndef	DEBUG_PCIBA#define	DEBUG_PCIBA		0#endif/* v_mapphys does not percolate page offset back. */#define	PCIBA_ALIGN_CHECK	1#include <asm/sn/pci/pciba.h>/* grab an unused space code for "User DMA" space */#ifndef	PCIBA_SPACE_UDMA#define	PCIBA_SPACE_UDMA	(14)#endif#if DEBUG_REFCTextern int		hwgraph_vertex_refct(vertex_hdl_t);#endifextern int		pci_user_dma_max_pages;#define NEW(ptr)	(ptr = kmem_zalloc(sizeof (*(ptr)), KM_SLEEP))#define DEL(ptr)	(kfree(ptr))/* Oops -- no standard "pci address" type! */typedef uint64_t        pciaddr_t;/* ================================================================ *            driver types */typedef struct pciba_slot_s *pciba_slot_t;typedef struct pciba_comm_s *pciba_comm_t;typedef struct pciba_soft_s *pciba_soft_t;typedef struct pciba_map_s *pciba_map_t, **pciba_map_h;typedef struct pciba_dma_s *pciba_dma_t, **pciba_dma_h;typedef struct pciba_bus_s *pciba_bus_t;#define	TRACKED_SPACES	16struct pciba_comm_s {    devfs_handle_t	    conn;    pciba_bus_t             bus;    int			    refct;    pciba_soft_t	    soft[TRACKED_SPACES][2];    struct semaphore        lock;    pciba_dma_t             dmap;};/* pciba_soft: device_info() for all openables */struct pciba_soft_s {    pciba_comm_t	    comm;    devfs_handle_t          vhdl;    int			    refct;    pciio_space_t           space;    size_t                  size;    pciio_space_t           iomem;    pciaddr_t               base;    unsigned		    flags;};#define	pciba_soft_get(v)	(pciba_soft_t)hwgraph_fastinfo_get(v)#define	pciba_soft_set(v,i)	hwgraph_fastinfo_set(v,(arbitrary_info_t)(i))#define	pciba_soft_lock(soft)	down(&soft->comm->lock)#define	pciba_soft_unlock(soft)	up(&soft->comm->lock)/* pciba_map: data describing a mapping. * (ie. a user mmap request) */struct pciba_map_s {    pciba_map_t             next;#ifdef LATER    uthread_t              *uthread;#endif    __psunsigned_t          handle;    uvaddr_t                uvaddr;    size_t                  size;    pciio_piomap_t          map;    pciio_space_t           space;    pciaddr_t               base;    unsigned		    flags;};/* pciba_dma: data describing a DMA mapping. */struct pciba_dma_s {    pciba_dma_t             next;    iopaddr_t               paddr;	/* starting phys addr */    caddr_t                 kaddr;	/* starting kern addr */    pciio_dmamap_t          map;	/* mapping resources (ugh!) */    pciaddr_t               daddr;	/* starting pci addr */    size_t                  pages;	/* size of block in pages */    size_t                  bytes;	/* size of block in bytes */    __psunsigned_t          handle;	/* mapping handle */};/* pciba_bus: common bus info for all openables * descended from the same master vertex. */struct pciba_bus_s {    struct semaphore        lock;    pciba_map_t             maps;	/* stack of mappings */    int			    refct;};#define	pciba_bus_lock(bus)	down(&bus->lock)#define	pciba_bus_unlock(bus)	up(&bus->lock)typedef union ioctl_arg_buffer_u {    char                    data[IOCPARM_MASK + 1];    uint8_t                 uc;    uint16_t                us;    uint32_t                ui;    uint64_t                ud;    caddr_t                 ca;#if ULI    struct uliargs          uli;    struct uliargs32	    uli32;#endif} ioctl_arg_buffer_t;/* ================================================================ *            driver variables */char                   *pciba_mversion = "mload version 7.0";int                     pciba_devflag = 0x1 |                                        0x200 |                                        0x400;/* this counts the reasons why we can not * currently unload this driver. */atomic_t                pciba_prevent_unload = ATOMIC_INIT(0);#if DEBUG_PCIBAstatic struct reg_values space_v[] ={    {PCIIO_SPACE_NONE, "none"},    {PCIIO_SPACE_ROM, "ROM"},    {PCIIO_SPACE_IO, "I/O"},    {PCIIO_SPACE_MEM, "MEM"},    {PCIIO_SPACE_MEM32, "MEM(32)"},    {PCIIO_SPACE_MEM64, "MEM(64)"},    {PCIIO_SPACE_CFG, "CFG"},    {PCIIO_SPACE_WIN(0), "WIN(0)"},    {PCIIO_SPACE_WIN(1), "WIN(1)"},    {PCIIO_SPACE_WIN(2), "WIN(2)"},    {PCIIO_SPACE_WIN(3), "WIN(3)"},    {PCIIO_SPACE_WIN(4), "WIN(4)"},    {PCIIO_SPACE_WIN(5), "WIN(5)"},    {PCIBA_SPACE_UDMA, "UDMA"},    {PCIIO_SPACE_BAD, "BAD"},    {0}};static struct reg_desc  space_desc[] ={    {0xFF, 0, "space", 0, space_v},    {0}};#endifchar                    pciba_edge_lbl_base[] = "base";char                    pciba_edge_lbl_cfg[] = "config";char                    pciba_edge_lbl_dma[] = "dma";char                    pciba_edge_lbl_intr[] = "intr";char                    pciba_edge_lbl_io[] = "io";char                    pciba_edge_lbl_mem[] = "mem";char                    pciba_edge_lbl_rom[] = "rom";char                   *pciba_edge_lbl_win[6] ={"0", "1", "2", "3", "4", "5"};#define	PCIBA_EDGE_LBL_BASE	pciba_edge_lbl_base#define	PCIBA_EDGE_LBL_CFG	pciba_edge_lbl_cfg#define	PCIBA_EDGE_LBL_DMA	pciba_edge_lbl_dma#define	PCIBA_EDGE_LBL_INTR	pciba_edge_lbl_intr#define	PCIBA_EDGE_LBL_IO	pciba_edge_lbl_io#define	PCIBA_EDGE_LBL_MEM	pciba_edge_lbl_mem#define	PCIBA_EDGE_LBL_ROM	pciba_edge_lbl_rom#define	PCIBA_EDGE_LBL_WIN(n)	pciba_edge_lbl_win[n]#define	PCIBA_EDGE_LBL_FLIP	pciba_edge_lbl_flipstatic char             pciba_info_lbl_bus[] = "pciba_bus";#define	PCIBA_INFO_LBL_BUS	pciba_info_lbl_busstruct file_operations pciba_fops = {	owner:	THIS_MODULE,	llseek: NULL,	read: NULL,	write: NULL,	readdir: NULL,	poll: NULL,	ioctl: NULL,	mmap: NULL,	open: NULL,	flush: NULL,	release: NULL,	fsync: NULL,	fasync: NULL,	lock: NULL,	readv: NULL,	writev: NULL};	/* ================================================================ *            function table of contents */void                    pciba_init(void);int                     pciba_attach(devfs_handle_t);static void		pciba_sub_attach(pciba_comm_t,					 pciio_space_t, pciio_space_t, pciaddr_t,					 devfs_handle_t, devfs_handle_t, char *);static pciba_bus_t      pciba_find_bus(devfs_handle_t, int);#ifdef LATERstatic void             pciba_map_push(pciba_bus_t, pciba_map_t);static pciba_map_t      pciba_map_pop_hdl(pciba_bus_t, __psunsigned_t);static void             pciba_sub_detach(devfs_handle_t, char *);static pciio_iter_f     pciba_unload_me;#endifint                     pciba_unload(void);int                     pciba_unreg(void);int                     pciba_detach(devfs_handle_t);int                     pciba_open(dev_t *, int, int, struct cred *);int                     pciba_close(dev_t);int                     pciba_read(dev_t, cred_t *);int                     pciba_write(dev_t, cred_t *);int                     pciba_ioctl(dev_t, int, void *, int, cred_t *, int *);int                     pciba_map(dev_t, vhandl_t *, off_t, size_t, uint32_t);int                     pciba_unmap(dev_t, vhandl_t *);#if ULIvoid                    pciba_clearuli(struct uli *);static intr_func_f      pciba_intr;#endif /* Undef as it gets implemented *//* ================================================================ *            driver load, register, and setup */voidpciba_init(void){	/*	 * What do we need to do here?	 */#if DEBUG_PCIBA    printk("pciba_init()\n");#endif}#ifdef LATER#if HWG_PERF_CHECK && IP30 && !DEBUGvoidpciba_timeout(void *arg1, void *arg2){    struct semaphore       *semap = (sema_t *) arg1;    unsigned long          *cvalp = (unsigned long *) arg2;    if (cvalp)	cvalp[0] = RAW_COUNT();    if (semap)	up(semap);}volatile unsigned long  cNval[1];struct semaphore        tsema;voidpciba_timeout_test(void){    unsigned long           c0val, cval;    toid_t                  tid;    extern void             hwg_hprint(unsigned long, char *);    sema_init(&tsema, 0);    cNval[0] = 0;    c0val = RAW_COUNT();    tid = timeout((void (*)()) pciba_timeout, (void *) 0, 1, (void *) cNval);    DELAY(1000000);    cval = cNval[0];    if (cval == 0) {	untimeout(tid);	PRINT_ALERT("pciba: one-tick timeout did not happen in a second\n");	return;    }    cval = cval - c0val;    hwg_hprint(cval, "timeout(1)");    cNval[0] = 0;    c0val = RAW_COUNT();    tid = timeout((void (*)()) pciba_timeout, (void *) &tsema, 2, (void *) cNval);    /* FIXME : this probably needs to be down_interruptible() */    if (down(&tsema) < 0) {	/* wait for the pciba_timeout */	untimeout(tid);	PRINT_WARNING("pciba: timeout(2) time check aborted\n");	return;    }    cval = cNval[0];    if (cval == 0) {	untimeout(tid);	PRINT_WARNING("pciba: timeout(2) time not logged\n");	return;    }    cval = cval - c0val;    hwg_hprint(cval, "timeout(2)");    cNval[0] = 0;    c0val = RAW_COUNT();    tid = timeout((void (*)()) pciba_timeout, (void *) &tsema, HZ, (void *) cNval);    /* FIXME : this probably needs to be down_interruptible() */    if (down(&tsema) < 0) {	/* wait for the pciba_timeout */	untimeout(tid);	PRINT_WARNING("pciba: timeout(HZ) time check aborted\n");	return;    }    cval = cNval[0];    if (cval == 0) {	untimeout(tid);	PRINT_WARNING("pciba: timeout(HZ) time not logged\n");	return;    }    cval = cval - c0val;    hwg_hprint(cval, "timeout(HZ)");    printk("verifying untimeout() cancells ...\n");    cNval[0] = 0;    tid = timeout((void (*)()) pciba_timeout, (void *) 0, 2, (void *) cNval);    untimeout(tid);    DELAY(1000000);    cval = cNval[0];    if (cval != 0) {	PRINT_ALERT("pciba: unable to cancel two-tick timeout\n");	cval -= c0val;	hwg_hprint(cval, "CANCELLED timeout(2)");    }}#endifintpciba_reg(void){#if DEBUG_PCIBA    printk("pciba_reg()\n");#endif    pciio_driver_register(-1, -1, "pciba_", 0);#if HWG_PERF_CHECK && IP30 && !DEBUG    printk("%s %d\n", __FUNCTION__, __LINE__);pciba_timeout_test();#endif#if DEBUG_REFCT    {	char	       *cname = "pciba";	char	       *dname = "ptv";	char           *cpath0 = "node/xtalk/15";	char           *uname0 = "0";	char           *cpath1 = "node/xtalk/13";	char           *uname1 = "1";	devfs_handle_t conn;	devfs_handle_t conv;	devfs_handle_t vhdl;	int		ret;	printk("pciba refct tests:\n");#define	SHOWREF(vhdl,func)	printk("ref=%d\t%s\t(%d) %v\n", hwgraph_vertex_refct(vhdl), #func, vhdl, vhdl);	if (GRAPH_SUCCESS != (ret = hwgraph_path_add(hwgraph_root, cname, &conv)))	    printk("\tunable to create conv (ret=%d)\n", ret);	else {						SHOWREF(conv, hwgraph_path_add);	    if (GRAPH_SUCCESS != (ret = hwgraph_traverse(hwgraph_root, cpath0, &conn)))		printk("\tunable to find %s (ret=%d)\n", cpath0, ret);	    else {					SHOWREF(conn, hwgraph_traverse);		if (GRAPH_SUCCESS != (ret = hwgraph_char_device_add(conn, dname, "pciba_", &vhdl)))		    printk("unable to create %v/%s (ret=%d)\n", conn, dname, ret);		else {					SHOWREF(vhdl, hwgraph_char_device_add);		    hwgraph_chmod(vhdl, 0666);		SHOWREF(vhdl, hwgraph_chmod);

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精品免费视频.| 国产麻豆精品一区二区| 91在线你懂得| 91麻豆精品一区二区三区| 欧美日韩一区二区在线观看视频 | 成人综合在线观看| 日韩欧美www| 毛片av一区二区| 欧美日韩一区三区| 亚洲成人av福利| 97久久精品人人做人人爽| 国产欧美日韩亚州综合| 精品亚洲国产成人av制服丝袜 | 免费成人av在线播放| 91精品国产91热久久久做人人| 亚洲成人激情综合网| 丁香婷婷深情五月亚洲| 中文字幕精品一区二区精品绿巨人 | 成人欧美一区二区三区黑人麻豆| 成人一区二区三区视频在线观看 | 色综合久久久网| 亚洲乱码国产乱码精品精98午夜 | 久久精品视频网| 成人丝袜高跟foot| 亚洲欧美二区三区| 欧美揉bbbbb揉bbbbb| 美女网站色91| 日本一区二区视频在线| 成人福利电影精品一区二区在线观看 | 91丨porny丨首页| 亚洲午夜免费电影| 欧美性生活大片视频| 国产欧美日韩在线| 在线看日韩精品电影| 亚洲尤物视频在线| 欧美zozozo| 一本到不卡精品视频在线观看| 亚洲国产成人91porn| 欧美成人欧美edvon| heyzo一本久久综合| 亚洲国产一区二区视频| 欧美高清在线精品一区| 日本精品一区二区三区四区的功能| 亚洲成a人v欧美综合天堂下载 | 在线一区二区三区| 开心九九激情九九欧美日韩精美视频电影 | 国内精品免费**视频| 中文字幕乱码亚洲精品一区| 欧美性受xxxx| 蜜臀久久99精品久久久画质超高清| 久久综合久久久久88| 欧洲另类一二三四区| 国产精品69毛片高清亚洲| 亚洲成人动漫一区| 国产精品久久网站| 日韩欧美国产小视频| 一本久道中文字幕精品亚洲嫩| 免费观看在线色综合| 亚洲三级在线免费| 久久综合久久综合九色| 欧美精品在线视频| 成人午夜电影小说| 日本欧美在线看| 亚洲在线视频网站| 国产精品国产三级国产专播品爱网 | 91老师片黄在线观看| 精品在线播放午夜| 一区二区三区精品| 亚洲欧洲另类国产综合| 国产亚洲人成网站| 久久综合色8888| 欧美一级黄色录像| 欧美日韩国产影片| 色婷婷一区二区三区四区| 国产精品18久久久久久久久久久久| 最近中文字幕一区二区三区| 亚洲精品一区二区三区在线观看| 欧美日韩国产色站一区二区三区| 成人激情动漫在线观看| 国产精品一线二线三线| 久久精品久久久精品美女| 午夜影院久久久| 亚洲影院久久精品| 亚洲国产精品麻豆| 亚洲国产精品一区二区久久恐怖片| 中文字幕一区在线观看视频| 国产女主播一区| 国产日韩欧美一区二区三区乱码| 日韩一区二区三区精品视频| 91精品国产乱| 日韩午夜电影在线观看| 91麻豆精品国产91久久久久久久久 | 美女任你摸久久| 日韩专区欧美专区| 麻豆久久一区二区| 久久国产精品免费| 国产酒店精品激情| 高清在线不卡av| av在线播放一区二区三区| 91丝袜高跟美女视频| 国产激情视频一区二区三区欧美| 国产成人免费视频网站| www.欧美日韩| 欧美怡红院视频| 欧美久久久久久久久中文字幕| 欧美精品123区| 日韩一区二区三区三四区视频在线观看| 91 com成人网| 欧美电影免费提供在线观看| 欧美一区二区视频观看视频| 精品国产电影一区二区| 国产日韩欧美精品一区| 自拍偷拍欧美精品| 亚洲激情男女视频| 男女激情视频一区| 国产丶欧美丶日本不卡视频| 成人毛片在线观看| 日本道免费精品一区二区三区| 欧美专区日韩专区| 日韩欧美精品三级| 国产精品美女www爽爽爽| 亚洲欧美另类在线| 日本中文一区二区三区| 国产成人高清在线| 欧美在线一区二区| 日韩你懂的在线观看| 中文久久乱码一区二区| 亚洲一级二级在线| 国产麻豆精品一区二区| 在线免费观看不卡av| 精品免费视频.| 亚洲精品videosex极品| 久久精品99国产精品| 成人国产一区二区三区精品| 欧美日产在线观看| 国产精品乱码一区二区三区软件| 亚洲一区二区视频| 国产精品自拍毛片| 欧美亚洲自拍偷拍| 国产午夜精品久久久久久免费视| 一区二区三区色| 久久电影国产免费久久电影| 国产精品白丝av| 欧美嫩在线观看| 国产精品久久久久久久蜜臀| 日韩激情在线观看| 一本到高清视频免费精品| 精品国偷自产国产一区| 亚洲综合自拍偷拍| 在线国产亚洲欧美| 一区二区三区免费网站| 色婷婷综合久久久中文字幕| 中文字幕亚洲区| av在线不卡免费看| 亚洲人成精品久久久久| 99视频一区二区| 国产精品美女久久久久高潮| 成人涩涩免费视频| 国产精品毛片大码女人| 国产成人日日夜夜| 国产精品蜜臀av| 成人av资源站| 亚洲色图在线视频| 色婷婷av久久久久久久| 亚洲乱码国产乱码精品精可以看| 北条麻妃一区二区三区| 1024精品合集| 日本韩国欧美在线| 亚洲国产精品久久人人爱蜜臀| 欧美亚一区二区| 午夜精品一区二区三区电影天堂| 欧美性猛交xxxxxx富婆| 亚洲成av人片www| 欧美日韩亚洲综合| 日韩高清在线观看| 日韩欧美在线123| 国产一区二区毛片| 亚洲国产电影在线观看| 91视频com| 亚洲不卡在线观看| 欧美变态tickle挠乳网站| 国产综合成人久久大片91| 欧美韩日一区二区三区| 色域天天综合网| 蜜臀精品一区二区三区在线观看| 精品99久久久久久| 99九九99九九九视频精品| 亚洲一级在线观看| 2欧美一区二区三区在线观看视频| 国产美女主播视频一区| 中文字幕视频一区二区三区久| 欧美性猛片aaaaaaa做受| 卡一卡二国产精品| 自拍偷拍国产精品| 91精品国产色综合久久| 国产成人啪午夜精品网站男同| 亚洲精品欧美专区| 欧美大片一区二区三区| 99久久精品国产导航| 美女脱光内衣内裤视频久久网站|