Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit ddeb8d8c authored by sheenam monga's avatar sheenam monga
Browse files

qcacmn: Add QCA vendor interface to query usable channels

Add QCA vendor interface for userspace to get information of usable
channels for different interface types from the driver/firmware.

Change-Id: Ice662b9f14e95f32f853637e73bccd686678f278
CRs-Fixed: 2939047
parent 89e05224
Loading
Loading
Loading
Loading
+118 −0
Original line number Diff line number Diff line
@@ -462,6 +462,19 @@
 *	The host driver selects Tx VDEV, and notifies user. The attributes
 *	used with this event are defined in enum
 *	qca_wlan_vendor_attr_mbssid_tx_vdev_status.
 *
 * @QCA_NL80211_VENDOR_SUBCMD_CONCURRENT_MULTI_STA_POLICY: Vendor command to
 *	configure the concurrent session policies when multiple STA interfaces
 *	are (getting) active. The attributes used by this command are defined
 *	in enum qca_wlan_vendor_attr_concurrent_sta_policy.
 *
 * @QCA_NL80211_VENDOR_SUBCMD_USABLE_CHANNELS: Userspace can use this command
 *	to query usable channels for different interface types such as STA,
 *	AP, P2P GO, P2P Client, NAN, etc. The driver shall report all usable
 *	channels in the response based on country code, different static
 *	configurations, concurrency combinations, etc. The attributes used
 *	with this command are defined in
 *	enum qca_wlan_vendor_attr_usable_channels.
 */

enum qca_nl80211_vendor_subcmds {
@@ -693,6 +706,8 @@ enum qca_nl80211_vendor_subcmds {
	QCA_NL80211_VENDOR_SUBCMD_UPDATE_SSID = 194,
	QCA_NL80211_VENDOR_SUBCMD_WIFI_FW_STATS = 195,
	QCA_NL80211_VENDOR_SUBCMD_MBSSID_TX_VDEV_STATUS = 196,
	QCA_NL80211_VENDOR_SUBCMD_CONCURRENT_MULTI_STA_POLICY = 197,
	QCA_NL80211_VENDOR_SUBCMD_USABLE_CHANNELS = 198,
};

enum qca_wlan_vendor_tos {
@@ -10810,4 +10825,107 @@ enum qca_wlan_vendor_attr_oci_override {
	QCA_WLAN_VENDOR_ATTR_OCI_OVERRIDE_AFTER_LAST - 1,
};

/**
 * enum qca_wlan_vendor_usable_channels_filter - Bitmask of different
 * filters defined in this enum are used in attribute
 * %QCA_WLAN_VENDOR_ATTR_USABLE_CHANNELS_FILTER_MASK.
 *
 * @QCA_WLAN_VENDOR_FILTER_CELLULAR_COEX: When this bit is set, the driver
 * shall filter the channels which are not usable because of coexistence with
 * cellular radio.
 * @QCA_WLAN_VENDOR_FILTER_WLAN_CONCURRENCY: When this bit is set, the driver
 * shall filter the channels which are not usable because of existing active
 * interfaces in the driver and will result in Multi Channel Concurrency, etc.
 *
 */
enum qca_wlan_vendor_usable_channels_filter {
	QCA_WLAN_VENDOR_FILTER_CELLULAR_COEX = 0,
	QCA_WLAN_VENDOR_FILTER_WLAN_CONCURRENCY = 1,
};

/**
 * enum qca_wlan_vendor_attr_chan_info - Attributes used inside
 * %QCA_WLAN_VENDOR_ATTR_USABLE_CHANNELS_CHAN_INFO nested attribute.
 *
 * @QCA_WLAN_VENDOR_ATTR_CHAN_INFO_PRIMARY_FREQ:
 * u32 attribute, required. Indicates the center frequency of the primary
 * channel in MHz.
 *
 * @QCA_WLAN_VENDOR_ATTR_CHAN_INFO_SEG0_FREQ:
 * u32 attribute. Indicates the center frequency of the primary segment of the
 * channel in MHz. This attribute is required when reporting 40 MHz, 80 MHz,
 * 160 MHz, and 320 MHz channels.
 *
 * @QCA_WLAN_VENDOR_ATTR_CHAN_INFO_SEG1_FREQ:
 * u32 attribute. Indicates the center frequency of the secondary segment of
 * 80+80 channel in MHz. This attribute is required only when
 * QCA_WLAN_VENDOR_ATTR_CHAN_INFO_BANDWIDTH is set to NL80211_CHAN_WIDTH_80P80.
 *
 * @QCA_WLAN_VENDOR_ATTR_CHAN_INFO_BANDWIDTH:
 * u32 attribute, required. Indicates the bandwidth of the channel, possible
 * values are defined in enum nl80211_chan_width.
 *
 * @QCA_WLAN_VENDOR_ATTR_CHAN_INFO_IFACE_MODE_MASK:
 * u32 attribute, required. Indicates all the interface types for which this
 * channel is usable. This attribute encapsulates bitmasks of interface types
 * defined in enum nl80211_iftype.
 *
 */
enum qca_wlan_vendor_attr_chan_info {
	QCA_WLAN_VENDOR_ATTR_CHAN_INFO_INVALID = 0,
	QCA_WLAN_VENDOR_ATTR_CHAN_INFO_PRIMARY_FREQ = 1,
	QCA_WLAN_VENDOR_ATTR_CHAN_INFO_SEG0_FREQ = 2,
	QCA_WLAN_VENDOR_ATTR_CHAN_INFO_SEG1_FREQ = 3,
	QCA_WLAN_VENDOR_ATTR_CHAN_INFO_BANDWIDTH = 4,
	QCA_WLAN_VENDOR_ATTR_CHAN_INFO_IFACE_MODE_MASK = 5,

