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