p2p.h revision 700a137ab366edc72e371da68ba187b4717ee660
15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/*
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Wi-Fi Direct - P2P module
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Copyright (c) 2009-2010, Atheros Communications
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * This software may be distributed under the terms of the BSD license.
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * See README for more details.
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
9a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#ifndef P2P_H
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define P2P_H
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/**
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * P2P_MAX_REG_CLASSES - Maximum number of regulatory classes
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */
157d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#define P2P_MAX_REG_CLASSES 10
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
17868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)/**
182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * P2P_MAX_REG_CLASS_CHANNELS - Maximum number of channels per regulatory class
192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) */
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define P2P_MAX_REG_CLASS_CHANNELS 20
212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2229b820f8d84e3bc97d62552e54923c42407f2f29Ben Murdoch/**
232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * struct p2p_channels - List of supported channels
24868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) */
253551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)struct p2p_channels {
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	/**
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	 * struct p2p_reg_class - Supported regulatory class
28e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch	 */
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	struct p2p_reg_class {
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)		/**
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)		 * reg_class - Regulatory class (IEEE 802.11-2007, Annex J)
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)		 */
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)		u8 reg_class;
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)		/**
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)		 * channel - Supported channels
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)		 */
385f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)		u8 channel[P2P_MAX_REG_CLASS_CHANNELS];
391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
40a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)		/**
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)		 * channels - Number of channel entries in use
425d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)		 */
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)		size_t channels;
441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci	} reg_class[P2P_MAX_REG_CLASSES];
451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci	/**
47010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)	 * reg_classes - Number of reg_class entries in use
481320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci	 */
491320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci	size_t reg_classes;
50a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)};
51116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)enum p2p_wps_method {
535d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)	WPS_NOT_READY, WPS_PIN_DISPLAY, WPS_PIN_KEYPAD, WPS_PBC
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
56c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)enum p2p_sd_action {
575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)	SRV_UPDATE, SRV_ADD, SRV_DEL, SRV_FLUSH
58a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)};
591320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
60a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)/**
611320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * struct p2p_go_neg_results - P2P Group Owner Negotiation results
625d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) */
635d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)struct p2p_go_neg_results {
64c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)	/**
652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)	 * status - Negotiation result (Status Code)
662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)	 *
67868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)	 * 0 (P2P_SC_SUCCESS) indicates success. Non-zero values indicate
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	 * failed negotiation.
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	 */
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	int status;
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	/**
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	 * role_go - Whether local end is Group Owner
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	 */
756e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)	int role_go;
765d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
77c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)	/**
782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)	 * freq - Frequency of the group operational channel in MHz
795f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)	 */
805f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)	int freq;
81868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
82868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)	int ht40;
83868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
84a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)	/**
855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	 * ssid - SSID of the group
865f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)	 */
875f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)	u8 ssid[32];
88868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	/**
90cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)	 * ssid_len - Length of SSID in octets
915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	 */
922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)	size_t ssid_len;
932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)	/**
952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)	 * psk - WPA pre-shared key (256 bits) (GO only)
965f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)	 */
975f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)	u8 psk[32];
985f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
995f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)	/**
1002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)	 * psk_set - Whether PSK field is configured (GO only)
1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	 */
1022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)	int psk_set;
1032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1045d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)	/**
1055d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)	 * passphrase - WPA2-Personal passphrase for the group (GO only)
106f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)	 */
1075d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)	char passphrase[64];
1085d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	/**
1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	 * peer_device_addr - P2P Device Address of the peer
1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	 */
1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	u8 peer_device_addr[ETH_ALEN];
1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	/**
1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	 * peer_interface_addr - P2P Interface Address of the peer
1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	 */
1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	u8 peer_interface_addr[ETH_ALEN];
1181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
1191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci	/**
1201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci	 * wps_method - WPS method to be used during provisioning
121868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)	 */
122868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)	enum p2p_wps_method wps_method;
123bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch
124f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#define P2P_MAX_CHANNELS 50
125a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
1265c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu	/**
1275c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu	 * freq_list - Zero-terminated list of possible operational channels
128868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)	 */
129116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	int freq_list[P2P_MAX_CHANNELS];
130116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
131116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	/**
132116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	 * persistent_group - Whether the group should be made persistent
133116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	 * 0 = not persistent
134116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	 * 1 = persistent group without persistent reconnect
135116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	 * 2 = persistent group with persistent reconnect
1364e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)	 */
13729b820f8d84e3bc97d62552e54923c42407f2f29Ben Murdoch	int persistent_group;
138116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
13929b820f8d84e3bc97d62552e54923c42407f2f29Ben Murdoch	/**
14029b820f8d84e3bc97d62552e54923c42407f2f29Ben Murdoch	 * peer_config_timeout - Peer configuration timeout (in 10 msec units)
141116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	 */
1424e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)	unsigned int peer_config_timeout;
1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct p2p_data;
1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)enum p2p_scan_type {
1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	P2P_SCAN_SOCIAL,
1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	P2P_SCAN_FULL,
1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	P2P_SCAN_SPECIFIC,
1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	P2P_SCAN_SOCIAL_PLUS_ONE
1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define P2P_MAX_WPS_VENDOR_EXT 10
1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)/**
1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * struct p2p_peer_info - P2P peer information
1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */
1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct p2p_peer_info {
1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	/**
1615f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)	 * p2p_device_addr - P2P Device Address of the peer
1622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)	 */
1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	u8 p2p_device_addr[ETH_ALEN];
1642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	/**
1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	 * pri_dev_type - Primary Device Type
1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	 */
1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	u8 pri_dev_type[8];
1697d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	/**
1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	 * device_name - Device Name (0..32 octets encoded in UTF-8)
1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	 */
1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	char device_name[33];
1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	/**
1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	 * manufacturer - Manufacturer (0..64 octets encoded in UTF-8)
1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	 */
1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	char manufacturer[65];
1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	/**
1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	 * model_name - Model Name (0..32 octets encoded in UTF-8)
1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	 */
1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	char model_name[33];
1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	/**
1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	 * model_number - Model Number (0..32 octets encoded in UTF-8)
1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	 */
1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	char model_number[33];
1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	/**
1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	 * serial_number - Serial Number (0..32 octets encoded in UTF-8)
1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	 */
1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	char serial_number[33];
1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	/**
1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	 * level - Signal level
1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	 */
1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	int level;
1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	/**
201f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)	 * config_methods - WPS Configuration Methods
202f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)	 */
203f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)	u16 config_methods;
204f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
205f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)	/**
206f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)	 * dev_capab - Device Capabilities
207f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)	 */
208f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)	u8 dev_capab;
209f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	/**
2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	 * group_capab - Group Capabilities
2129ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch	 */
2139ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch	u8 group_capab;
2149ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch
2159ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch	/**
2169ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch	 * wps_sec_dev_type_list - WPS secondary device type list
2179ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch	 *
2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	 * This list includes from 0 to 16 Secondary Device Types as indicated
2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	 * by wps_sec_dev_type_list_len (8 * number of types).
220effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch	 */
221effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch	u8 wps_sec_dev_type_list[128];
222effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
223effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch	/**
224effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch	 * wps_sec_dev_type_list_len - Length of secondary device type list
225effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch	 */
226effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch	size_t wps_sec_dev_type_list_len;
227effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
228effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch	struct wpabuf *wps_vendor_ext[P2P_MAX_WPS_VENDOR_EXT];
229effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
230effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch	/**
2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	 * wfd_subelems - Wi-Fi Display subelements from WFD IE(s)
2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	 */
2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	struct wpabuf *wfd_subelems;
2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)enum p2p_prov_disc_status {
2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	P2P_PROV_DISC_SUCCESS,
2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	P2P_PROV_DISC_TIMEOUT,
2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	P2P_PROV_DISC_REJECTED,
2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	P2P_PROV_DISC_TIMEOUT_JOIN,
2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct p2p_channel {
2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	u8 op_class;
245a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)	u8 chan;
246a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)};
2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/**
2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * struct p2p_config - P2P configuration
2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *
2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * This configuration is provided to the P2P module during initialization with
252868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) * p2p_init().
253868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) */
2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct p2p_config {
2555f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)	/**
2565f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)	 * country - Country code to use in P2P operations
2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	 */
2585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	char country[3];
2595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	/**
2615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	 * reg_class - Regulatory class for own listen channel
2625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	 */
2635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	u8 reg_class;
2645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	/**
2665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	 * channel - Own listen channel
2675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	 */
2685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	u8 channel;
2695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	/**
2715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	 * Regulatory class for own operational channel
2725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	 */
2735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	u8 op_reg_class;
2745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
275a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)	/**
276a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)	 * op_channel - Own operational channel
2775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	 */
2785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	u8 op_channel;
2795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	/**
2815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	 * cfg_op_channel - Whether op_channel is hardcoded in configuration
282f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)	 */
2835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	u8 cfg_op_channel;
2845f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
2855f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)	/**
2865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	 * channels - Own supported regulatory classes and channels
2875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	 *
2885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	 * List of supposerted channels per regulatory class. The regulatory
2895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	 * classes are defined in IEEE Std 802.11-2007 Annex J and the
2905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	 * numbering of the clases depends on the configured country code.
2915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	 */
2925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	struct p2p_channels channels;
2932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)	/**
2952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)	 * num_pref_chan - Number of pref_chan entries
2962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)	 */
2972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)	unsigned int num_pref_chan;
2982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)	/**
3002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)	 * pref_chan - Preferred channels for GO Negotiation
3012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)	 */
3022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)	struct p2p_channel *pref_chan;
303116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
304116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	/**
305116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	 * pri_dev_type - Primary Device Type (see WPS)
306116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	 */
307116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	u8 pri_dev_type[8];
308116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
309116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	/**
310116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	 * P2P_SEC_DEVICE_TYPES - Maximum number of secondary device types
311116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	 */
312116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#define P2P_SEC_DEVICE_TYPES 5
313116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
314116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	/**
3155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	 * sec_dev_type - Optional secondary device types
3165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	 */
3175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	u8 sec_dev_type[P2P_SEC_DEVICE_TYPES][8];
3185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)	/**
3202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)	 * num_sec_dev_types - Number of sec_dev_type entries
3215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	 */
3225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	size_t num_sec_dev_types;
3235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	/**
3255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	 * dev_addr - P2P Device Address
3265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	 */
3272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)	u8 dev_addr[ETH_ALEN];
3285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	/**
3302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)	 * dev_name - Device Name
3315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	 */
3325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	char *dev_name;
3332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
3345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	char *manufacturer;
3355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	char *model_name;
3362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)	char *model_number;
3375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	char *serial_number;
3385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	u8 uuid[16];
3405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	u16 config_methods;
3415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	/**
3432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)	 * concurrent_operations - Whether concurrent operations are supported
3445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	 */
3455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	int concurrent_operations;
3465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	/**
3485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	 * max_peers - Maximum number of discovered peers to remember
3495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	 *
3505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	 * If more peers are discovered, older entries will be removed to make
3515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	 * room for the new ones.
3525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	 */
3535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	size_t max_peers;
3545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	/**
3565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	 * p2p_intra_bss - Intra BSS communication is supported
3572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)	 */
3582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)	int p2p_intra_bss;
3592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
3602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)	/**
3612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)	 * ssid_postfix - Postfix data to add to the SSID
3622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)	 *
3632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)	 * This data will be added to the end of the SSID after the
3642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)	 * DIRECT-<random two octets> prefix.
3652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)	 */
3662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)	u8 ssid_postfix[32 - 9];
3672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
3682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)	/**
3692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)	 * ssid_postfix_len - Length of the ssid_postfix data
3705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	 */
3715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	size_t ssid_postfix_len;
3725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	/**
3745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	 * max_listen - Maximum listen duration in ms
3755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	 */
3765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	unsigned int max_listen;
3775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef ANDROID_P2P
3795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	enum p2p_concurrency_type {
3805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)		P2P_NON_CONCURRENT,
3815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)		P2P_SINGLE_CHANNEL_CONCURRENT,
3825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)		P2P_MULTI_CHANNEL_CONCURRENT,
3835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	} p2p_concurrency;
3845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
3855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	/**
3875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	 * msg_ctx - Context to use with wpa_msg() calls
3885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	 */
3895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	void *msg_ctx;
3905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	/**
3925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	 * cb_ctx - Context to use with callback functions
3935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	 */
3945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	void *cb_ctx;
3955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	/* Callbacks to request lower layer driver operations */
3985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	/**
4005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	 * p2p_scan - Request a P2P scan/search
4015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	 * @ctx: Callback context from cb_ctx
4025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	 * @type: Scan type
4035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	 * @freq: Specific frequency (MHz) to scan or 0 for no restriction
4045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	 * @num_req_dev_types: Number of requested device types
4055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	 * @req_dev_types: Array containing requested device types
4065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	 * @dev_id: Device ID to search for or %NULL to find all devices
4075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	 * @pw_id: Device Password ID
4085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	 * Returns: 0 on success, -1 on failure
4095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	 *
4105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	 * This callback function is used to request a P2P scan or search
4115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	 * operation to be completed. Type type argument specifies which type
4125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	 * of scan is to be done. @P2P_SCAN_SOCIAL indicates that only the
4135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	 * social channels (1, 6, 11) should be scanned. @P2P_SCAN_FULL
4145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	 * indicates that all channels are to be scanned.
4155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	 * @P2P_SCAN_SOCIAL_PLUS_ONE request scan of all the social channels
4165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	 * plus one extra channel specified by freq.
4175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	 *
4185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	 * The full scan is used for the initial scan to find group owners from
4195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	 * all. The other types are used during search phase scan of the social
4205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	 * channels (with potential variation if the Listen channel of the
4215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	 * target peer is known or if other channels are scanned in steps).
4225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	 *
4235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	 * The scan results are returned after this call by calling
4245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	 * p2p_scan_res_handler() for each scan result that has a P2P IE and
4255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	 * then calling p2p_scan_res_handled() to indicate that all scan
4265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	 * results have been indicated.
4275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	 */
4285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	int (*p2p_scan)(void *ctx, enum p2p_scan_type type, int freq,
429c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)			unsigned int num_req_dev_types,
4305f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)			const u8 *req_dev_types, const u8 *dev_id, u16 pw_id);
4315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	/**
4332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)	 * send_probe_resp - Transmit a Probe Response frame
4342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)	 * @ctx: Callback context from cb_ctx
4352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)	 * @buf: Probe Response frame (including the header and body)
4365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	 * Returns: 0 on success, -1 on failure
4375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	 *
4385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	 * This function is used to reply to Probe Request frames that were
4395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	 * indicated with a call to p2p_probe_req_rx(). The response is to be
4405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	 * sent on the same channel or to be dropped if the driver is not
4415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	 * anymore listening to Probe Request frames.
4425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	 *
4432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)	 * Alternatively, the responsibility for building the Probe Response
4445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	 * frames in Listen state may be in another system component in which
4455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	 * case this function need to be implemented (i.e., the function
4465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	 * pointer can be %NULL). The WPS and P2P IEs to be added for Probe
4475f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)	 * Response frames in such a case are available from the
4485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	 * start_listen() callback. It should be noted that the received Probe
4495f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)	 * Request frames must be indicated by calling p2p_probe_req_rx() even
4505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	 * if this send_probe_resp() is not used.
4512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)	 */
4521320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci	int (*send_probe_resp)(void *ctx, const struct wpabuf *buf);
4531320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
4545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	/**
4555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	 * send_action - Transmit an Action frame
4565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	 * @ctx: Callback context from cb_ctx
4575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	 * @freq: Frequency in MHz for the channel on which to transmit
4585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	 * @dst: Destination MAC address (Address 1)
4595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	 * @src: Source MAC address (Address 2)
4605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	 * @bssid: BSSID (Address 3)
4615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	 * @buf: Frame body (starting from Category field)
4625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	 * @len: Length of buf in octets
4635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	 * @wait_time: How many msec to wait for a response frame
4647dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch	 * Returns: 0 on success, -1 on failure
4657dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch	 *
4665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	 * The Action frame may not be transmitted immediately and the status
4675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	 * of the transmission must be reported by calling
4685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	 * p2p_send_action_cb() once the frame has either been transmitted or
4695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	 * it has been dropped due to excessive retries or other failure to
4705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	 * transmit.
4715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	 */
47290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)	int (*send_action)(void *ctx, unsigned int freq, const u8 *dst,
4735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)			   const u8 *src, const u8 *bssid, const u8 *buf,
4742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)			   size_t len, unsigned int wait_time);
4752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
4762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)	/**
4772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)	 * send_action_done - Notify that Action frame sequence was completed
4782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)	 * @ctx: Callback context from cb_ctx
4792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)	 *
4802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)	 * This function is called when the Action frame sequence that was
4812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)	 * started with send_action() has been completed, i.e., when there is
4822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)	 * no need to wait for a response from the destination peer anymore.
4832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)	 */
4842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)	void (*send_action_done)(void *ctx);
4852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
4865d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)	/**
4875d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)	 * start_listen - Start Listen state
4885d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)	 * @ctx: Callback context from cb_ctx
4895d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)	 * @freq: Frequency of the listen channel in MHz
4905d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)	 * @duration: Duration for the Listen state in milliseconds
4912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)	 * @probe_resp_ie: IE(s) to be added to Probe Response frames
4922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)	 * Returns: 0 on success, -1 on failure
4932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)	 *
4942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)	 * This Listen state may not start immediately since the driver may
4952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)	 * have other pending operations to complete first. Once the Listen
4962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)	 * state has started, p2p_listen_cb() must be called to notify the P2P
4975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	 * module. Once the Listen state is stopped, p2p_listen_end() must be
4985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	 * called to notify the P2P module that the driver is not in the Listen
4995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	 * state anymore.
5005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	 *
5015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	 * If the send_probe_resp() is not used for generating the response,
5025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	 * the IEs from probe_resp_ie need to be added to the end of the Probe
5035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	 * Response frame body. If send_probe_resp() is used, the probe_resp_ie
5045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	 * information can be ignored.
5052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)	 */
5065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	int (*start_listen)(void *ctx, unsigned int freq,
5075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)			    unsigned int duration,
5085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)			    const struct wpabuf *probe_resp_ie);
5095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	/**
5105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	 * stop_listen - Stop Listen state
5115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	 * @ctx: Callback context from cb_ctx
5125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	 *
5135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	 * This callback can be used to stop a Listen state operation that was
514a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch	 * previously requested with start_listen().
515a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch	 */
516a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch	void (*stop_listen)(void *ctx);
517a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch
518a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch	/**
519a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch	 * get_noa - Get current Notice of Absence attribute payload
5205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	 * @ctx: Callback context from cb_ctx
5215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	 * @interface_addr: P2P Interface Address of the GO
5225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	 * @buf: Buffer for returning NoA
5235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	 * @buf_len: Buffer length in octets
5245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	 * Returns: Number of octets used in buf, 0 to indicate no NoA is being
5255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	 * advertized, or -1 on failure
5265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	 *
5275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	 * This function is used to fetch the current Notice of Absence
5285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	 * attribute value from GO.
5295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	 */
5305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	int (*get_noa)(void *ctx, const u8 *interface_addr, u8 *buf,
5315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)		       size_t buf_len);
5325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	/* Callbacks to notify events to upper layer management entity */
5345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
535868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)	/**
5365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	 * dev_found - Notification of a found P2P Device
5375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	 * @ctx: Callback context from cb_ctx
538868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)	 * @addr: Source address of the message triggering this notification
5395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	 * @info: P2P peer information
5405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	 * @new_device: Inform if the peer is newly found
5415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	 *
5427dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch	 * This callback is used to notify that a new P2P Device has been
5437dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch	 * found. This may happen, e.g., during Search state based on scan
5447dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch	 * results or during Listen state based on receive Probe Request and
5457dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch	 * Group Owner Negotiation Request.
5467dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch	 */
5477dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch	void (*dev_found)(void *ctx, const u8 *addr,
5485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)			  const struct p2p_peer_info *info,
5495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)			  int new_device);
5502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
5515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	/**
5522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)	 * dev_lost - Notification of a lost P2P Device
5535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	 * @ctx: Callback context from cb_ctx
5545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	 * @dev_addr: P2P Device Address of the lost P2P Device
5555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	 *
5565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	 * This callback is used to notify that a P2P Device has been deleted.
5575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	 */
5585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	void (*dev_lost)(void *ctx, const u8 *dev_addr);
5595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	/**
5615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	 * go_neg_req_rx - Notification of a receive GO Negotiation Request
5625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	 * @ctx: Callback context from cb_ctx
5635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	 * @src: Source address of the message triggering this notification
5645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	 * @dev_passwd_id: WPS Device Password ID
5655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	 *
5665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	 * This callback is used to notify that a P2P Device is requesting
5675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	 * group owner negotiation with us, but we do not have all the
5685f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)	 * necessary information to start GO Negotiation. This indicates that
5695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	 * the local user has not authorized the connection yet by providing a
5705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	 * PIN or PBC button press. This information can be provided with a
5715f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)	 * call to p2p_connect().
5725f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)	 */
5732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)	void (*go_neg_req_rx)(void *ctx, const u8 *src, u16 dev_passwd_id);
5745f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
5752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)	/**
5765f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)	 * go_neg_completed - Notification of GO Negotiation results
5774e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)	 * @ctx: Callback context from cb_ctx
5784e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)	 * @res: GO Negotiation results
5795f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)	 *
5805f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)	 * This callback is used to notify that Group Owner Negotiation has
5815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	 * been completed. Non-zero struct p2p_go_neg_results::status indicates
5825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	 * failed negotiation. In case of success, this function is responsible
5835f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)	 * for creating a new group interface (or using the existing interface
5845f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)	 * depending on driver features), setting up the group interface in
5855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	 * proper mode based on struct p2p_go_neg_results::role_go and
5865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	 * initializing WPS provisioning either as a Registrar (if GO) or as an
5872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)	 * Enrollee. Successful WPS provisioning must be indicated by calling
5885d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)	 * p2p_wps_success_cb(). The callee is responsible for timing out group
589cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)	 * formation if WPS provisioning cannot be completed successfully
590cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)	 * within 15 seconds.
591cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)	 */
592cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)	void (*go_neg_completed)(void *ctx, struct p2p_go_neg_results *res);
5935f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
5945f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)	/**
595cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)	 * sd_request - Callback on Service Discovery Request
596cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)	 * @ctx: Callback context from cb_ctx
5971320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci	 * @freq: Frequency (in MHz) of the channel
5981320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci	 * @sa: Source address of the request
599a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)	 * @dialog_token: Dialog token
600a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)	 * @update_indic: Service Update Indicator from the source of request
601a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)	 * @tlvs: P2P Service Request TLV(s)
602a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)	 * @tlvs_len: Length of tlvs buffer in octets
603116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	 *
604a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)	 * This callback is used to indicate reception of a service discovery
605a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)	 * request. Response to the query must be indicated by calling
606a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)	 * p2p_sd_response() with the context information from the arguments to
607a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)	 * this callback function.
608a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)	 *
6095d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)	 * This callback handler can be set to %NULL to indicate that service
6105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)	 * discovery is not supported.
6115d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)	 */
6125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)	void (*sd_request)(void *ctx, int freq, const u8 *sa, u8 dialog_token,
6135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)			   u16 update_indic, const u8 *tlvs, size_t tlvs_len);
6145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
6155d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)	/**
6165d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)	 * sd_response - Callback on Service Discovery Response
6175d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)	 * @ctx: Callback context from cb_ctx
6185d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)	 * @sa: Source address of the request
6195d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)	 * @update_indic: Service Update Indicator from the source of response
6205d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)	 * @tlvs: P2P Service Response TLV(s)
6215d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)	 * @tlvs_len: Length of tlvs buffer in octets
6225d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)	 *
6235d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)	 * This callback is used to indicate reception of a service discovery
6245d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)	 * response. This callback handler can be set to %NULL if no service
6255d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)	 * discovery requests are used. The information provided with this call
6265d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)	 * is replies to the queries scheduled with p2p_sd_request().
6275d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)	 */
6285d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)	void (*sd_response)(void *ctx, const u8 *sa, u16 update_indic,
629a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)			    const u8 *tlvs, size_t tlvs_len);
6301320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
6315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	/**
6326e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)	 * prov_disc_req - Callback on Provisiong Discovery Request
6331320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci	 * @ctx: Callback context from cb_ctx
6346e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)	 * @peer: Source address of the request
6355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	 * @config_methods: Requested WPS Config Method
6365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	 * @dev_addr: P2P Device Address of the found P2P Device
637ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch	 * @pri_dev_type: Primary Device Type
6385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	 * @dev_name: Device Name
6395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	 * @supp_config_methods: Supported configuration Methods
6405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	 * @dev_capab: Device Capabilities
6415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	 * @group_capab: Group Capabilities
6425d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)	 * @group_id: P2P Group ID (or %NULL if not included)
6435d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)	 * @group_id_len: Length of P2P Group ID
6445f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)	 *
6455f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)	 * This callback is used to indicate reception of a Provision Discovery
6465f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)	 * Request frame that the P2P module accepted.
6475f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)	 */
6485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	void (*prov_disc_req)(void *ctx, const u8 *peer, u16 config_methods,
6492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)			      const u8 *dev_addr, const u8 *pri_dev_type,
6505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)			      const char *dev_name, u16 supp_config_methods,
6515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)			      u8 dev_capab, u8 group_capab,
652a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)			      const u8 *group_id, size_t group_id_len);
6535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
6547dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch	/**
6555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	 * prov_disc_resp - Callback on Provisiong Discovery Response
6565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	 * @ctx: Callback context from cb_ctx
6577dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch	 * @peer: Source address of the response
6585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	 * @config_methods: Value from p2p_prov_disc_req() or 0 on failure
6595f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)	 *
6605f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)	 * This callback is used to indicate reception of a Provision Discovery
6615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	 * Response frame for a pending request scheduled with
6625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	 * p2p_prov_disc_req(). This callback handler can be set to %NULL if
6635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	 * provision discovery is not used.
6642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)	 */
6652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)	void (*prov_disc_resp)(void *ctx, const u8 *peer, u16 config_methods);
6665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
6675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	/**
6682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)	 * prov_disc_fail - Callback on Provision Discovery failure
6692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)	 * @ctx: Callback context from cb_ctx
6705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	 * @peer: Source address of the response
671f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)	 * @status: Cause of failure, will not be %P2P_PROV_DISC_SUCCESS
6722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)	 *
6732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)	 * This callback is used to indicate either a failure or no response
6742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)	 * to an earlier provision discovery request.
6752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)	 *
6762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)	 * This callback handler can be set to %NULL if provision discovery
6775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	 * is not used or failures do not need to be indicated.
6785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	 */
6792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)	void (*prov_disc_fail)(void *ctx, const u8 *peer,
6802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)			       enum p2p_prov_disc_status status);
6815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
6825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	/**
6835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	 * invitation_process - Optional callback for processing Invitations
6847dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch	 * @ctx: Callback context from cb_ctx
6855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	 * @sa: Source address of the Invitation Request
6865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	 * @bssid: P2P Group BSSID from the request or %NULL if not included
687868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)	 * @go_dev_addr: GO Device Address from P2P Group ID
688868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)	 * @ssid: SSID from P2P Group ID
6897dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch	 * @ssid_len: Length of ssid buffer in octets
690868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)	 * @go: Variable for returning whether the local end is GO in the group
691868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)	 * @group_bssid: Buffer for returning P2P Group BSSID (if local end GO)
692cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)	 * @force_freq: Variable for returning forced frequency for the group
693868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)	 * @persistent_group: Whether this is an invitation to reinvoke a
6943551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)	 *	persistent group (instead of invitation to join an active
695cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)	 *	group)
6963551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)	 * Returns: Status code (P2P_SC_*)
6973551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)	 *
6983551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)	 * This optional callback can be used to implement persistent reconnect
6993551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)	 * by allowing automatic restarting of persistent groups without user
700868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)	 * interaction. If this callback is not implemented (i.e., is %NULL),
701868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)	 * the received Invitation Request frames are replied with
702868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)	 * %P2P_SC_REQ_RECEIVED status and indicated to upper layer with the
703868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)	 * invitation_result() callback.
704cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)	 *
705868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)	 * If the requested parameters are acceptable and the group is known,
706868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)	 * %P2P_SC_SUCCESS may be returned. If the requested group is unknown,
707868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)	 * %P2P_SC_FAIL_UNKNOWN_GROUP should be returned. %P2P_SC_REQ_RECEIVED
708868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)	 * can be returned if there is not enough data to provide immediate
709868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)	 * response, i.e., if some sort of user interaction is needed. The
7105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	 * invitation_received() callback will be called in that case
7115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	 * immediately after this call.
7125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	 */
7135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	u8 (*invitation_process)(void *ctx, const u8 *sa, const u8 *bssid,
7145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)				 const u8 *go_dev_addr, const u8 *ssid,
7155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)				 size_t ssid_len, int *go, u8 *group_bssid,
7165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)				 int *force_freq, int persistent_group);
7175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
7185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	/**
7195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	 * invitation_received - Callback on Invitation Request RX
7205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	 * @ctx: Callback context from cb_ctx
7215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	 * @sa: Source address of the Invitation Request
7225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	 * @bssid: P2P Group BSSID or %NULL if not received
7235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	 * @ssid: SSID of the group
7245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	 * @ssid_len: Length of ssid in octets
7255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	 * @go_dev_addr: GO Device Address
7265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	 * @status: Response Status
7275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	 * @op_freq: Operational frequency for the group
7285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	 *
7295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	 * This callback is used to indicate sending of an Invitation Response
7305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	 * for a received Invitation Request. If status == 0 (success), the
7315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	 * upper layer code is responsible for starting the group. status == 1
7325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	 * indicates need to get user authorization for the group. Other status
7335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	 * values indicate that the invitation request was rejected.
7345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	 */
7355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	void (*invitation_received)(void *ctx, const u8 *sa, const u8 *bssid,
7365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)				    const u8 *ssid, size_t ssid_len,
7375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)				    const u8 *go_dev_addr, u8 status,
7385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)				    int op_freq);
7395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
7405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	/**
7415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	 * invitation_result - Callback on Invitation result
7425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	 * @ctx: Callback context from cb_ctx
7435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	 * @status: Negotiation result (Status Code)
7445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	 * @bssid: P2P Group BSSID or %NULL if not received
7455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	 * @channels: Available operating channels for the group
7462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)	 * @addr: Peer address
7475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	 *
7482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)	 * This callback is used to indicate result of an Invitation procedure
7495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	 * started with a call to p2p_invite(). The indicated status code is
7505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	 * the value received from the peer in Invitation Response with 0
7515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	 * (P2P_SC_SUCCESS) indicating success or -1 to indicate a timeout or a
7525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	 * local failure in transmitting the Invitation Request.
7535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	 */
7545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	void (*invitation_result)(void *ctx, int status, const u8 *bssid,
755e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch				  const struct p2p_channels *channels,
756e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch				  const u8 *addr);
757e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch
7585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	/**
7595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	 * go_connected - Check whether we are connected to a GO
7605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	 * @ctx: Callback context from cb_ctx
7615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	 * @dev_addr: P2P Device Address of a GO
7625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	 * Returns: 1 if we are connected as a P2P client to the specified GO
7635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	 * or 0 if not.
7645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	 */
7655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	int (*go_connected)(void *ctx, const u8 *dev_addr);
7665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
7675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
7685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
7692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)/* P2P module initialization/deinitialization */
7707dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
7717dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch/**
7724e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) * p2p_init - Initialize P2P module
7734e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) * @cfg: P2P module configuration
7744e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) * Returns: Pointer to private data or %NULL on failure
7754e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) *
7764e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) * This function is used to initialize global P2P module context (one per
7777dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch * device). The P2P module will keep a copy of the configuration data, so the
7787dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch * caller does not need to maintain this structure. However, the callback
7797dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch * functions and the context parameters to them must be kept available until
7807dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch * the P2P module is deinitialized with p2p_deinit().
7817dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch */
7827dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochstruct p2p_data * p2p_init(const struct p2p_config *cfg);
7837dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
7847dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch/**
7857dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch * p2p_deinit - Deinitialize P2P module
7867dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch * @p2p: P2P module context from p2p_init()
7877dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch */
788a02191e04bc25c4935f804f2c080ae28663d096dBen Murdochvoid p2p_deinit(struct p2p_data *p2p);
789cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
790cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)/**
7917dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch * p2p_flush - Flush P2P module state
792cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) * @p2p: P2P module context from p2p_init()
793cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) *
7947dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch * This command removes the P2P module state like peer device entries.
795cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) */
796cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)void p2p_flush(struct p2p_data *p2p);
797116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
798116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch/**
799116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch * p2p_unauthorize - Unauthorize the specified peer device
800116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch * @p2p: P2P module context from p2p_init()
8017dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch * @addr: P2P peer entry to be unauthorized
802116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch * Returns: 0 on success, -1 on failure
803116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch *
804116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch * This command removes any connection authorization from the specified P2P
8057dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch * peer device address. This can be used, e.g., to cancel effect of a previous
80646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) * p2p_authorize() or p2p_connect() call that has not yet resulted in completed
80746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) * GO Negotiation.
80846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) */
8092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)int p2p_unauthorize(struct p2p_data *p2p, const u8 *addr);
810c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
8111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci/**
8121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * p2p_set_dev_name - Set device name
813c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * @p2p: P2P module context from p2p_init()
814c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * Returns: 0 on success, -1 on failure
815c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) *
816c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * This function can be used to update the P2P module configuration with
8171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * information that was not available at the time of the p2p_init() call.
8181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci */
8191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciint p2p_set_dev_name(struct p2p_data *p2p, const char *dev_name);
8201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
8211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciint p2p_set_manufacturer(struct p2p_data *p2p, const char *manufacturer);
8221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciint p2p_set_model_name(struct p2p_data *p2p, const char *model_name);
8231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciint p2p_set_model_number(struct p2p_data *p2p, const char *model_number);
8241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciint p2p_set_serial_number(struct p2p_data *p2p, const char *serial_number);
8251320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
8261320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccivoid p2p_set_config_methods(struct p2p_data *p2p, u16 config_methods);
8271320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccivoid p2p_set_uuid(struct p2p_data *p2p, const u8 *uuid);
8281320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
8292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)/**
8302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * p2p_set_pri_dev_type - Set primary device type
83129b820f8d84e3bc97d62552e54923c42407f2f29Ben Murdoch * @p2p: P2P module context from p2p_init()
832116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch * Returns: 0 on success, -1 on failure
83329b820f8d84e3bc97d62552e54923c42407f2f29Ben Murdoch *
834116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch * This function can be used to update the P2P module configuration with
835116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch * information that was not available at the time of the p2p_init() call.
836116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch */
837116680a4aac90f2aa7413d9095a592090648e557Ben Murdochint p2p_set_pri_dev_type(struct p2p_data *p2p, const u8 *pri_dev_type);
838116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
839116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch/**
84029b820f8d84e3bc97d62552e54923c42407f2f29Ben Murdoch * p2p_set_sec_dev_types - Set secondary device types
84129b820f8d84e3bc97d62552e54923c42407f2f29Ben Murdoch * @p2p: P2P module context from p2p_init()
84229b820f8d84e3bc97d62552e54923c42407f2f29Ben Murdoch * Returns: 0 on success, -1 on failure
84329b820f8d84e3bc97d62552e54923c42407f2f29Ben Murdoch *
84429b820f8d84e3bc97d62552e54923c42407f2f29Ben Murdoch * This function can be used to update the P2P module configuration with
84529b820f8d84e3bc97d62552e54923c42407f2f29Ben Murdoch * information that was not available at the time of the p2p_init() call.
846116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch */
847116680a4aac90f2aa7413d9095a592090648e557Ben Murdochint p2p_set_sec_dev_types(struct p2p_data *p2p, const u8 dev_types[][8],
848116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch			  size_t num_dev_types);
849116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
850116680a4aac90f2aa7413d9095a592090648e557Ben Murdochint p2p_set_country(struct p2p_data *p2p, const char *country);
851116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
852116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
853116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch/* Commands from upper layer management entity */
854116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
855116680a4aac90f2aa7413d9095a592090648e557Ben Murdochenum p2p_discovery_type {
856116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	P2P_FIND_START_WITH_FULL,
857116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	P2P_FIND_ONLY_SOCIAL,
858116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	P2P_FIND_PROGRESSIVE
8592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)};
8602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
8612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)/**
8622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * p2p_find - Start P2P Find (Device Discovery)
8632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * @p2p: P2P module context from p2p_init()
8642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * @timeout: Timeout for find operation in seconds or 0 for no timeout
8652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * @type: Device Discovery type
8662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * @num_req_dev_types: Number of requested device types
8672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * @req_dev_types: Requested device types array, must be an array
8682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) *	containing num_req_dev_types * WPS_DEV_TYPE_LEN bytes; %NULL if no
8692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) *	requested device types.
8702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * @dev_id: Device ID to search for or %NULL to find all devices
8712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * @search_delay: Extra delay in milliseconds between search iterations
8722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * Returns: 0 on success, -1 on failure
8732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) */
8742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)int p2p_find(struct p2p_data *p2p, unsigned int timeout,
8752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)	     enum p2p_discovery_type type,
8762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)	     unsigned int num_req_dev_types, const u8 *req_dev_types,
8772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)	     const u8 *dev_id, unsigned int search_delay);
8782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
8792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)/**
880c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * p2p_stop_find - Stop P2P Find (Device Discovery)
881c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * @p2p: P2P module context from p2p_init()
882c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) */
883c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void p2p_stop_find(struct p2p_data *p2p);
8842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
8852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)/**
8862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * p2p_stop_find_for_freq - Stop P2P Find for next oper on specific freq
8872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * @p2p: P2P module context from p2p_init()
8884e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) * @freq: Frequency in MHz for next operation
889cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) *
890cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) * This is like p2p_stop_find(), but Listen state is not stopped if we are
8912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * already on the same frequency.
8924e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) */
893cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)void p2p_stop_find_for_freq(struct p2p_data *p2p, int freq);
894cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
8952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)/**
8962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * p2p_listen - Start P2P Listen state for specified duration
8972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * @p2p: P2P module context from p2p_init()
898cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) * @timeout: Listen state duration in milliseconds
899cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) * Returns: 0 on success, -1 on failure
9002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) *
9012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * This function can be used to request the P2P module to keep the device
9022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * discoverable on the listen channel for an extended set of time. At least in
903cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) * its current form, this is mainly used for testing purposes and may not be of
9042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * much use for normal P2P operations.
905116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch */
9062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)int p2p_listen(struct p2p_data *p2p, unsigned int timeout);
9072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
908f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)/**
9092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * p2p_connect - Start P2P group formation (GO negotiation)
9102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * @p2p: P2P module context from p2p_init()
9112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * @peer_addr: MAC address of the peer P2P client
9122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * @wps_method: WPS method to be used in provisioning
9132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * @go_intent: Local GO intent value (1..15)
9142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * @own_interface_addr: Intended interface address to use with the group
9152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * @force_freq: The only allowed channel frequency in MHz or 0
9162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * @persistent_group: Whether to create a persistent group (0 = no, 1 =
9172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * persistent group without persistent reconnect, 2 = persistent group with
9182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * persistent reconnect)
9192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * @force_ssid: Forced SSID for the group if we become GO or %NULL to generate
9202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) *	a new SSID
9212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * @force_ssid_len: Length of $force_ssid buffer
9225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @pd_before_go_neg: Whether to send Provision Discovery prior to GO
9232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) *	Negotiation as an interoperability workaround when initiating group
9242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) *	formation
9252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * @pref_freq: Preferred operating frequency in MHz or 0 (this is only used if
9262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) *	force_freq == 0)
9272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * Returns: 0 on success, -1 on failure
9282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) */
929c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)int p2p_connect(struct p2p_data *p2p, const u8 *peer_addr,
930c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)		enum p2p_wps_method wps_method,
931c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)		int go_intent, const u8 *own_interface_addr,
932c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)		unsigned int force_freq, int persistent_group,
933a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch		const u8 *force_ssid, size_t force_ssid_len,
934a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch		int pd_before_go_neg, unsigned int pref_freq);
9352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
936010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)/**
9372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * p2p_authorize - Authorize P2P group formation (GO negotiation)
9385d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * @p2p: P2P module context from p2p_init()
9395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @peer_addr: MAC address of the peer P2P client
9405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @wps_method: WPS method to be used in provisioning
9415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @go_intent: Local GO intent value (1..15)
9425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @own_interface_addr: Intended interface address to use with the group
9435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @force_freq: The only allowed channel frequency in MHz or 0
9445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @persistent_group: Whether to create a persistent group (0 = no, 1 =
9455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * persistent group without persistent reconnect, 2 = persistent group with
9465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * persistent reconnect)
9475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @force_ssid: Forced SSID for the group if we become GO or %NULL to generate
9485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *	a new SSID
9495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @force_ssid_len: Length of $force_ssid buffer
9505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @pref_freq: Preferred operating frequency in MHz or 0 (this is only used if
9515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *	force_freq == 0)
9525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Returns: 0 on success, -1 on failure
9535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *
9545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * This is like p2p_connect(), but the actual group negotiation is not
9555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * initiated automatically, i.e., the other end is expected to do that.
9565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */
9575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int p2p_authorize(struct p2p_data *p2p, const u8 *peer_addr,
9585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)		  enum p2p_wps_method wps_method,
9595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)		  int go_intent, const u8 *own_interface_addr,
9605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)		  unsigned int force_freq, int persistent_group,
9615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)		  const u8 *force_ssid, size_t force_ssid_len,
9625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)		  unsigned int pref_freq);
9635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
9645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/**
9655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * p2p_reject - Reject peer device (explicitly block connection attempts)
9665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @p2p: P2P module context from p2p_init()
9675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @peer_addr: MAC address of the peer P2P client
9685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Returns: 0 on success, -1 on failure
9695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */
9705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int p2p_reject(struct p2p_data *p2p, const u8 *peer_addr);
9715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
9725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/**
9735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * p2p_prov_disc_req - Send Provision Discovery Request
9745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @p2p: P2P module context from p2p_init()
9752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * @peer_addr: MAC address of the peer P2P client
9762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * @config_methods: WPS Config Methods value (only one bit set)
977116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch * @join: Whether this is used by a client joining an active group
978116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch * @force_freq: Forced TX frequency for the frame (mainly for the join case)
979116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch * @user_initiated_pd: Flag to indicate if initiated by user or not
980116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch * Returns: 0 on success, -1 on failure
981116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch *
982116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch * This function can be used to request a discovered P2P peer to display a PIN
983116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch * (config_methods = WPS_CONFIG_DISPLAY) or be prepared to enter a PIN from us
984116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch * (config_methods = WPS_CONFIG_KEYPAD). The Provision Discovery Request frame
985116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch * is transmitted once immediately and if no response is received, the frame
9865f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) * will be sent again whenever the target device is discovered during device
987116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch * dsicovery (start with a p2p_find() call). Response from the peer is
988116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch * indicated with the p2p_config::prov_disc_resp() callback.
989116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch */
990ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdochint p2p_prov_disc_req(struct p2p_data *p2p, const u8 *peer_addr,
991116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch		      u16 config_methods, int join, int force_freq,
992116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch		      int user_initiated_pd);
993116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
9945f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)/**
9955f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) * p2p_sd_request - Schedule a service discovery query
996116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch * @p2p: P2P module context from p2p_init()
997116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch * @dst: Destination peer or %NULL to apply for all peers
998116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch * @tlvs: P2P Service Query TLV(s)
9991320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * Returns: Reference to the query or %NULL on failure
10001320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci *
1001116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch * Response to the query is indicated with the p2p_config::sd_response()
1002116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch * callback.
10032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) */
1004116680a4aac90f2aa7413d9095a592090648e557Ben Murdochvoid * p2p_sd_request(struct p2p_data *p2p, const u8 *dst,
10052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)		      const struct wpabuf *tlvs);
1006116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
10072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#ifdef CONFIG_WIFI_DISPLAY
1008116680a4aac90f2aa7413d9095a592090648e557Ben Murdochvoid * p2p_sd_request_wfd(struct p2p_data *p2p, const u8 *dst,
10092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)			  const struct wpabuf *tlvs);
1010116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif /* CONFIG_WIFI_DISPLAY */
10112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1012116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch/**
1013116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch * p2p_sd_cancel_request - Cancel a pending service discovery query
1014116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch * @p2p: P2P module context from p2p_init()
1015116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch * @req: Query reference from p2p_sd_request()
1016116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch * Returns: 0 if request for cancelled; -1 if not found
1017116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch */
1018cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)int p2p_sd_cancel_request(struct p2p_data *p2p, void *req);
1019116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
1020116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch/**
1021116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch * p2p_sd_response - Send response to a service discovery query
102246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) * @p2p: P2P module context from p2p_init()
1023cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) * @freq: Frequency from p2p_config::sd_request() callback
1024116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch * @dst: Destination address from p2p_config::sd_request() callback
1025116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch * @dialog_token: Dialog token from p2p_config::sd_request() callback
10265c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu * @resp_tlvs: P2P Service Response TLV(s)
10271320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci *
10281320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * This function is called as a response to the request indicated with
10291320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * p2p_config::sd_request() callback.
10301320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci */
1031116680a4aac90f2aa7413d9095a592090648e557Ben Murdochvoid p2p_sd_response(struct p2p_data *p2p, int freq, const u8 *dst,
10325d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)		     u8 dialog_token, const struct wpabuf *resp_tlvs);
1033116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
1034116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch/**
1035116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch * p2p_sd_service_update - Indicate a change in local services
10365d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * @p2p: P2P module context from p2p_init()
1037116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch *
1038116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch * This function needs to be called whenever there is a change in availability
1039116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch * of the local services. This will increment the Service Update Indicator
1040868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) * value which will be used in SD Request and Response frames.
10412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) */
1042116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#ifdef ANDROID_P2P
10431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccivoid p2p_sd_service_update(struct p2p_data *p2p, int action);
10442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#else
10452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void p2p_sd_service_update(struct p2p_data *p2p);
1046e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch#endif
1047e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch
1048e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch
1049e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdochenum p2p_invite_role {
10505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	P2P_INVITE_ROLE_GO,
10515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	P2P_INVITE_ROLE_ACTIVE_GO,
10525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	P2P_INVITE_ROLE_CLIENT
10535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
10545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
10555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/**
10565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * p2p_invite - Invite a P2P Device into a group
10575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @p2p: P2P module context from p2p_init()
10585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @peer: Device Address of the peer P2P Device
10595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @role: Local role in the group
10605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @bssid: Group BSSID or %NULL if not known
10615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @ssid: Group SSID
10625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @ssid_len: Length of ssid in octets
1063868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) * @force_freq: The only allowed channel frequency in MHz or 0
10645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @go_dev_addr: Forced GO Device Address or %NULL if none
10655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @persistent_group: Whether this is to reinvoke a persistent group
10665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @pref_freq: Preferred operating frequency in MHz or 0 (this is only used if
10675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *	force_freq == 0)
1068ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch * Returns: 0 on success, -1 on failure
1069ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch */
1070ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdochint p2p_invite(struct p2p_data *p2p, const u8 *peer, enum p2p_invite_role role,
10715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	       const u8 *bssid, const u8 *ssid, size_t ssid_len,
10725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	       unsigned int force_freq, const u8 *go_dev_addr,
10735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	       int persistent_group, unsigned int pref_freq);
10745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
10755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/**
10765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * p2p_presence_req - Request GO presence
10775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @p2p: P2P module context from p2p_init()
10785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @go_interface_addr: GO P2P Interface Address
10795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @own_interface_addr: Own P2P Interface Address for this group
10805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @freq: Group operating frequence (in MHz)
10815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @duration1: Preferred presence duration in microseconds
10825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @interval1: Preferred presence interval in microseconds
10835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @duration2: Acceptable presence duration in microseconds
10845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @interval2: Acceptable presence interval in microseconds
10855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Returns: 0 on success, -1 on failure
10865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *
10875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * If both duration and interval values are zero, the parameter pair is not
10885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * specified (i.e., to remove Presence Request, use duration1 = interval1 = 0).
10895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */
10905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int p2p_presence_req(struct p2p_data *p2p, const u8 *go_interface_addr,
10915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)		     const u8 *own_interface_addr, unsigned int freq,
10922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)		     u32 duration1, u32 interval1, u32 duration2,
10935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)		     u32 interval2);
10945d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
10955d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)/**
10961320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * p2p_ext_listen - Set Extended Listen Timing
10975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @p2p: P2P module context from p2p_init()
10985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @freq: Group operating frequence (in MHz)
10992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * @period: Availability period in milliseconds (1-65535; 0 to disable)
11005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @interval: Availability interval in milliseconds (1-65535; 0 to disable)
11012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * Returns: 0 on success, -1 on failure
11025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *
11035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * This function can be used to enable or disable (period = interval = 0)
11045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Extended Listen Timing. When enabled, the P2P Device will become
11055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * discoverable (go into Listen State) every @interval milliseconds for at
1106f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) * least @period milliseconds.
1107f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) */
11085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int p2p_ext_listen(struct p2p_data *p2p, unsigned int period,
11095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)		   unsigned int interval);
1110116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
11111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci/* Event notifications from upper layer management operations */
1112116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
1113116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch/**
11145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * p2p_wps_success_cb - Report successfully completed WPS provisioning
11152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * @p2p: P2P module context from p2p_init()
11162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * @mac_addr: Peer address
11172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) *
11182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * This function is used to report successfully completed WPS provisioning
1119868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) * during group formation in both GO/Registrar and client/Enrollee roles.
1120f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) */
1121868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)void p2p_wps_success_cb(struct p2p_data *p2p, const u8 *mac_addr);
1122868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
1123868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)/**
1124116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch * p2p_group_formation_failed - Report failed WPS provisioning
1125868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) * @p2p: P2P module context from p2p_init()
1126116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch *
11275f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) * This function is used to report failed group formation. This can happen
1128116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch * either due to failed WPS provisioning or due to 15 second timeout during
1129116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch * the provisioning phase.
1130868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) */
1131116680a4aac90f2aa7413d9095a592090648e557Ben Murdochvoid p2p_group_formation_failed(struct p2p_data *p2p);
1132116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
1133116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch/**
11341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * p2p_get_provisioning_info - Get any stored provisioning info
11351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * @p2p: P2P module context from p2p_init()
11361320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * @addr: Peer P2P Device Address
11371320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * Returns: WPS provisioning information (WPS config method) or 0 if no
11381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * information is available
11391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci *
11401320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * This function is used to retrieve stored WPS provisioning info for the given
11411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * peer.
11421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci */
11431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciu16 p2p_get_provisioning_info(struct p2p_data *p2p, const u8 *addr);
11441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
11451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci/**
11461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * p2p_clear_provisioning_info - Clear any stored provisioning info
11471320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * @p2p: P2P module context from p2p_init()
11481320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * @iface_addr: Peer P2P Device Address
11491320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci *
11501320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * This function is used to clear stored WPS provisioning info for the given
11511320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * peer.
11521320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci */
11531320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccivoid p2p_clear_provisioning_info(struct p2p_data *p2p, const u8 *addr);
11541320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
11551320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
11561320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci/* Event notifications from lower layer driver operations */
11571320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
11581320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci/**
11591320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * enum p2p_probe_req_status
11601320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci *
11611320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * @P2P_PREQ_MALFORMED: frame was not well-formed
11621320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * @P2P_PREQ_NOT_LISTEN: device isn't in listen state, frame ignored
11631320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * @P2P_PREQ_NOT_P2P: frame was not a P2P probe request
11641320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * @P2P_PREQ_P2P_NOT_PROCESSED: frame was P2P but wasn't processed
11651320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * @P2P_PREQ_P2P_PROCESSED: frame has been processed by P2P
11661320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci */
11671320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccienum p2p_probe_req_status {
11681320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci	P2P_PREQ_MALFORMED,
11691320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci	P2P_PREQ_NOT_LISTEN,
1170116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	P2P_PREQ_NOT_P2P,
1171116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	P2P_PREQ_NOT_PROCESSED,
1172116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	P2P_PREQ_PROCESSED
1173116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch};
1174116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
1175116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch/**
1176f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * p2p_probe_req_rx - Report reception of a Probe Request frame
1177116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch * @p2p: P2P module context from p2p_init()
1178f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * @addr: Source MAC address
1179116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch * @dst: Destination MAC address if available or %NULL
1180116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch * @bssid: BSSID if available or %NULL
1181116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch * @ie: Information elements from the Probe Request frame body
11821320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * @ie_len: Length of ie buffer in octets
11831320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * Returns: value indicating the type and status of the probe request
11841320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci */
11851320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccienum p2p_probe_req_status
1186116680a4aac90f2aa7413d9095a592090648e557Ben Murdochp2p_probe_req_rx(struct p2p_data *p2p, const u8 *addr, const u8 *dst,
11875d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)		 const u8 *bssid, const u8 *ie, size_t ie_len);
1188116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
1189116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch/**
11906e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) * p2p_rx_action - Report received Action frame
11916e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) * @p2p: P2P module context from p2p_init()
11926e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) * @da: Destination address of the received Action frame
11936e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) * @sa: Source address of the received Action frame
1194f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * @bssid: Address 3 of the received Action frame
1195f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * @category: Category of the received Action frame
1196f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * @data: Action frame body after the Category field
1197116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch * @len: Length of the data buffer in octets
1198116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch * @freq: Frequency (in MHz) on which the frame was received
1199f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) */
1200116680a4aac90f2aa7413d9095a592090648e557Ben Murdochvoid p2p_rx_action(struct p2p_data *p2p, const u8 *da, const u8 *sa,
1201f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)		   const u8 *bssid, u8 category,
1202f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)		   const u8 *data, size_t len, int freq);
120346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)
120446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)/**
12055f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) * p2p_scan_res_handler - Indicate a P2P scan results
12065f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) * @p2p: P2P module context from p2p_init()
120746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) * @bssid: BSSID of the scan result
120846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) * @freq: Frequency of the channel on which the device was found in MHz
1209116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch * @rx_time: Time when the result was received
121046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) * @level: Signal level (signal strength of the received Beacon/Probe Response
1211116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch *	frame)
12125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * @ies: Pointer to IEs from the scan result
12135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * @ies_len: Length of the ies buffer
12145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * Returns: 0 to continue or 1 to stop scan result indication
1215116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch *
1216116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch * This function is called to indicate a scan result entry with P2P IE from a
1217116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch * scan requested with struct p2p_config::p2p_scan(). This can be called during
1218116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch * the actual scan process (i.e., whenever a new device is found) or as a
1219116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch * sequence of calls after the full scan has been completed. The former option
1220116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch * can result in optimized operations, but may not be supported by all
1221116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch * driver/firmware designs. The ies buffer need to include at least the P2P IE,
1222116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch * but it is recommended to include all IEs received from the device. The
1223116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch * caller does not need to check that the IEs contain a P2P IE before calling
12245d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * this function since frames will be filtered internally if needed.
12255d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) *
1226f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * This function will return 1 if it wants to stop scan result iteration (and
1227f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * scan in general if it is still in progress). This is used to allow faster
1228f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * start of a pending operation, e.g., to start a pending GO negotiation.
1229f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) */
1230f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)int p2p_scan_res_handler(struct p2p_data *p2p, const u8 *bssid, int freq,
1231116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch			 struct os_time *rx_time, int level, const u8 *ies,
1232f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)			 size_t ies_len);
1233f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
1234f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)/**
1235f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * p2p_scan_res_handled - Indicate end of scan results
1236f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * @p2p: P2P module context from p2p_init()
1237f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) *
1238868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) * This function is called to indicate that all P2P scan results from a scan
1239868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) * have been reported with zero or more calls to p2p_scan_res_handler(). This
1240868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) * function must be called as a response to successful
1241bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch * struct p2p_config::p2p_scan() call if none of the p2p_scan_res_handler()
1242bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch * calls stopped iteration.
1243bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch */
1244f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void p2p_scan_res_handled(struct p2p_data *p2p);
1245f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
1246bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdochenum p2p_send_action_result {
1247bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch	P2P_SEND_ACTION_SUCCESS /* Frame was send and acknowledged */,
12485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)	P2P_SEND_ACTION_NO_ACK /* Frame was sent, but not acknowledged */,
12495d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)	P2P_SEND_ACTION_FAILED /* Frame was not sent due to a failure */
12505d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)};
12515d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
12525d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)/**
12535d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * p2p_send_action_cb - Notify TX status of an Action frame
12545d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * @p2p: P2P module context from p2p_init()
12555d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * @freq: Channel frequency in MHz
1256cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) * @dst: Destination MAC address (Address 1)
12575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * @src: Source MAC address (Address 2)
12585d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * @bssid: BSSID (Address 3)
1259116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch * @result: Result of the transmission attempt
1260116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch *
1261116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch * This function is used to indicate the result of an Action frame transmission
1262116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch * that was requested with struct p2p_config::send_action() callback.
1263a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) */
1264a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)void p2p_send_action_cb(struct p2p_data *p2p, unsigned int freq, const u8 *dst,
1265a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)			const u8 *src, const u8 *bssid,
1266a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)			enum p2p_send_action_result result);
1267a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
1268a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)/**
1269116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch * p2p_listen_cb - Indicate the start of a requested Listen state
1270116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch * @p2p: P2P module context from p2p_init()
1271116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch * @freq: Listen channel frequency in MHz
1272116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch * @duration: Duration for the Listen state in milliseconds
1273116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch *
1274a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) * This function is used to indicate that a Listen state requested with
1275a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) * struct p2p_config::start_listen() callback has started.
1276a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) */
1277116680a4aac90f2aa7413d9095a592090648e557Ben Murdochvoid p2p_listen_cb(struct p2p_data *p2p, unsigned int freq,
1278116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch		   unsigned int duration);
1279116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
1280116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch/**
1281116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch * p2p_listen_end - Indicate the end of a requested Listen state
1282116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch * @p2p: P2P module context from p2p_init()
1283116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch * @freq: Listen channel frequency in MHz
1284116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch * Returns: 0 if no operations were started, 1 if an operation was started
1285116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch *
12866e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) * This function is used to indicate that a Listen state requested with
12876e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) * struct p2p_config::start_listen() callback has ended.
12886e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) */
12896e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)int p2p_listen_end(struct p2p_data *p2p, unsigned int freq);
12906e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
12916e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)void p2p_deauth_notif(struct p2p_data *p2p, const u8 *bssid, u16 reason_code,
12926e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)		      const u8 *ie, size_t ie_len);
1293116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
1294116680a4aac90f2aa7413d9095a592090648e557Ben Murdochvoid p2p_disassoc_notif(struct p2p_data *p2p, const u8 *bssid, u16 reason_code,
1295116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch			const u8 *ie, size_t ie_len);
1296116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
1297116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
1298116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch/* Per-group P2P state for GO */
1299116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
1300116680a4aac90f2aa7413d9095a592090648e557Ben Murdochstruct p2p_group;
1301116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
1302116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch/**
1303116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch * struct p2p_group_config - P2P group configuration
1304116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch *
1305116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch * This configuration is provided to the P2P module during initialization of
1306116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch * the per-group information with p2p_group_init().
1307116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch */
1308116680a4aac90f2aa7413d9095a592090648e557Ben Murdochstruct p2p_group_config {
1309116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	/**
1310116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	 * persistent_group - Whether the group is persistent
1311116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	 * 0 = not a persistent group
1312116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	 * 1 = persistent group without persistent reconnect
1313116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	 * 2 = persistent group with persistent reconnect
1314116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	 */
1315116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	int persistent_group;
1316116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
1317116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	/**
1318116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	 * interface_addr - P2P Interface Address of the group
1319116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	 */
1320116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	u8 interface_addr[ETH_ALEN];
1321116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
1322116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	/**
1323116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	 * max_clients - Maximum number of clients in the group
1324116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	 */
1325116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	unsigned int max_clients;
1326116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
1327116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	/**
1328116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	 * ssid - Group SSID
1329116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	 */
1330116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	u8 ssid[32];
13311320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
13321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci	/**
13331320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci	 * ssid_len - Length of SSID
1334116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	 */
1335116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	size_t ssid_len;
1336116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
1337116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	/**
1338116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	 * cb_ctx - Context to use with callback functions
1339116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	 */
1340116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	void *cb_ctx;
1341116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
1342116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	/**
1343116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	 * ie_update - Notification of IE update
13445c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu	 * @ctx: Callback context from cb_ctx
13455c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu	 * @beacon_ies: P2P IE for Beacon frames or %NULL if no change
1346116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	 * @proberesp_ies: P2P Ie for Probe Response frames
1347116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	 *
13485c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu	 * P2P module uses this callback function to notify whenever the P2P IE
13495c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu	 * in Beacon or Probe Response frames should be updated based on group
13505c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu	 * events.
13515c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu	 *
13525c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu	 * The callee is responsible for freeing the returned buffer(s) with
13535c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu	 * wpabuf_free().
1354116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	 */
1355116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	void (*ie_update)(void *ctx, struct wpabuf *beacon_ies,
1356116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch			  struct wpabuf *proberesp_ies);
1357116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
1358116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	/**
13595c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu	 * idle_update - Notification of changes in group idle state
13605c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu	 * @ctx: Callback context from cb_ctx
13615c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu	 * @idle: Whether the group is idle (no associated stations)
13625c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu	 */
1363116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	void (*idle_update)(void *ctx, int idle);
13641320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci};
13651320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
13661320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci/**
13671320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * p2p_group_init - Initialize P2P group
13681320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * @p2p: P2P module context from p2p_init()
13691320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * @config: P2P group configuration (will be freed by p2p_group_deinit())
13701320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * Returns: Pointer to private data or %NULL on failure
13711320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci *
13721320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * This function is used to initialize per-group P2P module context. Currently,
13731320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * this is only used to manage GO functionality and P2P clients do not need to
13741320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * create an instance of this per-group information.
13751320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci */
13761320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccistruct p2p_group * p2p_group_init(struct p2p_data *p2p,
13771320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci				  struct p2p_group_config *config);
13781320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
13791320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci/**
13801320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * p2p_group_deinit - Deinitialize P2P group
1381116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch * @group: P2P group context from p2p_group_init()
1382116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch */
1383116680a4aac90f2aa7413d9095a592090648e557Ben Murdochvoid p2p_group_deinit(struct p2p_group *group);
1384116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
1385f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)/**
1386f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * p2p_group_notif_assoc - Notification of P2P client association with GO
1387f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * @group: P2P group context from p2p_group_init()
1388f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * @addr: Interface address of the P2P client
1389f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * @ie: IEs from the (Re)association Request frame
1390f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * @len: Length of the ie buffer in octets
1391f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * Returns: 0 on success, -1 on failure
1392f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) */
1393f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)int p2p_group_notif_assoc(struct p2p_group *group, const u8 *addr,
1394f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)			  const u8 *ie, size_t len);
1395116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
1396116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch/**
1397116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch * p2p_group_assoc_resp_ie - Build P2P IE for (re)association response
1398116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch * @group: P2P group context from p2p_group_init()
1399116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch * @status: Status value (P2P_SC_SUCCESS if association succeeded)
1400116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch * Returns: P2P IE for (Re)association Response or %NULL on failure
1401116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch *
1402f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * The caller is responsible for freeing the returned buffer with
1403f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * wpabuf_free().
1404f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) */
1405f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)struct wpabuf * p2p_group_assoc_resp_ie(struct p2p_group *group, u8 status);
1406f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
1407f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)/**
1408f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * p2p_group_notif_disassoc - Notification of P2P client disassociation from GO
1409f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * @group: P2P group context from p2p_group_init()
1410f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * @addr: Interface address of the P2P client
1411f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) */
1412f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void p2p_group_notif_disassoc(struct p2p_group *group, const u8 *addr);
1413f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
1414f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)/**
1415f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * p2p_group_notif_formation_done - Notification of completed group formation
1416f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * @group: P2P group context from p2p_group_init()
1417f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) */
1418f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void p2p_group_notif_formation_done(struct p2p_group *group);
1419f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
1420868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)/**
14215d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * p2p_group_notif_noa - Notification of NoA change
1422116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch * @group: P2P group context from p2p_group_init()
1423116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch * @noa: Notice of Absence attribute payload, %NULL if none
1424116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch * @noa_len: Length of noa buffer in octets
1425116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch * Returns: 0 on success, -1 on failure
1426116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch *
1427116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch * Notify the P2P group management about a new NoA contents. This will be
1428116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch * inserted into the P2P IEs in Beacon and Probe Response frames with rest of
14295d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * the group information.
1430116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch */
1431116680a4aac90f2aa7413d9095a592090648e557Ben Murdochint p2p_group_notif_noa(struct p2p_group *group, const u8 *noa,
1432116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch			size_t noa_len);
1433116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
1434116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch/**
1435116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch * p2p_group_match_dev_type - Match device types in group with requested type
14365d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * @group: P2P group context from p2p_group_init()
14375d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * @wps: WPS TLVs from Probe Request frame (concatenated WPS IEs)
14385d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * Returns: 1 on match, 0 on mismatch
1439116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch *
14405d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * This function can be used to match the Requested Device Type attribute in
14415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * WPS IE with the device types of a group member for deciding whether a GO
14425d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * should reply to a Probe Request frame. Match will be reported if the WPS IE
1443116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch * is not requested any specific device type.
14445d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) */
14455d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)int p2p_group_match_dev_type(struct p2p_group *group, struct wpabuf *wps);
1446
1447/**
1448 * p2p_group_match_dev_id - Match P2P Device Address in group with requested device id
1449 */
1450int p2p_group_match_dev_id(struct p2p_group *group, struct wpabuf *p2p);
1451
1452/**
1453 * p2p_group_go_discover - Send GO Discoverability Request to a group client
1454 * @group: P2P group context from p2p_group_init()
1455 * Returns: 0 on success (frame scheduled); -1 if client was not found
1456 */
1457int p2p_group_go_discover(struct p2p_group *group, const u8 *dev_id,
1458			  const u8 *searching_dev, int rx_freq);
1459
1460
1461/* Generic helper functions */
1462
1463/**
1464 * p2p_ie_text - Build text format description of P2P IE
1465 * @p2p_ie: P2P IE
1466 * @buf: Buffer for returning text
1467 * @end: Pointer to the end of the buf area
1468 * Returns: Number of octets written to the buffer or -1 on failure
1469 *
1470 * This function can be used to parse P2P IE contents into text format
1471 * field=value lines.
1472 */
1473int p2p_ie_text(struct wpabuf *p2p_ie, char *buf, char *end);
1474
1475/**
1476 * p2p_scan_result_text - Build text format description of P2P IE
1477 * @ies: Information elements from scan results
1478 * @ies_len: ies buffer length in octets
1479 * @buf: Buffer for returning text
1480 * @end: Pointer to the end of the buf area
1481 * Returns: Number of octets written to the buffer or -1 on failure
1482 *
1483 * This function can be used to parse P2P IE contents into text format
1484 * field=value lines.
1485 */
1486int p2p_scan_result_text(const u8 *ies, size_t ies_len, char *buf, char *end);
1487
1488/**
1489 * p2p_parse_dev_addr_in_p2p_ie - Parse P2P Device Address from a concatenated
1490 * P2P IE
1491 * @p2p_ie: P2P IE
1492 * @dev_addr: Buffer for returning P2P Device Address
1493 * Returns: 0 on success or -1 if P2P Device Address could not be parsed
1494 */
1495int p2p_parse_dev_addr_in_p2p_ie(struct wpabuf *p2p_ie, u8 *dev_addr);
1496
1497/**
1498 * p2p_parse_dev_addr - Parse P2P Device Address from P2P IE(s)
1499 * @ies: Information elements from scan results
1500 * @ies_len: ies buffer length in octets
1501 * @dev_addr: Buffer for returning P2P Device Address
1502 * Returns: 0 on success or -1 if P2P Device Address could not be parsed
1503 */
1504int p2p_parse_dev_addr(const u8 *ies, size_t ies_len, u8 *dev_addr);
1505
1506/**
1507 * p2p_assoc_req_ie - Build P2P IE for (Re)Association Request frame
1508 * @p2p: P2P module context from p2p_init()
1509 * @bssid: BSSID
1510 * @buf: Buffer for writing the P2P IE
1511 * @len: Maximum buf length in octets
1512 * @p2p_group: Whether this is for association with a P2P GO
1513 * @p2p_ie: Reassembled P2P IE data from scan results or %NULL if none
1514 * Returns: Number of octets written into buf or -1 on failure
1515 */
1516int p2p_assoc_req_ie(struct p2p_data *p2p, const u8 *bssid, u8 *buf,
1517		     size_t len, int p2p_group, struct wpabuf *p2p_ie);
1518
1519/**
1520 * p2p_scan_ie - Build P2P IE for Probe Request
1521 * @p2p: P2P module context from p2p_init()
1522 * @ies: Buffer for writing P2P IE
1523 * @dev_id: Device ID to search for or %NULL for any
1524 */
1525void p2p_scan_ie(struct p2p_data *p2p, struct wpabuf *ies, const u8 *dev_id);
1526
1527/**
1528 * p2p_scan_ie_buf_len - Get maximum buffer length needed for p2p_scan_ie
1529 * @p2p: P2P module context from p2p_init()
1530 * Returns: Number of octets that p2p_scan_ie() may add to the buffer
1531 */
1532size_t p2p_scan_ie_buf_len(struct p2p_data *p2p);
1533
1534/**
1535 * p2p_go_params - Generate random P2P group parameters
1536 * @p2p: P2P module context from p2p_init()
1537 * @params: Buffer for parameters
1538 * Returns: 0 on success, -1 on failure
1539 */
1540int p2p_go_params(struct p2p_data *p2p, struct p2p_go_neg_results *params);
1541
1542/**
1543 * p2p_get_group_capab - Get Group Capability from P2P IE data
1544 * @p2p_ie: P2P IE(s) contents
1545 * Returns: Group Capability
1546 */
1547u8 p2p_get_group_capab(const struct wpabuf *p2p_ie);
1548
1549/**
1550 * p2p_get_cross_connect_disallowed - Does WLAN AP disallows cross connection
1551 * @p2p_ie: P2P IE(s) contents
1552 * Returns: 0 if cross connection is allow, 1 if not
1553 */
1554int p2p_get_cross_connect_disallowed(const struct wpabuf *p2p_ie);
1555
1556/**
1557 * p2p_get_go_dev_addr - Get P2P Device Address from P2P IE data
1558 * @p2p_ie: P2P IE(s) contents
1559 * Returns: Pointer to P2P Device Address or %NULL if not included
1560 */
1561const u8 * p2p_get_go_dev_addr(const struct wpabuf *p2p_ie);
1562
1563/**
1564 * p2p_get_peer_info - Get P2P peer information
1565 * @p2p: P2P module context from p2p_init()
1566 * @addr: P2P Device Address of the peer or %NULL to indicate the first peer
1567 * @next: Whether to select the peer entry following the one indicated by addr
1568 * Returns: Pointer to peer info or %NULL if not found
1569 */
1570const struct p2p_peer_info * p2p_get_peer_info(struct p2p_data *p2p,
1571					       const u8 *addr, int next);
1572
1573/**
1574 * p2p_get_peer_info_txt - Get internal P2P peer information in text format
1575 * @info: Pointer to P2P peer info from p2p_get_peer_info()
1576 * @buf: Buffer for returning text
1577 * @buflen: Maximum buffer length
1578 * Returns: Number of octets written to the buffer or -1 on failure
1579 *
1580 * Note: This information is internal to the P2P module and subject to change.
1581 * As such, this should not really be used by external programs for purposes
1582 * other than debugging.
1583 */
1584int p2p_get_peer_info_txt(const struct p2p_peer_info *info,
1585			  char *buf, size_t buflen);
1586
1587/**
1588 * p2p_peer_known - Check whether P2P peer is known
1589 * @p2p: P2P module context from p2p_init()
1590 * @addr: P2P Device Address of the peer
1591 * Returns: 1 if the specified device is in the P2P peer table or 0 if not
1592 */
1593int p2p_peer_known(struct p2p_data *p2p, const u8 *addr);
1594
1595/**
1596 * p2p_set_client_discoverability - Set client discoverability capability
1597 * @p2p: P2P module context from p2p_init()
1598 * @enabled: Whether client discoverability will be enabled
1599 *
1600 * This function can be used to disable (and re-enable) client discoverability.
1601 * This capability is enabled by default and should not be disabled in normal
1602 * use cases, i.e., this is mainly for testing purposes.
1603 */
1604void p2p_set_client_discoverability(struct p2p_data *p2p, int enabled);
1605
1606/**
1607 * p2p_set_managed_oper - Set managed P2P Device operations capability
1608 * @p2p: P2P module context from p2p_init()
1609 * @enabled: Whether managed P2P Device operations will be enabled
1610 */
1611void p2p_set_managed_oper(struct p2p_data *p2p, int enabled);
1612
1613int p2p_set_listen_channel(struct p2p_data *p2p, u8 reg_class, u8 channel);
1614
1615int p2p_set_ssid_postfix(struct p2p_data *p2p, const u8 *postfix, size_t len);
1616
1617int p2p_get_interface_addr(struct p2p_data *p2p, const u8 *dev_addr,
1618			   u8 *iface_addr);
1619int p2p_get_dev_addr(struct p2p_data *p2p, const u8 *iface_addr,
1620			   u8 *dev_addr);
1621
1622void p2p_set_peer_filter(struct p2p_data *p2p, const u8 *addr);
1623
1624/**
1625 * p2p_set_cross_connect - Set cross connection capability
1626 * @p2p: P2P module context from p2p_init()
1627 * @enabled: Whether cross connection will be enabled
1628 */
1629void p2p_set_cross_connect(struct p2p_data *p2p, int enabled);
1630
1631int p2p_get_oper_freq(struct p2p_data *p2p, const u8 *iface_addr);
1632
1633/**
1634 * p2p_set_intra_bss_dist - Set intra BSS distribution
1635 * @p2p: P2P module context from p2p_init()
1636 * @enabled: Whether intra BSS distribution will be enabled
1637 */
1638void p2p_set_intra_bss_dist(struct p2p_data *p2p, int enabled);
1639
1640int p2p_channels_includes_freq(const struct p2p_channels *channels,
1641			       unsigned int freq);
1642
1643/**
1644 * p2p_supported_freq - Check whether channel is supported for P2P
1645 * @p2p: P2P module context from p2p_init()
1646 * @freq: Channel frequency in MHz
1647 * Returns: 0 if channel not usable for P2P, 1 if usable for P2P
1648 */
1649int p2p_supported_freq(struct p2p_data *p2p, unsigned int freq);
1650
1651void p2p_update_channel_list(struct p2p_data *p2p, struct p2p_channels *chan);
1652
1653/**
1654 * p2p_set_best_channels - Update best channel information
1655 * @p2p: P2P module context from p2p_init()
1656 * @freq_24: Frequency (MHz) of best channel in 2.4 GHz band
1657 * @freq_5: Frequency (MHz) of best channel in 5 GHz band
1658 * @freq_overall: Frequency (MHz) of best channel overall
1659 */
1660void p2p_set_best_channels(struct p2p_data *p2p, int freq_24, int freq_5,
1661			   int freq_overall);
1662
1663/**
1664 * p2p_set_own_freq_preference - Set own preference for channel
1665 * @p2p: P2P module context from p2p_init()
1666 * @freq: Frequency (MHz) of the preferred channel or 0 if no preference
1667 *
1668 * This function can be used to set a preference on the operating channel based
1669 * on frequencies used on the other virtual interfaces that share the same
1670 * radio. If non-zero, this is used to try to avoid multi-channel concurrency.
1671 */
1672void p2p_set_own_freq_preference(struct p2p_data *p2p, int freq);
1673
1674const u8 * p2p_get_go_neg_peer(struct p2p_data *p2p);
1675
1676/**
1677 * p2p_get_group_num_members - Get number of members in group
1678 * @group: P2P group context from p2p_group_init()
1679 * Returns: Number of members in the group
1680 */
1681unsigned int p2p_get_group_num_members(struct p2p_group *group);
1682
1683/**
1684 * p2p_iterate_group_members - Iterate group members
1685 * @group: P2P group context from p2p_group_init()
1686 * @next: iteration pointer, must be a pointer to a void * that is set to %NULL
1687 *	on the first call and not modified later
1688 * Returns: A P2P Interface Address for each call and %NULL for no more members
1689 */
1690const u8 * p2p_iterate_group_members(struct p2p_group *group, void **next);
1691
1692/**
1693 * p2p_group_get_dev_addr - Get a P2P Device Address of a client in a group
1694 * @group: P2P group context from p2p_group_init()
1695 * @addr: P2P Interface Address of the client
1696 * Returns: P2P Device Address of the client if found or %NULL if no match
1697 * found
1698 */
1699const u8 * p2p_group_get_dev_addr(struct p2p_group *group, const u8 *addr);
1700
1701/**
1702 * p2p_group_is_client_connected - Check whether a specific client is connected
1703 * @group: P2P group context from p2p_group_init()
1704 * @addr: P2P Device Address of the client
1705 * Returns: 1 if client is connected or 0 if not
1706 */
1707int p2p_group_is_client_connected(struct p2p_group *group, const u8 *dev_addr);
1708
1709/**
1710 * p2p_get_peer_found - Get P2P peer info structure of a found peer
1711 * @p2p: P2P module context from p2p_init()
1712 * @addr: P2P Device Address of the peer or %NULL to indicate the first peer
1713 * @next: Whether to select the peer entry following the one indicated by addr
1714 * Returns: The first P2P peer info available or %NULL if no such peer exists
1715 */
1716const struct p2p_peer_info *
1717p2p_get_peer_found(struct p2p_data *p2p, const u8 *addr, int next);
1718
1719/**
1720 * p2p_remove_wps_vendor_extensions - Remove WPS vendor extensions
1721 * @p2p: P2P module context from p2p_init()
1722 */
1723void p2p_remove_wps_vendor_extensions(struct p2p_data *p2p);
1724
1725/**
1726 * p2p_add_wps_vendor_extension - Add a WPS vendor extension
1727 * @p2p: P2P module context from p2p_init()
1728 * @vendor_ext: The vendor extensions to add
1729 * Returns: 0 on success, -1 on failure
1730 *
1731 * The wpabuf structures in the array are owned by the P2P
1732 * module after this call.
1733 */
1734int p2p_add_wps_vendor_extension(struct p2p_data *p2p,
1735				 const struct wpabuf *vendor_ext);
1736
1737/**
1738 * p2p_set_oper_channel - Set the P2P operating channel
1739 * @p2p: P2P module context from p2p_init()
1740 * @op_reg_class: Operating regulatory class to set
1741 * @op_channel: operating channel to set
1742 * @cfg_op_channel : Whether op_channel is hardcoded in configuration
1743 * Returns: 0 on success, -1 on failure
1744 */
1745int p2p_set_oper_channel(struct p2p_data *p2p, u8 op_reg_class, u8 op_channel,
1746			 int cfg_op_channel);
1747
1748/**
1749 * p2p_set_pref_chan - Set P2P preferred channel list
1750 * @p2p: P2P module context from p2p_init()
1751 * @num_pref_chan: Number of entries in pref_chan list
1752 * @pref_chan: Preferred channels or %NULL to remove preferences
1753 * Returns: 0 on success, -1 on failure
1754 */
1755int p2p_set_pref_chan(struct p2p_data *p2p, unsigned int num_pref_chan,
1756		      const struct p2p_channel *pref_chan);
1757
1758/**
1759 * p2p_in_progress - Check whether a P2P operation is progress
1760 * @p2p: P2P module context from p2p_init()
1761 * Returns: 0 if P2P module is idle or 1 if an operation is in progress
1762 */
1763int p2p_in_progress(struct p2p_data *p2p);
1764
1765#ifdef ANDROID_P2P
1766/**
1767 * p2p_search_in_progress - Check whether a P2P SEARCH is in progress
1768 * @p2p: P2P module context from p2p_init()
1769 * Returns: 0 if P2P module is idle or 1 if an operation is in progress
1770 */
1771int p2p_search_in_progress(struct p2p_data *p2p);
1772
1773/**
1774 * p2p_search_pending - Check whether there is a deferred P2P SEARCH
1775 * @p2p: P2P module context from p2p_init()
1776 * Returns: 0 if there is no deferred P2P search or 1 if there is one
1777 */
1778int p2p_search_pending(struct p2p_data *p2p);
1779#endif
1780
1781/**
1782 * p2p_other_scan_completed - Notify completion of non-P2P scan
1783 * @p2p: P2P module context from p2p_init()
1784 * Returns: 0 if P2P module is idle or 1 if an operation was started
1785 */
1786int p2p_other_scan_completed(struct p2p_data *p2p);
1787
1788const char * p2p_wps_method_text(enum p2p_wps_method method);
1789
1790/**
1791 * p2p_set_config_timeout - Set local config timeouts
1792 * @p2p: P2P module context from p2p_init()
1793 * @go_timeout: Time in 10 ms units it takes to start the GO mode
1794 * @client_timeout: Time in 10 ms units it takes to start the client mode
1795 */
1796void p2p_set_config_timeout(struct p2p_data *p2p, u8 go_timeout,
1797			    u8 client_timeout);
1798
1799void p2p_increase_search_delay(struct p2p_data *p2p, unsigned int delay);
1800
1801int p2p_set_wfd_ie_beacon(struct p2p_data *p2p, struct wpabuf *ie);
1802int p2p_set_wfd_ie_probe_req(struct p2p_data *p2p, struct wpabuf *ie);
1803int p2p_set_wfd_ie_probe_resp(struct p2p_data *p2p, struct wpabuf *ie);
1804int p2p_set_wfd_ie_assoc_req(struct p2p_data *p2p, struct wpabuf *ie);
1805int p2p_set_wfd_ie_invitation(struct p2p_data *p2p, struct wpabuf *ie);
1806int p2p_set_wfd_ie_prov_disc_req(struct p2p_data *p2p, struct wpabuf *ie);
1807int p2p_set_wfd_ie_prov_disc_resp(struct p2p_data *p2p, struct wpabuf *ie);
1808int p2p_set_wfd_ie_go_neg(struct p2p_data *p2p, struct wpabuf *ie);
1809int p2p_set_wfd_dev_info(struct p2p_data *p2p, const struct wpabuf *elem);
1810int p2p_set_wfd_assoc_bssid(struct p2p_data *p2p, const struct wpabuf *elem);
1811int p2p_set_wfd_coupled_sink_info(struct p2p_data *p2p,
1812				  const struct wpabuf *elem);
1813struct wpabuf * wifi_display_encaps(struct wpabuf *subelems);
1814
1815/**
1816 * p2p_set_disc_int - Set min/max discoverable interval for p2p_find
1817 * @p2p: P2P module context from p2p_init()
1818 * @min_disc_int: minDiscoverableInterval (in units of 100 TU); default 1
1819 * @max_disc_int: maxDiscoverableInterval (in units of 100 TU); default 3
1820 * @max_disc_tu: Maximum number of TUs (1.024 ms) for discoverable interval; or
1821 *	-1 not to limit
1822 * Returns: 0 on success, or -1 on failure
1823 *
1824 * This function can be used to configure minDiscoverableInterval and
1825 * maxDiscoverableInterval parameters for the Listen state during device
1826 * discovery (p2p_find). A random number of 100 TU units is picked for each
1827 * Listen state iteration from [min_disc_int,max_disc_int] range.
1828 *
1829 * max_disc_tu can be used to futher limit the discoverable duration. However,
1830 * it should be noted that use of this parameter is not recommended since it
1831 * would not be compliant with the P2P specification.
1832 */
1833int p2p_set_disc_int(struct p2p_data *p2p, int min_disc_int, int max_disc_int,
1834		     int max_disc_tu);
1835
1836#endif /* P2P_H */
1837