	/* keep last */
	QCA_WLAN_VENDOR_ATTR_CHAN_INFO_AFTER_LAST,
	QCA_WLAN_VENDOR_ATTR_CHAN_INFO_MAX =
	QCA_WLAN_VENDOR_ATTR_CHAN_INFO_AFTER_LAST - 1,
};

/**
 * enum qca_wlan_vendor_attr_usable_channels - Attributes used by
 * %QCA_NL80211_VENDOR_SUBCMD_USABLE_CHANNELS vendor command.
 *
 * @QCA_WLAN_VENDOR_ATTR_USABLE_CHANNELS_BAND_MASK:
 * u32 attribute. Indicates the bands from which the channels should be reported
 * in response. This attribute encapsulates bit masks of bands defined in enum
 * nl80211_band. Optional attribute, if not present in the request the driver
 * shall return channels from all supported bands.
 *
 * @QCA_WLAN_VENDOR_ATTR_USABLE_CHANNELS_IFACE_MODE_MASK:
 * u32 attribute. Indicates all the interface types for which the usable
 * channels information is requested. This attribute encapsulates bitmasks of
 * interface types defined in enum nl80211_iftype. Optional attribute, if not
 * present in the request the driver shall send information of all supported
 * interface modes.
 *
 * @QCA_WLAN_VENDOR_ATTR_USABLE_CHANNELS_FILTER_MASK:
 * u32 attribute. This attribute carries information of all filters that shall
 * be applied while populating usable channels information by the driver. This
 * attribute carries bit masks of different filters defined in enum
 * qca_wlan_vendor_usable_channels_filter. Optional attribute, if not present
 * in the request the driver shall send information of channels without applying
 * any of the filters that can be configured through this attribute.
 *
 * @QCA_WLAN_VENDOR_ATTR_USABLE_CHANNELS_CHAN_INFO:
 * Nested attribute. This attribute shall be used by the driver to send
 * usability information of each channel. The attributes defined in enum
 * qca_wlan_vendor_attr_chan_info are used inside this attribute.
 */
enum qca_wlan_vendor_attr_usable_channels {
	QCA_WLAN_VENDOR_ATTR_USABLE_CHANNELS_INVALID = 0,
	QCA_WLAN_VENDOR_ATTR_USABLE_CHANNELS_BAND_MASK = 1,
	QCA_WLAN_VENDOR_ATTR_USABLE_CHANNELS_IFACE_MODE_MASK = 2,
	QCA_WLAN_VENDOR_ATTR_USABLE_CHANNELS_FILTER_MASK = 3,
	QCA_WLAN_VENDOR_ATTR_USABLE_CHANNELS_CHAN_INFO = 4,

	/* keep last */
	QCA_WLAN_VENDOR_ATTR_USABLE_CHANNELS_AFTER_LAST,
	QCA_WLAN_VENDOR_ATTR_USABLE_CHANNELS_MAX =
	QCA_WLAN_VENDOR_ATTR_USABLE_CHANNELS_AFTER_LAST - 1,
};

#endif