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

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

?? plx9052-26.c

?? 關于linux中pci驅動的一些代碼,實現了一些功能
?? C
?? 第 1 頁 / 共 2 頁
字號:
}static int plx9052_suspend(struct pcmcia_socket *sock){	plx9052_set_socket(sock, &dead_socket);	return 0;}static int plx9052_get_status(struct pcmcia_socket *sock, u_int *value){	struct plx9052_socket *socket =	    container_of(sock, struct plx9052_socket, socket);	*value = 0;	if (plx9052_card_present(socket))		*value |= SS_READY | SS_POWERON | SS_IOCARD | SS_DETECT;	return 0;}static int plx9052_get_socket(struct pcmcia_socket *sock,			      socket_state_t *state){	struct plx9052_socket *socket =	    container_of(sock, struct plx9052_socket, socket);	*state = socket->state;	return 0;}static int plx9052_set_socket(struct pcmcia_socket *sock,			      socket_state_t *state){	u32 reg;	struct plx9052_socket *socket =	    container_of(sock, struct plx9052_socket, socket);	if (state->flags & SS_RESET) {		plx9052_disable_irq(socket);		reg = plx9052_inl(socket, PLX_CNTRL);		reg |= PLX_CNTRL_RESET;		plx9052_outl(socket, PLX_CNTRL, reg);	} else {		reg = plx9052_inl(socket, PLX_CNTRL);		reg &= ~PLX_CNTRL_RESET;		plx9052_outl(socket, PLX_CNTRL, reg);		plx9052_enable_irq(socket);	}	socket->state = *state;	return 0;}static int plx9052_set_io_map(struct pcmcia_socket *sock,			      struct pccard_io_map *io){	struct plx9052_socket *socket =	    container_of(sock, struct plx9052_socket, socket);	unsigned int len;	/* requested length */	unsigned int len2;	/* length adjusted to power of two */	unsigned int start2;	/* start adjusted to power of two */	unsigned int split;	/* split point for unaligned windows */	unsigned int tmp;	int err;	/* Disable mapping before changing it */	plx9052_disable_areas(socket, 1, io->map);	if (!(io->flags & MAP_ACTIVE))		return 0;	len = io->stop + 1 - io->start;	if (len > PLX_IOWIN_MAX) {		printk(KERN_ERR		       "Requested I/O area 0x%x-0x%x is too long\n",		       io->start, io->stop);		return -EINVAL;	}	/* Simplest case - size aligned window */	if (!plx9052_align_check(io->start, len)) {		err =		    plx9052_program_area(socket, 1, io->map, io->start,					 len, 0, io->flags);		return err;	}	/* Find the highest address line that needs to be opened */	tmp = io->stop ^ io->start;	for (len2 = PLX_IOWIN_MIN; len2 <= PLX_IOWIN_MAX; len2 <<= 1) {		if (len2 > tmp)			break;	}	/* Split the requested window into at most two size-aligned windows */	start2 = ~(len2 - 1) & io->start;	split = start2 + (len2 >> 1);	if (plx9052_align_check(io->start, split - io->start) ||	    plx9052_align_check(split, io->stop + 1 - split)) {		printk(KERN_ERR		       "I/O area 0x%x-0x%x is too badly unaligned\n",		       io->start, io->stop);		return -ENOTSUPP;	}	err = plx9052_program_area(socket, 1, io->map, io->start,				   split - io->start, 0, io->flags);	if (err)		return err;	err = plx9052_program_area(socket, 1, io->map, split,				   io->stop + 1 - split, 0, io->flags);	return err;}static int plx9052_set_mem_map(struct pcmcia_socket *sock,			       struct pccard_mem_map *mem){	struct plx9052_socket *socket =	    container_of(sock, struct plx9052_socket, socket);	unsigned long len;	/* requested length */	int err;	/* Disable mapping before changing it */	plx9052_disable_areas(socket, 0, mem->map);	if (!(mem->flags & MAP_ACTIVE))		return 0;	/* Memory allocation in the first megabyte is problematic on	 * some machines with Intel chipset.  */	if (mem->sys_start < 0x100000)		return -EINVAL;	len = mem->sys_stop + 1 - mem->sys_start;	if (len > PLX_MEMWIN_MAX) {		printk(KERN_ERR "Memory map 0x%lx-0x%lx is too long\n",		       mem->sys_start, mem->sys_stop);		return -EINVAL;	}	if (plx9052_align_check(mem->sys_start, len)) {		printk(KERN_ERR		       "Memory map 0x%lx-0x%lx is not size-aligned\n",		       mem->sys_start, mem->sys_stop);		return -EINVAL;	}	err =	    plx9052_program_area(socket, 0, mem->map, mem->sys_start, len,				 mem->card_start | PLX_CIS_START,				 mem->flags);	return err;}static irqreturn_t plx9052_interrupt(int irq, void *dev_id,				     struct pt_regs *regs){	struct plx9052_socket *socket = (struct plx9052_socket *) dev_id;	if (!plx9052_irq_active(socket))		return IRQ_NONE;	if (!(socket->state.csc_mask & SS_DETECT))		return IRQ_HANDLED;	if (!plx9052_card_present(socket)) {		socket->event |= SS_DETECT;		plx9052_disable_irq(socket);		schedule_work(&socket->event_work);	}	return IRQ_HANDLED;}static struct pccard_operations plx9052_operations = {	.init = plx9052_init,	.suspend = plx9052_suspend,	.get_status = plx9052_get_status,	.get_socket = plx9052_get_socket,	.set_socket = plx9052_set_socket,	.set_io_map = plx9052_set_io_map,	.set_mem_map = plx9052_set_mem_map,};static int plx9052_probe(struct pci_dev *pdev,			 const struct pci_device_id *ent){	int err = 0;	struct plx9052_socket *socket = NULL;	socket = kmalloc(sizeof(struct plx9052_socket), GFP_KERNEL);	if (!socket)		return -ENOMEM;	memset(socket, 0, sizeof(struct plx9052_socket));	socket->pdev = pdev;	pci_set_drvdata(pdev, socket);	spin_lock_init(&socket->event_lock);	INIT_WORK(&socket->event_work, (void (*)(void *)) plx9052_event,		  socket);	err = pci_enable_device(pdev);	if (err)		return -EIO;	/* Resource 1 is control registers of PLX9052 */	socket->plxctl_addr = pci_resource_start(pdev, 1);	socket->plxctl_len = pci_resource_len(pdev, 1);	if (!request_region	    (socket->plxctl_addr, socket->plxctl_len, DEVICE_NAME)) {		printk(KERN_ERR "plx9052: I/O at 0x%x-0x%x busy\n",		       socket->plxctl_addr,		       socket->plxctl_addr + socket->plxctl_len - 1);		socket->plxctl_addr = 0;		err = -EBUSY;		goto fail;	}	/* Resource 2 is mapped to the PCMCIA memory space, starting with CIS */	socket->mem_phys = pci_resource_start(pdev, 2);	socket->mem_len = pci_resource_len(pdev, 2);	if (!request_mem_region	    (socket->mem_phys, socket->mem_len, DEVICE_NAME)) {		printk(KERN_ERR "plx9052: memory at 0x%lx-0x%lx busy\n",		       socket->mem_phys,		       socket->mem_phys + socket->mem_len - 1);		socket->mem_phys = 0;		err = -EBUSY;		goto fail;	}	socket->mem_virt = ioremap(socket->mem_phys, socket->mem_len);	if (!socket->mem_virt) {		printk(KERN_ERR		       "plx9052: cannot map memory at 0x%lx-0x%lx\n",		       socket->mem_phys,		       socket->mem_phys + socket->mem_len - 1);		err = -ENOMEM;		goto fail;	}	err =	    request_irq(pdev->irq, plx9052_interrupt, SA_SHIRQ,			DEVICE_NAME, socket);	if (err) {		printk(KERN_ERR "plx9052: cannot allocate IRQ %d.\n",		       pdev->irq);		err = -EBUSY;		goto fail;	}	socket->socket.ops = &plx9052_operations;	socket->socket.dev.dev = &pdev->dev;	socket->socket.driver_data = socket;	socket->socket.owner = THIS_MODULE;	socket->socket.features =	    SS_CAP_PCCARD | SS_CAP_MEM_ALIGN | SS_CAP_PAGE_REGS;	socket->socket.map_size = PLX_MEMWIN_MIN;	/* minimum window size */	socket->socket.pci_irq = pdev->irq;	pcmcia_register_socket(&socket->socket);	printk(KERN_INFO "plx9052: socket enabled, IRQ %d\n",	       socket->pdev->irq);	return 0;		/* succeeded */      fail:	plx9052_close(pdev);	return err;}static void plx9052_close(struct pci_dev *pdev){	struct plx9052_socket *socket = pci_get_drvdata(pdev);	pcmcia_unregister_socket(&socket->socket);	if (pdev->irq)		free_irq(pdev->irq, socket);	if (socket->plxctl_addr)		release_region(socket->plxctl_addr, socket->plxctl_len);	if (socket->mem_virt)		iounmap(socket->mem_virt);	if (socket->mem_phys)		release_mem_region(socket->mem_phys, socket->mem_len);	socket->pdev = NULL;	pci_disable_device(pdev);	pci_set_drvdata(pdev, NULL);	kfree(socket);}/* PCI ID table, from orinoco_plx.c */static struct pci_device_id plx9052_pci_id_table[] __devinitdata = {	{0x111a, 0x1023, PCI_ANY_ID, PCI_ANY_ID,},	/* Siemens SpeedStream SS1023 */	{0x1385, 0x4100, PCI_ANY_ID, PCI_ANY_ID,},	/* Netgear MA301 */	{0x15e8, 0x0130, PCI_ANY_ID, PCI_ANY_ID,},	/* Correga  - does this work? */	{0x1638, 0x1100, PCI_ANY_ID, PCI_ANY_ID,},	/* SMC EZConnect SMC2602W,							   Eumitcom PCI WL11000,							   Addtron AWA-100 */	{0x16ab, 0x1100, PCI_ANY_ID, PCI_ANY_ID,},	/* Global Sun Tech GL24110P */	{0x16ab, 0x1101, PCI_ANY_ID, PCI_ANY_ID,},	/* Reported working, but unknown */	{0x16ab, 0x1102, PCI_ANY_ID, PCI_ANY_ID,},	/* Linksys WDT11 */	{0x16ec, 0x3685, PCI_ANY_ID, PCI_ANY_ID,},	/* USR 2415 */	{0xec80, 0xec00, PCI_ANY_ID, PCI_ANY_ID,},	/* Belkin F5D6000 tested by							   Brendan W. McAdams <rit@jacked-in.org> */	{0x10b7, 0x7770, PCI_ANY_ID, PCI_ANY_ID,},	/* 3Com AirConnect PCI tested by							   Damien Persohn <damien@persohn.net> */	{0,},};MODULE_DEVICE_TABLE(pci, plx9052_pci_id_table);static int plx9052_socket_suspend(struct pci_dev *pdev, u32 state){	return pcmcia_socket_dev_suspend(&pdev->dev, state);}static int plx9052_socket_resume(struct pci_dev *pdev){	return pcmcia_socket_dev_resume(&pdev->dev);}static struct pci_driver plx9052_driver = {	.name = DEVICE_NAME,	.id_table = plx9052_pci_id_table,	.probe = plx9052_probe,	.remove = plx9052_close,	.suspend = plx9052_socket_suspend,	.resume = plx9052_socket_resume,};static int __init init_plx9052(void){	pci_module_init(&plx9052_driver);	return 0;}extern void __exit exit_plx9052(void){	pci_unregister_driver(&plx9052_driver);}module_init(init_plx9052);module_exit(exit_plx9052);

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
在线观看www91| 久久精品久久久精品美女| 国产色一区二区| 精品女同一区二区| 2023国产精品自拍| 久久精品夜色噜噜亚洲a∨| 欧美videos中文字幕| 欧美成人性战久久| 国产网站一区二区| 国产精品日韩成人| 婷婷成人综合网| 日韩黄色一级片| 蜜桃av一区二区| 黑人巨大精品欧美黑白配亚洲 | 粉嫩嫩av羞羞动漫久久久| 国产精品自拍三区| 成人高清视频在线| 欧美午夜一区二区三区免费大片| 色综合久久天天| 538prom精品视频线放| 7777精品伊人久久久大香线蕉| 欧美一区二区三区小说| 久久久99久久| 亚洲精品高清在线| 日韩av成人高清| 国产精品一区二区久久不卡| 99精品欧美一区二区三区小说| 日本韩国精品在线| 精品国产乱码久久久久久老虎| 久久婷婷色综合| 亚洲精品国产精品乱码不99| 日韩国产欧美在线观看| 国产福利一区在线观看| 色综合天天狠狠| 日韩欧美国产麻豆| 一区二区三区四区不卡视频| 人人爽香蕉精品| 色呦呦网站一区| 亚洲精品一区二区三区在线观看 | 国产99久久久国产精品 | 婷婷综合久久一区二区三区| 国产在线一区二区综合免费视频| 成人不卡免费av| 欧美成人综合网站| 亚洲国产精品欧美一二99| 国产自产高清不卡| 欧美日韩一区二区三区高清| 国产三区在线成人av| 亚洲国产视频在线| 暴力调教一区二区三区| 欧美tk丨vk视频| 亚洲一级片在线观看| 国产精品自产自拍| 日韩一区二区三区电影在线观看| 亚洲视频网在线直播| 六月丁香婷婷久久| 欧美美女网站色| 国产精品视频你懂的| 久久99精品久久久久| 欧美巨大另类极品videosbest| 国产精品白丝在线| av一区二区三区黑人| 久久嫩草精品久久久精品| 日韩avvvv在线播放| 欧美性xxxxxxxx| 亚洲自拍都市欧美小说| 91影院在线免费观看| 国产精品嫩草99a| 国产在线精品免费av| 精品理论电影在线| 久久精品国产精品青草| 欧美一区二区美女| 美女国产一区二区| 精品美女一区二区| 捆绑紧缚一区二区三区视频| 91麻豆精品国产无毒不卡在线观看| 亚洲一区二区三区在线看| 色哟哟一区二区三区| 亚洲精品国产视频| 91福利小视频| 日韩高清在线一区| 日韩一区二区电影| 国产精品正在播放| 亚洲国产岛国毛片在线| 亚洲丝袜制服诱惑| 日韩毛片精品高清免费| 欧美日免费三级在线| 欧美肥大bbwbbw高潮| 亚洲国产日韩综合久久精品| 欧美亚洲国产一区在线观看网站 | 国产午夜精品久久久久久久| 99re66热这里只有精品3直播| 91在线高清观看| www.66久久| 欧美系列亚洲系列| 精品国内二区三区| 久久一区二区三区国产精品| 日韩你懂的在线播放| 久久综合九色综合97婷婷女人 | 久久久久久久久蜜桃| 18成人在线观看| 性感美女久久精品| 亚洲国产精品av| 亚洲成av人片在线| 六月丁香婷婷色狠狠久久| 亚洲国产精华液网站w| 日韩精品一区二区三区中文不卡 | 色就色 综合激情| 99久久伊人久久99| 成人手机在线视频| 国产精品系列在线播放| 免费在线观看视频一区| 日韩国产精品久久久久久亚洲| 亚洲精品成人a在线观看| 国产精品美女久久久久久久久久久| 日韩欧美123| 精品国产一区二区三区忘忧草| 91精品久久久久久蜜臀| 精品国产91洋老外米糕| 国产欧美在线观看一区| 亚洲一区在线看| 日韩小视频在线观看专区| 欧美一级片在线| 日韩一卡二卡三卡四卡| 精品电影一区二区三区| 久久综合九色综合97_久久久| 久久久蜜臀国产一区二区| 久久色在线观看| 中文在线免费一区三区高中清不卡| 国产欧美一区二区精品性| 亚洲国产精品国自产拍av| 国产精品超碰97尤物18| 亚洲九九爱视频| 亚洲国产裸拍裸体视频在线观看乱了| 亚洲国产wwwccc36天堂| 亚洲国产精品精华液网站| 毛片一区二区三区| 国模大尺度一区二区三区| 国产成人精品网址| 91国在线观看| 日韩欧美的一区二区| 久久女同性恋中文字幕| 日韩一区欧美一区| 丝袜美腿亚洲色图| 国产一区 二区| 91免费版在线| 日韩欧美国产综合在线一区二区三区| 久久久久久久久久美女| 亚洲精品五月天| 蜜臀va亚洲va欧美va天堂| 国产suv一区二区三区88区| 色一情一伦一子一伦一区| 欧美一区二区三区色| 亚洲欧美自拍偷拍| 日本美女视频一区二区| jlzzjlzz国产精品久久| 日韩一级黄色大片| 亚洲日本丝袜连裤袜办公室| 日韩专区欧美专区| 成人高清免费观看| 欧美一区二区三区不卡| 亚洲日本中文字幕区| 久久精品国产在热久久| 91在线无精精品入口| 日韩精品一区二区三区视频在线观看| 亚洲欧美日韩综合aⅴ视频| 蜜臀av性久久久久蜜臀av麻豆| av电影一区二区| 精品久久久久久久一区二区蜜臀| 亚洲欧美电影一区二区| 国产美女久久久久| 欧美精品自拍偷拍动漫精品| 中文字幕亚洲区| 国产精品综合视频| 日韩精品中文字幕在线不卡尤物 | 激情五月激情综合网| 在线观看视频一区二区| 久久久.com| 免费视频一区二区| 欧美日韩在线观看一区二区| 国产精品久久久久毛片软件| 久久福利资源站| 91精品国产手机| 日韩制服丝袜av| 欧美日韩另类一区| 亚洲欧美日韩国产另类专区| 国产一区二区三区四| 日韩精品一区在线| 免费xxxx性欧美18vr| 777奇米四色成人影色区| 亚洲国产综合在线| 在线观看不卡一区| 一级做a爱片久久| 91福利国产精品| 亚洲一区二区三区四区五区黄 | 欧美一级夜夜爽| 丝袜国产日韩另类美女| 4438x亚洲最大成人网| 天堂影院一区二区| 91精品国产手机|