1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0-only */ 2*4882a593Smuzhiyun /* 3*4882a593Smuzhiyun * This file is part of wl12xx 4*4882a593Smuzhiyun * 5*4882a593Smuzhiyun * Copyright (C) 2012 Texas Instruments. All rights reserved. 6*4882a593Smuzhiyun */ 7*4882a593Smuzhiyun 8*4882a593Smuzhiyun #ifndef __WL12XX_EVENT_H__ 9*4882a593Smuzhiyun #define __WL12XX_EVENT_H__ 10*4882a593Smuzhiyun 11*4882a593Smuzhiyun #include "../wlcore/wlcore.h" 12*4882a593Smuzhiyun 13*4882a593Smuzhiyun enum { 14*4882a593Smuzhiyun MEASUREMENT_START_EVENT_ID = BIT(8), 15*4882a593Smuzhiyun MEASUREMENT_COMPLETE_EVENT_ID = BIT(9), 16*4882a593Smuzhiyun SCAN_COMPLETE_EVENT_ID = BIT(10), 17*4882a593Smuzhiyun WFD_DISCOVERY_COMPLETE_EVENT_ID = BIT(11), 18*4882a593Smuzhiyun AP_DISCOVERY_COMPLETE_EVENT_ID = BIT(12), 19*4882a593Smuzhiyun RESERVED1 = BIT(13), 20*4882a593Smuzhiyun PSPOLL_DELIVERY_FAILURE_EVENT_ID = BIT(14), 21*4882a593Smuzhiyun ROLE_STOP_COMPLETE_EVENT_ID = BIT(15), 22*4882a593Smuzhiyun RADAR_DETECTED_EVENT_ID = BIT(16), 23*4882a593Smuzhiyun CHANNEL_SWITCH_COMPLETE_EVENT_ID = BIT(17), 24*4882a593Smuzhiyun BSS_LOSE_EVENT_ID = BIT(18), 25*4882a593Smuzhiyun REGAINED_BSS_EVENT_ID = BIT(19), 26*4882a593Smuzhiyun MAX_TX_RETRY_EVENT_ID = BIT(20), 27*4882a593Smuzhiyun DUMMY_PACKET_EVENT_ID = BIT(21), 28*4882a593Smuzhiyun SOFT_GEMINI_SENSE_EVENT_ID = BIT(22), 29*4882a593Smuzhiyun CHANGE_AUTO_MODE_TIMEOUT_EVENT_ID = BIT(23), 30*4882a593Smuzhiyun SOFT_GEMINI_AVALANCHE_EVENT_ID = BIT(24), 31*4882a593Smuzhiyun PLT_RX_CALIBRATION_COMPLETE_EVENT_ID = BIT(25), 32*4882a593Smuzhiyun INACTIVE_STA_EVENT_ID = BIT(26), 33*4882a593Smuzhiyun PEER_REMOVE_COMPLETE_EVENT_ID = BIT(27), 34*4882a593Smuzhiyun PERIODIC_SCAN_COMPLETE_EVENT_ID = BIT(28), 35*4882a593Smuzhiyun PERIODIC_SCAN_REPORT_EVENT_ID = BIT(29), 36*4882a593Smuzhiyun BA_SESSION_RX_CONSTRAINT_EVENT_ID = BIT(30), 37*4882a593Smuzhiyun REMAIN_ON_CHANNEL_COMPLETE_EVENT_ID = BIT(31), 38*4882a593Smuzhiyun }; 39*4882a593Smuzhiyun 40*4882a593Smuzhiyun struct wl12xx_event_mailbox { 41*4882a593Smuzhiyun __le32 events_vector; 42*4882a593Smuzhiyun __le32 events_mask; 43*4882a593Smuzhiyun __le32 reserved_1; 44*4882a593Smuzhiyun __le32 reserved_2; 45*4882a593Smuzhiyun 46*4882a593Smuzhiyun u8 number_of_scan_results; 47*4882a593Smuzhiyun u8 scan_tag; 48*4882a593Smuzhiyun u8 completed_scan_status; 49*4882a593Smuzhiyun u8 reserved_3; 50*4882a593Smuzhiyun 51*4882a593Smuzhiyun u8 soft_gemini_sense_info; 52*4882a593Smuzhiyun u8 soft_gemini_protective_info; 53*4882a593Smuzhiyun s8 rssi_snr_trigger_metric[NUM_OF_RSSI_SNR_TRIGGERS]; 54*4882a593Smuzhiyun u8 change_auto_mode_timeout; 55*4882a593Smuzhiyun u8 scheduled_scan_status; 56*4882a593Smuzhiyun u8 reserved4; 57*4882a593Smuzhiyun /* tuned channel (roc) */ 58*4882a593Smuzhiyun u8 roc_channel; 59*4882a593Smuzhiyun 60*4882a593Smuzhiyun __le16 hlid_removed_bitmap; 61*4882a593Smuzhiyun 62*4882a593Smuzhiyun /* bitmap of aged stations (by HLID) */ 63*4882a593Smuzhiyun __le16 sta_aging_status; 64*4882a593Smuzhiyun 65*4882a593Smuzhiyun /* bitmap of stations (by HLID) which exceeded max tx retries */ 66*4882a593Smuzhiyun __le16 sta_tx_retry_exceeded; 67*4882a593Smuzhiyun 68*4882a593Smuzhiyun /* discovery completed results */ 69*4882a593Smuzhiyun u8 discovery_tag; 70*4882a593Smuzhiyun u8 number_of_preq_results; 71*4882a593Smuzhiyun u8 number_of_prsp_results; 72*4882a593Smuzhiyun u8 reserved_5; 73*4882a593Smuzhiyun 74*4882a593Smuzhiyun /* rx ba constraint */ 75*4882a593Smuzhiyun u8 role_id; /* 0xFF means any role. */ 76*4882a593Smuzhiyun u8 rx_ba_allowed; 77*4882a593Smuzhiyun u8 reserved_6[2]; 78*4882a593Smuzhiyun 79*4882a593Smuzhiyun /* Channel switch results */ 80*4882a593Smuzhiyun 81*4882a593Smuzhiyun u8 channel_switch_role_id; 82*4882a593Smuzhiyun u8 channel_switch_status; 83*4882a593Smuzhiyun u8 reserved_7[2]; 84*4882a593Smuzhiyun 85*4882a593Smuzhiyun u8 ps_poll_delivery_failure_role_ids; 86*4882a593Smuzhiyun u8 stopped_role_ids; 87*4882a593Smuzhiyun u8 started_role_ids; 88*4882a593Smuzhiyun 89*4882a593Smuzhiyun u8 reserved_8[9]; 90*4882a593Smuzhiyun } __packed; 91*4882a593Smuzhiyun 92*4882a593Smuzhiyun int wl12xx_wait_for_event(struct wl1271 *wl, enum wlcore_wait_event event, 93*4882a593Smuzhiyun bool *timeout); 94*4882a593Smuzhiyun int wl12xx_process_mailbox_events(struct wl1271 *wl); 95*4882a593Smuzhiyun 96*4882a593Smuzhiyun #endif 97*4882a593Smuzhiyun 98