Commit b3306865 authored by Glen Lee's avatar Glen Lee Committed by Greg Kroah-Hartman

staging: wilc1000: wilc_set_wfi_drv_handler: add mac index

Firmware supports sta/ap concurrency so mac index will be passed to wilc.
Remove wilc_set_wfi_drv_handler in scan and connect functions, and call
the function in ndo_open which is wilc_mac_open.
WID_SET_DRV_HANDLER value has been changed as well.
Signed-off-by: default avatarGlen Lee <glen.lee@atmel.com>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent f6ab21b5
...@@ -320,9 +320,9 @@ static s32 handle_set_wfi_drv_handler(struct wilc_vif *vif, ...@@ -320,9 +320,9 @@ static s32 handle_set_wfi_drv_handler(struct wilc_vif *vif,
struct wid wid; struct wid wid;
wid.id = (u16)WID_SET_DRV_HANDLER; wid.id = (u16)WID_SET_DRV_HANDLER;
wid.type = WID_INT; wid.type = WID_STR;
wid.val = (s8 *)&hif_drv_handler->handler; wid.val = (s8 *)hif_drv_handler;
wid.size = sizeof(u32); wid.size = sizeof(*hif_drv_handler);
result = wilc_send_config_pkt(vif->wilc, SET_CFG, &wid, 1, result = wilc_send_config_pkt(vif->wilc, SET_CFG, &wid, 1,
hif_drv_handler->handler); hif_drv_handler->handler);
...@@ -3557,7 +3557,7 @@ int wilc_wait_msg_queue_idle(void) ...@@ -3557,7 +3557,7 @@ int wilc_wait_msg_queue_idle(void)
return result; return result;
} }
int wilc_set_wfi_drv_handler(struct wilc_vif *vif, int index) int wilc_set_wfi_drv_handler(struct wilc_vif *vif, int index, u8 mac_idx)
{ {
int result = 0; int result = 0;
struct host_if_msg msg; struct host_if_msg msg;
...@@ -3565,6 +3565,7 @@ int wilc_set_wfi_drv_handler(struct wilc_vif *vif, int index) ...@@ -3565,6 +3565,7 @@ int wilc_set_wfi_drv_handler(struct wilc_vif *vif, int index)
memset(&msg, 0, sizeof(struct host_if_msg)); memset(&msg, 0, sizeof(struct host_if_msg));
msg.id = HOST_IF_MSG_SET_WFIDRV_HANDLER; msg.id = HOST_IF_MSG_SET_WFIDRV_HANDLER;
msg.body.drv.handler = index; msg.body.drv.handler = index;
msg.body.drv.mac_idx = mac_idx;
msg.vif = vif; msg.vif = vif;
result = wilc_mq_send(&hif_msg_q, &msg, sizeof(struct host_if_msg)); result = wilc_mq_send(&hif_msg_q, &msg, sizeof(struct host_if_msg));
...@@ -3909,7 +3910,7 @@ s32 wilc_deinit(struct wilc_vif *vif) ...@@ -3909,7 +3910,7 @@ s32 wilc_deinit(struct wilc_vif *vif)
del_timer_sync(&hif_drv->remain_on_ch_timer); del_timer_sync(&hif_drv->remain_on_ch_timer);
wilc_set_wfi_drv_handler(vif, 0); wilc_set_wfi_drv_handler(vif, 0, 0);
down(&hif_sema_driver); down(&hif_sema_driver);
if (hif_drv->usr_scan_req.scan_result) { if (hif_drv->usr_scan_req.scan_result) {
......
...@@ -217,6 +217,7 @@ struct user_conn_req { ...@@ -217,6 +217,7 @@ struct user_conn_req {
struct drv_handler { struct drv_handler {
u32 handler; u32 handler;
u8 mac_idx;
}; };
struct op_mode { struct op_mode {
...@@ -363,7 +364,7 @@ int wilc_remain_on_channel(struct wilc_vif *vif, u32 session_id, ...@@ -363,7 +364,7 @@ int wilc_remain_on_channel(struct wilc_vif *vif, u32 session_id,
void *user_arg); void *user_arg);
int wilc_listen_state_expired(struct wilc_vif *vif, u32 session_id); int wilc_listen_state_expired(struct wilc_vif *vif, u32 session_id);
int wilc_frame_register(struct wilc_vif *vif, u16 frame_type, bool reg); int wilc_frame_register(struct wilc_vif *vif, u16 frame_type, bool reg);
int wilc_set_wfi_drv_handler(struct wilc_vif *vif, int index); int wilc_set_wfi_drv_handler(struct wilc_vif *vif, int index, u8 mac_idx);
int wilc_set_operation_mode(struct wilc_vif *vif, u32 mode); int wilc_set_operation_mode(struct wilc_vif *vif, u32 mode);
int wilc_get_statistics(struct wilc_vif *vif, struct rf_info *stats); int wilc_get_statistics(struct wilc_vif *vif, struct rf_info *stats);
void wilc_resolve_disconnect_aberration(struct wilc_vif *vif); void wilc_resolve_disconnect_aberration(struct wilc_vif *vif);
......
...@@ -1024,6 +1024,25 @@ int wilc_mac_open(struct net_device *ndev) ...@@ -1024,6 +1024,25 @@ int wilc_mac_open(struct net_device *ndev)
for (i = 0; i < wl->vif_num; i++) { for (i = 0; i < wl->vif_num; i++) {
if (ndev == wl->vif[i]->ndev) { if (ndev == wl->vif[i]->ndev) {
memcpy(wl->vif[i]->src_addr, mac_add, ETH_ALEN); memcpy(wl->vif[i]->src_addr, mac_add, ETH_ALEN);
if (vif->iftype == AP_MODE) {
wilc_set_wfi_drv_handler(vif,
wilc_get_vif_idx(vif),
0);
} else if (!wilc_wlan_get_num_conn_ifcs(wilc)) {
wilc_set_wfi_drv_handler(vif,
wilc_get_vif_idx(vif),
wilc->open_ifcs);
} else {
if (memcmp(wilc->vif[i ^ 1]->bssid,
wilc->vif[i ^ 1]->src_addr, 6))
wilc_set_wfi_drv_handler(vif,
wilc_get_vif_idx(vif),
0);
else
wilc_set_wfi_drv_handler(vif,
wilc_get_vif_idx(vif),
1);
}
wilc_set_operation_mode(vif, vif->iftype); wilc_set_operation_mode(vif, vif->iftype);
break; break;
} }
......
...@@ -633,7 +633,6 @@ static int scan(struct wiphy *wiphy, struct cfg80211_scan_request *request) ...@@ -633,7 +633,6 @@ static int scan(struct wiphy *wiphy, struct cfg80211_scan_request *request)
priv->u32RcvdChCount = 0; priv->u32RcvdChCount = 0;
wilc_set_wfi_drv_handler(vif, wilc_get_vif_idx(vif));
reset_shadow_found(); reset_shadow_found();
priv->bCfgScanning = true; priv->bCfgScanning = true;
...@@ -714,8 +713,6 @@ static int connect(struct wiphy *wiphy, struct net_device *dev, ...@@ -714,8 +713,6 @@ static int connect(struct wiphy *wiphy, struct net_device *dev,
vif = netdev_priv(priv->dev); vif = netdev_priv(priv->dev);
pstrWFIDrv = (struct host_if_drv *)(priv->hWILCWFIDrv); pstrWFIDrv = (struct host_if_drv *)(priv->hWILCWFIDrv);
wilc_set_wfi_drv_handler(vif, wilc_get_vif_idx(vif));
PRINT_D(CFG80211_DBG, "Connecting to SSID [%s] on netdev [%p] host if [%p]\n", sme->ssid, dev, priv->hWILCWFIDrv); PRINT_D(CFG80211_DBG, "Connecting to SSID [%s] on netdev [%p] host if [%p]\n", sme->ssid, dev, priv->hWILCWFIDrv);
if (!(strncmp(sme->ssid, "DIRECT-", 7))) { if (!(strncmp(sme->ssid, "DIRECT-", 7))) {
PRINT_D(CFG80211_DBG, "Connected to Direct network,OBSS disabled\n"); PRINT_D(CFG80211_DBG, "Connected to Direct network,OBSS disabled\n");
...@@ -2152,7 +2149,8 @@ static int change_virtual_intf(struct wiphy *wiphy, struct net_device *dev, ...@@ -2152,7 +2149,8 @@ static int change_virtual_intf(struct wiphy *wiphy, struct net_device *dev,
vif->iftype = AP_MODE; vif->iftype = AP_MODE;
if (wl->initialized) { if (wl->initialized) {
wilc_set_wfi_drv_handler(vif, wilc_get_vif_idx(vif)); wilc_set_wfi_drv_handler(vif, wilc_get_vif_idx(vif),
0);
wilc_set_operation_mode(vif, AP_MODE); wilc_set_operation_mode(vif, AP_MODE);
wilc_set_power_mgmt(vif, 0, 0); wilc_set_power_mgmt(vif, 0, 0);
} }
......
...@@ -832,7 +832,6 @@ typedef enum { ...@@ -832,7 +832,6 @@ typedef enum {
/* Custom Integer WID list */ /* Custom Integer WID list */
WID_GET_INACTIVE_TIME = 0x2084, WID_GET_INACTIVE_TIME = 0x2084,
WID_SET_DRV_HANDLER = 0X2085,
WID_SET_OPERATION_MODE = 0X2086, WID_SET_OPERATION_MODE = 0X2086,
/* EMAC String WID list */ /* EMAC String WID list */
WID_SSID = 0x3000, WID_SSID = 0x3000,
...@@ -865,6 +864,7 @@ typedef enum { ...@@ -865,6 +864,7 @@ typedef enum {
WID_MODEL_NAME = 0x3027, /*Added for CAPI tool */ WID_MODEL_NAME = 0x3027, /*Added for CAPI tool */
WID_MODEL_NUM = 0x3028, /*Added for CAPI tool */ WID_MODEL_NUM = 0x3028, /*Added for CAPI tool */
WID_DEVICE_NAME = 0x3029, /*Added for CAPI tool */ WID_DEVICE_NAME = 0x3029, /*Added for CAPI tool */
WID_SET_DRV_HANDLER = 0x3030,
/* NMAC String WID list */ /* NMAC String WID list */
WID_11N_P_ACTION_REQ = 0x3080, WID_11N_P_ACTION_REQ = 0x3080,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment