1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0-only */ 2*4882a593Smuzhiyun /* 3*4882a593Smuzhiyun * This file is part of wl18xx 4*4882a593Smuzhiyun * 5*4882a593Smuzhiyun * Copyright (C) 2012 Texas Instruments. All rights reserved. 6*4882a593Smuzhiyun */ 7*4882a593Smuzhiyun 8*4882a593Smuzhiyun #ifndef __WL18XX_EVENT_H__ 9*4882a593Smuzhiyun #define __WL18XX_EVENT_H__ 10*4882a593Smuzhiyun 11*4882a593Smuzhiyun #include "../wlcore/wlcore.h" 12*4882a593Smuzhiyun 13*4882a593Smuzhiyun enum { 14*4882a593Smuzhiyun SCAN_COMPLETE_EVENT_ID = BIT(8), 15*4882a593Smuzhiyun RADAR_DETECTED_EVENT_ID = BIT(9), 16*4882a593Smuzhiyun CHANNEL_SWITCH_COMPLETE_EVENT_ID = BIT(10), 17*4882a593Smuzhiyun BSS_LOSS_EVENT_ID = BIT(11), 18*4882a593Smuzhiyun MAX_TX_FAILURE_EVENT_ID = BIT(12), 19*4882a593Smuzhiyun DUMMY_PACKET_EVENT_ID = BIT(13), 20*4882a593Smuzhiyun INACTIVE_STA_EVENT_ID = BIT(14), 21*4882a593Smuzhiyun PEER_REMOVE_COMPLETE_EVENT_ID = BIT(15), 22*4882a593Smuzhiyun PERIODIC_SCAN_COMPLETE_EVENT_ID = BIT(16), 23*4882a593Smuzhiyun BA_SESSION_RX_CONSTRAINT_EVENT_ID = BIT(17), 24*4882a593Smuzhiyun REMAIN_ON_CHANNEL_COMPLETE_EVENT_ID = BIT(18), 25*4882a593Smuzhiyun DFS_CHANNELS_CONFIG_COMPLETE_EVENT = BIT(19), 26*4882a593Smuzhiyun PERIODIC_SCAN_REPORT_EVENT_ID = BIT(20), 27*4882a593Smuzhiyun RX_BA_WIN_SIZE_CHANGE_EVENT_ID = BIT(21), 28*4882a593Smuzhiyun SMART_CONFIG_SYNC_EVENT_ID = BIT(22), 29*4882a593Smuzhiyun SMART_CONFIG_DECODE_EVENT_ID = BIT(23), 30*4882a593Smuzhiyun TIME_SYNC_EVENT_ID = BIT(24), 31*4882a593Smuzhiyun FW_LOGGER_INDICATION = BIT(25), 32*4882a593Smuzhiyun }; 33*4882a593Smuzhiyun 34*4882a593Smuzhiyun enum wl18xx_radar_types { 35*4882a593Smuzhiyun RADAR_TYPE_NONE, 36*4882a593Smuzhiyun RADAR_TYPE_REGULAR, 37*4882a593Smuzhiyun RADAR_TYPE_CHIRP 38*4882a593Smuzhiyun }; 39*4882a593Smuzhiyun 40*4882a593Smuzhiyun struct wl18xx_event_mailbox { 41*4882a593Smuzhiyun __le32 events_vector; 42*4882a593Smuzhiyun 43*4882a593Smuzhiyun u8 number_of_scan_results; 44*4882a593Smuzhiyun u8 number_of_sched_scan_results; 45*4882a593Smuzhiyun 46*4882a593Smuzhiyun __le16 channel_switch_role_id_bitmap; 47*4882a593Smuzhiyun 48*4882a593Smuzhiyun s8 rssi_snr_trigger_metric[NUM_OF_RSSI_SNR_TRIGGERS]; 49*4882a593Smuzhiyun 50*4882a593Smuzhiyun /* bitmap of removed links */ 51*4882a593Smuzhiyun __le32 hlid_removed_bitmap; 52*4882a593Smuzhiyun 53*4882a593Smuzhiyun /* rx ba constraint */ 54*4882a593Smuzhiyun __le16 rx_ba_role_id_bitmap; /* 0xfff means any role. */ 55*4882a593Smuzhiyun __le16 rx_ba_allowed_bitmap; 56*4882a593Smuzhiyun 57*4882a593Smuzhiyun /* bitmap of roc completed (by role id) */ 58*4882a593Smuzhiyun __le16 roc_completed_bitmap; 59*4882a593Smuzhiyun 60*4882a593Smuzhiyun /* bitmap of stations (by role id) with bss loss */ 61*4882a593Smuzhiyun __le16 bss_loss_bitmap; 62*4882a593Smuzhiyun 63*4882a593Smuzhiyun /* bitmap of stations (by HLID) which exceeded max tx retries */ 64*4882a593Smuzhiyun __le16 tx_retry_exceeded_bitmap; 65*4882a593Smuzhiyun 66*4882a593Smuzhiyun /* time sync high msb*/ 67*4882a593Smuzhiyun __le16 time_sync_tsf_high_msb; 68*4882a593Smuzhiyun 69*4882a593Smuzhiyun /* bitmap of inactive stations (by HLID) */ 70*4882a593Smuzhiyun __le16 inactive_sta_bitmap; 71*4882a593Smuzhiyun 72*4882a593Smuzhiyun /* time sync high lsb*/ 73*4882a593Smuzhiyun __le16 time_sync_tsf_high_lsb; 74*4882a593Smuzhiyun 75*4882a593Smuzhiyun /* rx BA win size indicated by RX_BA_WIN_SIZE_CHANGE_EVENT_ID */ 76*4882a593Smuzhiyun u8 rx_ba_role_id; 77*4882a593Smuzhiyun u8 rx_ba_link_id; 78*4882a593Smuzhiyun u8 rx_ba_win_size; 79*4882a593Smuzhiyun u8 padding; 80*4882a593Smuzhiyun 81*4882a593Smuzhiyun /* smart config */ 82*4882a593Smuzhiyun u8 sc_ssid_len; 83*4882a593Smuzhiyun u8 sc_pwd_len; 84*4882a593Smuzhiyun u8 sc_token_len; 85*4882a593Smuzhiyun u8 padding1; 86*4882a593Smuzhiyun u8 sc_ssid[32]; 87*4882a593Smuzhiyun u8 sc_pwd[64]; 88*4882a593Smuzhiyun u8 sc_token[32]; 89*4882a593Smuzhiyun 90*4882a593Smuzhiyun /* smart config sync channel */ 91*4882a593Smuzhiyun u8 sc_sync_channel; 92*4882a593Smuzhiyun u8 sc_sync_band; 93*4882a593Smuzhiyun 94*4882a593Smuzhiyun /* time sync low msb*/ 95*4882a593Smuzhiyun __le16 time_sync_tsf_low_msb; 96*4882a593Smuzhiyun 97*4882a593Smuzhiyun /* radar detect */ 98*4882a593Smuzhiyun u8 radar_channel; 99*4882a593Smuzhiyun u8 radar_type; 100*4882a593Smuzhiyun 101*4882a593Smuzhiyun /* time sync low lsb*/ 102*4882a593Smuzhiyun __le16 time_sync_tsf_low_lsb; 103*4882a593Smuzhiyun 104*4882a593Smuzhiyun } __packed; 105*4882a593Smuzhiyun 106*4882a593Smuzhiyun int wl18xx_wait_for_event(struct wl1271 *wl, enum wlcore_wait_event event, 107*4882a593Smuzhiyun bool *timeout); 108*4882a593Smuzhiyun int wl18xx_process_mailbox_events(struct wl1271 *wl); 109*4882a593Smuzhiyun 110*4882a593Smuzhiyun #endif 111