mirror of https://gitee.com/openkylin/linux.git
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:
parent
7703773ef1
commit
c5aa954181
|
@ -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;
|
||||||
|
}
|
||||||
|
|
|
@ -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__ */
|
||||||
|
|
|
@ -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"
|
||||||
|
|
|
@ -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);
|
||||||
|
|
Loading…
Reference in New Issue