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

📄 wt_dev_pci.c

📁 mini-PCI driver for LHWT chipsets
💻 C
📖 第 1 页 / 共 2 页
字号:
	/*Adapter->RegMacParameter.ABGMode = IEEE80211B_ONLY;*/		WtWlanInitWt4Hw(Adapter, Adapter->RegMacParameter.ABGMode);	WtWlanHwIntInit(Adapter);	WtEnableInterrupts( Adapter );		//printk(LEVEL" Adapter->CSRAddress->IntMaskCtrl = %08x\r\n",Adapter->CSRAddress->IntMaskCtrl);   	//printk(LEVEL"  %s  intmaskctrl = %04x intstatus = %04x : %08x %08x\n", __FUNCTION__,  Adapter->CSRAddress->IntMaskCtrl, Adapter->CSRAddress->IntStatus, &Adapter->MainMemAddress->HwCSMem.CSRAddress, Adapter->MainMemAddress->HwCSMem.SysCfg.ChipFreq);		//spin_unlock_irqrestore(&Adapter->slock, flags);	netif_start_queue(ndev);	        FN_EXIT(0,0);	return 0;	}static intWtClose(struct net_device *ndev){	WT_ADAPTER *Adapter = netdev_priv(ndev);		FN_ENTER;	netif_stop_queue(ndev);		FN_EXIT(0,0);	return wt4_bring_down(Adapter);	//return 0;}                                                          				//#if 0static intwt4_bring_down(WT_ADAPTER *Adapter){	FN_ENTER;		FN_EXIT(0,0);		return 0;}//#endifstruct net_device_stats *wt_eth_statistics(struct net_device *ndev){       	WT_ADAPTER *Adapter = netdev_priv(ndev);	Adapter->statistics.rx_packets= ieee2host32( (ULONG)Adapter->MainMemAddress->HwCSMem.HwStatistic.RcvMpduCounter ); 	Adapter->statistics.tx_packets= ieee2host32( (ULONG)Adapter->MainMemAddress->HwCSMem.HwStatistic.XmtMsduCounter ); 	Adapter->statistics.rx_bytes=100000;//Adapter->statistics.rx_bytes; 	Adapter->statistics.rx_errors= ieee2host32( (ULONG)Adapter->MainMemAddress->HwCSMem.HwStatistic.RcvMissedCounter ); 	Adapter->statistics.tx_errors= ieee2host32( (ULONG)Adapter->MainMemAddress->HwCSMem.HwStatistic.XmtMsduCounter-(ULONG)Adapter->MainMemAddress->HwCSMem.HwStatistic.XmtSuccessMsduCounter ); 	Adapter->statistics.rx_dropped= ieee2host32( (ULONG)Adapter->MainMemAddress->HwCSMem.HwStatistic.RcvMissedCounter );	 	Adapter->statistics.tx_dropped= ieee2host32( (ULONG)Adapter->MainMemAddress->HwCSMem.HwStatistic.XmtMsduCounter-(ULONG)Adapter->MainMemAddress->HwCSMem.HwStatistic.XmtSuccessMsduCounter );	 	Adapter->statistics.multicast=0;	 	Adapter->statistics.collisions=0; 	Adapter->statistics.rx_length_errors=0;	 	Adapter->statistics.rx_over_errors=0; 	Adapter->statistics.rx_crc_errors=0;	 	Adapter->statistics.rx_frame_errors=0; 	Adapter->statistics.rx_fifo_errors=0;	 	Adapter->statistics.rx_missed_errors=0; 	Adapter->statistics.tx_aborted_errors=0;	 	Adapter->statistics.tx_carrier_errors=0; 	Adapter->statistics.tx_fifo_errors=0;	 	Adapter->statistics.tx_heartbeat_errors=0; 	Adapter->statistics.tx_window_errors=0; 	Adapter->statistics.rx_compressed=0;	 	Adapter->statistics.tx_compressed=0;	return &Adapter->statistics;}/******************************************************************************    Network device configuration functions******************************************************************************/static intWtAllocMemory(WT_ADAPTER *Adapter){		FN_ENTER;	printk("%sLEVEL   Adapter = %08x\r\n", __FUNCTION__,  Adapter);	printk("%sLEVEL   Adapter->pdev = %08x\r\n", __FUNCTION__,   Adapter->pdev);	if((pci_resource_len(Adapter->pdev, 0) == wt4_mainmem_size) /*&& (pci_resource_flags(Adapter->pdev, 0) == 0)*/){	   	    Adapter->MainMemAddress = ioremap(pci_resource_start(Adapter->pdev, 0),wt4_mainmem_size);	    	    if (!(Adapter->MainMemAddress))	    {	        printk(" <0>PCI memory remapping failed \n");		return -1;	    }	    	}	else if((pci_resource_len(Adapter->pdev, 0) == wt4_eeprom_size) /*&& (pci_resource_flags(Adapter->pdev, 0) == 0)*/){	            Adapter->device_base2 = ioremap(pci_resource_start(Adapter->pdev, 0),wt4_eeprom_size);	    	    if (!(Adapter->device_base2))	    {	        printk(" <0>PCI memory remapping failed \n");		return -1;	    }	    	}	else{		    Adapter->device_base1 = ioremap(pci_resource_start(Adapter->pdev, 0),wt4_io_size);	    	    if (!(Adapter->device_base1))	    {	        printk(" <0>PCI memory remapping failed \n");		return -1;	    }	}			if((pci_resource_len(Adapter->pdev, 1) == wt4_mainmem_size) /*&& (pci_resource_flags(Adapter->pdev, 1) == 0)*/){	   	    Adapter->MainMemAddress = ioremap(pci_resource_start(Adapter->pdev, 1),wt4_mainmem_size);	    	    if (!(Adapter->MainMemAddress))	    {	        printk(" <0>PCI memory remapping failed \n");		return -1;	    }	    	}	else if((pci_resource_len(Adapter->pdev, 1) == wt4_eeprom_size) /*&& (pci_resource_flags(Adapter->pdev, 1) == 0)*/){	            Adapter->device_base2 = ioremap(pci_resource_start(Adapter->pdev, 1),wt4_eeprom_size);	    	    if (!(Adapter->device_base2))	    {	        printk(" <0>PCI memory remapping failed \n");		return -1;	    }	    	}	else{		    Adapter->device_base1 = ioremap(pci_resource_start(Adapter->pdev, 1),wt4_io_size);	    	    if (!(Adapter->device_base1))	    {	        printk(" <0>PCI memory remapping failed \n");		return -1;	    }	}			if((pci_resource_len(Adapter->pdev, 2) == wt4_mainmem_size) /*&& (pci_resource_flags(Adapter->pdev, 2) == 0)*/){	   	    Adapter->MainMemAddress = ioremap(pci_resource_start(Adapter->pdev, 2),wt4_mainmem_size);	    	    if (!(Adapter->MainMemAddress))	    {	        printk(" <0>PCI memory remapping failed \n");		return -1;	    }	    	}	else if((pci_resource_len(Adapter->pdev, 2) == wt4_eeprom_size) /*&& (pci_resource_flags(Adapter->pdev, 2) == 0)*/){	            Adapter->device_base2 = ioremap(pci_resource_start(Adapter->pdev, 2),wt4_eeprom_size);	    	    if (!(Adapter->device_base2))	    {	        printk(" <0>PCI memory remapping failed \n");		return -1;	    }	    	}	else{		    Adapter->device_base1 = ioremap(pci_resource_start(Adapter->pdev, 2),wt4_io_size);	    	    if (!(Adapter->device_base1))	    {	        printk(" <0>PCI memory remapping failed \n");		return -1;	    }	}	/* allaction for recv and tran buffer */	//	printk(LEVEL" now begin to init the resouces for receive and transmition!\n");	   			WtInitList(Adapter);	WtSoftParaInit(Adapter);	WtInitSend(Adapter);	NICInitRecv(Adapter);	//printk(LEVEL" now end to init the resouces for receive and transmition!\n");		ParameterAlloc( Adapter );	wt4_acl_init(&Adapter->acl);//4.2232	wt4_wpa_ie_init(Adapter);//	printk("In file %s line %d Function %s \n", __FILE__, __LINE__, __FUNCTION__);			      FN_EXIT(0,0);		return 0;	#if 0out_free:	WtFreeMemory(Adapter);	FN_EXIT(0,0);	return -1;#endif}intWtFreeMemory(WT_ADAPTER *Adapter){		FN_ENTER;		        /* release the resources allocted to wt4!!! */	if (Adapter->MainMemAddress) {	    iounmap(Adapter->MainMemAddress);	    Adapter->MainMemAddress = NULL;	   }	   	if (Adapter->device_base1) {	    iounmap(Adapter->device_base1);	    Adapter->device_base1 = NULL;	   }	   	if (Adapter->device_base2) {	    iounmap(Adapter->device_base2);	    Adapter->device_base2 = NULL;	   }	   	ParameterFree( Adapter );		if (Adapter->WtWlanTxBufMem) {	    kfree(Adapter->WtWlanTxBufMem);	    Adapter->WtWlanTxBufMem = NULL;	}        if (Adapter->WtWlanRxBufMem) {	    kfree(Adapter->WtWlanRxBufMem);	    Adapter->WtWlanRxBufMem = NULL;	}			/* Free the acces control list and the WPA list */	wt4_acl_clean(&Adapter->acl);//05.4.22	wt4_wpa_ie_clean(Adapter);		FN_EXIT(0,0);	return 0;	}  NDIS_STATUS Wt4InitStatistics (IN PWT_ADAPTER Adapter){	NDIS_STATUS        Status = NDIS_STATUS_SUCCESS;	Adapter->statistics.rx_packets=0; 	Adapter->statistics.tx_packets=0; //	Adapter->statistics.rx_bytes=0; //	Adapter->statistics.tx_bytes=0; 	Adapter->statistics.rx_errors=0; 	Adapter->statistics.tx_errors=0; 	Adapter->statistics.rx_dropped=0;	 	Adapter->statistics.tx_dropped=0;	 	Adapter->statistics.multicast=0;	 	Adapter->statistics.collisions=0; 	 	Adapter->statistics.rx_length_errors=0;	 	Adapter->statistics.rx_over_errors=0; 	Adapter->statistics.rx_crc_errors=0;	 	Adapter->statistics.rx_frame_errors=0; 	Adapter->statistics.rx_fifo_errors=0;	 	Adapter->statistics.rx_missed_errors=0; 	 	Adapter->statistics.tx_aborted_errors=0;	 	Adapter->statistics.tx_carrier_errors=0; 	Adapter->statistics.tx_fifo_errors=0;	 	Adapter->statistics.tx_heartbeat_errors=0; 	Adapter->statistics.tx_window_errors=0; 	 	Adapter->statistics.rx_compressed=0;	 	Adapter->statistics.tx_compressed=0;	return  Status;} struct net_device *WtNdevSetup(struct pci_dev *pdev){	WT_ADAPTER *Adapter;        struct net_device *ndev = alloc_etherdev(sizeof(WT_ADAPTER));        FN_ENTER;		//memset(Adapter, 0, sizeof(WT_ADAPTER));       // printk("%sLEVEL   pci_resource_start(pdev, 0)= %08x\r\n", __FUNCTION__,  pci_resource_start(pdev, 0));	//struct net_device *ndev = alloc_etherdev(sizeof(WT_ADAPTER));	 	if (!ndev)	   return ndev; 			SET_MODULE_OWNER(ndev);	pci_set_drvdata(pdev, ndev); 	// setup the structure members 	ndev->base_addr = pci_resource_start(pdev, 0);	//ndev->base_addr = 0x1f800000;//	printk("%sLEVEL   ndev->base_addr = %08x\r\n", __FUNCTION__,  ndev->base_addr);	ndev->irq = pdev->irq;	// initialize the function pointers 	ndev->open = &WtOpen;	ndev->stop = &WtClose;	ndev->get_stats = &wt_eth_statistics;	ndev->get_wireless_stats = &wt4_get_wireless_stats;	//define function private function	ndev->wireless_handlers = (struct iw_handler_def *) &wt4_handler_def;        ndev->hard_start_xmit = &WtTransmit;	// ndev->set_multicast_list = &islpci_set_multicast_list; 	ndev->addr_len = ETH_ALEN;	ndev->set_mac_address = &wt4_set_mac_address;	//Get a non-zero dummy MAC address for nameif. Jean II 	memcpy(ndev->dev_addr, dummy_mac, 6);	// allocate a Adapterate device structure to the network device  	Adapter = netdev_priv(ndev);//	printk("%sLEVEL   Adapter = %08x\r\n", __FUNCTION__,  Adapter);        Adapter->ndev = ndev;	printk("%sLEVEL   Adapter->ndev = %08x\r\n", __FUNCTION__,   Adapter->ndev);	Adapter->pdev = pdev;      //  printk("%sLEVEL   Adapter->pdev = %08x\r\n", __FUNCTION__,   Adapter->pdev);	Adapter->monitor_type = ARPHRD_IEEE80211;//05.4.22	Adapter->ndev->type = (Adapter->iw_mode == IW_MODE_MONITOR) ?		              Adapter->monitor_type : ARPHRD_ETHER; //05.4.22			      	//noe we dont need to support WAPI	Adapter->MacParameter.bSoftDecrypt = FALSE;	Adapter->MacParameter.bSoftEncrypt = FALSE;	//added by hk 2006.9.27	tasklet_init(&Adapter->TxTasklet, (void (*)(unsigned long))		     WtHandleSendInterrupt, (unsigned long)Adapter);	tasklet_init(&Adapter->RxTasklet, (void (*)(unsigned long))		     WtHandleRecvInterrupt, (unsigned long)Adapter);	      init_waitqueue_head(&Adapter->reset_done);//05.4.22	// init the queue read locks, process wait counter 	sema_init(&Adapter->mgmt_sem, 1);//05.4.22	//Adapter->mgmt_received = NULL;//05.4.22		sema_init(&Adapter->stats_sem, 1);//05.4.22		//init all locks we needed	spin_lock_init(&Adapter->slock);	spin_lock_init(&Adapter->Lock);        spin_lock_init(&Adapter->SendLock);        spin_lock_init(&Adapter->RcvLock);        spin_lock_init(&Adapter->MacLock);//	spin_lock_init(&Adapter->SsidGetLock);//	spin_lock_init(&Adapter->SsidSetLock);	// initialize workqueue's 	//INIT_WORK(&Adapter->stats_work,		//  (void (*)(void *)) wt4_update_stats, Adapter);	Adapter->stats_timestamp = 0;        //////////////////////////////////////////////////////////////////////////////////////////	WtWlanAdpterWt4 = Adapter;        ////////////////////////////////////////////////////////////////////////////////////////////	printk("%sLEVEL   Adapter = %08x\r\n", __FUNCTION__,  Adapter);	// allocate various memory areas 	if (WtAllocMemory(Adapter))	   goto do_free_netdev;        	// save the start and end address of the PCI memory area 	ndev->mem_start = (unsigned long) Adapter->MainMemAddress;//	printk("%sLEVEL   ndev->mem_start = %08x\r\n", __FUNCTION__,  ndev->mem_start);	ndev->mem_end = ndev->mem_start + wt4_mainmem_size;//05.4.22			// alian csraddress for convenient		Adapter->CSRAddress = &Adapter->MainMemAddress->HwCSMem.CSRAddress;//	printk(LEVEL" Adapter->CSRAddress  = %08x\r\n", Adapter->CSRAddress);	 	if (register_netdev(ndev)) {			//   printk("ERROR: register_netdev() failed ):\r\n");	   goto do_wt_free_memory;	}	        NICReadAdapterInfo(Adapter);	wt_mgt_init(Adapter);	Wt4InitStatistics(Adapter);	        FN_EXIT(0,0);		return ndev;  do_wt_free_memory:	WtFreeMemory(Adapter);	 do_free_netdev:	pci_set_drvdata(pdev, NULL);	free_netdev(ndev);	Adapter = NULL;	return NULL;}

⌨️ 快捷键说明

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