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

📄 prism2sta.c

📁 这是基于hfa3841、hfa3842的无线网卡linux驱动程序源代码
💻 C
📖 第 1 页 / 共 5 页
字号:
	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 + -