xref: /freebsd/sys/contrib/dev/iwlwifi/fw/api/rfi.h (revision bfcc09ddd422c95a1a2e4e794b63ee54c4902398)
1*bfcc09ddSBjoern A. Zeeb /* SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause */
2*bfcc09ddSBjoern A. Zeeb /*
3*bfcc09ddSBjoern A. Zeeb  * Copyright (C) 2020 Intel Corporation
4*bfcc09ddSBjoern A. Zeeb  */
5*bfcc09ddSBjoern A. Zeeb #ifndef __iwl_fw_api_rfi_h__
6*bfcc09ddSBjoern A. Zeeb #define __iwl_fw_api_rfi_h__
7*bfcc09ddSBjoern A. Zeeb 
8*bfcc09ddSBjoern A. Zeeb #define IWL_RFI_LUT_ENTRY_CHANNELS_NUM 15
9*bfcc09ddSBjoern A. Zeeb #define IWL_RFI_LUT_SIZE 24
10*bfcc09ddSBjoern A. Zeeb #define IWL_RFI_LUT_INSTALLED_SIZE 4
11*bfcc09ddSBjoern A. Zeeb 
12*bfcc09ddSBjoern A. Zeeb /**
13*bfcc09ddSBjoern A. Zeeb  * struct iwl_rfi_lut_entry - an entry in the RFI frequency LUT.
14*bfcc09ddSBjoern A. Zeeb  *
15*bfcc09ddSBjoern A. Zeeb  * @freq: frequency
16*bfcc09ddSBjoern A. Zeeb  * @channels: channels that can be interfered at frequency freq (at most 15)
17*bfcc09ddSBjoern A. Zeeb  * @bands: the corresponding bands
18*bfcc09ddSBjoern A. Zeeb  */
19*bfcc09ddSBjoern A. Zeeb struct iwl_rfi_lut_entry {
20*bfcc09ddSBjoern A. Zeeb 	__le16 freq;
21*bfcc09ddSBjoern A. Zeeb 	u8 channels[IWL_RFI_LUT_ENTRY_CHANNELS_NUM];
22*bfcc09ddSBjoern A. Zeeb 	u8 bands[IWL_RFI_LUT_ENTRY_CHANNELS_NUM];
23*bfcc09ddSBjoern A. Zeeb } __packed;
24*bfcc09ddSBjoern A. Zeeb 
25*bfcc09ddSBjoern A. Zeeb /**
26*bfcc09ddSBjoern A. Zeeb  * struct iwl_rfi_config_cmd - RFI configuration table
27*bfcc09ddSBjoern A. Zeeb  *
28*bfcc09ddSBjoern A. Zeeb  * @entry: a table can have 24 frequency/channel mappings
29*bfcc09ddSBjoern A. Zeeb  * @oem: specifies if this is the default table or set by OEM
30*bfcc09ddSBjoern A. Zeeb  */
31*bfcc09ddSBjoern A. Zeeb struct iwl_rfi_config_cmd {
32*bfcc09ddSBjoern A. Zeeb 	struct iwl_rfi_lut_entry table[IWL_RFI_LUT_SIZE];
33*bfcc09ddSBjoern A. Zeeb 	u8 oem;
34*bfcc09ddSBjoern A. Zeeb 	u8 reserved[3];
35*bfcc09ddSBjoern A. Zeeb } __packed; /* RFI_CONFIG_CMD_API_S_VER_1 */
36*bfcc09ddSBjoern A. Zeeb 
37*bfcc09ddSBjoern A. Zeeb /**
38*bfcc09ddSBjoern A. Zeeb  * iwl_rfi_freq_table_status - status of the frequency table query
39*bfcc09ddSBjoern A. Zeeb  * @RFI_FREQ_TABLE_OK: can be used
40*bfcc09ddSBjoern A. Zeeb  * @RFI_FREQ_TABLE_DVFS_NOT_READY: DVFS is not ready yet, should try later
41*bfcc09ddSBjoern A. Zeeb  * @RFI_FREQ_TABLE_DISABLED: the feature is disabled in FW
42*bfcc09ddSBjoern A. Zeeb  */
43*bfcc09ddSBjoern A. Zeeb enum iwl_rfi_freq_table_status {
44*bfcc09ddSBjoern A. Zeeb 	RFI_FREQ_TABLE_OK,
45*bfcc09ddSBjoern A. Zeeb 	RFI_FREQ_TABLE_DVFS_NOT_READY,
46*bfcc09ddSBjoern A. Zeeb 	RFI_FREQ_TABLE_DISABLED,
47*bfcc09ddSBjoern A. Zeeb };
48*bfcc09ddSBjoern A. Zeeb 
49*bfcc09ddSBjoern A. Zeeb /**
50*bfcc09ddSBjoern A. Zeeb  * struct iwl_rfi_freq_table_resp_cmd - get the rfi freq table used by FW
51*bfcc09ddSBjoern A. Zeeb  *
52*bfcc09ddSBjoern A. Zeeb  * @table: table used by FW
53*bfcc09ddSBjoern A. Zeeb  * @status: see &iwl_rfi_freq_table_status
54*bfcc09ddSBjoern A. Zeeb  */
55*bfcc09ddSBjoern A. Zeeb struct iwl_rfi_freq_table_resp_cmd {
56*bfcc09ddSBjoern A. Zeeb 	struct iwl_rfi_lut_entry table[IWL_RFI_LUT_INSTALLED_SIZE];
57*bfcc09ddSBjoern A. Zeeb 	__le32 status;
58*bfcc09ddSBjoern A. Zeeb } __packed; /* RFI_CONFIG_CMD_API_S_VER_1 */
59*bfcc09ddSBjoern A. Zeeb 
60*bfcc09ddSBjoern A. Zeeb #endif /* __iwl_fw_api_rfi_h__ */
61