wl18xx: add time sync configuration api

Add time sync configuration api.
The new api allows to configure the synchronization
mode (STA/AP/MESH) and (in case of Mesh mode) the
master address of each zone.

Signed-off-by: Guy Mishol <guym@ti.com>
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
This commit is contained in:
Guy Mishol 2016-08-24 14:35:27 +03:00 committed by Kalle Valo
parent 7703773ef1
commit c5aa954181
4 changed files with 46 additions and 0 deletions

View File

@ -309,3 +309,32 @@ int wl18xx_acx_dynamic_fw_traces(struct wl1271 *wl)
kfree(acx); kfree(acx);
return ret; return ret;
} }
int wl18xx_acx_time_sync_cfg(struct wl1271 *wl)
{
struct acx_time_sync_cfg *acx;
int ret;
wl1271_debug(DEBUG_ACX, "acx time sync cfg: mode %d, addr: %pM",
wl->conf.sg.params[WL18XX_CONF_SG_TIME_SYNC],
wl->zone_master_mac_addr);
acx = kzalloc(sizeof(*acx), GFP_KERNEL);
if (!acx) {
ret = -ENOMEM;
goto out;
}
acx->sync_mode = wl->conf.sg.params[WL18XX_CONF_SG_TIME_SYNC];
memcpy(acx->zone_mac_addr, wl->zone_master_mac_addr, ETH_ALEN);
ret = wl1271_cmd_configure(wl, ACX_TIME_SYNC_CFG,
acx, sizeof(*acx));
if (ret < 0) {
wl1271_warning("acx time sync cfg failed: %d", ret);
goto out;
}
out:
kfree(acx);
return ret;
}

View File

@ -37,6 +37,7 @@ enum {
ACX_RX_BA_FILTER = 0x0058, ACX_RX_BA_FILTER = 0x0058,
ACX_AP_SLEEP_CFG = 0x0059, ACX_AP_SLEEP_CFG = 0x0059,
ACX_DYNAMIC_TRACES_CFG = 0x005A, ACX_DYNAMIC_TRACES_CFG = 0x005A,
ACX_TIME_SYNC_CFG = 0x005B,
}; };
/* numbers of bits the length field takes (add 1 for the actual number) */ /* numbers of bits the length field takes (add 1 for the actual number) */
@ -388,6 +389,17 @@ struct acx_dynamic_fw_traces_cfg {
__le32 dynamic_fw_traces; __le32 dynamic_fw_traces;
} __packed; } __packed;
/*
* ACX_TIME_SYNC_CFG
* configure the time sync parameters
*/
struct acx_time_sync_cfg {
struct acx_header header;
u8 sync_mode;
u8 zone_mac_addr[ETH_ALEN];
u8 padding[1];
} __packed;
int wl18xx_acx_host_if_cfg_bitmap(struct wl1271 *wl, u32 host_cfg_bitmap, int wl18xx_acx_host_if_cfg_bitmap(struct wl1271 *wl, u32 host_cfg_bitmap,
u32 sdio_blk_size, u32 extra_mem_blks, u32 sdio_blk_size, u32 extra_mem_blks,
u32 len_field_size); u32 len_field_size);
@ -402,5 +414,6 @@ int wl18xx_acx_interrupt_notify_config(struct wl1271 *wl, bool action);
int wl18xx_acx_rx_ba_filter(struct wl1271 *wl, bool action); int wl18xx_acx_rx_ba_filter(struct wl1271 *wl, bool action);
int wl18xx_acx_ap_sleep(struct wl1271 *wl); int wl18xx_acx_ap_sleep(struct wl1271 *wl);
int wl18xx_acx_dynamic_fw_traces(struct wl1271 *wl); int wl18xx_acx_dynamic_fw_traces(struct wl1271 *wl);
int wl18xx_acx_time_sync_cfg(struct wl1271 *wl);
#endif /* __WL18XX_ACX_H__ */ #endif /* __WL18XX_ACX_H__ */

View File

@ -22,6 +22,7 @@
#include <net/genetlink.h> #include <net/genetlink.h>
#include "event.h" #include "event.h"
#include "scan.h" #include "scan.h"
#include "conf.h"
#include "../wlcore/cmd.h" #include "../wlcore/cmd.h"
#include "../wlcore/debug.h" #include "../wlcore/debug.h"
#include "../wlcore/vendor_cmd.h" #include "../wlcore/vendor_cmd.h"

View File

@ -501,6 +501,9 @@ struct wl1271 {
/* dynamic fw traces */ /* dynamic fw traces */
u32 dynamic_fw_traces; u32 dynamic_fw_traces;
/* time sync zone master */
u8 zone_master_mac_addr[ETH_ALEN];
}; };
int wlcore_probe(struct wl1271 *wl, struct platform_device *pdev); int wlcore_probe(struct wl1271 *wl, struct platform_device *pdev);