1 /*
2  * Copyright (c) 2022-2023 Qualcomm Innovation Center, Inc. All rights reserved.
3  *
4  * Permission to use, copy, modify, and/or distribute this software for any
5  * purpose with or without fee is hereby granted, provided that the above
6  * copyright notice and this permission notice appear in all copies.
7  *
8  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
9  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
10  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
11  * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
12  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
13  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
14  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
15  */
16 
17 /**
18  * DOC: wifi_pos_public_struct.h
19  * This file declares public structures of wifi positioning component
20  */
21 #ifndef _WIFI_POS_PUBLIC_STRUCT_H_
22 #define _WIFI_POS_PUBLIC_STRUCT_H_
23 
24 /* Include files */
25 #include "qdf_types.h"
26 #include "qdf_status.h"
27 #include "qdf_trace.h"
28 #include <wlan_cmn.h>
29 
30 #define WLAN_MAX_11AZ_PEERS 16
31 
32 /**
33  * enum wifi_pos_pasn_peer_type  - PASN peer type
34  * @WLAN_WIFI_POS_PASN_UNSECURE_PEER: Unsecure ranging peer
35  * @WLAN_WIFI_POS_PASN_SECURE_PEER: Secure ranging peer
36  * @WLAN_WIFI_POS_PASN_PEER_TYPE_MAX: Max peer type
37  */
38 enum wifi_pos_pasn_peer_type {
39 	WLAN_WIFI_POS_PASN_UNSECURE_PEER,
40 	WLAN_WIFI_POS_PASN_SECURE_PEER,
41 	WLAN_WIFI_POS_PASN_PEER_TYPE_MAX,
42 };
43 
44 /**
45  * enum wifi_pos_pasn_peer_delete_actions  - Actions on receiving a peer
46  * delete event for PASN peer
47  * @WIFI_POS_PEER_DELETE_ACTION_ALREADY_DELETED: Peer is already deleted at
48  * target. Cleanup the host objmgr peer.
49  * @WIFI_POS_PEER_DELETE_ACTION_FLUSH_KEYS: Flush the derived keys for this
50  * peer at userspace.
51  */
52 enum wifi_pos_pasn_peer_delete_actions {
53 	WIFI_POS_PEER_DELETE_ACTION_ALREADY_DELETED = BIT(0),
54 	WIFI_POS_PEER_DELETE_ACTION_FLUSH_KEYS = BIT(1),
55 };
56 
57 #define WIFI_POS_IS_PEER_ALREADY_DELETED(flag) \
58 			((flag) & WIFI_POS_PEER_DELETE_ACTION_ALREADY_DELETED)
59 #define WIFI_POS_IS_FLUSH_KEYS_REQUIRED(flag) \
60 			((flag) & WIFI_POS_PEER_DELETE_ACTION_FLUSH_KEYS)
61 
62 #define CFG_RESPONDER_11AZ_NTB_SUPPORT 0x1
63 #define CFG_RESPONDER_11AZ_TB_SUPPORT 0x2
64 #define CFG_RESPONDER_11AZ_MAX_SUPPORT (CFG_RESPONDER_11AZ_NTB_SUPPORT | \
65 		CFG_RESPONDER_11AZ_TB_SUPPORT)
66 /**
67  * struct wlan_pasn_request  - PASN peer create request data
68  * @peer_mac: Peer mac address
69  * @peer_type: Peer type of enum wifi_pos_pasn_peer_type
70  * @self_mac: Self mac address to be used for frame exchange & key
71  * derivation
72  * @force_self_mac_usage: If this flag is true, the supplicant
73  * should use the provided self mac address
74  * @is_ltf_keyseed_required: Is set LTF keyseed required
75  * @control_flags: Control flags to indicate if its required to flush
76  * the keys
77  */
78 struct wlan_pasn_request {
79 	struct qdf_mac_addr peer_mac;
80 	enum wifi_pos_pasn_peer_type peer_type;
81 	struct qdf_mac_addr self_mac;
82 	bool force_self_mac_usage;
83 	bool is_ltf_keyseed_required;
84 	uint16_t control_flags;
85 };
86 
87 /**
88  * struct wifi_pos_11az_context  - 11az Security context
89  * @secure_peer_list: Mac address list of secure peers
90  * @num_secure_peers: Total number of secure peers
91  * @unsecure_peer_list: Mac address list of unsecure peers
92  * @num_unsecure_peers: Total number of unsecure peers
93  * @failed_peer_list: List of failed peers
94  * @num_failed_peers: Total number of failed peers
95  * @num_pending_peer_creation: Number of pending peer create commands for which
96  * peer create confirmation is pending.
97  */
98 struct wifi_pos_11az_context {
99 	struct wlan_pasn_request secure_peer_list[WLAN_MAX_11AZ_PEERS];
100 	uint8_t num_secure_peers;
101 	struct wlan_pasn_request unsecure_peer_list[WLAN_MAX_11AZ_PEERS];
102 	uint8_t num_unsecure_peers;
103 	struct qdf_mac_addr failed_peer_list[WLAN_MAX_11AZ_PEERS];
104 	uint8_t num_failed_peers;
105 	uint8_t num_pending_peer_creation;
106 };
107 
108 /**
109  * struct wifi_pos_vdev_priv_obj  - Wifi Pos module vdev private object
110  * @pasn_context: 11az security peers context.
111  * @num_pasn_peers: Total number of PASN peers
112  * @is_delete_all_pasn_peer_in_progress: Delete all the VDEV PASN peers in
113  * progress
114  */
115 struct wifi_pos_vdev_priv_obj {
116 	struct wifi_pos_11az_context pasn_context;
117 	uint8_t num_pasn_peers;
118 	bool is_delete_all_pasn_peer_in_progress;
119 };
120 
121 /**
122  * enum wlan_pasn_auth_status_code  - PASN auth status code
123  * @WLAN_PASN_AUTH_STATUS_SUCCESS: PASN auth is successful
124  * @WLAN_PASN_AUTH_STATUS_PASN_FAILED: PASN authentication failed
125  * @WLAN_PASN_AUTH_STATUS_PEER_CREATE_FAILED: PASN peer create confirm received
126  * with failure status.
127  * @WLAN_PASN_AUTH_STATUS_PEER_ALREADY_EXISTS: Peer already exists
128  * @WLAN_PASN_AUTH_STATUS_HOST_INTERNAL_ERROR: WLAN driver internal error
129  */
130 enum wlan_pasn_auth_status_code {
131 	WLAN_PASN_AUTH_STATUS_SUCCESS = 0,
132 	WLAN_PASN_AUTH_STATUS_PASN_FAILED = 1,
133 	WLAN_PASN_AUTH_STATUS_PEER_CREATE_FAILED = 2,
134 	WLAN_PASN_AUTH_STATUS_PEER_ALREADY_EXISTS = 3,
135 	WLAN_PASN_AUTH_STATUS_HOST_INTERNAL_ERROR = 4,
136 };
137 
138 /**
139  * struct wlan_pasn_auth_status_peer_info - PASN authentication status peer
140  * info
141  * @peer_mac: Peer mac address
142  * @self_mac: Self mac address
143  * @status: PASN auth status code
144  */
145 struct wlan_pasn_auth_status_peer_info {
146 	struct qdf_mac_addr peer_mac;
147 	struct qdf_mac_addr self_mac;
148 	enum wlan_pasn_auth_status_code status;
149 };
150 
151 /**
152  * struct wlan_pasn_auth_status  - PASN authentication status
153  * @vdev_id:  vdev_id
154  * @num_peers: Number of peers for which auth status is to be sent
155  * @auth_status: Auth status details
156  */
157 struct wlan_pasn_auth_status {
158 	uint8_t vdev_id;
159 	uint8_t num_peers;
160 	struct wlan_pasn_auth_status_peer_info auth_status[WLAN_MAX_11AZ_PEERS];
161 };
162 
163 /**
164  * struct wlan_wifi_pos_peer_priv_obj - WLAN wifi pos peer private object
165  * @is_ltf_keyseed_required: Is LTF keyseed required for peer
166  */
167 struct wlan_wifi_pos_peer_priv_obj {
168 	bool is_ltf_keyseed_required;
169 };
170 #endif /* _WIFI_POS_PUBLIC_STRUCT_H_ */
171