📄 wt_dev_mem.c
字号:
static intWtOpen(struct net_device *ndev){ WT_ADAPTER *Adapter = netdev_priv(ndev);// unsigned long flags; FN_ENTER; printk(" Now we entered function %s !!!\n", __FUNCTION__); printk("<0>Enter WtOpen Now..............\r\n"); //WT_SPIN_LOCK_IRQSAVE(&Adapter->slock, flags); udelay( NIC_DELAY_POST_RESET ); WtWlanSoftReset( Adapter ); udelay( NIC_DELAY_POST_RESET ); printk("<0>step1\r\n"); printk("<0> Adapter->CSRAddress->IntMaskCtrl = %08x\r\n",Adapter->CSRAddress->IntMaskCtrl); // printk("<0> %s intmaskctrl = %04x intstatus = %04x : %08x %08x\n", __FUNCTION__, Adapter->CSRAddress->IntMaskCtrl, Adapter->CSRAddress->IntStatus, &Adapter->MainMemAddress->HwCSMem.CSRAddress, Adapter->MainMemAddress->HwCSMem.SysCfg.ChipFreq); //WtWlanInitWtRf(Adapter);// WtWlanInitWt4Hw(Adapter); WtWlanInitWt4Hw(Adapter, Adapter->RegMacParameter.ABGMode); //Dump( (char *)(0xea000000),0x200, TRUE, 1 ); WtWlanHwIntInit(Adapter); printk("<0> Adapter->CSRAddress->IntMaskCtrl = %08x\r\n",Adapter->CSRAddress->IntMaskCtrl); // printk("<0> %s intmaskctrl = %04x intstatus = %04x : %08x %08x\n", __FUNCTION__, Adapter->CSRAddress->IntMaskCtrl, Adapter->CSRAddress->IntStatus, &Adapter->MainMemAddress->HwCSMem.CSRAddress, Adapter->MainMemAddress->HwCSMem.SysCfg.ChipFreq); //////////////////////////////////////////////////////////////////////////////////////////////// //printk("<0> INIMSK register in address 0x4a000008 is: %08x\r\n",__raw_readl(0x4a000008)); //printk("<0> EXINIT register in address 0x56000088 is: %08x\r\n",__raw_readl(0x56000088)); //printk("<0> CPGVP register in address 0x56000068 is: %08x\r\n",__raw_readl(0x56000068)); //////////////////////////////////////////////////////////////////////////////////////////////// WtEnableInterrupts( Adapter ); printk("<0> Adapter->CSRAddress->IntMaskCtrl = %08x\r\n",Adapter->CSRAddress->IntMaskCtrl); // printk("<0> %s intmaskctrl = %04x intstatus = %04x : %08x %08x\n", __FUNCTION__, Adapter->CSRAddress->IntMaskCtrl, Adapter->CSRAddress->IntStatus, &Adapter->MainMemAddress->HwCSMem.CSRAddress, Adapter->MainMemAddress->HwCSMem.SysCfg.ChipFreq); //Dump( (char *)(0xea000000),0x200, TRUE, 1 ); //WT_SPIN_UNLOCK_IRQRESTORE(&Adapter->slock, flags); netif_start_queue(ndev); FN_EXIT(0,0); return 0; }static intwt4_bring_down(WT_ADAPTER *Adapter){ FN_ENTER; 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; } struct net_device_stats *wt_eth_statistics(struct net_device *ndev){ WT_ADAPTER *Adapter = netdev_priv(ndev); Adapter->statistics.rx_packets=(ULONG)Adapter->MainMemAddress->HwCSMem.HwStatistic.RcvMpduCounter; Adapter->statistics.tx_packets=(ULONG)Adapter->MainMemAddress->HwCSMem.HwStatistic.XmtMsduCounter; Adapter->statistics.rx_bytes=100000;//Adapter->statistics.rx_bytes; Adapter->statistics.rx_errors=(ULONG)Adapter->MainMemAddress->HwCSMem.HwStatistic.RcvMissedCounter; Adapter->statistics.tx_errors=(ULONG)Adapter->MainMemAddress->HwCSMem.HwStatistic.XmtMsduCounter-(ULONG)Adapter->MainMemAddress->HwCSMem.HwStatistic.XmtSuccessMsduCounter; Adapter->statistics.rx_dropped=(ULONG)Adapter->MainMemAddress->HwCSMem.HwStatistic.RcvMissedCounter; Adapter->statistics.tx_dropped=(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; Adapter->MainMemAddress = SMDK2410_WTWLAN_BASE; /* allaction for recv and tran buffer */ printk(" now begin to init the resouces for receive and transmition!\n"); WtInitList(Adapter); WtSoftParaInit(Adapter); WtInitSend(Adapter); NICInitRecv(Adapter); printk(" 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); //if (wt_mgt_init(Adapter)) // goto out_free; FN_EXIT(0,0); return 0;/* out_free: WtFreeMemory(Adapter); FN_EXIT(0,0); return -1; */}intWtFreeMemory(WT_ADAPTER *Adapter){ FN_ENTER; if (Adapter->MainMemAddress) Adapter->MainMemAddress = 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); //mgt_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;}/*\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\//\/\*/void ndev_strc_stuff(struct net_device *ndev){ /* setup the structure members */ ndev->base_addr = 0xEA000000; ndev->irq = SMDK2410_WTWLAN_ETH_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; 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;}struct net_device *WtNdevSetupMem(struct net_device *ndev){ WT_ADAPTER *Adapter; FN_ENTER; SET_MODULE_OWNER(ndev); /*fill some structure numbers and function pionters in netdevice structure*/ ndev_strc_stuff(ndev); /* allocate a Adapterate device structure to the network device */ Adapter = netdev_priv(ndev);// printk("%s Adapter = %08x\r\n", __FUNCTION__, Adapter); Adapter->ndev = ndev;// printk("%s Adapter->ndev = %08x\r\n", __FUNCTION__, Adapter->ndev); Adapter->pdev = NULL; 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 init_waitqueue_head(&Adapter->mgmt_wqueue);//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);//#if 0 /* init state machine with off#1 state */ Adapter->state = PRV_STATE_OFF; Adapter->state_off = 1;//#endif //for wt4 /* initialize workqueue's */ INIT_WORK(&Adapter->stats_work, (void (*)(void *)) wt4_update_stats, Adapter);//05.4.22 Adapter->stats_timestamp = 0;//#if 0 INIT_WORK(&Adapter->reset_task, islpci_do_reset_and_wake, Adapter); Adapter->reset_task_pending = 0;//#endif //for wt4 ////////////////////////////////////////////////////////////////////////////////////////// //WtWlanAdpterWt4 = ndev; WtWlanAdpterWt4 = Adapter; //////////////////////////////////////////////////////////////////////////////////////////// printk("%s 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("%s 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("<0> Adapter->CSRAddress = %08x Adapter->MainMemAddress = %08x\r\n", Adapter->CSRAddress,Adapter->MainMemAddress); if (register_netdev(ndev)) { printk("ERROR: register_netdev() failed ):\r\n"); goto do_islpci_free_memory; } NICReadAdapterInfo(Adapter); wt_mgt_init(Adapter);/* printk("Mgt init ok in File %s Function %s line %d \n",__FILE__, __FUNCTION__, __LINE__);*/ Wt4InitStatistics(Adapter); FN_EXIT(0,0); return ndev; do_islpci_free_memory: WtFreeMemory(Adapter); do_free_netdev: free_netdev(ndev); Adapter = NULL; return NULL;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -