wlcore/wl18xx : add time sync event handling
authorMachani, Yaniv <yanivma@ti.com>
Thu, 30 Jul 2015 19:38:19 +0000 (22:38 +0300)
committerKalle Valo <kvalo@codeaurora.org>
Mon, 10 Aug 2015 19:16:17 +0000 (22:16 +0300)
Added support for a new time sync event
the event data contains the WiLink TSF value.
To trigger the event, a HW modification is required,
so as a supporting firmware binary.

Signed-off-by: Yaniv Machani <yanivma@ti.com>
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
drivers/net/wireless/ti/wl18xx/event.c
drivers/net/wireless/ti/wl18xx/event.h
drivers/net/wireless/ti/wl18xx/main.c

index 548bb9e7e91ec054ad7da9022d325e42b007a4cf..09c7e098f4607bd6cb6d0b0f89654f63bcf6de74 100644 (file)
@@ -112,6 +112,14 @@ static int wlcore_smart_config_decode_event(struct wl1271 *wl,
        return 0;
 }
 
+static void wlcore_event_time_sync(struct wl1271 *wl, u16 tsf_msb, u16 tsf_lsb)
+{
+       u32 clock;
+       /* convert the MSB+LSB to a u32 TSF value */
+       clock = (tsf_msb << 16) | tsf_lsb;
+       wl1271_info("TIME_SYNC_EVENT_ID: clock %u", clock);
+}
+
 int wl18xx_process_mailbox_events(struct wl1271 *wl)
 {
        struct wl18xx_event_mailbox *mbox = wl->mbox;
@@ -128,6 +136,11 @@ int wl18xx_process_mailbox_events(struct wl1271 *wl)
                        wl18xx_scan_completed(wl, wl->scan_wlvif);
        }
 
+       if (vector & TIME_SYNC_EVENT_ID)
+               wlcore_event_time_sync(wl,
+                               mbox->time_sync_tsf_msb,
+                               mbox->time_sync_tsf_lsb);
+
        if (vector & RADAR_DETECTED_EVENT_ID) {
                wl1271_info("radar event: channel %d type %s",
                            mbox->radar_channel,
index 266ee87834e4332e9fe87abdc6fb172e58db8d8c..f3d4f13379cb0dcd1846119d27941c8301167dac 100644 (file)
@@ -38,8 +38,9 @@ enum {
        REMAIN_ON_CHANNEL_COMPLETE_EVENT_ID      = BIT(18),
        DFS_CHANNELS_CONFIG_COMPLETE_EVENT       = BIT(19),
        PERIODIC_SCAN_REPORT_EVENT_ID            = BIT(20),
-       SMART_CONFIG_SYNC_EVENT_ID               = BIT(22),
-       SMART_CONFIG_DECODE_EVENT_ID             = BIT(23),
+       SMART_CONFIG_SYNC_EVENT_ID               = BIT(22),
+       SMART_CONFIG_DECODE_EVENT_ID             = BIT(23),
+       TIME_SYNC_EVENT_ID                       = BIT(24),
 };
 
 enum wl18xx_radar_types {
@@ -95,13 +96,16 @@ struct wl18xx_event_mailbox {
        /* smart config sync channel */
        u8 sc_sync_channel;
        u8 sc_sync_band;
-       u8 padding2[2];
 
+       /* time sync msb*/
+       u16 time_sync_tsf_msb;
        /* radar detect */
        u8 radar_channel;
        u8 radar_type;
 
-       u8 padding3[2];
+       /* time sync lsb*/
+       u16 time_sync_tsf_lsb;
+
 } __packed;
 
 int wl18xx_wait_for_event(struct wl1271 *wl, enum wlcore_wait_event event,
index 8ce9825ee57762c26ae3b220876f7ae1aa0571f1..3da6ac60c65d030176292c49ea5d671de4f67052 100644 (file)
@@ -1026,8 +1026,8 @@ static int wl18xx_boot(struct wl1271 *wl)
                CHANNEL_SWITCH_COMPLETE_EVENT_ID |
                DFS_CHANNELS_CONFIG_COMPLETE_EVENT |
                SMART_CONFIG_SYNC_EVENT_ID |
-               SMART_CONFIG_DECODE_EVENT_ID;
-;
+               SMART_CONFIG_DECODE_EVENT_ID |
+               TIME_SYNC_EVENT_ID;
 
        wl->ap_event_mask = MAX_TX_FAILURE_EVENT_ID;