| /* SPDX-License-Identifier: GPL-2.0-only */ |
| /* |
| * Public API for the WonderTap Operations. |
| * |
| * This header file defines the complete API contract that a vendor-specific |
| * driver must implement to integrate with the generic WonderTap operations. |
| * It includes the core operations structure (wondertap_ops), all related |
| * data structures, and the public functions for registration and control. |
| */ |
| #ifndef __WONDER_WONDERTAP_H__ |
| #define __WONDER_WONDERTAP_H__ |
| |
| #include <linux/auxiliary_bus.h> |
| #include <linux/errno.h> |
| #include <linux/if_ether.h> |
| #include <linux/ieee80211.h> |
| |
| #define WONDERTAP_VHT_NSS_MAX 8 |
| #define WONDERTAP_HE_NSS_MAX 8 |
| #define WONDERTAP_EHT_NSS_MAX 8 |
| #define WONDERTAP_HT_NSS_MAX 4 |
| |
| /** @brief Defines the PHY preamble/protocol for the TX rate. */ |
| enum wondertap_rate_preamble { |
| WONDERTAP_RATE_PREAMBLE_LEGACY = 0, /* 802.11a/g rates (non-HT) */ |
| WONDERTAP_RATE_PREAMBLE_HT = 1, /* 802.11n High Throughput */ |
| WONDERTAP_RATE_PREAMBLE_VHT = 2, /* 802.11ac Very High Throughput */ |
| WONDERTAP_RATE_PREAMBLE_HE = 3, /* 802.11ax High Efficiency */ |
| WONDERTAP_RATE_PREAMBLE_EHT = 4, /* 802.11be Extremely High Throughput */ |
| WONDERTAP_RATE_PREAMBLE_MAX, |
| }; |
| |
| /** |
| * @brief Defines which TX rate masks are active in a `wondertap_tx_rate_mask` |
| * configuration. |
| */ |
| enum wondertap_tx_rate_mask_enable { |
| /** |
| * @brief If set, the legacy_rates bitmap is valid and should be applied. |
| */ |
| WONDERTAP_RATEMASK_EN_LEGACY = BIT(WONDERTAP_RATE_PREAMBLE_LEGACY), |
| |
| /** |
| * @brief If set, the ht_mcs bitmap is valid and should be applied. |
| */ |
| WONDERTAP_RATEMASK_EN_HT = BIT(WONDERTAP_RATE_PREAMBLE_HT), |
| |
| /** |
| * @brief If set, the vht_mcs bitmap is valid and should be applied. |
| */ |
| WONDERTAP_RATEMASK_EN_VHT = BIT(WONDERTAP_RATE_PREAMBLE_VHT), |
| |
| /** |
| * @brief If set, the he_mcs bitmap is valid and should be applied. |
| */ |
| WONDERTAP_RATEMASK_EN_HE = BIT(WONDERTAP_RATE_PREAMBLE_HE), |
| |
| /** |
| * @brief If set, the eht_mcs bitmap is valid and should be applied. |
| */ |
| WONDERTAP_RATEMASK_EN_EHT = BIT(WONDERTAP_RATE_PREAMBLE_EHT), |
| }; |
| |
| /** @brief Defines the channel bandwidth. */ |
| enum wondertap_rate_bw { |
| WONDERTAP_RATE_BW_20 = 0, |
| WONDERTAP_RATE_BW_40 = 1, |
| WONDERTAP_RATE_BW_80 = 2, |
| WONDERTAP_RATE_BW_160 = 3, |
| WONDERTAP_RATE_BW_320 = 4, |
| WONDERTAP_RATE_BW_NONE = 0xff, |
| }; |
| |
| /** @brief Defines the role in the channel hopping list. */ |
| enum wondertap_role { |
| WONDERTAP_ROLE_NOP, |
| WONDERTAP_ROLE_STA, |
| WONDERTAP_ROLE_MAX, |
| }; |
| |
| /** @brief Represents a single entry of parameters in the channel hopping schedule. */ |
| struct wondertap_channel_list_params { |
| u32 freq; |
| enum wondertap_rate_bw bandwidth; |
| enum wondertap_role role; |
| }; |
| |
| /** |
| * @brief Parameters for scheduling channel switches. |
| */ |
| struct channel_schedule_request { |
| /** |
| * @brief Length of channel in the list. |
| */ |
| u8 channel_list_len; |
| u8 reserved1[3]; |
| |
| /** |
| * @brief Index of the next channel in the list to visit. |
| */ |
| u32 next_channel_index; |
| |
| /** |
| * @brief Time to stay on each channel in Time Units (TU). |
| */ |
| u32 dwell_time_tu; |
| |
| /** |
| * @brief Target switch time in TSF. |
| */ |
| u32 target_switch_time_tsf; |
| |
| /** |
| * @brief List of channel parameters to visit. |
| */ |
| struct wondertap_channel_list_params *channel_list; |
| }; |
| |
| /** |
| * @brief Represents the status and statistics of a visited channel. |
| */ |
| struct wondertap_channel_status { |
| /** |
| * @brief Target switch time TSF of this channel switch. |
| */ |
| u32 channel_switch_tsf; |
| |
| /** |
| * @brief Channel frequency in MHz. |
| */ |
| u32 freq; |
| |
| /** |
| * @brief TSF timestamp when the channel was actually switched to and started operating. |
| */ |
| u32 channel_start_tsf; |
| |
| /** |
| * @brief TSF timestamp when the channel operation ended. |
| */ |
| u32 channel_end_tsf; |
| |
| /** |
| * @brief A normalized value ranging from 0 to 100 |
| * that represents TX channel utilization during this channel slot. |
| */ |
| u16 tx_traffic_index; |
| |
| /** |
| * @brief A normalized value ranging from 0 to 100 |
| * that represents RX channel utilization during this channel slot. |
| */ |
| u16 rx_traffic_index; |
| }; |
| |
| /** |
| * @brief Parameters for channel status report. |
| */ |
| struct wondertap_channel_status_report { |
| /** |
| * @brief TSF timestamp of the current channel hopping request. |
| */ |
| u32 current_channel_hopping_request_tsf; |
| |
| /** |
| * @brief Index of the current channel in the channel hopping list. |
| */ |
| u32 current_channel_index; |
| |
| /** |
| * @brief Number of elements in the status array. |
| */ |
| u32 channel_status_len; |
| |
| /** |
| * @brief Variable-length array of channel status entries. |
| */ |
| struct wondertap_channel_status status[]; |
| }; |
| |
| /** @brief Defines the Guard Interval (GI). */ |
| enum wondertap_rate_gi { |
| WONDERTAP_RATE_GI_DEFAULT = 0, /* Driver uses default (e.g., Long GI or 0.8us) */ |
| WONDERTAP_RATE_GI_SHORT = 1, /* Short GI for HT/VHT */ |
| WONDERTAP_RATE_GI_0_8_US = 2, /* Specific HE GI values */ |
| WONDERTAP_RATE_GI_1_6_US = 3, |
| WONDERTAP_RATE_GI_3_2_US = 4, |
| }; |
| |
| /** @brief Channel and bandwidth configuration. */ |
| struct wondertap_set_freq_params { |
| u32 freq; |
| enum wondertap_rate_bw bandwidth; |
| }; |
| |
| /** |
| * @brief Enumeration for the different types of hardware filters supported. |
| * |
| * This enum is used in the `wondertap_set_filter` function to specify which |
| * filter is being configured. |
| */ |
| enum wondertap_filter_type { |
| /** |
| * @brief Configures a filter based on the 802.11 frame's type and subtype. |
| */ |
| WONDERTAP_FILTER_TYPE_FRAME, |
| }; |
| |
| /** |
| * @brief Parameters for configuring the BSSID filter. |
| */ |
| struct wondertap_bssid_filter_params { |
| /** |
| * @brief Set to 'true' to enable the filter, 'false' to disable it. |
| */ |
| bool enabled; |
| |
| /** |
| * @brief The BSSID to filter on when the filter is enabled. |
| * This field is ignored if 'enabled' is false. |
| */ |
| u8 bssid[ETH_ALEN]; |
| }; |
| |
| /** |
| * @brief Parameters for configuring the frame type/subtype filter. |
| */ |
| struct wondertap_frame_filter_params { |
| /** |
| * @brief Set to 'true' to enable the filter, 'false' to disable it. |
| */ |
| bool enabled; |
| |
| /** |
| * @brief The 802.11 frame type to match. |
| * This field is ignored if 'enabled' is false. |
| * |
| * The frame type defines the major category of the frame. |
| * Use standard Linux kernel definitions from <linux/ieee80211.h>: |
| * - IEEE80211_FTYPE_MGMT (0x0000): Management frames |
| * - IEEE80211_FTYPE_CTRL (0x0004): Control frames |
| * - IEEE80211_FTYPE_DATA (0x0008): Data frames |
| */ |
| u16 frame_type; |
| |
| /** |
| * @brief The 802.11 frame subtype to match. |
| * This field is ignored if 'enabled' is false. |
| * |
| * The subtype specifies the frame's exact purpose within its category. |
| * Use standard Linux kernel definitions from <linux/ieee80211.h>: |
| * - e.g., IEEE80211_STYPE_BEACON (0x0080) |
| * - e.g., IEEE80211_STYPE_PROBE_REQ (0x0040) |
| * - e.g., IEEE80211_STYPE_QOS_DATA (0x0080) |
| */ |
| u16 frame_subtype; |
| }; |
| |
| /** |
| * @brief Configures the regulatory domain for the Wi-Fi hardware. |
| * |
| * @param handle The opaque driver instance handle. |
| * @param country_code A two-character null-terminated string representing |
| * the country code in ISO 3166-1 alpha-2 format (e.g., "US", |
| * "GB", "JP", "TW"). |
| * |
| * @return: 0 on success, or a negative errno code on failure. |
| */ |
| |
| /** |
| * @brief Parameters to configure a specific TX rate. |
| * |
| * This structure is used to define a complete transmission rate, |
| * including its PHY characteristics and special features. |
| */ |
| struct wondertap_fixed_tx_rate_params { |
| /** |
| * @brief The preamble/PHY type for this rate. |
| */ |
| enum wondertap_rate_preamble preamble; |
| |
| /** |
| * @brief The channel bandwidth for this rate. |
| */ |
| enum wondertap_rate_bw bw; |
| |
| /** |
| * @brief The Guard Interval (GI) for this rate. |
| */ |
| enum wondertap_rate_gi gi; |
| |
| /** |
| * @brief The number of spatial streams (NSS). |
| * Typically 1-4 for client devices. 0 is invalid. |
| */ |
| u8 nss; |
| |
| /** |
| * @brief The Modulation and Coding Scheme (MCS) index. |
| * - For HT (802.11n): 0-7 (up to 31 for 4 streams). |
| * - For VHT (802.11ac): 0-9. |
| * - For HE (802.11ax): 0-11. |
| * - For Legacy: This field is interpreted as the legacy rate index |
| * (e.g., index for 54 Mbps, 48 Mbps, etc.). Ignored by some drivers. |
| */ |
| u8 mcs; |
| |
| /** @brief Reserved for future use. */ |
| u8 reserved[2]; |
| }; |
| |
| /** |
| * @brief Per-packet transmission descriptor. |
| * |
| * This structure is intended to be stored in the `sk_buff->cb` control buffer |
| * to provide per-packet transmission instructions to the underlying driver. |
| */ |
| struct wonder_txd { |
| /** @brief True if the frame is a unicast transmission. */ |
| bool is_unicast; |
| /** @brief The 802.11 frame type (e.g., IEEE80211_FTYPE_DATA). */ |
| u8 frame_type; |
| /** @brief The Traffic Identifier (TID) for QoS. */ |
| u8 tid; |
| /** @brief Reserved for future use. */ |
| u8 reserved; |
| }; |
| // limit the wonder_txd size |
| static_assert(sizeof(struct wonder_txd) <= 48); |
| |
| /** |
| * @brief A unified structure to define the permitted transmission rates for |
| * the rate control algorithm. |
| */ |
| struct wondertap_tx_rate_mask_params { |
| /** |
| * @brief The maximum preamble/PHY type for this rate. |
| */ |
| enum wondertap_rate_preamble max_preamble; |
| |
| /** |
| * @brief The maximum channel bandwidth allowed. |
| */ |
| enum wondertap_rate_bw max_bw; |
| |
| /** |
| * @brief The number of spatial streams (NSS). |
| * Typically 1-4 for client devices. 0 is invalid. |
| */ |
| u8 max_nss; |
| |
| /** |
| * @brief The Maximum Modulation and Coding Scheme (MCS) index. |
| * - For HT (802.11n): 0-7 (up to 31 for 4 streams). |
| * - For VHT (802.11ac): 0-9. |
| * - For HE (802.11ax): 0-11. |
| * - For Legacy: This field is interpreted as the legacy rate index |
| * (e.g., index for 54 Mbps, 48 Mbps, etc.). Ignored by some drivers. |
| */ |
| u8 max_mcs; |
| |
| /** @brief Reserved for future use. */ |
| u8 reserved[2]; |
| }; |
| |
| |
| /** @brief Supported hardware/software features. */ |
| struct wondertap_capability { |
| /** |
| * @brief Capability structure version. |
| * @note For the initial implementation, this must be set to 0. |
| */ |
| u32 version; |
| union { |
| /* @brief All capability flags as a single 32-bit word. */ |
| u32 raw_bits; |
| /* @brief Access to individual capability bits. */ |
| struct { |
| /* @brief Dynamic rate adaptation is supported. */ |
| u32 rate_adaptation: 1; |
| /* @brief STA (Station) coexistence is supported. */ |
| u32 sta_coexist: 1; |
| /* @brief SAP (Soft AP) coexistence is supported. */ |
| u32 sap_coexist: 1; |
| /* @brief P2P (Wi-Fi Direct) coexistence is supported. */ |
| u32 p2p_coexist: 1; |
| /* @brief NAN (Neighbor Awareness Networking) coexistence is supported. */ |
| u32 nan_coexist: 1; |
| /* @brief Ranging coexistence is supported. */ |
| u32 ranging_coexist: 1; |
| /* @brief A-MSDU aggregation is supported. */ |
| u32 amsdu_aggregation: 1; |
| /* @brief A-MPDU aggregation is supported. */ |
| u32 ampdu_aggregation: 1; |
| /* @brief Dynamic frequency/channel changes are supported. */ |
| u32 dynamic_freq: 1; |
| /* @brief Dynamic setting a fixed TX rate is supported. */ |
| u32 dynamic_fixed_tx_rate: 1; |
| /* @brief Setting custom management frame retry limits is supported. */ |
| u32 custom_mgmt_retry_limit: 1; |
| /* @brief Setting custom data frame retry limits is supported. */ |
| u32 custom_data_retry_limit: 1; |
| /* @brief Frame type filtering is supported. */ |
| u32 frame_type_filter: 1; |
| /* @brief Channel hopping is supported. */ |
| u32 channel_hopping: 1; |
| /* @brief High Band Simultaneous is supported. */ |
| u32 hbs_support: 1; |
| /* |
| * @brief Maximum number of supported spatial streams (NSS). |
| * Encoded as (NSS - 1), where 0 = 1 stream and 7 = 8 streams. |
| */ |
| u32 nss: 3; |
| /* @brief Reserved for future use. Must be 0. */ |
| u32 reserved: 14; |
| } bits; |
| }; |
| /** |
| * @brief Maximum Channel Switch Time in micro second required by the vendor for |
| * jumping to the new channel lists. |
| */ |
| u32 maximum_channel_switch_time_us; |
| }; |
| |
| /** |
| * @brief Enumeration of station capabilities. |
| * |
| * Defines the supported PHY capabilities for a station, used to construct |
| * the capability_mask in wondertap_station_info. |
| */ |
| enum wondertap_station_capability { |
| /** High Throughput (802.11n) capability */ |
| WONDERTAP_STATION_CAP_HT, |
| /** Very High Throughput (802.11ac) capability */ |
| WONDERTAP_STATION_CAP_VHT, |
| /** High Efficiency (802.11ax) capability */ |
| WONDERTAP_STATION_CAP_HE, |
| /** High Efficiency 6GHz capability */ |
| WONDERTAP_STATION_CAP_HE_6G, |
| WONDERTAP_STATION_CAP_MAX |
| }; |
| |
| /** |
| * @brief Enumeration of actions for station management. |
| */ |
| enum wondertap_station_action { |
| /* Add a new station */ |
| WONDERTAP_STATION_STATE_NEW, |
| /* Update an existing station */ |
| WONDERTAP_STATION_STATE_UPDATE, |
| /* Delete a station */ |
| WONDERTAP_STATION_STATE_DEL, |
| /* Query station information */ |
| WONDERTAP_STATION_STATE_QUERY, |
| WONDERTAP_STATION_MAX |
| }; |
| |
| /** |
| * @brief Station information parameters. |
| * |
| * Contains the details of a station being added or updated in the vendor driver. |
| */ |
| struct wondertap_station_info { |
| /* Association ID (AID) of the station */ |
| u16 aid; |
| /* The station's MAC address */ |
| u8 mac[ETH_ALEN]; |
| /* Bitmask of supported capabilities (from wondertap_station_capability) */ |
| u32 capability_mask; |
| /* HT capabilities, if supported */ |
| struct ieee80211_ht_cap ht_capa; |
| /* VHT capabilities, if supported */ |
| struct ieee80211_vht_cap vht_capa; |
| /* HE capabilities, if supported */ |
| struct ieee80211_he_cap_elem he_capa; |
| /* Length of the HE capabilities element */ |
| u8 he_capa_len; |
| /* Pad to 4-byte alignment */ |
| u8 reserved[3]; |
| /* HE 6GHz capabilities, if supported */ |
| struct ieee80211_he_6ghz_capa he_6ghz_capa; |
| }; |
| |
| /** @brief Initialization parameters passed from the core to the vendor driver. */ |
| struct wondertap_init_params { |
| /** |
| * @brief The initial channel and frequency for the interface. |
| */ |
| struct wondertap_set_freq_params channel; |
| |
| /** |
| * @brief The default fixed transmission rate. |
| */ |
| struct wondertap_fixed_tx_rate_params tx_rate; |
| |
| /** |
| * @brief The MAC address for this interface. |
| */ |
| u8 mac_addr[ETH_ALEN]; |
| |
| /** |
| * @brief The BSSID to filter. |
| */ |
| u8 bssid[ETH_ALEN]; |
| |
| /** |
| * @brief Max retransmission attempts for management frames. |
| * |
| * This value controls the retry behavior for the packet at the hardware |
| * level. The interpretation is as follows: |
| * - 0: The frame will be transmitted once with no retries. |
| * - 1-254: The frame will be re-transmitted up to this many times if no |
| * acknowledgment is received. |
| * - 255: The hardware will use an unlimited number of retries. |
| */ |
| u8 mgmt_retry_limit; |
| |
| /** |
| * @brief Max retransmission attempts for data frames. |
| * |
| * This value controls the retry behavior for the packet at the hardware |
| * level. The interpretation is as follows: |
| * - 0: The frame will be transmitted once with no retries. |
| * - 1-254: The frame will be re-transmitted up to this many times if no |
| * acknowledgment is received. |
| * - 255: The hardware will use an unlimited number of retries. |
| */ |
| u8 data_retry_limit; |
| |
| /** |
| * @brief Aggregation feature control |
| */ |
| u8 amsdu_enable: 1; |
| u8 ampdu_enable: 1; |
| |
| /** |
| * @brief Rate Adaptation feature control |
| */ |
| u8 rate_adaptation_enable: 1; |
| |
| /** |
| * @brief Channel hopping feature control |
| */ |
| u8 channel_hopping_enable: 1; |
| |
| /** |
| * @brief Reserved for future use and alignment. |
| */ |
| u8 reserved1: 4; |
| u8 reserved2; |
| |
| /** |
| * @brief The two-letter ISO 3166 country code (e.g., "US", "TW"). |
| * |
| * @note Includes the null terminator (\0), hence the size of 3. |
| */ |
| char country_code[3]; |
| u8 reserved3; |
| |
| /** |
| * @brief The initial transmission rate mask. |
| */ |
| struct wondertap_tx_rate_mask_params tx_rate_mask; |
| }; |
| |
| /** |
| * @brief Deinitialization parameters passed from the core to the vendor driver. |
| */ |
| struct wondertap_deinit_params { |
| /** |
| * @brief The two-letter ISO 3166 country code (e.g., "US", "TW"). |
| * |
| * @note Includes the null terminator (\0), hence the size of 3. |
| */ |
| char country_code[3]; |
| u8 reserved1; |
| }; |
| |
| /** |
| * @brief Vendor operations implemented by the specific hardware driver. |
| * |
| * This structure is the core API between the generic layer and the |
| * vendor-specific implementation. Each operation is strongly typed. |
| */ |
| struct wondertap_ops { |
| /** |
| * @brief Initializes the vendor driver instance. |
| * @param handle Opaque handle, to be allocated by the vendor driver. |
| * @param params Initialization parameters. |
| * @return 0 on success, negative error code on failure. |
| */ |
| int (*init)(void **handle, const struct wondertap_init_params *params); |
| |
| /** |
| * @brief Deinitializes and frees the vendor driver instance. |
| * @param handle Opaque handle to the instance to be deinitialized. |
| */ |
| void (*deinit)(void *handle, const struct wondertap_deinit_params *params); |
| |
| /** |
| * @brief Sets the operating channel. |
| * @param handle The driver instance handle. |
| * @param params Channel and bandwidth information. |
| * @return 0 on success, negative error code. |
| */ |
| int (*set_freq)(void *handle, const struct wondertap_set_freq_params *params); |
| |
| /** |
| * @brief Configures a specific hardware packet filter. |
| * |
| * This is a versatile function that dispatches the configuration to the |
| * appropriate hardware filter based on the @filter_type. The caller must |
| * provide a pointer to a parameter structure that corresponds to the |
| * specified filter type. |
| * |
| * @param handle The opaque driver instance handle. |
| * @param filter_type The type of filter to configure, as defined in |
| * `enum wondertap_filter_type`. |
| * @param params A void pointer to the filter-specific parameter structure. |
| * - For WONDERTAP_FILTER_TYPE_BSSID: This must be a pointer to |
| * `struct wondertap_bssid_filter_params`. |
| * - For WONDERTAP_FILTER_TYPE_FRAME: This must be a pointer to |
| * `struct wondertap_frame_filter_params`. |
| * |
| * @return: 0 on success, or a negative errno code on failure. |
| */ |
| int (*set_filter)(void *handle, enum wondertap_filter_type filter_type, |
| const void *params); |
| |
| /** |
| * @brief Configures a fixed transmission rate, overriding any |
| * automatic rate control algorithm. |
| * @handle: The opaque driver instance handle. |
| * @params: A pointer to the detailed TX rate parameters (preamble, |
| * MCS, NSS, etc.). |
| * |
| * @return: 0 on success, or a negative errno code on failure. |
| */ |
| int (*set_fixed_tx_rate)(void *handle, const struct wondertap_fixed_tx_rate_params *params); |
| |
| /** |
| * @brief Configures a mask of permitted transmission rates for |
| * the automatic rate control algorithm. |
| * |
| * @param handle The opaque driver instance handle. |
| * @param params A pointer to the rate mask structure defining the permitted rates. |
| * |
| * @return: 0 on success, or a negative errno code on failure. |
| */ |
| int (*set_tx_rate_mask)(void *handle, const struct wondertap_tx_rate_mask_params *params); |
| |
| /** |
| * @brief Retrieves a bitmask of supported vendor features. |
| * @param handle The driver instance handle. |
| * @param features A pointer to a struct to be filled with feature flags. |
| * @return 0 on success, negative error code. |
| */ |
| int (*get_capabilities)(void *handle, struct wondertap_capability *features); |
| |
| /** |
| * @brief Schedules a channel switch request. |
| * @param handle The driver instance handle. |
| * @param request A pointer to the channel schedule request parameters. |
| * @return 0 on success, negative error code. |
| */ |
| int (*channel_schedule_request)(void *handle, |
| const struct channel_schedule_request *request); |
| |
| /** |
| * @brief Get Current MAC TSF from the vendor |
| * @param handle The opaque driver instance handle. |
| * @param tsf MAC TSF will be utilized for the channel list request. |
| * Return: 0 on success, negative error code. |
| */ |
| int (*get_mac_tsf)(void *handle, u32 *mac_tsf); |
| |
| /** |
| * @brief Schedules a channel switch request. |
| * @param handle The driver instance handle. |
| * @param get A pointer to the channel status report. |
| * @return 0 on success, negative error code. |
| */ |
| int (*get_channel_status_report)(void *handle, |
| struct wondertap_channel_status_report *report); |
| |
| /** |
| * @brief Adds, updates, or removes station information in the vendor driver. |
| * @param handle The driver instance handle. |
| * @param action The action to perform on the station (NEW, UPDATE, or DEL). |
| * @param info A pointer to the station information structure. |
| * @return 0 on success, negative error code on failure. |
| */ |
| int (*set_station_info)(void *handle, const enum wondertap_station_action action, |
| struct wondertap_station_info *info); |
| }; |
| |
| /** |
| * @brief Enumeration of WonderTap interface versions. |
| * |
| * This enum defines the supported versions of the WonderTap interface. |
| */ |
| enum wondertap_ver { |
| /** @brief ACK AUX-based drivers start from WONDER_VERSION_AUX_BASE (0x10). */ |
| WONDER_VERSION_AUX_BASE = 0x10, |
| WONDER_VERSION_3_0 = WONDER_VERSION_AUX_BASE, |
| WONDER_VERSION_3_1, |
| WONDER_VERSION_3_2, |
| WONDER_VERSION_3_3, |
| WONDER_VERSION_3_4, |
| WONDER_VERSION_3_4_1, |
| WONDER_VERSION_3_5, |
| WONDER_VERSION_3_5_1, |
| WONDER_VERSION_3_6_1, |
| WONDER_VERSION_3_6_2 = WONDER_VERSION_3_6_1, |
| WONDER_VERSION_3_6_3 = WONDER_VERSION_3_6_1, |
| WONDER_VERSION_3_6_4, |
| WONDER_VERSION_3_6_5, |
| WONDER_VERSION_MAX, |
| }; |
| |
| /** |
| * @brief WonderTap auxiliary device struct |
| * |
| * This structure defines the WonderTap auxiliary device. In addition to |
| * encapsulating the auxiliary_device structure, it holds the version |
| * information and the operations table for the specific vendor implementation. |
| */ |
| struct wondertap_aux_dev { |
| /** @brief The base auxiliary device structure. */ |
| struct auxiliary_device adev; |
| /** @brief The version of the WonderTap interface being used. */ |
| enum wondertap_ver ver; |
| /** @brief Pointer to the vendor-specific operations table. */ |
| const struct wondertap_ops *wonder_ops; |
| }; |
| #endif /* __WONDER_WONDERTAP_H__ */ |