| /* |
| * Bad AP Manager for ADPS |
| * |
| * Copyright (C) 2020, Broadcom. |
| * |
| * Unless you and Broadcom execute a separate written software license |
| * agreement governing use of this software, this software is licensed to you |
| * under the terms of the GNU General Public License version 2 (the "GPL"), |
| * available at http://www.broadcom.com/licenses/GPLv2.php, with the |
| * following added to such license: |
| * |
| * As a special exception, the copyright holders of this software give you |
| * permission to link this software with independent modules, and to copy and |
| * distribute the resulting executable under terms of your choice, provided that |
| * you also meet, for each linked independent module, the terms and conditions of |
| * the license of that module. An independent module is a module which is not |
| * derived from this software. The special exception does not apply to any |
| * modifications of the software. |
| * |
| * |
| * <<Broadcom-WL-IPTag/Dual:>> |
| */ |
| #ifndef _WL_BAM_H_ |
| #define _WL_BAM_H_ |
| #include <typedefs.h> |
| #include <linux/kernel.h> |
| #include <linux/netdevice.h> |
| #include <net/cfg80211.h> |
| |
| #include <wl_cfgp2p.h> |
| #include <dhd.h> |
| |
| #define WL_BAD_AP_MAX_ENTRY_NUM 20u |
| |
| typedef struct wl_bad_ap_mngr { |
| osl_t *osh; |
| |
| uint32 num; |
| spinlock_t lock; |
| #if !defined(DHD_ADPS_BAM_EXPORT) |
| struct mutex fs_lock; /* lock for bad ap file list */ |
| #endif /* !DHD_ADPS_BAM_EXPORT */ |
| struct list_head list; |
| } wl_bad_ap_mngr_t; |
| |
| typedef struct wl_bad_ap_info { |
| struct ether_addr bssid; |
| #if !defined(DHD_ADPS_BAM_EXPORT) |
| struct tm tm; |
| uint32 status; |
| uint32 reason; |
| uint32 connect_count; |
| #endif /* !DHD_ADPS_BAM_EXPORT */ |
| } wl_bad_ap_info_t; |
| |
| typedef struct wl_bad_ap_info_entry { |
| wl_bad_ap_info_t bad_ap; |
| struct list_head list; |
| } wl_bad_ap_info_entry_t; |
| |
| void wl_bad_ap_mngr_init(struct bcm_cfg80211 *cfg); |
| void wl_bad_ap_mngr_deinit(struct bcm_cfg80211 *cfg); |
| |
| int wl_bad_ap_mngr_add(wl_bad_ap_mngr_t *bad_ap_mngr, wl_bad_ap_info_t *bad_ap_info); |
| wl_bad_ap_info_entry_t* wl_bad_ap_mngr_find(wl_bad_ap_mngr_t *bad_ap_mngr, |
| const struct ether_addr *bssid); |
| |
| bool wl_adps_bad_ap_check(struct bcm_cfg80211 *cfg, const struct ether_addr *bssid); |
| int wl_adps_enabled(struct bcm_cfg80211 *cfg, struct net_device *ndev); |
| int wl_adps_set_suspend(struct bcm_cfg80211 *cfg, struct net_device *ndev, uint8 suspend); |
| |
| s32 wl_adps_event_handler(struct bcm_cfg80211 *cfg, bcm_struct_cfgdev *cfgdev, |
| const wl_event_msg_t *e, void *data); |
| #endif /* _WL_BAM_H_ */ |