⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 wt_hotplug_mem.c

📁 linux2.6.11内核无线网卡驱动程序。支持802.11 abg
💻 C
字号:
/***************************************************************************** *This file realize device probe & remove functions  *Version:  *Copyright(c) 2004-2005 Beijing LHET Microelectronics Inc,All Right Reserved. *****************************************************************************/ #include "wtprecomp.h"//#include <asm/arch/regs-mem.h>/****************************************************************************/#ifdef WT4_DEBUGint debug=0;//int debug=L_FUNC;int wt4_debug_func_indent=0;#endif/*****************************************************************************/#define DRV_NAME	"wt4"#define DRV_VERSION	"1.0"static unsigned int wtwlan_mem_addr[] /*__initdata*/ = {SMDK2410_WTWLAN_BASE, 0};static unsigned int wtwlan_irq_map[] = {SMDK2410_WTWLAN_ETH_IRQ, 0, 0, 0};#define NETCARD_IO_EXTENT 64MODULE_AUTHOR("LHWT");MODULE_DESCRIPTION("The WT 802.11 Wireless LAN adapter");MODULE_LICENSE("GPL");static int  WtProbe(struct net_device *ndev, int mem_addr);//static void WtRemove(struct pci_dev *);void WtRemove(struct net_device *ndev);//static int  WtSuspend(struct pci_dev *, u32 state);//static int  WtResume(struct pci_dev *);static struct net_device *dev_wlanwt4;/******************************************************************************    Module initialization functions******************************************************************************/intWtProbe(struct net_device *ndev, int mem_addr){	int rvalue;	int *base  ;	WT_ADAPTER *Adapter;	unsigned long reg0,reg1,reg2,reg3,reg4,reg5;	UINT32 bwscon;			FN_ENTER;		  /* request the device I/O regions */	rvalue = request_mem_region(mem_addr, 64*1024, DRV_NAME);	if (rvalue) {		printk(KERN_ERR "%s: request_regions failure (rc=%d)\n",		       DRV_NAME, rvalue);		return rvalue;	}	//base = 0xea000000;	printk("<0>The value in address 0xEA000000 is: %08x\n\r",*base);	//Dump( (char *)base,600, TRUE, 1 );	/* setup the network device interface and its structure */	if (!(ndev = WtNdevSetupMem(ndev))) {		/* error configuring the driver as a network device */		printk(KERN_ERR "%s: could not configure network device\n",DRV_NAME);		goto do_release_regions;	}	 	Adapter = netdev_priv(ndev);	Adapter->MainMemAddress = mem_addr;		/* card is in unknown state yet, might have some interrupts pending */	WtDisableInterrupts(Adapter); 	Adapter->CSRAddress->IntMaskCtrl = 0xfff;			/* request for the interrupt before uploading the firmware */	rvalue = request_irq(SMDK2410_WTWLAN_ETH_IRQ, &WtInterrupt,			     SA_SHIRQ, ndev->name, Adapter);   	if (rvalue) {		/* error, could not hook the handler to the irq */		printk("%s: could not install IRQ handler\n",		       ndev->name);		goto do_unregister_netdev;	}     	reg0 = __raw_readl((void *)0xF0000008);	reg1 = __raw_readl((void *)0xF0E00088);	reg2 = __raw_readl((void *)0xF0E0008C);	reg3 = __raw_readl((void *)0xF0E00068);	reg4 = __raw_readl((void *)0xF0E000A4);	reg5 = __raw_readl((void *)0xF0E00060);#if 0			printk("<0> INIMSK register in address 0x4a000008 is: %08x\r\n",reg0);	printk("<0> EXINIT register in address 0x56000088 is: %08x\r\n",reg1);	printk("<0> EXINIT register in address 0x5600008c is: %08x\r\n",reg2);		printk("<0> CPGVP register in address 0x56000068 is: %08x\r\n",reg3);	printk("<0> CPGVP register in address 0x5600004A is: %08x\r\n",reg4);	printk("<0> CPGVP register in address 0x56000060 is: %08x\r\n",reg5);#endif			reg2 &= (~(unsigned long )0xF);	reg3 &= (~(unsigned long )0x1);	reg5 &=  (~(unsigned long )0x1);	reg5 |= 0x2;		__raw_writel(reg2,(void *)0xF0E0008C);	__raw_writel(reg3,(void *)0xF0E00068);	__raw_writel(reg5,(void *)0xF0E00060);		reg5 =  __raw_readl((void *)0xF0100014);	printk("<0> 48000014 is: %08x\r\n",reg5);		reg5 &= 0xffff9fff;	reg5 |= 4000;	__raw_writel(reg5,(void *)0xF0100014);		reg5 =  __raw_readl((void *)0xF0100014);		printk("<0> 48000014 is: %08x\r\n",reg5);		#if 0		printk("<0> INIMSK register in address 0x4a000008 is: %08x\r\n",__raw_readl(0xF0000008));	printk("<0> EXINIT register in address 0x56000088 is: %08x\r\n",__raw_readl(0xF0E00088));	printk("<0> EXINIT register in address 0x5600008c is: %08x\r\n",__raw_readl(0xF0E0008C));		printk("<0> CPGVP register in address 0x56000068 is: %08x\r\n",__raw_readl(0xF0E00068));	printk("<0> CPGVP register in address 0x5600004A is: %08x\r\n",__raw_readl(0xF0E000A4));	printk("<0> CPGVP register in address 0x56000060 is: %08x\r\n",__raw_readl(0xF0E00060));#endif//read and write s3c2410 register bwscon		bwscon = __raw_readl(S3C2410_BWSCON);	printk("<0>************************the value =%x\n",bwscon);#ifdef WT_11B_SCO		__raw_writel(0x2210d110,S3C2410_BWSCON);	udelay(100);	bwscon = __raw_readl(S3C2410_BWSCON);	printk("<0>************************the value =%x\n",bwscon);#endif	//WtWlanInitWtRf(Adapter);	FN_EXIT(0,0);	return 0;do_unregister_netdev:        unregister_netdev(ndev);	WtFreeMemory(Adapter);	free_netdev(ndev);	Adapter = NULL;	do_release_regions:	release_region(ndev->base_addr, NETCARD_IO_EXTENT);	ndev->base_addr = NULL;	}/* set by cleanup_module */static volatile int __in_cleanup_module = 0;/* this one removes one(!!) instance only */voidWtRemove(struct net_device *ndev){		WT_ADAPTER *Adapter = ndev ? netdev_priv(ndev) : NULL;		FN_ENTER; 	printk(" %s: removing device\n", ndev->name);	        unregister_netdev(ndev);        WtDisableInterrupts(Adapter);//we moved it from the above if clause!!!		free_irq(ndev->irq, Adapter);	/* free the PCI memory and unmap the remapped page */	WtFreeMemory(Adapter);	//pci_set_drvdata(pdev, NULL);	free_netdev(ndev);	Adapter = NULL;		FN_EXIT(0,0);	}#if 0 //2005.8.29intWtSuspend(struct pci_dev *pdev, u32 state){ 	return 0;}intWtResume(struct pci_dev *pdev){ 	return 0;}#endifstatic int __initWtModuleInit(void){       int err;	struct net_device *ndev = alloc_etherdev(sizeof(WT_ADAPTER));	if (!ndev)	   return ndev;		FN_ENTER;	printk(" Loaded %s driver, version %s\n",DRV_NAME, DRV_VERSION);        __bug_on_wrong_struct_sizes ();	   	err = WtProbe(ndev, *wtwlan_mem_addr);	if (err)	   goto out;		dev_wlanwt4 = ndev;	   	FN_EXIT(0,0);   	return 0;out:        return err;		} static void __exitWtModuleExit(void){        FN_ENTER;	__in_cleanup_module = 1;		printk(KERN_INFO "Unloaded %s driver\n", DRV_NAME);		WtRemove(dev_wlanwt4);	__in_cleanup_module = 0;		FN_EXIT(0,0);}/* register entry points */module_init(WtModuleInit);module_exit(WtModuleExit);/* EOF */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -