📄 prism2sta.c
字号:
int vacant = -1; for (i = 0; i < PCI_MAX_MAPPINGS; i++){ if (drvmap[i].dev == dev) { drvmap[i].drv = drv; return 0; } else if(vacant < 0 && drvmap[i].dev == NULL) { vacant = i; } } if(vacant >= 0){ drvmap[vacant].dev = dev; drvmap[vacant].drv = drv; return 0; } else { return -1; }}static void * pci_get_drvdata (struct pci_dev *dev){ int i; for (i = 0; i < PCI_MAX_MAPPINGS; i++) if (drvmap[i].dev == dev) return drvmap[i].driver_data; return NULL;}static void pci_set_drvdata (struct pci_dev *dev, void *driver_data){ int i; for (i = 0; i < PCI_MAX_MAPPINGS; i++) if (drvmap[i].dev == dev) { drvmap[i].driver_data = driver_data; return; }}static void pci_unregister_driver(struct pci_driver *drv){ struct pci_dev *dev; int i; for(dev = pci_devices; dev; dev = dev->next) { for (i = 0; i < PCI_MAX_MAPPINGS; i++) if (drvmap[i].dev == dev && drvmap[i].drv == drv) break; if (PCI_MAX_MAPPINGS == i) continue; if (drv->remove) drv->remove(dev); drvmap[i].dev = NULL; drvmap[i].drv = NULL; }}#endif#endif/*----------------------------------------------------------------* prism2sta_open** WLAN device open method. Called from p80211netdev when kernel * device open (start) method is called in response to the * SIOCSIIFFLAGS ioctl changing the flags bit IFF_UP * from clear to set.** Arguments:* wlandev wlan device structure** Returns: * 0 success* >0 f/w reported error* <0 driver reported error** Side effects:** Call context:* process thread----------------------------------------------------------------*/int prism2sta_open(wlandevice_t *wlandev){ DBFENTER;#ifdef ANCIENT_MODULE_CODE MOD_INC_USE_COUNT;#endif /* We don't currently have to do anything else. * The setup of the MAC should be subsequently completed via * the mlme commands. * Higher layers know we're ready from dev->start==1 and * dev->tbusy==0. Our rx path knows to pass up received/ * frames because of dev->flags&IFF_UP is true. */ DBFEXIT; return 0;}/*----------------------------------------------------------------* prism2sta_close** WLAN device close method. Called from p80211netdev when kernel * device close method is called in response to the * SIOCSIIFFLAGS ioctl changing the flags bit IFF_UP * from set to clear.** Arguments:* wlandev wlan device structure** Returns: * 0 success* >0 f/w reported error* <0 driver reported error** Side effects:** Call context:* process thread----------------------------------------------------------------*/int prism2sta_close(wlandevice_t *wlandev){ DBFENTER;#ifdef ANCIENT_MODULE_CODE MOD_DEC_USE_COUNT;#endif /* We don't currently have to do anything else. * Higher layers know we're not ready from dev->start==0 and * dev->tbusy==1. Our rx path knows to not pass up received * frames because of dev->flags&IFF_UP is false. */ DBFEXIT; return 0;}/*----------------------------------------------------------------* prism2sta_reset** Not currently implented.** Arguments:* wlandev wlan device structure* none** Returns: * nothing** Side effects:** Call context:* process thread----------------------------------------------------------------*/void prism2sta_reset(wlandevice_t *wlandev ){ DBFENTER; DBFEXIT; return;}/*----------------------------------------------------------------* prism2sta_txframe** Takes a frame from p80211 and queues it for transmission.** Arguments:* wlandev wlan device structure* pb packet buffer struct. Contains an 802.11* data frame.* p80211_hdr points to the 802.11 header for the packet.* Returns: * 0 Success and more buffs available* 1 Success but no more buffs* 2 Allocation failure* 4 Buffer full or queue busy** Side effects:** Call context:* process thread----------------------------------------------------------------*/int prism2sta_txframe(wlandevice_t *wlandev, struct sk_buff *skb, p80211_hdr_t *p80211_hdr, p80211_metawep_t *p80211_wep){ hfa384x_t *hw = (hfa384x_t *)wlandev->priv; int result; DBFENTER; /* If necessary, set the 802.11 WEP bit */ if ((wlandev->hostwep & (HOSTWEP_PRIVACYINVOKED | HOSTWEP_ENCRYPT)) == HOSTWEP_PRIVACYINVOKED) { p80211_hdr->a3.fc |= host2ieee16(WLAN_SET_FC_ISWEP(1)); } result = hfa384x_drvr_txframe(hw, skb, p80211_hdr, p80211_wep); DBFEXIT; return result;}/*----------------------------------------------------------------* prism2sta_mlmerequest** wlan command message handler. All we do here is pass the message* over to the prism2sta_mgmt_handler.** Arguments:* wlandev wlan device structure* msg wlan command message* Returns: * 0 success* <0 successful acceptance of message, but we're* waiting for an async process to finish before* we're done with the msg. When the asynch* process is done, we'll call the p80211 * function p80211req_confirm() .* >0 An error occurred while we were handling* the message.** Side effects:** Call context:* process thread----------------------------------------------------------------*/int prism2sta_mlmerequest(wlandevice_t *wlandev, p80211msg_t *msg){ hfa384x_t *hw = (hfa384x_t *)wlandev->priv; int result = 0; DBFENTER; switch( msg->msgcode ) { case DIDmsg_dot11req_mibget : WLAN_LOG_DEBUG(2,"Received mibget request\n"); result = prism2mgmt_mibset_mibget(wlandev, msg); break; case DIDmsg_dot11req_mibset : WLAN_LOG_DEBUG(2,"Received mibset request\n"); result = prism2mgmt_mibset_mibget(wlandev, msg); break; case DIDmsg_dot11req_powermgmt : WLAN_LOG_DEBUG(2,"Received powermgmt request\n"); result = prism2mgmt_powermgmt(wlandev, msg); break; case DIDmsg_dot11req_scan : WLAN_LOG_DEBUG(2,"Received scan request\n"); result = prism2mgmt_scan(wlandev, msg); break; case DIDmsg_dot11req_scan_results : WLAN_LOG_DEBUG(2,"Received scan_results request\n"); result = prism2mgmt_scan_results(wlandev, msg); break; case DIDmsg_dot11req_join : WLAN_LOG_DEBUG(2,"Received join request\n"); result = prism2mgmt_join(wlandev, msg); break; case DIDmsg_dot11req_authenticate : WLAN_LOG_DEBUG(2,"Received authenticate request\n"); result = prism2mgmt_authenticate(wlandev, msg); break; case DIDmsg_dot11req_deauthenticate : WLAN_LOG_DEBUG(2,"Received mlme deauthenticate request\n"); result = prism2mgmt_deauthenticate(wlandev, msg); break; case DIDmsg_dot11req_associate : WLAN_LOG_DEBUG(2,"Received mlme associate request\n"); result = prism2mgmt_associate(wlandev, msg); break; case DIDmsg_dot11req_reassociate : WLAN_LOG_DEBUG(2,"Received mlme reassociate request\n"); result = prism2mgmt_reassociate(wlandev, msg); break; case DIDmsg_dot11req_disassociate : WLAN_LOG_DEBUG(2,"Received mlme disassociate request\n"); result = prism2mgmt_disassociate(wlandev, msg); break; case DIDmsg_dot11req_reset : WLAN_LOG_DEBUG(2,"Received mlme reset request\n"); result = prism2mgmt_reset(wlandev, msg); break; case DIDmsg_dot11req_start : WLAN_LOG_DEBUG(2,"Received mlme start request\n"); result = prism2mgmt_start(wlandev, msg); break; /* * Prism2 specific messages */ case DIDmsg_p2req_join : WLAN_LOG_DEBUG(2,"Received p2 join request\n"); result = prism2mgmt_p2_join(wlandev, msg); break; case DIDmsg_p2req_readpda : WLAN_LOG_DEBUG(2,"Received mlme readpda request\n"); result = prism2mgmt_readpda(wlandev, msg); break; case DIDmsg_p2req_readcis : WLAN_LOG_DEBUG(2,"Received mlme readcis request\n"); result = prism2mgmt_readcis(wlandev, msg); break; case DIDmsg_p2req_auxport_state : WLAN_LOG_DEBUG(2,"Received mlme auxport_state request\n"); result = prism2mgmt_auxport_state(wlandev, msg); break; case DIDmsg_p2req_auxport_read : WLAN_LOG_DEBUG(2,"Received mlme auxport_read request\n"); result = prism2mgmt_auxport_read(wlandev, msg); break; case DIDmsg_p2req_auxport_write : WLAN_LOG_DEBUG(2,"Received mlme auxport_write request\n"); result = prism2mgmt_auxport_write(wlandev, msg); break; case DIDmsg_p2req_low_level : WLAN_LOG_DEBUG(2,"Received mlme low_level request\n"); result = prism2mgmt_low_level(wlandev, msg); break; case DIDmsg_p2req_test_command : WLAN_LOG_DEBUG(2,"Received mlme test_command request\n"); result = prism2mgmt_test_command(wlandev, msg); break; case DIDmsg_p2req_mmi_read : WLAN_LOG_DEBUG(2,"Received mlme mmi_read request\n"); result = prism2mgmt_mmi_read(wlandev, msg); break; case DIDmsg_p2req_mmi_write : WLAN_LOG_DEBUG(2,"Received mlme mmi_write request\n"); result = prism2mgmt_mmi_write(wlandev, msg); break; case DIDmsg_p2req_ramdl_state : WLAN_LOG_DEBUG(2,"Received mlme ramdl_state request\n"); result = prism2mgmt_ramdl_state(wlandev, msg); break; case DIDmsg_p2req_ramdl_write : WLAN_LOG_DEBUG(2,"Received mlme ramdl_write request\n"); result = prism2mgmt_ramdl_write(wlandev, msg); break; case DIDmsg_p2req_flashdl_state : WLAN_LOG_DEBUG(2,"Received mlme flashdl_state request\n"); result = prism2mgmt_flashdl_state(wlandev, msg); break; case DIDmsg_p2req_flashdl_write : WLAN_LOG_DEBUG(2,"Received mlme flashdl_write request\n"); result = prism2mgmt_flashdl_write(wlandev, msg); break; case DIDmsg_p2req_dump_state : WLAN_LOG_DEBUG(2,"Received mlme dump_state request\n"); result = prism2mgmt_dump_state(wlandev, msg); break; case DIDmsg_p2req_channel_info : WLAN_LOG_DEBUG(2,"Received mlme channel_info request\n"); result = prism2mgmt_channel_info(wlandev, msg); break; case DIDmsg_p2req_channel_info_results : WLAN_LOG_DEBUG(2,"Received mlme channel_info_results request\n"); result = prism2mgmt_channel_info_results(wlandev, msg); break; /* * Linux specific messages */ case DIDmsg_lnxreq_hostwep : break; // ignore me. case DIDmsg_lnxreq_ifstate : { p80211msg_lnxreq_ifstate_t *ifstatemsg; WLAN_LOG_DEBUG(2,"Received mlme ifstate request\n"); ifstatemsg = (p80211msg_lnxreq_ifstate_t*)msg; result = prism2sta_ifstate(wlandev, ifstatemsg->ifstate.data); ifstatemsg->resultcode.status = P80211ENUM_msgitem_status_data_ok; ifstatemsg->resultcode.data = result; result = 0; } break; case DIDmsg_lnxreq_wlansniff : WLAN_LOG_DEBUG(2,"Received mlme wlansniff request\n"); result = prism2mgmt_wlansniff(wlandev, msg); break; case DIDmsg_lnxreq_autojoin : WLAN_LOG_DEBUG(2,"Received mlme autojoin request\n"); result = prism2mgmt_autojoin(wlandev, msg); break; case DIDmsg_p2req_enable : WLAN_LOG_DEBUG(2,"Received mlme enable request\n"); result = prism2mgmt_enable(wlandev, msg); break; case DIDmsg_lnxreq_commsquality: { p80211msg_lnxreq_commsquality_t *qualmsg; hfa384x_commsquality_t qual; WLAN_LOG_DEBUG(2,"Received commsquality request\n"); if (hw->ap) break; qualmsg = (p80211msg_lnxreq_commsquality_t*) msg; result = hfa384x_drvr_getconfig(hw, HFA384x_RID_COMMSQUALITY, &qual, HFA384x_RID_COMMSQUALITY_LEN); if (result != 0) { WLAN_LOG_ERROR("Failed to read %s statistics: error=%d\n", wlandev->name, result); break; } qualmsg->link.status = P80211ENUM_msgitem_status_data_ok; qualmsg->level.status = P80211ENUM_msgitem_status_data_ok; qualmsg->noise.status = P80211ENUM_msgitem_status_data_ok; if (qualmsg->dbm.data == P80211ENUM_truth_true) { qualmsg->link.data = hfa384x2host_16(qual.CQ_currBSS); qualmsg->level.data = hfa384x2host_16(HFA384x_LEVEL_TO_dBm(qual.ASL_currBSS)); qualmsg->noise.data = hfa384x2host_16(HFA384x_LEVEL_TO_dBm(qual.ANL_currFC)); } else { qualmsg->link.data = hfa384x2host_16(qual.CQ_currBSS); qualmsg->level.data = hfa384x2host_16(qual.ASL_currBSS); qualmsg->noise.data = hfa384x2host_16(qual.ANL_currFC); } break; } default: WLAN_LOG_WARNING("Unknown mgmt request message 0x%08lx", msg->msgcode); break; } DBFEXIT; return result;}/*----------------------------------------------------------------* prism2sta_ifstate** Interface state. This is the primary WLAN interface enable/disable* handler. Following the driver/load/deviceprobe sequence, this* function must be called with a state of "enable" before any other
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -