prism2mib.c
来自「Linux的无线局域网方案是一个Linux设备驱动程序和子系统 一揽子方案的用」· C语言 代码 · 共 1,855 行 · 第 1/5 页
C
1,855 行
if (!(mib->flag & F_READ)) { msg->resultcode.data = P80211ENUM_resultcode_cant_get_writeonly_mib; goto done; } } else { if (!(mib->flag & F_WRITE)) { msg->resultcode.data = P80211ENUM_resultcode_cant_set_readonly_mib; goto done; } } /* ** Execute the MIB function. If things worked okay, then make ** sure that the MIB function also worked okay. If so, and this ** is a "mibget", then the status value must be set for both the ** "mibattribute" parameter and the mib item within the data ** portion of the "mibattribute". */ result = mib->func(mib, isget, wlandev, priv, hw, msg, (void *) mibitem->data); if (msg->resultcode.data == P80211ENUM_resultcode_success) { if (result != 0) { WLAN_LOG_DEBUG1(1, "get/set failure, result=%d\n", result); msg->resultcode.data = P80211ENUM_resultcode_implementation_failure; } else { if (isget) { msg->mibattribute.status = P80211ENUM_msgitem_status_data_ok; mibitem->status = P80211ENUM_msgitem_status_data_ok; } } }done: DBFEXIT; return(0);}/*----------------------------------------------------------------* prism2mib_bytestr2pstr** Get/set pstr data to/from a byte string.** MIB record parameters:* parm1 Prism2 RID value.* parm2 Number of bytes of RID data.* parm3 Not used.** Arguments:* mib MIB record.* isget MIBGET/MIBSET flag.* wlandev wlan device structure.* priv "priv" structure.* hw "hw" structure.* msg Message structure.* data Data buffer.** Returns: * 0 - Success.* ~0 - Error.*----------------------------------------------------------------*/static int prism2mib_bytestr2pstr(mibrec_t *mib,int isget,wlandevice_t *wlandev,prism2sta_priv_t *priv,hfa384x_t *hw,p80211msg_dot11req_mibset_t *msg,void *data){ int result; p80211pstrd_t *pstr = (p80211pstrd_t*) data; UINT8 bytebuf[MIB_TMP_MAXLEN]; hfa384x_bytestr_t *p2bytestr = (hfa384x_bytestr_t*) bytebuf; DBFENTER; if (isget) { result = hfa384x_drvr_getconfig(hw, mib->parm1, bytebuf, mib->parm2); prism2mgmt_bytestr2pstr(p2bytestr, pstr); } else { memset(bytebuf, 0, mib->parm2); prism2mgmt_pstr2bytestr(p2bytestr, pstr); result = hfa384x_drvr_setconfig(hw, mib->parm1, bytebuf, mib->parm2); } DBFEXIT; return(result);}/*----------------------------------------------------------------* prism2mib_bytearea2pstr** Get/set pstr data to/from a byte area.** MIB record parameters:* parm1 Prism2 RID value.* parm2 Number of bytes of RID data.* parm3 Not used.** Arguments:* mib MIB record.* isget MIBGET/MIBSET flag.* wlandev wlan device structure.* priv "priv" structure.* hw "hw" structure.* msg Message structure.* data Data buffer.** Returns: * 0 - Success.* ~0 - Error.*----------------------------------------------------------------*/static int prism2mib_bytearea2pstr(mibrec_t *mib,int isget,wlandevice_t *wlandev,prism2sta_priv_t *priv,hfa384x_t *hw,p80211msg_dot11req_mibset_t *msg,void *data){ int result; p80211pstrd_t *pstr = (p80211pstrd_t*) data; UINT8 bytebuf[MIB_TMP_MAXLEN]; DBFENTER; if (isget) { result = hfa384x_drvr_getconfig(hw, mib->parm1, bytebuf, mib->parm2); prism2mgmt_bytearea2pstr(bytebuf, pstr, mib->parm2); } else { memset(bytebuf, 0, mib->parm2); prism2mgmt_pstr2bytearea(bytebuf, pstr); result = hfa384x_drvr_setconfig(hw, mib->parm1, bytebuf, mib->parm2); } DBFEXIT; return(result);}/*----------------------------------------------------------------* prism2mib_uint32** Get/set uint32 data.** MIB record parameters:* parm1 Prism2 RID value.* parm2 Not used.* parm3 Not used.** Arguments:* mib MIB record.* isget MIBGET/MIBSET flag.* wlandev wlan device structure.* priv "priv" structure.* hw "hw" structure.* msg Message structure.* data Data buffer.** Returns: * 0 - Success.* ~0 - Error.*----------------------------------------------------------------*/static int prism2mib_uint32(mibrec_t *mib,int isget,wlandevice_t *wlandev,prism2sta_priv_t *priv,hfa384x_t *hw,p80211msg_dot11req_mibset_t *msg,void *data){ int result; UINT32 *uint32 = (UINT32*) data; UINT8 bytebuf[MIB_TMP_MAXLEN]; UINT16 *wordbuf = (UINT16*) bytebuf; DBFENTER; if (isget) { result = hfa384x_drvr_getconfig16(hw, mib->parm1, wordbuf); *uint32 = *wordbuf; /* [MSM] Removed, getconfig16 returns the value in host order. * prism2mgmt_prism2int2p80211int(wordbuf, uint32); */ } else { /* [MSM] Removed, setconfig16 expects host order. * prism2mgmt_p80211int2prism2int(wordbuf, uint32); */ *wordbuf = *uint32; result = hfa384x_drvr_setconfig16(hw, mib->parm1, wordbuf); } DBFEXIT; return(result);}/*----------------------------------------------------------------* prism2mib_uint32array** Get/set an array of uint32 data.** MIB record parameters:* parm1 Prism2 RID value.* parm2 Number of bytes of RID data.* parm3 Not used.** Arguments:* mib MIB record.* isget MIBGET/MIBSET flag.* wlandev wlan device structure.* priv "priv" structure.* hw "hw" structure.* msg Message structure.* data Data buffer.** Returns: * 0 - Success.* ~0 - Error.*----------------------------------------------------------------*/static int prism2mib_uint32array(mibrec_t *mib,int isget,wlandevice_t *wlandev,prism2sta_priv_t *priv,hfa384x_t *hw,p80211msg_dot11req_mibset_t *msg,void *data){ int result; UINT32 *uint32 = (UINT32 *) data; UINT8 bytebuf[MIB_TMP_MAXLEN]; UINT16 *wordbuf = (UINT16*) bytebuf; int i, cnt; DBFENTER; cnt = mib->parm2 / sizeof(UINT16); if (isget) { result = hfa384x_drvr_getconfig(hw, mib->parm1, wordbuf, mib->parm2); for (i = 0; i < cnt; i++) prism2mgmt_prism2int2p80211int(wordbuf+i, uint32+i); } else { for (i = 0; i < cnt; i++) prism2mgmt_p80211int2prism2int(wordbuf+i, uint32+i); result = hfa384x_drvr_setconfig(hw, mib->parm1, wordbuf, mib->parm2); } DBFEXIT; return(result);}/*----------------------------------------------------------------* prism2mib_uint32offset** Get/set a single element in an array of uint32 data.** MIB record parameters:* parm1 Prism2 RID value.* parm2 Number of bytes of RID data.* parm3 Element index.** Arguments:* mib MIB record.* isget MIBGET/MIBSET flag.* wlandev wlan device structure.* priv "priv" structure.* hw "hw" structure.* msg Message structure.* data Data buffer.** Returns: * 0 - Success.* ~0 - Error.*----------------------------------------------------------------*/static int prism2mib_uint32offset(mibrec_t *mib,int isget,wlandevice_t *wlandev,prism2sta_priv_t *priv,hfa384x_t *hw,p80211msg_dot11req_mibset_t *msg,void *data){ int result; UINT32 *uint32 = (UINT32*) data; UINT8 bytebuf[MIB_TMP_MAXLEN]; UINT16 *wordbuf = (UINT16*) bytebuf; UINT16 cnt; DBFENTER; cnt = mib->parm2 / sizeof(UINT16); result = hfa384x_drvr_getconfig(hw, mib->parm1, wordbuf, mib->parm2); if (result == 0) { if (isget) { if (mib->parm3 < cnt) prism2mgmt_prism2int2p80211int(wordbuf+mib->parm3, uint32); else *uint32 = 0; } else { if (mib->parm3 < cnt) { prism2mgmt_p80211int2prism2int(wordbuf+mib->parm3, uint32); result = hfa384x_drvr_setconfig(hw, mib->parm1, wordbuf, mib->parm2); } } } DBFEXIT; return(result);}/*----------------------------------------------------------------* prism2mib_truth** Get/set truth data.** MIB record parameters:* parm1 Prism2 RID value.* parm2 Not used.* parm3 Not used.** Arguments:* mib MIB record.* isget MIBGET/MIBSET flag.* wlandev wlan device structure.* priv "priv" structure.* hw "hw" structure.* msg Message structure.* data Data buffer.** Returns: * 0 - Success.* ~0 - Error.*----------------------------------------------------------------*/static int prism2mib_truth(mibrec_t *mib,int isget,wlandevice_t *wlandev,prism2sta_priv_t *priv,hfa384x_t *hw,p80211msg_dot11req_mibset_t *msg,void *data){ int result; UINT32 *uint32 = (UINT32*) data; UINT8 bytebuf[MIB_TMP_MAXLEN]; UINT16
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?