138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/*
238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt * Copyright (C) 1999-2013, Broadcom Corporation
338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt *
438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt * Permission to use, copy, modify, and/or distribute this software for any
538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt * purpose with or without fee is hereby granted, provided that the above
638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt * copyright notice and this permission notice appear in all copies.
738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt *
838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
1038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
1138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
1238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
1338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
1438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
1538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt *
1638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt * Fundamental types and constants relating to WFA P2P (aka WiFi Direct)
1738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt *
1838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt * $Id: p2p.h 384536 2013-02-12 04:13:09Z $
1938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt */
2038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
2138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#ifndef _P2P_H_
2238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define _P2P_H_
2338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
2438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#ifndef _TYPEDEFS_H_
2538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#include <typedefs.h>
2638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#endif
2738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#include <wlioctl.h>
2838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#include <proto/802.11.h>
2938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
3038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* This marks the start of a packed structure section. */
3138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#include <packed_section_start.h>
3238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
3338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
3438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* WiFi P2P OUI values */
3538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define P2P_OUI			WFA_OUI			/* WiFi P2P OUI */
3638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define P2P_VER			WFA_OUI_TYPE_P2P	/* P2P version: 9=WiFi P2P v1.0 */
3738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
3838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define P2P_IE_ID		0xdd			/* P2P IE element ID */
3938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
4038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* WiFi P2P IE */
4138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry ShmidtBWL_PRE_PACKED_STRUCT struct wifi_p2p_ie {
4238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8	id;		/* IE ID: 0xDD */
4338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8	len;		/* IE length */
4438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8	OUI[3];		/* WiFi P2P specific OUI: P2P_OUI */
4538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8	oui_type;	/* Identifies P2P version: P2P_VER */
4638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8	subelts[1];	/* variable length subelements */
4738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt} BWL_POST_PACKED_STRUCT;
4838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidttypedef struct wifi_p2p_ie wifi_p2p_ie_t;
4938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
5038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define P2P_IE_FIXED_LEN	6
5138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
5238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define P2P_ATTR_ID_OFF		0
5338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define P2P_ATTR_LEN_OFF	1
5438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define P2P_ATTR_DATA_OFF	3
5538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
5638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define P2P_ATTR_ID_LEN		1	/* ID filed length */
5738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define P2P_ATTR_LEN_LEN	2	/* length field length */
5838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define P2P_ATTR_HDR_LEN	3 /* ID + 2-byte length field spec 1.02 */
5938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
6038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* P2P IE Subelement IDs from WiFi P2P Technical Spec 1.00 */
6138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define P2P_SEID_STATUS			0	/* Status */
6238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define P2P_SEID_MINOR_RC		1	/* Minor Reason Code */
6338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define P2P_SEID_P2P_INFO		2	/* P2P Capability (capabilities info) */
6438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define P2P_SEID_DEV_ID			3	/* P2P Device ID */
6538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define P2P_SEID_INTENT			4	/* Group Owner Intent */
6638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define P2P_SEID_CFG_TIMEOUT		5	/* Configuration Timeout */
6738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define P2P_SEID_CHANNEL		6	/* Listen channel */
6838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define P2P_SEID_GRP_BSSID		7	/* P2P Group BSSID */
6938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define P2P_SEID_XT_TIMING		8	/* Extended Listen Timing */
7038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define P2P_SEID_INTINTADDR		9	/* Intended P2P Interface Address */
7138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define P2P_SEID_P2P_MGBTY		10	/* P2P Manageability */
7238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define P2P_SEID_CHAN_LIST		11	/* Channel List */
7338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define P2P_SEID_ABSENCE		12	/* Notice of Absence */
7438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define P2P_SEID_DEV_INFO		13	/* Device Info */
7538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define P2P_SEID_GROUP_INFO		14	/* Group Info */
7638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define P2P_SEID_GROUP_ID		15	/* Group ID */
7738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define P2P_SEID_P2P_IF			16	/* P2P Interface */
7838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define P2P_SEID_OP_CHANNEL		17	/* Operating Channel */
7938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define P2P_SEID_INVITE_FLAGS		18	/* Invitation Flags */
8038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define P2P_SEID_VNDR			221	/* Vendor-specific subelement */
8138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
8238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define P2P_SE_VS_ID_SERVICES	0x1b /* BRCM proprietary subel: L2 Services */
8338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
8438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
8538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* WiFi P2P IE subelement: P2P Capability (capabilities info) */
8638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry ShmidtBWL_PRE_PACKED_STRUCT struct wifi_p2p_info_se_s {
8738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8	eltId;		/* SE ID: P2P_SEID_P2P_INFO */
8838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8	len[2];		/* SE length not including eltId, len fields */
8938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8	dev;		/* Device Capability Bitmap */
9038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8	group;		/* Group Capability Bitmap */
9138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt} BWL_POST_PACKED_STRUCT;
9238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidttypedef struct wifi_p2p_info_se_s wifi_p2p_info_se_t;
9338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
9438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* P2P Capability subelement's Device Capability Bitmap bit values */
9538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define P2P_CAPSE_DEV_SERVICE_DIS	0x1 /* Service Discovery */
9638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define P2P_CAPSE_DEV_CLIENT_DIS	0x2 /* Client Discoverability */
9738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define P2P_CAPSE_DEV_CONCURRENT	0x4 /* Concurrent Operation */
9838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define P2P_CAPSE_DEV_INFRA_MAN		0x8 /* P2P Infrastructure Managed */
9938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define P2P_CAPSE_DEV_LIMIT			0x10 /* P2P Device Limit */
10038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define P2P_CAPSE_INVITE_PROC		0x20 /* P2P Invitation Procedure */
10138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
10238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* P2P Capability subelement's Group Capability Bitmap bit values */
10338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define P2P_CAPSE_GRP_OWNER			0x1 /* P2P Group Owner */
10438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define P2P_CAPSE_PERSIST_GRP		0x2 /* Persistent P2P Group */
10538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define P2P_CAPSE_GRP_LIMIT			0x4 /* P2P Group Limit */
10638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define P2P_CAPSE_GRP_INTRA_BSS		0x8 /* Intra-BSS Distribution */
10738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define P2P_CAPSE_GRP_X_CONNECT		0x10 /* Cross Connection */
10838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define P2P_CAPSE_GRP_PERSISTENT	0x20 /* Persistent Reconnect */
10938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define P2P_CAPSE_GRP_FORMATION		0x40 /* Group Formation */
11038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
11138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
11238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* WiFi P2P IE subelement: Group Owner Intent */
11338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry ShmidtBWL_PRE_PACKED_STRUCT struct wifi_p2p_intent_se_s {
11438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8	eltId;		/* SE ID: P2P_SEID_INTENT */
11538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8	len[2];		/* SE length not including eltId, len fields */
11638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8	intent;		/* Intent Value 0...15 (0=legacy 15=master only) */
11738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt} BWL_POST_PACKED_STRUCT;
11838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidttypedef struct wifi_p2p_intent_se_s wifi_p2p_intent_se_t;
11938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
12038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* WiFi P2P IE subelement: Configuration Timeout */
12138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry ShmidtBWL_PRE_PACKED_STRUCT struct wifi_p2p_cfg_tmo_se_s {
12238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8	eltId;		/* SE ID: P2P_SEID_CFG_TIMEOUT */
12338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8	len[2];		/* SE length not including eltId, len fields */
12438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8	go_tmo;		/* GO config timeout in units of 10 ms */
12538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8	client_tmo;	/* Client config timeout in units of 10 ms */
12638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt} BWL_POST_PACKED_STRUCT;
12738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidttypedef struct wifi_p2p_cfg_tmo_se_s wifi_p2p_cfg_tmo_se_t;
12838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
12938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* WiFi P2P IE subelement: Listen Channel */
13038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry ShmidtBWL_PRE_PACKED_STRUCT struct wifi_p2p_listen_channel_se_s {
13138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8	eltId;		/* SE ID: P2P_SEID_CHANNEL */
13238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8	len[2];		/* SE length not including eltId, len fields */
13338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8	country[3];	/* Country String */
13438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8	op_class;	/* Operating Class */
13538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8	channel;	/* Channel */
13638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt} BWL_POST_PACKED_STRUCT;
13738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidttypedef struct wifi_p2p_listen_channel_se_s wifi_p2p_listen_channel_se_t;
13838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
13938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* WiFi P2P IE subelement: P2P Group BSSID */
14038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry ShmidtBWL_PRE_PACKED_STRUCT struct wifi_p2p_grp_bssid_se_s {
14138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8	eltId;		/* SE ID: P2P_SEID_GRP_BSSID */
14238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8	len[2];		/* SE length not including eltId, len fields */
14338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8	mac[6];		/* P2P group bssid */
14438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt} BWL_POST_PACKED_STRUCT;
14538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidttypedef struct wifi_p2p_grp_bssid_se_s wifi_p2p_grp_bssid_se_t;
14638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
14738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* WiFi P2P IE subelement: P2P Group ID */
14838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry ShmidtBWL_PRE_PACKED_STRUCT struct wifi_p2p_grp_id_se_s {
14938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8	eltId;		/* SE ID: P2P_SEID_GROUP_ID */
15038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8	len[2];		/* SE length not including eltId, len fields */
15138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8	mac[6];		/* P2P device address */
15238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8	ssid[1];	/* ssid. device id. variable length */
15338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt} BWL_POST_PACKED_STRUCT;
15438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidttypedef struct wifi_p2p_grp_id_se_s wifi_p2p_grp_id_se_t;
15538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
15638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* WiFi P2P IE subelement: P2P Interface */
15738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry ShmidtBWL_PRE_PACKED_STRUCT struct wifi_p2p_intf_se_s {
15838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8	eltId;		/* SE ID: P2P_SEID_P2P_IF */
15938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8	len[2];		/* SE length not including eltId, len fields */
16038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8	mac[6];		/* P2P device address */
16138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8	ifaddrs;	/* P2P Interface Address count */
16238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8	ifaddr[1][6];	/* P2P Interface Address list */
16338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt} BWL_POST_PACKED_STRUCT;
16438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidttypedef struct wifi_p2p_intf_se_s wifi_p2p_intf_se_t;
16538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
16638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* WiFi P2P IE subelement: Status */
16738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry ShmidtBWL_PRE_PACKED_STRUCT struct wifi_p2p_status_se_s {
16838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8	eltId;		/* SE ID: P2P_SEID_STATUS */
16938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8	len[2];		/* SE length not including eltId, len fields */
17038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8	status;		/* Status Code: P2P_STATSE_* */
17138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt} BWL_POST_PACKED_STRUCT;
17238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidttypedef struct wifi_p2p_status_se_s wifi_p2p_status_se_t;
17338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
17438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* Status subelement Status Code definitions */
17538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define P2P_STATSE_SUCCESS			0
17638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt				/* Success */
17738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define P2P_STATSE_FAIL_INFO_CURR_UNAVAIL	1
17838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt				/* Failed, information currently unavailable */
17938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define P2P_STATSE_PASSED_UP			P2P_STATSE_FAIL_INFO_CURR_UNAVAIL
18038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt				/* Old name for above in P2P spec 1.08 and older */
18138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define P2P_STATSE_FAIL_INCOMPAT_PARAMS		2
18238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt				/* Failed, incompatible parameters */
18338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define P2P_STATSE_FAIL_LIMIT_REACHED		3
18438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt				/* Failed, limit reached */
18538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define P2P_STATSE_FAIL_INVALID_PARAMS		4
18638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt				/* Failed, invalid parameters */
18738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define P2P_STATSE_FAIL_UNABLE_TO_ACCOM		5
18838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt				/* Failed, unable to accomodate request */
18938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define P2P_STATSE_FAIL_PROTO_ERROR		6
19038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt				/* Failed, previous protocol error or disruptive behaviour */
19138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define P2P_STATSE_FAIL_NO_COMMON_CHAN		7
19238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt				/* Failed, no common channels */
19338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define P2P_STATSE_FAIL_UNKNOWN_GROUP		8
19438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt				/* Failed, unknown P2P Group */
19538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define P2P_STATSE_FAIL_INTENT			9
19638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt				/* Failed, both peers indicated Intent 15 in GO Negotiation */
19738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define P2P_STATSE_FAIL_INCOMPAT_PROVIS		10
19838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt				/* Failed, incompatible provisioning method */
19938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define P2P_STATSE_FAIL_USER_REJECT		11
20038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt				/* Failed, rejected by user */
20138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
20238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* WiFi P2P IE attribute: Extended Listen Timing */
20338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry ShmidtBWL_PRE_PACKED_STRUCT struct wifi_p2p_ext_se_s {
20438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8	eltId;		/* ID: P2P_SEID_EXT_TIMING */
20538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8	len[2];		/* length not including eltId, len fields */
20638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8	avail[2];	/* availibility period */
20738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8	interval[2];	/* availibility interval */
20838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt} BWL_POST_PACKED_STRUCT;
20938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidttypedef struct wifi_p2p_ext_se_s wifi_p2p_ext_se_t;
21038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
21138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define P2P_EXT_MIN	10	/* minimum 10ms */
21238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
21338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* WiFi P2P IE subelement: Intended P2P Interface Address */
21438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry ShmidtBWL_PRE_PACKED_STRUCT struct wifi_p2p_intintad_se_s {
21538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8	eltId;		/* SE ID: P2P_SEID_INTINTADDR */
21638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8	len[2];		/* SE length not including eltId, len fields */
21738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8	mac[6];		/* intended P2P interface MAC address */
21838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt} BWL_POST_PACKED_STRUCT;
21938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidttypedef struct wifi_p2p_intintad_se_s wifi_p2p_intintad_se_t;
22038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
22138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* WiFi P2P IE subelement: Channel */
22238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry ShmidtBWL_PRE_PACKED_STRUCT struct wifi_p2p_channel_se_s {
22338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8	eltId;		/* SE ID: P2P_SEID_STATUS */
22438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8	len[2];		/* SE length not including eltId, len fields */
22538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8	band;		/* Regulatory Class (band) */
22638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8	channel;	/* Channel */
22738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt} BWL_POST_PACKED_STRUCT;
22838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidttypedef struct wifi_p2p_channel_se_s wifi_p2p_channel_se_t;
22938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
23038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
23138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* Channel Entry structure within the Channel List SE */
23238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry ShmidtBWL_PRE_PACKED_STRUCT struct wifi_p2p_chanlist_entry_s {
23338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8	band;						/* Regulatory Class (band) */
23438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8	num_channels;				/* # of channels in the channel list */
23538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8	channels[WL_NUMCHANNELS];	/* Channel List */
23638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt} BWL_POST_PACKED_STRUCT;
23738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidttypedef struct wifi_p2p_chanlist_entry_s wifi_p2p_chanlist_entry_t;
23838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define WIFI_P2P_CHANLIST_SE_MAX_ENTRIES 2
23938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
24038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* WiFi P2P IE subelement: Channel List */
24138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry ShmidtBWL_PRE_PACKED_STRUCT struct wifi_p2p_chanlist_se_s {
24238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8	eltId;		/* SE ID: P2P_SEID_CHAN_LIST */
24338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8	len[2];		/* SE length not including eltId, len fields */
24438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8	country[3];	/* Country String */
24538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8	num_entries;	/* # of channel entries */
24638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	wifi_p2p_chanlist_entry_t	entries[WIFI_P2P_CHANLIST_SE_MAX_ENTRIES];
24738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt						/* Channel Entry List */
24838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt} BWL_POST_PACKED_STRUCT;
24938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidttypedef struct wifi_p2p_chanlist_se_s wifi_p2p_chanlist_se_t;
25038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
25138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* WiFi Primary Device Type structure */
25238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry ShmidtBWL_PRE_PACKED_STRUCT struct wifi_p2p_pri_devtype_s {
25338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint16	cat_id;		/* Category ID */
25438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8	OUI[3];		/* WFA OUI: 0x0050F2 */
25538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8	oui_type;	/* WPS_OUI_TYPE */
25638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint16	sub_cat_id;	/* Sub Category ID */
25738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt} BWL_POST_PACKED_STRUCT;
25838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidttypedef struct wifi_p2p_pri_devtype_s wifi_p2p_pri_devtype_t;
25938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
26038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* WiFi P2P IE's Device Info subelement */
26138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry ShmidtBWL_PRE_PACKED_STRUCT struct wifi_p2p_devinfo_se_s {
26238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8	eltId;			/* SE ID: P2P_SEID_DEVINFO */
26338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8	len[2];			/* SE length not including eltId, len fields */
26438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8	mac[6];			/* P2P Device MAC address */
26538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint16	wps_cfg_meths;		/* Config Methods: reg_prototlv.h WPS_CONFMET_* */
26638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8	pri_devtype[8];		/* Primary Device Type */
26738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt} BWL_POST_PACKED_STRUCT;
26838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidttypedef struct wifi_p2p_devinfo_se_s wifi_p2p_devinfo_se_t;
26938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
27038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define P2P_DEV_TYPE_LEN	8
27138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
27238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* WiFi P2P IE's Group Info subelement Client Info Descriptor */
27338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry ShmidtBWL_PRE_PACKED_STRUCT struct wifi_p2p_cid_fixed_s {
27438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8	len;
27538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8	devaddr[ETHER_ADDR_LEN];	/* P2P Device Address */
27638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8	ifaddr[ETHER_ADDR_LEN];		/* P2P Interface Address */
27738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8	devcap;				/* Device Capability */
27838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8	cfg_meths[2];			/* Config Methods: reg_prototlv.h WPS_CONFMET_* */
27938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8	pridt[P2P_DEV_TYPE_LEN];	/* Primary Device Type */
28038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8	secdts;				/* Number of Secondary Device Types */
28138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt} BWL_POST_PACKED_STRUCT;
28238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidttypedef struct wifi_p2p_cid_fixed_s wifi_p2p_cid_fixed_t;
28338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
28438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* WiFi P2P IE's Device ID subelement */
28538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry ShmidtBWL_PRE_PACKED_STRUCT struct wifi_p2p_devid_se_s {
28638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8	eltId;
28738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8	len[2];
28838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	struct ether_addr	addr;			/* P2P Device MAC address */
28938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt} BWL_POST_PACKED_STRUCT;
29038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidttypedef struct wifi_p2p_devid_se_s wifi_p2p_devid_se_t;
29138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
29238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* WiFi P2P IE subelement: P2P Manageability */
29338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry ShmidtBWL_PRE_PACKED_STRUCT struct wifi_p2p_mgbt_se_s {
29438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8	eltId;		/* SE ID: P2P_SEID_P2P_MGBTY */
29538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8	len[2];		/* SE length not including eltId, len fields */
29638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8	mg_bitmap;	/* manageability bitmap */
29738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt} BWL_POST_PACKED_STRUCT;
29838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidttypedef struct wifi_p2p_mgbt_se_s wifi_p2p_mgbt_se_t;
29938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* mg_bitmap field bit values */
30038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define P2P_MGBTSE_P2PDEVMGMT_FLAG   0x1 /* AP supports Managed P2P Device */
30138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
30238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* WiFi P2P IE subelement: Group Info */
30338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry ShmidtBWL_PRE_PACKED_STRUCT struct wifi_p2p_grpinfo_se_s {
30438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8	eltId;			/* SE ID: P2P_SEID_GROUP_INFO */
30538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8	len[2];			/* SE length not including eltId, len fields */
30638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt} BWL_POST_PACKED_STRUCT;
30738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidttypedef struct wifi_p2p_grpinfo_se_s wifi_p2p_grpinfo_se_t;
30838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
30938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* WiFi IE subelement: Operating Channel */
31038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry ShmidtBWL_PRE_PACKED_STRUCT struct wifi_p2p_op_channel_se_s {
31138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8	eltId;		/* SE ID: P2P_SEID_OP_CHANNEL */
31238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8	len[2];		/* SE length not including eltId, len fields */
31338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8	country[3];	/* Country String */
31438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8	op_class;	/* Operating Class */
31538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8	channel;	/* Channel */
31638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt} BWL_POST_PACKED_STRUCT;
31738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidttypedef struct wifi_p2p_op_channel_se_s wifi_p2p_op_channel_se_t;
31838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
31938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* WiFi IE subelement: INVITATION FLAGS */
32038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry ShmidtBWL_PRE_PACKED_STRUCT struct wifi_p2p_invite_flags_se_s {
32138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8	eltId;		/* SE ID: P2P_SEID_INVITE_FLAGS */
32238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8	len[2];		/* SE length not including eltId, len fields */
32338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8	flags;		/* Flags */
32438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt} BWL_POST_PACKED_STRUCT;
32538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidttypedef struct wifi_p2p_invite_flags_se_s wifi_p2p_invite_flags_se_t;
32638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
32738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* WiFi P2P Action Frame */
32838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry ShmidtBWL_PRE_PACKED_STRUCT struct wifi_p2p_action_frame {
32938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8	category;	/* P2P_AF_CATEGORY */
33038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8	OUI[3];		/* OUI - P2P_OUI */
33138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8	type;		/* OUI Type - P2P_VER */
33238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8	subtype;	/* OUI Subtype - P2P_AF_* */
33338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8	dialog_token;	/* nonzero, identifies req/resp tranaction */
33438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8	elts[1];	/* Variable length information elements.  Max size =
33538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt				 * ACTION_FRAME_SIZE - sizeof(this structure) - 1
33638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt				 */
33738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt} BWL_POST_PACKED_STRUCT;
33838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidttypedef struct wifi_p2p_action_frame wifi_p2p_action_frame_t;
33938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define P2P_AF_CATEGORY		0x7f
34038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
34138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define P2P_AF_FIXED_LEN	7
34238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
34338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* WiFi P2P Action Frame OUI Subtypes */
34438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define P2P_AF_NOTICE_OF_ABSENCE	0	/* Notice of Absence */
34538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define P2P_AF_PRESENCE_REQ		1	/* P2P Presence Request */
34638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define P2P_AF_PRESENCE_RSP		2	/* P2P Presence Response */
34738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define P2P_AF_GO_DISC_REQ		3	/* GO Discoverability Request */
34838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
34938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
35038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* WiFi P2P Public Action Frame */
35138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry ShmidtBWL_PRE_PACKED_STRUCT struct wifi_p2p_pub_act_frame {
35238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8	category;	/* P2P_PUB_AF_CATEGORY */
35338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8	action;		/* P2P_PUB_AF_ACTION */
35438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8	oui[3];		/* P2P_OUI */
35538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8	oui_type;	/* OUI type - P2P_VER */
35638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8	subtype;	/* OUI subtype - P2P_TYPE_* */
35738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8	dialog_token;	/* nonzero, identifies req/rsp transaction */
35838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8	elts[1];	/* Variable length information elements.  Max size =
35938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt				 * ACTION_FRAME_SIZE - sizeof(this structure) - 1
36038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt				 */
36138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt} BWL_POST_PACKED_STRUCT;
36238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidttypedef struct wifi_p2p_pub_act_frame wifi_p2p_pub_act_frame_t;
36338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define P2P_PUB_AF_FIXED_LEN	8
36438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define P2P_PUB_AF_CATEGORY	0x04
36538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define P2P_PUB_AF_ACTION	0x09
36638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
36738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* WiFi P2P Public Action Frame OUI Subtypes */
36838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define P2P_PAF_GON_REQ		0	/* Group Owner Negotiation Req */
36938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define P2P_PAF_GON_RSP		1	/* Group Owner Negotiation Rsp */
37038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define P2P_PAF_GON_CONF	2	/* Group Owner Negotiation Confirm */
37138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define P2P_PAF_INVITE_REQ	3	/* P2P Invitation Request */
37238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define P2P_PAF_INVITE_RSP	4	/* P2P Invitation Response */
37338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define P2P_PAF_DEVDIS_REQ	5	/* Device Discoverability Request */
37438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define P2P_PAF_DEVDIS_RSP	6	/* Device Discoverability Response */
37538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define P2P_PAF_PROVDIS_REQ	7	/* Provision Discovery Request */
37638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define P2P_PAF_PROVDIS_RSP	8	/* Provision Discovery Response */
37738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define P2P_PAF_SUBTYPE_INVALID	255	/* Invalid Subtype */
37838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
37938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* TODO: Stop using these obsolete aliases for P2P_PAF_GON_* */
38038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define P2P_TYPE_MNREQ		P2P_PAF_GON_REQ
38138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define P2P_TYPE_MNRSP		P2P_PAF_GON_RSP
38238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define P2P_TYPE_MNCONF		P2P_PAF_GON_CONF
38338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
38438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* WiFi P2P IE subelement: Notice of Absence */
38538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry ShmidtBWL_PRE_PACKED_STRUCT struct wifi_p2p_noa_desc {
38638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8	cnt_type;	/* Count/Type */
38738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint32	duration;	/* Duration */
38838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint32	interval;	/* Interval */
38938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint32	start;		/* Start Time */
39038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt} BWL_POST_PACKED_STRUCT;
39138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidttypedef struct wifi_p2p_noa_desc wifi_p2p_noa_desc_t;
39238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
39338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry ShmidtBWL_PRE_PACKED_STRUCT struct wifi_p2p_noa_se {
39438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8	eltId;		/* Subelement ID */
39538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8	len[2];		/* Length */
39638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8	index;		/* Index */
39738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8	ops_ctw_parms;	/* CTWindow and OppPS Parameters */
39838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	wifi_p2p_noa_desc_t	desc[1];	/* Notice of Absence Descriptor(s) */
39938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt} BWL_POST_PACKED_STRUCT;
40038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidttypedef struct wifi_p2p_noa_se wifi_p2p_noa_se_t;
40138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
40238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define P2P_NOA_SE_FIXED_LEN	5
40338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
40438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define P2P_NOA_SE_MAX_DESC	2	/* max NoA descriptors in presence request */
40538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
40638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* cnt_type field values */
40738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define P2P_NOA_DESC_CNT_RESERVED	0	/* reserved and should not be used */
40838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define P2P_NOA_DESC_CNT_REPEAT		255	/* continuous schedule */
40938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define P2P_NOA_DESC_TYPE_PREFERRED	1	/* preferred values */
41038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define P2P_NOA_DESC_TYPE_ACCEPTABLE	2	/* acceptable limits */
41138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
41238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* ctw_ops_parms field values */
41338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define P2P_NOA_CTW_MASK	0x7f
41438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define P2P_NOA_OPS_MASK	0x80
41538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define P2P_NOA_OPS_SHIFT	7
41638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
41738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define P2P_CTW_MIN	10	/* minimum 10TU */
41838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
41938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/*
42038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt * P2P Service Discovery related
42138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt */
42238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define	P2PSD_ACTION_CATEGORY		0x04
42338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt				/* Public action frame */
42438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define	P2PSD_ACTION_ID_GAS_IREQ	0x0a
42538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt				/* Action value for GAS Initial Request AF */
42638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define	P2PSD_ACTION_ID_GAS_IRESP	0x0b
42738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt				/* Action value for GAS Initial Response AF */
42838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define	P2PSD_ACTION_ID_GAS_CREQ	0x0c
42938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt				/* Action value for GAS Comback Request AF */
43038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define	P2PSD_ACTION_ID_GAS_CRESP	0x0d
43138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt				/* Action value for GAS Comback Response AF */
43238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define P2PSD_AD_EID				0x6c
43338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt				/* Advertisement Protocol IE ID */
43438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define P2PSD_ADP_TUPLE_QLMT_PAMEBI	0x00
43538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt				/* Query Response Length Limit 7 bits plus PAME-BI 1 bit */
43638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define P2PSD_ADP_PROTO_ID			0x00
43738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt				/* Advertisement Protocol ID. Always 0 for P2P SD */
43838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define P2PSD_GAS_OUI				P2P_OUI
43938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt				/* WFA OUI */
44038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define P2PSD_GAS_OUI_SUBTYPE		P2P_VER
44138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt				/* OUI Subtype for GAS IE */
44238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define P2PSD_GAS_NQP_INFOID		0xDDDD
44338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt				/* NQP Query Info ID: 56797 */
44438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#define P2PSD_GAS_COMEBACKDEALY		0x00
44538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt				/* Not used in the Native GAS protocol */
44638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
44738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* Service Protocol Type */
44838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidttypedef enum p2psd_svc_protype {
44938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	SVC_RPOTYPE_ALL = 0,
45038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	SVC_RPOTYPE_BONJOUR = 1,
45138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	SVC_RPOTYPE_UPNP = 2,
45238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	SVC_RPOTYPE_WSD = 3,
45338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	SVC_RPOTYPE_VENDOR = 255
45438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt} p2psd_svc_protype_t;
45538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
45638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* Service Discovery response status code */
45738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidttypedef enum {
45838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	P2PSD_RESP_STATUS_SUCCESS = 0,
45938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	P2PSD_RESP_STATUS_PROTYPE_NA = 1,
46038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	P2PSD_RESP_STATUS_DATA_NA = 2,
46138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	P2PSD_RESP_STATUS_BAD_REQUEST = 3
46238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt} p2psd_resp_status_t;
46338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
46438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* Advertisement Protocol IE tuple field */
46538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry ShmidtBWL_PRE_PACKED_STRUCT struct wifi_p2psd_adp_tpl {
46638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8	llm_pamebi;	/* Query Response Length Limit bit 0-6, set to 0 plus
46738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt				* Pre-Associated Message Exchange BSSID Independent bit 7, set to 0
46838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt				*/
46938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8	adp_id;		/* Advertisement Protocol ID: 0 for NQP Native Query Protocol */
47038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt} BWL_POST_PACKED_STRUCT;
47138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidttypedef struct wifi_p2psd_adp_tpl wifi_p2psd_adp_tpl_t;
47238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
47338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* Advertisement Protocol IE */
47438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry ShmidtBWL_PRE_PACKED_STRUCT struct wifi_p2psd_adp_ie {
47538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8	id;		/* IE ID: 0x6c - 108 */
47638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8	len;	/* IE length */
47738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	wifi_p2psd_adp_tpl_t adp_tpl;  /* Advertisement Protocol Tuple field. Only one
47838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt				* tuple is defined for P2P Service Discovery
47938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt				*/
48038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt} BWL_POST_PACKED_STRUCT;
48138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidttypedef struct wifi_p2psd_adp_ie wifi_p2psd_adp_ie_t;
48238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
48338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* NQP Vendor-specific Content */
48438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry ShmidtBWL_PRE_PACKED_STRUCT struct wifi_p2psd_nqp_query_vsc {
48538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8	oui_subtype;	/* OUI Subtype: 0x09 */
48638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint16	svc_updi;		/* Service Update Indicator */
48738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8	svc_tlvs[1];	/* wifi_p2psd_qreq_tlv_t type for service request,
48838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt				* wifi_p2psd_qresp_tlv_t type for service response
48938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt				*/
49038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt} BWL_POST_PACKED_STRUCT;
49138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidttypedef struct wifi_p2psd_nqp_query_vsc wifi_p2psd_nqp_query_vsc_t;
49238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
49338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* Service Request TLV */
49438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry ShmidtBWL_PRE_PACKED_STRUCT struct wifi_p2psd_qreq_tlv {
49538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint16	len;			/* Length: 5 plus size of Query Data */
49638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8	svc_prot;		/* Service Protocol Type */
49738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8	svc_tscid;		/* Service Transaction ID */
49838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8	query_data[1];	/* Query Data, passed in from above Layer 2 */
49938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt} BWL_POST_PACKED_STRUCT;
50038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidttypedef struct wifi_p2psd_qreq_tlv wifi_p2psd_qreq_tlv_t;
50138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
50238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* Query Request Frame, defined in generic format, instead of NQP specific */
50338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry ShmidtBWL_PRE_PACKED_STRUCT struct wifi_p2psd_qreq_frame {
50438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint16	info_id;	/* Info ID: 0xDDDD */
50538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint16	len;		/* Length of service request TLV, 5 plus the size of request data */
50638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8	oui[3];		/* WFA OUI: 0x0050F2 */
50738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8	qreq_vsc[1]; /* Vendor-specific Content: wifi_p2psd_nqp_query_vsc_t type for NQP */
50838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
50938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt} BWL_POST_PACKED_STRUCT;
51038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidttypedef struct wifi_p2psd_qreq_frame wifi_p2psd_qreq_frame_t;
51138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
51238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* GAS Initial Request AF body, "elts" in wifi_p2p_pub_act_frame */
51338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry ShmidtBWL_PRE_PACKED_STRUCT struct wifi_p2psd_gas_ireq_frame {
51438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	wifi_p2psd_adp_ie_t		adp_ie;		/* Advertisement Protocol IE */
51538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint16					qreq_len;	/* Query Request Length */
51638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8	qreq_frm[1];	/* Query Request Frame wifi_p2psd_qreq_frame_t */
51738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt} BWL_POST_PACKED_STRUCT;
51838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidttypedef struct wifi_p2psd_gas_ireq_frame wifi_p2psd_gas_ireq_frame_t;
51938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
52038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* Service Response TLV */
52138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry ShmidtBWL_PRE_PACKED_STRUCT struct wifi_p2psd_qresp_tlv {
52238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint16	len;				/* Length: 5 plus size of Query Data */
52338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8	svc_prot;			/* Service Protocol Type */
52438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8	svc_tscid;			/* Service Transaction ID */
52538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8	status;				/* Value defined in Table 57 of P2P spec. */
52638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8	query_data[1];		/* Response Data, passed in from above Layer 2 */
52738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt} BWL_POST_PACKED_STRUCT;
52838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidttypedef struct wifi_p2psd_qresp_tlv wifi_p2psd_qresp_tlv_t;
52938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
53038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* Query Response Frame, defined in generic format, instead of NQP specific */
53138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry ShmidtBWL_PRE_PACKED_STRUCT struct wifi_p2psd_qresp_frame {
53238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint16	info_id;	/* Info ID: 0xDDDD */
53338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint16	len;		/* Lenth of service response TLV, 6 plus the size of resp data */
53438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8	oui[3];		/* WFA OUI: 0x0050F2 */
53538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8	qresp_vsc[1]; /* Vendor-specific Content: wifi_p2psd_qresp_tlv_t type for NQP */
53638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
53738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt} BWL_POST_PACKED_STRUCT;
53838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidttypedef struct wifi_p2psd_qresp_frame wifi_p2psd_qresp_frame_t;
53938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
54038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* GAS Initial Response AF body, "elts" in wifi_p2p_pub_act_frame */
54138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry ShmidtBWL_PRE_PACKED_STRUCT struct wifi_p2psd_gas_iresp_frame {
54238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint16	status;			/* Value defined in Table 7-23 of IEEE P802.11u */
54338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint16	cb_delay;		/* GAS Comeback Delay */
54438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	wifi_p2psd_adp_ie_t	adp_ie;		/* Advertisement Protocol IE */
54538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint16		qresp_len;	/* Query Response Length */
54638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8	qresp_frm[1];	/* Query Response Frame wifi_p2psd_qresp_frame_t */
54738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt} BWL_POST_PACKED_STRUCT;
54838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidttypedef struct wifi_p2psd_gas_iresp_frame wifi_p2psd_gas_iresp_frame_t;
54938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
55038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* GAS Comeback Response AF body, "elts" in wifi_p2p_pub_act_frame */
55138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry ShmidtBWL_PRE_PACKED_STRUCT struct wifi_p2psd_gas_cresp_frame {
55238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint16	status;			/* Value defined in Table 7-23 of IEEE P802.11u */
55338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8	fragment_id;	/* Fragmentation ID */
55438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint16	cb_delay;		/* GAS Comeback Delay */
55538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	wifi_p2psd_adp_ie_t	adp_ie;		/* Advertisement Protocol IE */
55638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint16	qresp_len;		/* Query Response Length */
55738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8	qresp_frm[1];	/* Query Response Frame wifi_p2psd_qresp_frame_t */
55838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt} BWL_POST_PACKED_STRUCT;
55938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidttypedef struct wifi_p2psd_gas_cresp_frame wifi_p2psd_gas_cresp_frame_t;
56038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
56138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* Wi-Fi GAS Public Action Frame */
56238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry ShmidtBWL_PRE_PACKED_STRUCT struct wifi_p2psd_gas_pub_act_frame {
56338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8	category;		/* 0x04 Public Action Frame */
56438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8	action;			/* 0x6c Advertisement Protocol */
56538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8	dialog_token;	/* nonzero, identifies req/rsp transaction */
56638eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt	uint8	query_data[1];	/* Query Data. wifi_p2psd_gas_ireq_frame_t
56738eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt					 * or wifi_p2psd_gas_iresp_frame_t format
56838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt					 */
56938eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt} BWL_POST_PACKED_STRUCT;
57038eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidttypedef struct wifi_p2psd_gas_pub_act_frame wifi_p2psd_gas_pub_act_frame_t;
57138eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
57238eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt/* This marks the end of a packed structure section. */
57338eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#include <packed_section_end.h>
57438eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt
57538eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt#endif /* _P2P_H_ */
576