| 
									
										
										
										
											2013-02-08 15:53:36 +01:00
										 |  |  | /*
 | 
					
						
							|  |  |  |  * Copyright (c) 2012 Broadcom Corporation | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * Permission to use, copy, modify, and/or distribute this software for any | 
					
						
							|  |  |  |  * purpose with or without fee is hereby granted, provided that the above | 
					
						
							|  |  |  |  * copyright notice and this permission notice appear in all copies. | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES | 
					
						
							|  |  |  |  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF | 
					
						
							|  |  |  |  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY | 
					
						
							|  |  |  |  * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES | 
					
						
							|  |  |  |  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION | 
					
						
							|  |  |  |  * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN | 
					
						
							|  |  |  |  * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | #ifndef WL_CFGP2P_H_
 | 
					
						
							|  |  |  | #define WL_CFGP2P_H_
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #include <net/cfg80211.h>
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | struct brcmf_cfg80211_info; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /**
 | 
					
						
							|  |  |  |  * enum p2p_bss_type - different type of BSS configurations. | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * @P2PAPI_BSSCFG_PRIMARY: maps to driver's primary bsscfg. | 
					
						
							|  |  |  |  * @P2PAPI_BSSCFG_DEVICE: maps to driver's P2P device discovery bsscfg. | 
					
						
							|  |  |  |  * @P2PAPI_BSSCFG_CONNECTION: maps to driver's P2P connection bsscfg. | 
					
						
							|  |  |  |  * @P2PAPI_BSSCFG_MAX: used for range checking. | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | enum p2p_bss_type { | 
					
						
							|  |  |  | 	P2PAPI_BSSCFG_PRIMARY, /* maps to driver's primary bsscfg */ | 
					
						
							|  |  |  | 	P2PAPI_BSSCFG_DEVICE, /* maps to driver's P2P device discovery bsscfg */ | 
					
						
							|  |  |  | 	P2PAPI_BSSCFG_CONNECTION, /* maps to driver's P2P connection bsscfg */ | 
					
						
							|  |  |  | 	P2PAPI_BSSCFG_MAX | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /**
 | 
					
						
							|  |  |  |  * struct p2p_bss - peer-to-peer bss related information. | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * @vif: virtual interface of this P2P bss. | 
					
						
							|  |  |  |  * @private_data: TBD | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | struct p2p_bss { | 
					
						
							|  |  |  | 	struct brcmf_cfg80211_vif *vif; | 
					
						
							|  |  |  | 	void *private_data; | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /**
 | 
					
						
							|  |  |  |  * enum brcmf_p2p_status - P2P specific dongle status. | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * @BRCMF_P2P_STATUS_IF_ADD: peer-to-peer vif add sent to dongle. | 
					
						
							|  |  |  |  * @BRCMF_P2P_STATUS_IF_DEL: NOT-USED? | 
					
						
							|  |  |  |  * @BRCMF_P2P_STATUS_IF_DELETING: peer-to-peer vif delete sent to dongle. | 
					
						
							|  |  |  |  * @BRCMF_P2P_STATUS_IF_CHANGING: peer-to-peer vif change sent to dongle. | 
					
						
							|  |  |  |  * @BRCMF_P2P_STATUS_IF_CHANGED: peer-to-peer vif change completed on dongle. | 
					
						
							|  |  |  |  * @BRCMF_P2P_STATUS_ACTION_TX_COMPLETED: action frame tx completed. | 
					
						
							|  |  |  |  * @BRCMF_P2P_STATUS_ACTION_TX_NOACK: action frame tx not acked. | 
					
						
							|  |  |  |  * @BRCMF_P2P_STATUS_GO_NEG_PHASE: P2P GO negotiation ongoing. | 
					
						
							| 
									
										
										
										
											2013-02-08 15:53:50 +01:00
										 |  |  |  * @BRCMF_P2P_STATUS_DISCOVER_LISTEN: P2P listen, remaining on channel. | 
					
						
							| 
									
										
										
										
											2013-02-08 15:54:02 +01:00
										 |  |  |  * @BRCMF_P2P_STATUS_SENDING_ACT_FRAME: In the process of sending action frame. | 
					
						
							|  |  |  |  * @BRCMF_P2P_STATUS_WAITING_NEXT_AF_LISTEN: extra listen time for af tx. | 
					
						
							|  |  |  |  * @BRCMF_P2P_STATUS_WAITING_NEXT_ACT_FRAME: waiting for action frame response. | 
					
						
							|  |  |  |  * @BRCMF_P2P_STATUS_FINDING_COMMON_CHANNEL: search channel for AF active. | 
					
						
							| 
									
										
										
										
											2013-02-08 15:53:36 +01:00
										 |  |  |  */ | 
					
						
							|  |  |  | enum brcmf_p2p_status { | 
					
						
							| 
									
										
										
										
											2013-02-08 15:53:52 +01:00
										 |  |  | 	BRCMF_P2P_STATUS_ENABLED, | 
					
						
							|  |  |  | 	BRCMF_P2P_STATUS_IF_ADD, | 
					
						
							| 
									
										
										
										
											2013-02-08 15:53:36 +01:00
										 |  |  | 	BRCMF_P2P_STATUS_IF_DEL, | 
					
						
							|  |  |  | 	BRCMF_P2P_STATUS_IF_DELETING, | 
					
						
							|  |  |  | 	BRCMF_P2P_STATUS_IF_CHANGING, | 
					
						
							|  |  |  | 	BRCMF_P2P_STATUS_IF_CHANGED, | 
					
						
							|  |  |  | 	BRCMF_P2P_STATUS_ACTION_TX_COMPLETED, | 
					
						
							|  |  |  | 	BRCMF_P2P_STATUS_ACTION_TX_NOACK, | 
					
						
							| 
									
										
										
										
											2013-02-08 15:53:38 +01:00
										 |  |  | 	BRCMF_P2P_STATUS_GO_NEG_PHASE, | 
					
						
							| 
									
										
										
										
											2013-02-08 15:54:02 +01:00
										 |  |  | 	BRCMF_P2P_STATUS_DISCOVER_LISTEN, | 
					
						
							|  |  |  | 	BRCMF_P2P_STATUS_SENDING_ACT_FRAME, | 
					
						
							|  |  |  | 	BRCMF_P2P_STATUS_WAITING_NEXT_AF_LISTEN, | 
					
						
							|  |  |  | 	BRCMF_P2P_STATUS_WAITING_NEXT_ACT_FRAME, | 
					
						
							|  |  |  | 	BRCMF_P2P_STATUS_FINDING_COMMON_CHANNEL | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /**
 | 
					
						
							|  |  |  |  * struct afx_hdl - action frame off channel storage. | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * @afx_work: worker thread for searching channel | 
					
						
							|  |  |  |  * @act_frm_scan: thread synchronizing struct. | 
					
						
							|  |  |  |  * @is_active: channel searching active. | 
					
						
							|  |  |  |  * @peer_chan: current channel. | 
					
						
							|  |  |  |  * @is_listen: sets mode for afx worker. | 
					
						
							|  |  |  |  * @my_listen_chan: this peers listen channel. | 
					
						
							|  |  |  |  * @peer_listen_chan: remote peers listen channel. | 
					
						
							|  |  |  |  * @tx_dst_addr: mac address where tx af should be sent to. | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | struct afx_hdl { | 
					
						
							|  |  |  | 	struct work_struct afx_work; | 
					
						
							|  |  |  | 	struct completion act_frm_scan; | 
					
						
							|  |  |  | 	bool is_active; | 
					
						
							|  |  |  | 	s32 peer_chan; | 
					
						
							|  |  |  | 	bool is_listen; | 
					
						
							|  |  |  | 	u16 my_listen_chan; | 
					
						
							|  |  |  | 	u16 peer_listen_chan; | 
					
						
							|  |  |  | 	u8 tx_dst_addr[ETH_ALEN]; | 
					
						
							| 
									
										
										
										
											2013-02-08 15:53:36 +01:00
										 |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /**
 | 
					
						
							|  |  |  |  * struct brcmf_p2p_info - p2p specific driver information. | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * @cfg: driver private data for cfg80211 interface. | 
					
						
							|  |  |  |  * @status: status of P2P (see enum brcmf_p2p_status). | 
					
						
							|  |  |  |  * @dev_addr: P2P device address. | 
					
						
							|  |  |  |  * @int_addr: P2P interface address. | 
					
						
							|  |  |  |  * @bss_idx: informate for P2P bss types. | 
					
						
							|  |  |  |  * @listen_timer: timer for @WL_P2P_DISC_ST_LISTEN discover state. | 
					
						
							|  |  |  |  * @ssid: ssid for P2P GO. | 
					
						
							|  |  |  |  * @listen_channel: channel for @WL_P2P_DISC_ST_LISTEN discover state. | 
					
						
							| 
									
										
										
										
											2013-02-08 15:53:38 +01:00
										 |  |  |  * @remain_on_channel: contains copy of struct used by cfg80211. | 
					
						
							| 
									
										
										
										
											2013-02-08 15:53:50 +01:00
										 |  |  |  * @remain_on_channel_cookie: cookie counter for remain on channel cmd | 
					
						
							| 
									
										
										
										
											2013-02-08 15:53:49 +01:00
										 |  |  |  * @next_af_subtype: expected action frame subtype. | 
					
						
							|  |  |  |  * @send_af_done: indication that action frame tx is complete. | 
					
						
							| 
									
										
										
										
											2013-02-08 15:54:02 +01:00
										 |  |  |  * @afx_hdl: action frame search handler info. | 
					
						
							|  |  |  |  * @af_sent_channel: channel action frame is sent. | 
					
						
							|  |  |  |  * @af_tx_sent_jiffies: jiffies time when af tx was transmitted. | 
					
						
							|  |  |  |  * @wait_next_af: thread synchronizing struct. | 
					
						
							|  |  |  |  * @gon_req_action: about to send go negotiation requets frame. | 
					
						
							|  |  |  |  * @block_gon_req_tx: drop tx go negotiation requets frame. | 
					
						
							| 
									
										
										
										
											2013-02-08 15:53:36 +01:00
										 |  |  |  */ | 
					
						
							|  |  |  | struct brcmf_p2p_info { | 
					
						
							|  |  |  | 	struct brcmf_cfg80211_info *cfg; | 
					
						
							|  |  |  | 	unsigned long status; | 
					
						
							|  |  |  | 	u8 dev_addr[ETH_ALEN]; | 
					
						
							|  |  |  | 	u8 int_addr[ETH_ALEN]; | 
					
						
							|  |  |  | 	struct p2p_bss bss_idx[P2PAPI_BSSCFG_MAX]; | 
					
						
							|  |  |  | 	struct timer_list listen_timer; | 
					
						
							|  |  |  | 	struct brcmf_ssid ssid; | 
					
						
							|  |  |  | 	u8 listen_channel; | 
					
						
							| 
									
										
										
										
											2013-02-08 15:53:38 +01:00
										 |  |  | 	struct ieee80211_channel remain_on_channel; | 
					
						
							| 
									
										
										
										
											2013-02-08 15:53:50 +01:00
										 |  |  | 	u32 remain_on_channel_cookie; | 
					
						
							| 
									
										
										
										
											2013-02-08 15:53:49 +01:00
										 |  |  | 	u8 next_af_subtype; | 
					
						
							|  |  |  | 	struct completion send_af_done; | 
					
						
							| 
									
										
										
										
											2013-02-08 15:54:02 +01:00
										 |  |  | 	struct afx_hdl afx_hdl; | 
					
						
							|  |  |  | 	u32 af_sent_channel; | 
					
						
							|  |  |  | 	unsigned long af_tx_sent_jiffies; | 
					
						
							|  |  |  | 	struct completion wait_next_af; | 
					
						
							|  |  |  | 	bool gon_req_action; | 
					
						
							|  |  |  | 	bool block_gon_req_tx; | 
					
						
							| 
									
										
										
										
											2013-02-08 15:53:36 +01:00
										 |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-02-08 15:53:52 +01:00
										 |  |  | s32 brcmf_p2p_attach(struct brcmf_cfg80211_info *cfg); | 
					
						
							| 
									
										
										
										
											2013-02-08 15:53:36 +01:00
										 |  |  | void brcmf_p2p_detach(struct brcmf_p2p_info *p2p); | 
					
						
							|  |  |  | struct wireless_dev *brcmf_p2p_add_vif(struct wiphy *wiphy, const char *name, | 
					
						
							|  |  |  | 				       enum nl80211_iftype type, u32 *flags, | 
					
						
							|  |  |  | 				       struct vif_params *params); | 
					
						
							|  |  |  | int brcmf_p2p_del_vif(struct wiphy *wiphy, struct wireless_dev *wdev); | 
					
						
							| 
									
										
										
										
											2013-02-08 15:53:44 +01:00
										 |  |  | int brcmf_p2p_ifchange(struct brcmf_cfg80211_info *cfg, | 
					
						
							|  |  |  | 		       enum brcmf_fil_p2p_if_types if_type); | 
					
						
							| 
									
										
										
										
											2013-02-08 15:53:36 +01:00
										 |  |  | int brcmf_p2p_start_device(struct wiphy *wiphy, struct wireless_dev *wdev); | 
					
						
							|  |  |  | void brcmf_p2p_stop_device(struct wiphy *wiphy, struct wireless_dev *wdev); | 
					
						
							|  |  |  | int brcmf_p2p_scan_prep(struct wiphy *wiphy, | 
					
						
							| 
									
										
										
										
											2013-02-08 15:53:42 +01:00
										 |  |  | 			struct cfg80211_scan_request *request, | 
					
						
							|  |  |  | 			struct brcmf_cfg80211_vif *vif); | 
					
						
							| 
									
										
										
										
											2013-02-08 15:53:38 +01:00
										 |  |  | int brcmf_p2p_remain_on_channel(struct wiphy *wiphy, struct wireless_dev *wdev, | 
					
						
							|  |  |  | 				struct ieee80211_channel *channel, | 
					
						
							|  |  |  | 				unsigned int duration, u64 *cookie); | 
					
						
							|  |  |  | int brcmf_p2p_notify_listen_complete(struct brcmf_if *ifp, | 
					
						
							|  |  |  | 				     const struct brcmf_event_msg *e, | 
					
						
							|  |  |  | 				     void *data); | 
					
						
							|  |  |  | void brcmf_p2p_cancel_remain_on_channel(struct brcmf_if *ifp); | 
					
						
							| 
									
										
										
										
											2013-02-08 15:53:48 +01:00
										 |  |  | int brcmf_p2p_notify_action_frame_rx(struct brcmf_if *ifp, | 
					
						
							|  |  |  | 				     const struct brcmf_event_msg *e, | 
					
						
							|  |  |  | 				     void *data); | 
					
						
							| 
									
										
										
										
											2013-02-08 15:53:49 +01:00
										 |  |  | int brcmf_p2p_notify_action_tx_complete(struct brcmf_if *ifp, | 
					
						
							|  |  |  | 					const struct brcmf_event_msg *e, | 
					
						
							|  |  |  | 					void *data); | 
					
						
							|  |  |  | bool brcmf_p2p_send_action_frame(struct brcmf_cfg80211_info *cfg, | 
					
						
							|  |  |  | 				 struct net_device *ndev, | 
					
						
							|  |  |  | 				 struct brcmf_fil_af_params_le *af_params); | 
					
						
							| 
									
										
										
										
											2013-02-08 15:54:02 +01:00
										 |  |  | bool brcmf_p2p_scan_finding_common_channel(struct brcmf_cfg80211_info *cfg, | 
					
						
							|  |  |  | 					   struct brcmf_bss_info_le *bi); | 
					
						
							|  |  |  | s32 brcmf_p2p_notify_rx_mgmt_p2p_probereq(struct brcmf_if *ifp, | 
					
						
							|  |  |  | 					  const struct brcmf_event_msg *e, | 
					
						
							|  |  |  | 					  void *data); | 
					
						
							| 
									
										
										
										
											2013-02-08 15:53:36 +01:00
										 |  |  | #endif /* WL_CFGP2P_H_ */
 |