1*5113495bSYour Name /* 2*5113495bSYour Name * Copyright (c) 2017-2019, 2021 The Linux Foundation. All rights reserved. 3*5113495bSYour Name * Copyright (c) 2022-2024 Qualcomm Innovation Center, Inc. All rights reserved. 4*5113495bSYour Name * 5*5113495bSYour Name * Permission to use, copy, modify, and/or distribute this software for 6*5113495bSYour Name * any purpose with or without fee is hereby granted, provided that the 7*5113495bSYour Name * above copyright notice and this permission notice appear in all 8*5113495bSYour Name * copies. 9*5113495bSYour Name * 10*5113495bSYour Name * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL 11*5113495bSYour Name * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED 12*5113495bSYour Name * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE 13*5113495bSYour Name * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL 14*5113495bSYour Name * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR 15*5113495bSYour Name * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER 16*5113495bSYour Name * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR 17*5113495bSYour Name * PERFORMANCE OF THIS SOFTWARE. 18*5113495bSYour Name */ 19*5113495bSYour Name 20*5113495bSYour Name /** 21*5113495bSYour Name * DOC: Contains p2p public data structure definitions 22*5113495bSYour Name */ 23*5113495bSYour Name 24*5113495bSYour Name #ifndef _WLAN_P2P_PUBLIC_STRUCT_H_ 25*5113495bSYour Name #define _WLAN_P2P_PUBLIC_STRUCT_H_ 26*5113495bSYour Name 27*5113495bSYour Name #include <qdf_types.h> 28*5113495bSYour Name 29*5113495bSYour Name #define P2P_MAX_NOA_DESC 4 30*5113495bSYour Name 31*5113495bSYour Name #define HEADER_LEN_P2P_IE 6 32*5113495bSYour Name #define OUI_SIZE_P2P 4 33*5113495bSYour Name 34*5113495bSYour Name #define P2P_1X1_WAR_OUI "\x00\x50\xf2\x04" 35*5113495bSYour Name #define P2P_1X1_OUI_LEN 4 36*5113495bSYour Name 37*5113495bSYour Name #define MAX_CONFIG_METHODS_LEN 2 38*5113495bSYour Name #define DEVICE_CATEGORY_MAX_LEN 1 39*5113495bSYour Name 40*5113495bSYour Name /** 41*5113495bSYour Name * struct p2p_ps_params - P2P powersave related params 42*5113495bSYour Name * @opp_ps: opportunistic power save 43*5113495bSYour Name * @ctwindow: CT window 44*5113495bSYour Name * @count: count 45*5113495bSYour Name * @duration: duration 46*5113495bSYour Name * @interval: interval 47*5113495bSYour Name * @single_noa_duration: single shot noa duration 48*5113495bSYour Name * @ps_selection: power save selection 49*5113495bSYour Name * @session_id: session id 50*5113495bSYour Name * @start: start time 51*5113495bSYour Name */ 52*5113495bSYour Name struct p2p_ps_params { 53*5113495bSYour Name uint8_t opp_ps; 54*5113495bSYour Name uint32_t ctwindow; 55*5113495bSYour Name uint8_t count; 56*5113495bSYour Name uint32_t duration; 57*5113495bSYour Name uint32_t interval; 58*5113495bSYour Name uint32_t single_noa_duration; 59*5113495bSYour Name uint8_t ps_selection; 60*5113495bSYour Name uint8_t session_id; 61*5113495bSYour Name uint32_t start; 62*5113495bSYour Name }; 63*5113495bSYour Name 64*5113495bSYour Name /** 65*5113495bSYour Name * struct p2p_roc_req - P2P roc request 66*5113495bSYour Name * @vdev_id: Vdev id on which this request has come 67*5113495bSYour Name * @chan_freq: Chan frequency for which this RoC has been requested 68*5113495bSYour Name * @phy_mode: PHY mode 69*5113495bSYour Name * @duration: Duration for the RoC 70*5113495bSYour Name */ 71*5113495bSYour Name struct p2p_roc_req { 72*5113495bSYour Name uint32_t vdev_id; 73*5113495bSYour Name qdf_freq_t chan_freq; 74*5113495bSYour Name uint32_t phy_mode; 75*5113495bSYour Name uint32_t duration; 76*5113495bSYour Name }; 77*5113495bSYour Name 78*5113495bSYour Name /** 79*5113495bSYour Name * enum p2p_roc_event - P2P RoC event 80*5113495bSYour Name * @ROC_EVENT_READY_ON_CHAN: RoC has started now 81*5113495bSYour Name * @ROC_EVENT_COMPLETED: RoC has been completed 82*5113495bSYour Name * @ROC_EVENT_INAVLID: Invalid event 83*5113495bSYour Name */ 84*5113495bSYour Name enum p2p_roc_event { 85*5113495bSYour Name ROC_EVENT_READY_ON_CHAN = 0, 86*5113495bSYour Name ROC_EVENT_COMPLETED, 87*5113495bSYour Name ROC_EVENT_INAVLID, 88*5113495bSYour Name }; 89*5113495bSYour Name 90*5113495bSYour Name /** 91*5113495bSYour Name * struct p2p_event - p2p event 92*5113495bSYour Name * @vdev_id: Vdev id 93*5113495bSYour Name * @roc_event: RoC event 94*5113495bSYour Name * @cookie: Cookie which is given to supplicant for this roc req 95*5113495bSYour Name * @chan_freq: Chan frequency for which this RoC has been requested 96*5113495bSYour Name * @duration: Duration for the RoC 97*5113495bSYour Name */ 98*5113495bSYour Name struct p2p_event { 99*5113495bSYour Name uint32_t vdev_id; 100*5113495bSYour Name enum p2p_roc_event roc_event; 101*5113495bSYour Name uint64_t cookie; 102*5113495bSYour Name qdf_freq_t chan_freq; 103*5113495bSYour Name uint32_t duration; 104*5113495bSYour Name }; 105*5113495bSYour Name 106*5113495bSYour Name /** 107*5113495bSYour Name * struct p2p_rx_mgmt_frame - rx mgmt frame structure 108*5113495bSYour Name * @frame_len: Frame length 109*5113495bSYour Name * @rx_freq: RX Frequency 110*5113495bSYour Name * @vdev_id: Vdev id 111*5113495bSYour Name * @frm_type: Frame type 112*5113495bSYour Name * @rx_rssi: RX rssi 113*5113495bSYour Name * @buf: Buffer address 114*5113495bSYour Name */ 115*5113495bSYour Name struct p2p_rx_mgmt_frame { 116*5113495bSYour Name uint32_t frame_len; 117*5113495bSYour Name uint32_t rx_freq; 118*5113495bSYour Name uint32_t vdev_id; 119*5113495bSYour Name uint32_t frm_type; 120*5113495bSYour Name uint32_t rx_rssi; 121*5113495bSYour Name QDF_FLEX_ARRAY(uint8_t, buf); 122*5113495bSYour Name }; 123*5113495bSYour Name 124*5113495bSYour Name /** 125*5113495bSYour Name * struct p2p_tx_cnf - tx confirm structure 126*5113495bSYour Name * @vdev_id: Vdev id 127*5113495bSYour Name * @action_cookie: TX cookie for this action frame 128*5113495bSYour Name * @buf_len: Frame length 129*5113495bSYour Name * @status: TX status 130*5113495bSYour Name * @buf: Buffer address 131*5113495bSYour Name */ 132*5113495bSYour Name struct p2p_tx_cnf { 133*5113495bSYour Name uint32_t vdev_id; 134*5113495bSYour Name uint64_t action_cookie; 135*5113495bSYour Name uint32_t buf_len; 136*5113495bSYour Name uint32_t status; 137*5113495bSYour Name uint8_t *buf; 138*5113495bSYour Name }; 139*5113495bSYour Name 140*5113495bSYour Name /** 141*5113495bSYour Name * struct p2p_mgmt_tx - p2p mgmt tx structure 142*5113495bSYour Name * @vdev_id: Vdev id 143*5113495bSYour Name * @chan_freq: Chan frequency for which this RoC has been requested 144*5113495bSYour Name * @wait: Duration for the RoC 145*5113495bSYour Name * @len: Length of tx buffer 146*5113495bSYour Name * @no_cck: Required cck or not 147*5113495bSYour Name * @dont_wait_for_ack: Wait for ack or not 148*5113495bSYour Name * @off_chan: Off channel tx or not 149*5113495bSYour Name * @buf: TX buffer 150*5113495bSYour Name */ 151*5113495bSYour Name struct p2p_mgmt_tx { 152*5113495bSYour Name uint32_t vdev_id; 153*5113495bSYour Name qdf_freq_t chan_freq; 154*5113495bSYour Name uint32_t wait; 155*5113495bSYour Name uint32_t len; 156*5113495bSYour Name uint32_t no_cck; 157*5113495bSYour Name uint32_t dont_wait_for_ack; 158*5113495bSYour Name uint32_t off_chan; 159*5113495bSYour Name const uint8_t *buf; 160*5113495bSYour Name }; 161*5113495bSYour Name 162*5113495bSYour Name /** 163*5113495bSYour Name * struct p2p_set_mac_filter_evt 164*5113495bSYour Name * @vdev_id: Vdev id 165*5113495bSYour Name * @status: target reported result of set mac addr filter 166*5113495bSYour Name */ 167*5113495bSYour Name struct p2p_set_mac_filter_evt { 168*5113495bSYour Name uint32_t vdev_id; 169*5113495bSYour Name uint32_t status; 170*5113495bSYour Name }; 171*5113495bSYour Name 172*5113495bSYour Name /** 173*5113495bSYour Name * struct p2p_ps_config 174*5113495bSYour Name * @vdev_id: Vdev id 175*5113495bSYour Name * @opp_ps: Opportunistic power save 176*5113495bSYour Name * @ct_window: CT window 177*5113495bSYour Name * @count: Count 178*5113495bSYour Name * @duration: Duration 179*5113495bSYour Name * @interval: Interval 180*5113495bSYour Name * @single_noa_duration: Single shot noa duration 181*5113495bSYour Name * @ps_selection: power save selection 182*5113495bSYour Name * @start: Start time 183*5113495bSYour Name */ 184*5113495bSYour Name struct p2p_ps_config { 185*5113495bSYour Name uint32_t vdev_id; 186*5113495bSYour Name uint32_t opp_ps; 187*5113495bSYour Name uint32_t ct_window; 188*5113495bSYour Name uint32_t count; 189*5113495bSYour Name uint32_t duration; 190*5113495bSYour Name uint32_t interval; 191*5113495bSYour Name uint32_t single_noa_duration; 192*5113495bSYour Name uint32_t ps_selection; 193*5113495bSYour Name uint32_t start; 194*5113495bSYour Name }; 195*5113495bSYour Name 196*5113495bSYour Name /** 197*5113495bSYour Name * struct p2p_lo_start - p2p listen offload start 198*5113495bSYour Name * @vdev_id: Vdev id 199*5113495bSYour Name * @ctl_flags: Control flag 200*5113495bSYour Name * @freq: P2P listen frequency 201*5113495bSYour Name * @period: Listen offload period 202*5113495bSYour Name * @interval: Listen offload interval 203*5113495bSYour Name * @count: Number listen offload intervals 204*5113495bSYour Name * @dev_types_len: Device types length 205*5113495bSYour Name * @probe_resp_len: Probe response template length 206*5113495bSYour Name * @device_types: Device types 207*5113495bSYour Name * @probe_resp_tmplt: Probe response template 208*5113495bSYour Name */ 209*5113495bSYour Name struct p2p_lo_start { 210*5113495bSYour Name uint32_t vdev_id; 211*5113495bSYour Name uint32_t ctl_flags; 212*5113495bSYour Name uint32_t freq; 213*5113495bSYour Name uint32_t period; 214*5113495bSYour Name uint32_t interval; 215*5113495bSYour Name uint32_t count; 216*5113495bSYour Name uint32_t dev_types_len; 217*5113495bSYour Name uint32_t probe_resp_len; 218*5113495bSYour Name uint8_t *device_types; 219*5113495bSYour Name uint8_t *probe_resp_tmplt; 220*5113495bSYour Name }; 221*5113495bSYour Name 222*5113495bSYour Name /** 223*5113495bSYour Name * struct p2p_lo_event 224*5113495bSYour Name * @vdev_id: vdev id 225*5113495bSYour Name * @reason_code: reason code 226*5113495bSYour Name */ 227*5113495bSYour Name struct p2p_lo_event { 228*5113495bSYour Name uint32_t vdev_id; 229*5113495bSYour Name uint32_t reason_code; 230*5113495bSYour Name }; 231*5113495bSYour Name 232*5113495bSYour Name /** 233*5113495bSYour Name * struct noa_descriptor - noa descriptor 234*5113495bSYour Name * @type_count: 255: continuous schedule, 0: reserved 235*5113495bSYour Name * @duration: Absent period duration in micro seconds 236*5113495bSYour Name * @interval: Absent period interval in micro seconds 237*5113495bSYour Name * @start_time: 32 bit tsf time when in starts 238*5113495bSYour Name */ 239*5113495bSYour Name struct noa_descriptor { 240*5113495bSYour Name uint32_t type_count; 241*5113495bSYour Name uint32_t duration; 242*5113495bSYour Name uint32_t interval; 243*5113495bSYour Name uint32_t start_time; 244*5113495bSYour Name }; 245*5113495bSYour Name 246*5113495bSYour Name /** 247*5113495bSYour Name * struct p2p_noa_info - p2p noa information 248*5113495bSYour Name * @index: identifies instance of NOA su element 249*5113495bSYour Name * @opps_ps: opps ps state of the AP 250*5113495bSYour Name * @ct_window: ct window in TUs 251*5113495bSYour Name * @vdev_id: vdev id 252*5113495bSYour Name * @num_desc: number of NOA descriptors 253*5113495bSYour Name * @noa_desc: noa descriptors 254*5113495bSYour Name */ 255*5113495bSYour Name struct p2p_noa_info { 256*5113495bSYour Name uint32_t index; 257*5113495bSYour Name uint32_t opps_ps; 258*5113495bSYour Name uint32_t ct_window; 259*5113495bSYour Name uint32_t vdev_id; 260*5113495bSYour Name uint32_t num_desc; 261*5113495bSYour Name struct noa_descriptor noa_desc[P2P_MAX_NOA_DESC]; 262*5113495bSYour Name }; 263*5113495bSYour Name 264*5113495bSYour Name /** 265*5113495bSYour Name * struct p2p_protocol_callbacks - callback to non-converged driver 266*5113495bSYour Name * @is_mgmt_protected: func to get 11w mgmt protection status 267*5113495bSYour Name */ 268*5113495bSYour Name struct p2p_protocol_callbacks { 269*5113495bSYour Name bool (*is_mgmt_protected)(uint32_t vdev_id, const uint8_t *peer_addr); 270*5113495bSYour Name }; 271*5113495bSYour Name 272*5113495bSYour Name /** 273*5113495bSYour Name * enum p2p_attr_id - enum for P2P attributes ID in P2P IE 274*5113495bSYour Name * @P2P_ATTR_STATUS: Attribute Status none 275*5113495bSYour Name * @P2P_ATTR_MINOR_REASON_CODE: Minor reason code attribute 276*5113495bSYour Name * @P2P_ATTR_CAPABILITY: Capability attribute 277*5113495bSYour Name * @P2P_ATTR_DEVICE_ID: device ID attribute 278*5113495bSYour Name * @P2P_ATTR_GROUP_OWNER_INTENT: Group owner intent attribute 279*5113495bSYour Name * @P2P_ATTR_CONFIGURATION_TIMEOUT: Config timeout attribute 280*5113495bSYour Name * @P2P_ATTR_LISTEN_CHANNEL: listen channel attribute 281*5113495bSYour Name * @P2P_ATTR_GROUP_BSSID: Group BSSID attribute 282*5113495bSYour Name * @P2P_ATTR_EXT_LISTEN_TIMING: Listen timing attribute 283*5113495bSYour Name * @P2P_ATTR_INTENDED_INTERFACE_ADDR: Intended interface address attribute 284*5113495bSYour Name * @P2P_ATTR_MANAGEABILITY: Manageability attribute 285*5113495bSYour Name * @P2P_ATTR_CHANNEL_LIST: Channel list attribute 286*5113495bSYour Name * @P2P_ATTR_NOTICE_OF_ABSENCE: Notice of Absence attribute 287*5113495bSYour Name * @P2P_ATTR_DEVICE_INFO: Device Info attribute 288*5113495bSYour Name * @P2P_ATTR_GROUP_INFO: Group Info attribute 289*5113495bSYour Name * @P2P_ATTR_GROUP_ID: Group ID attribute 290*5113495bSYour Name * @P2P_ATTR_INTERFACE: Interface attribute 291*5113495bSYour Name * @P2P_ATTR_OPERATING_CHANNEL: Operating channel attribute 292*5113495bSYour Name * @P2P_ATTR_INVITATION_FLAGS: Invitation flags attribute 293*5113495bSYour Name * @P2P_ATTR_OOB_GO_NEG_CHANNEL: GO neg channel attribute 294*5113495bSYour Name * @P2P_ATTR_SERVICE_HASH: Service HASH attribute 295*5113495bSYour Name * @P2P_ATTR_SESSION_INFORMATION_DATA: Session Info data attribute 296*5113495bSYour Name * @P2P_ATTR_CONNECTION_CAPABILITY: Connection capability attribute 297*5113495bSYour Name * @P2P_ATTR_ADVERTISEMENT_ID: Advertisement ID attribute 298*5113495bSYour Name * @P2P_ATTR_ADVERTISED_SERVICE: Advertised Service attribute 299*5113495bSYour Name * @P2P_ATTR_SESSION_ID: Session ID attribute 300*5113495bSYour Name * @P2P_ATTR_FEATURE_CAPABILITY: Feature capability attribute 301*5113495bSYour Name * @P2P_ATTR_PERSISTENT_GROUP: Persistent group attribute 302*5113495bSYour Name * @P2P_ATTR_VENDOR_SPECIFIC: Vendor specific attribute 303*5113495bSYour Name */ 304*5113495bSYour Name enum p2p_attr_id { 305*5113495bSYour Name P2P_ATTR_STATUS = 0, 306*5113495bSYour Name P2P_ATTR_MINOR_REASON_CODE = 1, 307*5113495bSYour Name P2P_ATTR_CAPABILITY = 2, 308*5113495bSYour Name P2P_ATTR_DEVICE_ID = 3, 309*5113495bSYour Name P2P_ATTR_GROUP_OWNER_INTENT = 4, 310*5113495bSYour Name P2P_ATTR_CONFIGURATION_TIMEOUT = 5, 311*5113495bSYour Name P2P_ATTR_LISTEN_CHANNEL = 6, 312*5113495bSYour Name P2P_ATTR_GROUP_BSSID = 7, 313*5113495bSYour Name P2P_ATTR_EXT_LISTEN_TIMING = 8, 314*5113495bSYour Name P2P_ATTR_INTENDED_INTERFACE_ADDR = 9, 315*5113495bSYour Name P2P_ATTR_MANAGEABILITY = 10, 316*5113495bSYour Name P2P_ATTR_CHANNEL_LIST = 11, 317*5113495bSYour Name P2P_ATTR_NOTICE_OF_ABSENCE = 12, 318*5113495bSYour Name P2P_ATTR_DEVICE_INFO = 13, 319*5113495bSYour Name P2P_ATTR_GROUP_INFO = 14, 320*5113495bSYour Name P2P_ATTR_GROUP_ID = 15, 321*5113495bSYour Name P2P_ATTR_INTERFACE = 16, 322*5113495bSYour Name P2P_ATTR_OPERATING_CHANNEL = 17, 323*5113495bSYour Name P2P_ATTR_INVITATION_FLAGS = 18, 324*5113495bSYour Name P2P_ATTR_OOB_GO_NEG_CHANNEL = 19, 325*5113495bSYour Name P2P_ATTR_SERVICE_HASH = 21, 326*5113495bSYour Name P2P_ATTR_SESSION_INFORMATION_DATA = 22, 327*5113495bSYour Name P2P_ATTR_CONNECTION_CAPABILITY = 23, 328*5113495bSYour Name P2P_ATTR_ADVERTISEMENT_ID = 24, 329*5113495bSYour Name P2P_ATTR_ADVERTISED_SERVICE = 25, 330*5113495bSYour Name P2P_ATTR_SESSION_ID = 26, 331*5113495bSYour Name P2P_ATTR_FEATURE_CAPABILITY = 27, 332*5113495bSYour Name P2P_ATTR_PERSISTENT_GROUP = 28, 333*5113495bSYour Name P2P_ATTR_VENDOR_SPECIFIC = 221 334*5113495bSYour Name }; 335*5113495bSYour Name #endif /* _WLAN_P2P_PUBLIC_STRUCT_H_ */ 336