blob: 787b13a338de1d806ec54d08c9d049970bd85344 [file] [log] [blame]
Nate Jiang7a7fd842022-12-06 17:11:13 -08001
2#include "wifi_hal.h"
3
4#ifndef _TDLS_H_
5#define _TDLS_H_
6
7typedef enum {
8 WIFI_TDLS_DISABLED = 1, /* TDLS is not enabled, default status for all STAs */
9 WIFI_TDLS_ENABLED, /* TDLS is enabled, but not yet tried */
10 WIFI_TDLS_ESTABLISHED, /* Direct link is established */
11 WIFI_TDLS_ESTABLISHED_OFF_CHANNEL, /* Direct link is established using MCC */
12 WIFI_TDLS_DROPPED, /* Direct link was established,
13 * but is temporarily dropped now */
14 WIFI_TDLS_FAILED /* TDLS permanent failed. Inform error to upper layer
15 * and go back to WIFI_TDLS_DISABLED */
16} wifi_tdls_state;
17
18typedef enum {
19 WIFI_TDLS_SUCCESS, /* Success */
20 WIFI_TDLS_UNSPECIFIED = -1, /* Unspecified reason */
21 WIFI_TDLS_NOT_SUPPORTED = -2, /* Remote side doesn't support TDLS */
22 WIFI_TDLS_UNSUPPORTED_BAND = -3, /* Remote side doesn't support this band */
23 WIFI_TDLS_NOT_BENEFICIAL = -4, /* Going to AP is better than going direct */
24 WIFI_TDLS_DROPPED_BY_REMOTE = -5 /* Remote side doesn't want it anymore */
25} wifi_tdls_reason;
26
27typedef struct {
28 int channel; /* channel hint, in channel number (NOT frequency ) */
29 int global_operating_class; /* operating class to use */
30 int max_latency_ms; /* max latency that can be tolerated by apps */
31 int min_bandwidth_kbps; /* bandwidth required by apps, in kilo bits per second */
32} wifi_tdls_params;
33
34typedef struct {
35 int channel;
36 int global_operating_class;
37 wifi_tdls_state state;
38 wifi_tdls_reason reason;
39} wifi_tdls_status;
40
41typedef struct {
42 int max_concurrent_tdls_session_num; /* Maximum TDLS session number can be supported by the
43 * Firmware and hardware*/
44 int is_global_tdls_supported; /* 1 -- support, 0 -- not support */
45 int is_per_mac_tdls_supported; /* 1 -- support, 0 -- not support */
46 int is_off_channel_tdls_supported; /* 1 -- support, 0 -- not support */
47} wifi_tdls_capabilities;
48
49typedef struct {
50 /* on_tdls_state_changed - reports state of TDLS link to framework
51 * Report this event when the state of TDLS link changes */
52 void (*on_tdls_state_changed)(mac_addr addr, wifi_tdls_status status);
53} wifi_tdls_handler;
54
55/* wifi_enable_tdls - enables TDLS-auto mode for a specific route
56 *
57 * params specifies hints, which provide more information about
58 * why TDLS is being sought. The firmware should do its best to
59 * honor the hints before downgrading regular AP link
60 * If upper layer has no specific values, this should be NULL
61 *
62 * handler is used to inform the upper layer about the status change and the corresponding reason
63 */
64wifi_error wifi_enable_tdls(wifi_interface_handle iface, mac_addr addr, wifi_tdls_params* params,
65 wifi_tdls_handler handler);
66
67/* wifi_disable_tdls - disables TDLS-auto mode for a specific route
68 *
69 * This terminates any existing TDLS with addr device, and frees the
70 * device resources to make TDLS connections on new routes.
71 *
72 * DON'T fire any more events on 'handler' specified in earlier call to
73 * wifi_enable_tdls after this action.
74 */
75wifi_error wifi_disable_tdls(wifi_interface_handle iface, mac_addr addr);
76
77/* wifi_get_tdls_status - allows getting the status of TDLS for a specific route */
78wifi_error wifi_get_tdls_status(wifi_interface_handle iface, mac_addr addr,
79 wifi_tdls_status* status);
80
81/* return the current HW + Firmware combination's TDLS capabilities */
82wifi_error wifi_get_tdls_capabilities(wifi_interface_handle iface,
83 wifi_tdls_capabilities* capabilities);
84#endif