/* * Copyright (c) 2016-2021 The Linux Foundation. All rights reserved. * Copyright (c) 2022 Qualcomm Innovation Center, Inc. All rights reserved. * * Permission to use, copy, modify, and/or distribute this software for * any purpose with or without fee is hereby granted, provided that the * above copyright notice and this permission notice appear in all * copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR * PERFORMANCE OF THIS SOFTWARE. */ #if !defined __HDD_REGULATORY_H #define __HDD_REGULATORY_H /** * DOC: wlan_hdd_regulatory.h * * HDD Regulatory prototype implementation */ struct hdd_context; #if (LINUX_VERSION_CODE >= KERNEL_VERSION(3, 14, 0)) || defined(WITH_BACKPORTS) #define IEEE80211_CHAN_PASSIVE_SCAN IEEE80211_CHAN_NO_IR #endif #define CHANNEL_LIST_UPDATE_TIMEOUT 4500 /** * hdd_update_regulatory_config() - API to update regulatory config parameters * @hdd_ctx: HDD context * * Return: 0 on success, err on failure */ int hdd_update_regulatory_config(struct hdd_context *hdd_ctx); /** * hdd_init_regulatory_update_event() - Initialize the regulatory update event * @hdd_ctx: HDD context * * Return: 0 on success, err on failure */ int hdd_init_regulatory_update_event(struct hdd_context *hdd_ctx); /** * hdd_deinit_regulatory_update_event() - Cleanup the regulatory update event * @hdd_ctx: HDD context * * Return: none */ void hdd_deinit_regulatory_update_event(struct hdd_context *hdd_ctx); int hdd_regulatory_init(struct hdd_context *hdd_ctx, struct wiphy *wiphy); /** * hdd_regulatory_deinit() - cleanup all components of regulatory * @hdd_ctx: HDD context * * Return: None */ void hdd_regulatory_deinit(struct hdd_context *hdd_ctx); void hdd_program_country_code(struct hdd_context *hdd_ctx); void hdd_reset_global_reg_params(void); /** * hdd_send_wiphy_regd_sync_event() - sends the regulatory sync event * @hdd_ctx: HDD context * * Return: None */ void hdd_send_wiphy_regd_sync_event(struct hdd_context *hdd_ctx); /** * hdd_reg_wait_for_country_change() - Wait for country change event * @hdd_ctx: the HDD context * * Return: None */ void hdd_reg_wait_for_country_change(struct hdd_context *hdd_ctx); /** * hdd_reg_set_country() - helper function for setting the regulatory country * @hdd_ctx: the HDD context to set the country for * @country_code: the two character country code to configure * * Return: zero for success, non-zero error code for failure */ int hdd_reg_set_country(struct hdd_context *hdd_ctx, char *country_code); /** * hdd_reg_legacy_setband_to_reg_wifi_band_bitmap() - Convert the user space * band input to a bitmap of band capabilities, with reg_wifi_band as the * bit value * @qca_setband: user space/setband value band input, can be 0, 1, or 2 * * Return: bitmap on top of reg_wifi_band of bands enabled */ uint32_t hdd_reg_legacy_setband_to_reg_wifi_band_bitmap(uint8_t qca_setband); /** * hdd_reg_set_band() - helper function for setting the regulatory band * @dev: the network device to set the band for * @band_bitmap: the band bitmap to configure * * Return: zero for success, non-zero error code for failure */ int hdd_reg_set_band(struct net_device *dev, uint32_t band_bitmap); /** * hdd_update_indoor_channel() - enable/disable indoor channel * @hdd_ctx: hdd context * @disable: whether to enable / disable indoor channel * * enable/disable indoor channel in wiphy/cds * * Return: void */ void hdd_update_indoor_channel(struct hdd_context *hdd_ctx, bool disable); /** * hdd_modify_indoor_channel_state_flags() - modify wiphy flags and cds state * @hdd_ctx: HDD context * @wiphy_chan: wiphy channel number * @cds_chan: cds channel structure * @chan_enum: channel enum maintain in reg db * @chan_num: channel index * @disable: Disable/enable the flags * * Modify wiphy flags and cds state if channel is indoor. * * Return: void */ void hdd_modify_indoor_channel_state_flags( struct hdd_context *hdd_ctx, struct ieee80211_channel *wiphy_chan, struct regulatory_channel *cds_chan, enum channel_enum chan_enum, int chan_num, bool disable); /** * hdd_update_regdb_offload_config() - Update regdb offload disable ini * for regulatory component. * @hdd_ctx: HDD context * * Return: None */ void hdd_update_regdb_offload_config(struct hdd_context *hdd_ctx); #endif