1  /*
2   * Copyright (c) 2017-2020 The Linux Foundation. All rights reserved.
3   * Copyright (c) 2021-2024 Qualcomm Innovation Center, Inc. All rights reserved.
4   *
5   * Permission to use, copy, modify, and/or distribute this software for
6   * any purpose with or without fee is hereby granted, provided that the
7   * above copyright notice and this permission notice appear in all
8   * copies.
9   *
10   * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
11   * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
12   * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
13   * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
14   * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
15   * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
16   * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
17   * PERFORMANCE OF THIS SOFTWARE.
18   */
19  
20  /**
21   * DOC: Public APIs for crypto service
22   */
23  #ifndef _WLAN_CRYPTO_GLOBAL_API_H_
24  #define _WLAN_CRYPTO_GLOBAL_API_H_
25  
26  #include "wlan_crypto_global_def.h"
27  #include <qdf_crypto.h>
28  
29  /**
30   * is_valid_keyix() - is key index valid
31   * @keyix: Key index
32   *
33   * Return: true or false
34   */
35  bool is_valid_keyix(uint16_t keyix);
36  
37  /**
38   * is_igtk() - is given key index for IGTK
39   * @keyix: Key index
40   *
41   * Return: true or false
42   */
43  bool is_igtk(uint16_t keyix);
44  
45  /**
46   * is_bigtk() - Is given key index for BIGTK
47   * @keyix: Key index
48   *
49   * Return: true or false
50   */
51  bool is_bigtk(uint16_t keyix);
52  
53  /**
54   * is_gtk() - Is given key index for GTK
55   * @keyix: Key index
56   *
57   * Return: true or false
58   */
59  bool is_gtk(uint16_t keyix);
60  
61  /**
62   * wlan_crypto_set_vdev_param() - called by ucfg to set crypto param
63   * @vdev: vdev
64   * @param: param to be set.
65   * @value: value
66   *
67   * This function gets called from ucfg to set param
68   *
69   * Return: QDF_STATUS_SUCCESS - in case of success
70   */
71  QDF_STATUS wlan_crypto_set_vdev_param(struct wlan_objmgr_vdev *vdev,
72  					wlan_crypto_param_type param,
73  					uint32_t value);
74  
75  /**
76   * wlan_crypto_set_peer_param() - called by ucfg to set crypto param
77   *
78   * @peer: peer
79   * @param: param to be set.
80   * @value: value
81   *
82   * This function gets called from ucfg to set param
83   *
84   * Return: QDF_STATUS_SUCCESS - in case of success
85   */
86  QDF_STATUS wlan_crypto_set_peer_param(struct wlan_objmgr_peer *peer,
87  						wlan_crypto_param_type param,
88  						uint32_t value);
89  
90  /**
91   * wlan_crypto_get_param() - called by ucfg to get crypto param
92   * @vdev: vdev
93   * @param: param to be get.
94   *
95   * This function gets called from ucfg to get param
96   *
97   * Return: value or -1 for failure
98   */
99  int32_t wlan_crypto_get_param(struct wlan_objmgr_vdev *vdev,
100  					wlan_crypto_param_type param);
101  
102  /**
103   * wlan_crypto_get_peer_param() - called by ucfg to get crypto peer param
104   * @peer: peer
105   * @param: param to be get.
106   *
107   * This function gets called from ucfg to get peer param
108   *
109   * Return: value or -1 for failure
110   */
111  int32_t wlan_crypto_get_peer_param(struct wlan_objmgr_peer *peer,
112  					wlan_crypto_param_type param);
113  
114  /**
115   * wlan_crypto_is_htallowed() - called by ucfg to check if HT rates is allowed
116   * @vdev: Vdev
117   * @peer: Peer
118   *
119   * This function is called to check if HT rates is allowed
120   *
121   * Return: 0 for not allowed and +ve for allowed
122   */
123  uint8_t wlan_crypto_is_htallowed(struct wlan_objmgr_vdev *vdev,
124  				 struct wlan_objmgr_peer *peer);
125  
126  /**
127   * wlan_crypto_setkey() - called by ucfg to setkey
128   * @vdev: vdev
129   * @req_key: req_key with cipher type, key macaddress
130   *
131   * This function gets called from ucfg to sey key
132   *
133   * Return: QDF_STATUS_SUCCESS - in case of success
134   */
135  QDF_STATUS wlan_crypto_setkey(struct wlan_objmgr_vdev *vdev,
136  					struct wlan_crypto_req_key *req_key);
137  
138  /**
139   * wlan_crypto_getkey() - called by ucfg to get key
140   * @vdev: vdev
141   * @req_key: key value will be copied in this req_key
142   * @mac_addr: mac address of the peer for unicast key
143   *            or broadcast address if group key is requested.
144   *
145   * This function gets called from ucfg to get key
146   *
147   * Return: QDF_STATUS_SUCCESS - in case of success
148   */
149  QDF_STATUS wlan_crypto_getkey(struct wlan_objmgr_vdev *vdev,
150  					struct wlan_crypto_req_key *req_key,
151  					uint8_t *mac_addr);
152  
153  /**
154   * wlan_crypto_delkey() - called by ucfg to delete key
155   * @vdev: vdev
156   * @macaddr: mac address of the peer for unicast key
157   *           or broadcast address if group key is deleted.
158   * @key_idx: key index to be deleted
159   *
160   * This function gets called from ucfg to delete key
161   *
162   * Return: QDF_STATUS_SUCCESS - in case of success
163   */
164  QDF_STATUS wlan_crypto_delkey(struct wlan_objmgr_vdev *vdev,
165  					uint8_t *macaddr,
166  					uint8_t key_idx);
167  
168  /**
169   * wlan_crypto_default_key() - called by ucfg to set default tx key
170   * @vdev: vdev
171   * @macaddr: mac address of the peer for unicast key
172   *           or broadcast address if group key need to made default.
173   * @key_idx: key index to be made as default key
174   * @unicast: is key was unicast or group key.
175   *
176   * This function gets called from ucfg to set default key
177   *
178   * Return: QDF_STATUS_SUCCESS - in case of success
179   */
180  QDF_STATUS wlan_crypto_default_key(struct wlan_objmgr_vdev *vdev,
181  					uint8_t *macaddr,
182  					uint8_t key_idx,
183  					bool unicast);
184  
185  /**
186   * wlan_crypto_encap() - called by mgmt for encap the frame based on cipher
187   * @vdev: vdev
188   * @wbuf: wbuf
189   * @macaddr: macaddr
190   * @encapdone: is encapdone already or not.
191   *
192   * This function gets called from mgmt txrx to encap frame.
193   *
194   * Return: QDF_STATUS_SUCCESS - in case of success
195   */
196  QDF_STATUS wlan_crypto_encap(struct wlan_objmgr_vdev *vdev,
197  					qdf_nbuf_t wbuf,
198  					uint8_t *macaddr,
199  					uint8_t encapdone);
200  
201  /**
202   * wlan_crypto_decap() - called by mgmt for decap the frame based on cipher
203   * @vdev: vdev
204   * @wbuf: wbuf
205   * @macaddr: macaddr
206   * @tid: tid of the packet.
207   *
208   * This function gets called from mgmt txrx to decap frame.
209   *
210   * Return: QDF_STATUS_SUCCESS - in case of success
211   */
212  QDF_STATUS wlan_crypto_decap(struct wlan_objmgr_vdev *vdev,
213  					qdf_nbuf_t wbuf,
214  					uint8_t *macaddr,
215  					uint8_t tid);
216  
217  /**
218   * wlan_crypto_enmic() - called by mgmt for adding mic in frame based on cipher
219   * @vdev: vdev
220   * @wbuf: wbuf
221   * @macaddr: macaddr
222   * @encapdone: is encapdone already or not.
223   *
224   * This function gets called from mgmt txrx to adding mic to the frame.
225   *
226   * Return: QDF_STATUS_SUCCESS - in case of success
227   */
228  QDF_STATUS wlan_crypto_enmic(struct wlan_objmgr_vdev *vdev,
229  					qdf_nbuf_t wbuf,
230  					uint8_t *macaddr,
231  					uint8_t encapdone);
232  
233  /**
234   * wlan_crypto_demic() - called by mgmt for remove and check mic for
235   *                                    the frame based on cipher
236   * @vdev: vdev
237   * @wbuf: wbuf
238   * @macaddr: macaddr
239   * @tid: tid of the frame
240   * @keyid: keyid in the received frame
241   *
242   * This function gets called from mgmt txrx to decap frame.
243   *
244   * Return: QDF_STATUS_SUCCESS - in case of success
245   */
246  QDF_STATUS wlan_crypto_demic(struct wlan_objmgr_vdev *vdev,
247  			     qdf_nbuf_t wbuf,
248  			     uint8_t *macaddr,
249  			     uint8_t tid,
250  			     uint8_t keyid);
251  
252  /**
253   * wlan_crypto_vdev_is_pmf_enabled() - called to check is pmf enabled in vdev
254   * @vdev: vdev
255   *
256   * This function gets called to check is pmf enabled or not in vdev.
257   *
258   * Return: true or false
259   */
260  bool wlan_crypto_vdev_is_pmf_enabled(struct wlan_objmgr_vdev *vdev);
261  
262  /**
263   * wlan_crypto_vdev_is_pmf_required() - called to check is pmf required in vdev
264   * @vdev: vdev
265   *
266   * This function gets called to check is pmf required or not in vdev.
267   *
268   * Return: true or false
269   */
270  bool wlan_crypto_vdev_is_pmf_required(struct wlan_objmgr_vdev *vdev);
271  
272  /**
273   * wlan_crypto_is_pmf_enabled() - called by mgmt txrx to check is pmf enabled
274   * @vdev: vdev
275   * @peer: peer
276   *
277   * This function gets called by mgmt txrx to check is pmf enabled or not.
278   *
279   * Return: true or false
280   */
281  bool wlan_crypto_is_pmf_enabled(struct wlan_objmgr_vdev *vdev,
282  					struct wlan_objmgr_peer *peer);
283  
284  /**
285   * wlan_crypto_is_key_valid() - called by mgmt txrx to check if key is valid
286   * @vdev: vdev
287   * @peer: peer
288   * @keyidx : key index
289   *
290   * This function gets called by mgmt txrx to check if key is valid
291   *
292   * Return: true or false
293   */
294  bool wlan_crypto_is_key_valid(struct wlan_objmgr_vdev *vdev,
295  			      struct wlan_objmgr_peer *peer,
296  			      uint16_t keyidx);
297  
298  /**
299   * wlan_crypto_add_mmie() - called by mgmt txrx to add mmie in frame
300   * @vdev: vdev
301   * @frm:  frame starting pointer
302   * @len: length of the frame
303   *
304   * This function gets called by mgmt txrx to add mmie in frame
305   *
306   * Return: end of frame or NULL in case failure
307   */
308  uint8_t *wlan_crypto_add_mmie(struct wlan_objmgr_vdev *vdev,
309  					uint8_t *frm,
310  					uint32_t len);
311  
312  /**
313   * wlan_crypto_is_mmie_valid() - called by mgmt txrx to check mmie of the frame
314   * @vdev: vdev
315   * @frm:  frame starting pointer
316   * @efrm: end of frame pointer
317   *
318   * This function gets called by mgmt txrx to check mmie of the frame
319   *
320   * Return: true or false
321   */
322  bool wlan_crypto_is_mmie_valid(struct wlan_objmgr_vdev *vdev,
323  					uint8_t *frm,
324  					uint8_t *efrm);
325  
326  /**
327   * wlan_crypto_wpaie_check() - called by mlme to check the wpaie
328   * @crypto_params: crypto params
329   * @frm: ie buffer
330   *
331   * This function gets called by mlme to check the contents of wpa is
332   * matching with given crypto params
333   *
334   * Return: QDF_STATUS_SUCCESS - in case of success
335   */
336  QDF_STATUS wlan_crypto_wpaie_check(struct wlan_crypto_params *crypto_params,
337  				   const uint8_t *frm);
338  
339  /**
340   * wlan_crypto_rsnie_check() - called by mlme to check the rsnie
341   * @crypto_params: crypto params
342   * @frm: ie buffer
343   *
344   * This function gets called by mlme to check the contents of rsn is
345   * matching with given crypto params
346   *
347   * Return: QDF_STATUS_SUCCESS - in case of success
348   */
349  QDF_STATUS wlan_crypto_rsnie_check(struct wlan_crypto_params *crypto_params,
350  				   const uint8_t *frm);
351  
352  /**
353   * wlan_crypto_rsnxie_check() - called by mlme to parse rsnx capabilities
354   * @crypto_params: crypto params
355   * @rsnxe: rsnx ie buffer
356   *
357   * This function gets called by mlme to extract rsnx capabilities
358   *
359   * Return: None
360   */
361  void wlan_crypto_rsnxie_check(struct wlan_crypto_params *crypto_params,
362  			      const uint8_t *rsnxe);
363  
364  /**
365   * wlan_crypto_build_wpaie() - called by mlme to build wpaie
366   * @vdev: vdev
367   * @iebuf: ie buffer
368   *
369   * This function gets called by mlme to build wpaie from given vdev
370   *
371   * Return: end of buffer
372   */
373  uint8_t *wlan_crypto_build_wpaie(struct wlan_objmgr_vdev *vdev,
374  					uint8_t *iebuf);
375  
376  /**
377   * wlan_crypto_build_rsnie_with_pmksa() - called by mlme to build rsnie
378   * @vdev: vdev
379   * @iebuf: ie buffer
380   * @pmksa: pmksa struct
381   *
382   * This function gets called by mlme to build rsnie from given vdev
383   *
384   * Return: end of buffer
385   */
386  uint8_t *wlan_crypto_build_rsnie_with_pmksa(struct wlan_objmgr_vdev *vdev,
387  					    uint8_t *iebuf,
388  					    struct wlan_crypto_pmksa *pmksa);
389  
390  /**
391   * wlan_crypto_build_rsnie() - called by mlme to build rsnie
392   * @vdev: vdev
393   * @iebuf: ie buffer
394   * @bssid: bssid mac address to add pmkid in rsnie
395   *
396   * This function gets called by mlme to build rsnie from given vdev
397   *
398   * Return: end of buffer
399   */
400  uint8_t *wlan_crypto_build_rsnie(struct wlan_objmgr_vdev *vdev,
401  					uint8_t *iebuf,
402  					struct qdf_mac_addr *bssid);
403  
404  /**
405   * wlan_crypto_wapiie_check() - called by mlme to check the wapiie
406   * @crypto_params: crypto params
407   * @frm: ie buffer
408   *
409   * This function gets called by mlme to check the contents of wapi is
410   * matching with given crypto params
411   *
412   * Return: QDF_STATUS_SUCCESS - in case of success
413   */
414  QDF_STATUS wlan_crypto_wapiie_check(struct wlan_crypto_params *crypto_params,
415  				    const uint8_t *frm);
416  
417  /**
418   * wlan_crypto_build_wapiie() - called by mlme to build wapi ie
419   * @vdev: vdev
420   * @iebuf: ie buffer
421   *
422   * This function gets called by mlme to build wapi ie from given vdev
423   *
424   * Return: end of buffer
425   */
426  uint8_t *wlan_crypto_build_wapiie(struct wlan_objmgr_vdev *vdev,
427  					uint8_t *iebuf);
428  
429  /**
430   * wlan_crypto_rsn_info() - check is given params matching with vdev params.
431   * @vdev: vdev
432   * @crypto_params: crypto params
433   *
434   * This function gets called by mlme to check is given params matching with
435   * vdev params.
436   *
437   * Return: true success or false for failure.
438   */
439  bool wlan_crypto_rsn_info(struct wlan_objmgr_vdev *vdev,
440  				struct wlan_crypto_params *crypto_params);
441  
442  /**
443   * wlan_crypto_pn_check() - called by data patch for PN check
444   * @vdev: vdev
445   * @wbuf: wbuf
446   *
447   * This function gets called by data patch for PN check
448   *
449   * Return: QDF_STATUS
450   */
451  QDF_STATUS wlan_crypto_pn_check(struct wlan_objmgr_vdev *vdev,
452  					qdf_nbuf_t wbuf);
453  
454  /**
455   * wlan_crypto_vdev_get_crypto_params() - called by mlme to get crypto params
456   * @vdev:vdev
457   *
458   * This function gets called by mlme to get crypto params
459   *
460   * Return: wlan_crypto_params or NULL in case of failure
461   */
462  struct wlan_crypto_params *wlan_crypto_vdev_get_crypto_params(
463  						struct wlan_objmgr_vdev *vdev);
464  
465  /**
466   * wlan_crypto_peer_get_crypto_params() - called by mlme to get crypto params
467   * @peer:peer
468   *
469   * This function gets called by mlme to get crypto params
470   *
471   * Return: wlan_crypto_params or NULL in case of failure
472   */
473  struct wlan_crypto_params *wlan_crypto_peer_get_crypto_params(
474  						struct wlan_objmgr_peer *peer);
475  
476  /**
477   * wlan_crypto_set_peer_wep_keys() - set wep keys into peer entries
478   * @vdev:vdev
479   * @peer:peer
480   *
481   * This function gets called by mlme, when auth frame is received.
482   * this helps in setting wep keys into peer data structure.
483   *
484   * Return: QDF_STATUS
485   */
486  QDF_STATUS wlan_crypto_set_peer_wep_keys(struct wlan_objmgr_vdev *vdev,
487  					struct wlan_objmgr_peer *peer);
488  
489  /**
490   * wlan_crypto_register_crypto_rx_ops() - set crypto_rx_ops
491   * @crypto_rx_ops: crypto_rx_ops
492   *
493   * This function gets called by object manager to register crypto rx ops.
494   *
495   * Return: QDF_STATUS
496   */
497  QDF_STATUS wlan_crypto_register_crypto_rx_ops(
498  			struct wlan_lmac_if_crypto_rx_ops *crypto_rx_ops);
499  
500  /**
501   * wlan_crypto_get_crypto_rx_ops() - get crypto_rx_ops from psoc
502   * @psoc: psoc
503   *
504   * This function gets called by umac to get the crypto_rx_ops
505   *
506   * Return: crypto_rx_ops
507   */
508  struct wlan_lmac_if_crypto_rx_ops *wlan_crypto_get_crypto_rx_ops(
509  			struct wlan_objmgr_psoc *psoc);
510  
511  /**
512   * wlan_crypto_vdev_has_auth_mode() - check authmode for vdev
513   * @vdev: vdev
514   * @authmode: authmode value to be checked
515   *
516   * This function checks if authmode passed is set in vdev or not
517   *
518   * Return: true or false
519   */
520  bool wlan_crypto_vdev_has_auth_mode(struct wlan_objmgr_vdev *vdev,
521  					wlan_crypto_auth_mode authmode);
522  
523  /**
524   * wlan_crypto_peer_has_auth_mode() - check authmode for peer
525   * @peer: peer
526   * @authvalue: authvalue to be checked
527   *
528   * This function check is authvalue passed is set in peer or not
529   *
530   * Return: true or false
531   */
532  bool wlan_crypto_peer_has_auth_mode(struct wlan_objmgr_peer *peer,
533  					wlan_crypto_auth_mode authvalue);
534  
535  /**
536   * wlan_crypto_vdev_has_ucastcipher() - check ucastcipher for vdev
537   * @vdev: vdev
538   * @ucastcipher: ucastcipher to be checked
539   *
540   * This function check is ucastcipher passed is set in vdev or not
541   *
542   * Return: true or false
543   */
544  bool wlan_crypto_vdev_has_ucastcipher(struct wlan_objmgr_vdev *vdev,
545  					wlan_crypto_cipher_type ucastcipher);
546  
547  /**
548   * wlan_crypto_peer_has_ucastcipher() - check ucastcipher for peer
549   * @peer: peer
550   * @ucastcipher: ucastcipher to be checked
551   *
552   * This function check is ucastcipher passed is set in peer or not
553   *
554   * Return: true or false
555   */
556  bool wlan_crypto_peer_has_ucastcipher(struct wlan_objmgr_peer *peer,
557  					wlan_crypto_cipher_type ucastcipher);
558  
559  
560  /**
561   * wlan_crypto_vdev_has_mcastcipher() - check mcastcipher for vdev
562   * @vdev: vdev
563   * @mcastcipher: mcastcipher to be checked
564   *
565   * This function check is mcastcipher passed is set in vdev or not
566   *
567   * Return: true or false
568   */
569  bool wlan_crypto_vdev_has_mcastcipher(struct wlan_objmgr_vdev *vdev,
570  					wlan_crypto_cipher_type mcastcipher);
571  
572  /**
573   * wlan_crypto_peer_has_mcastcipher() - check mcastcipher for peer
574   * @peer: peer
575   * @mcastcipher: mcastcipher to be checked
576   *
577   * This function check is mcastcipher passed is set in peer or not
578   *
579   * Return: true or false
580   */
581  bool wlan_crypto_peer_has_mcastcipher(struct wlan_objmgr_peer *peer,
582  					wlan_crypto_cipher_type mcastcipher);
583  
584  /**
585   * wlan_crypto_vdev_has_mgmtcipher() - check mgmtcipher for vdev
586   * @vdev: vdev
587   * @mgmtcipher: mgmtcipher to be checked
588   *
589   * This function checks any one of mgmtciphers are supported by vdev or not.
590   *
591   * Return: true or false
592   */
593  bool wlan_crypto_vdev_has_mgmtcipher(struct wlan_objmgr_vdev *vdev,
594  				     uint32_t mgmtcipher);
595  
596  /**
597   * wlan_crypto_peer_has_mgmtcipher() - check mgmtcipher for peer
598   * @peer: peer
599   * @mgmtcipher: mgmtcipher to be checked
600   *
601   * This function checks any one of mgmtciphers are supported by peer or not.
602   *
603   * Return: true or false
604   */
605  bool wlan_crypto_peer_has_mgmtcipher(struct wlan_objmgr_peer *peer,
606  				     uint32_t mgmtcipher);
607  
608  /**
609   * wlan_crypto_get_key_type() - get keytype
610   * @key: key
611   *
612   * This function gets keytype from key
613   *
614   * Return: keytype
615   */
616  wlan_crypto_cipher_type wlan_crypto_get_key_type(struct wlan_crypto_key *key);
617  
618  /**
619   * wlan_crypto_vdev_getkey() - get key from vdev
620   * @vdev: vdev
621   * @keyix: keyix
622   *
623   * This function gets key from vdev
624   *
625   * Return: key or NULL
626   */
627  struct wlan_crypto_key *wlan_crypto_vdev_getkey(struct wlan_objmgr_vdev *vdev,
628  						uint16_t keyix);
629  
630  /**
631   * wlan_crypto_peer_getkey() - get key from peer
632   * @peer: peer
633   * @keyix: keyix
634   *
635   * This function gets key from peer
636   *
637   * Return: key or NULL
638   */
639  struct wlan_crypto_key *wlan_crypto_peer_getkey(struct wlan_objmgr_peer *peer,
640  						uint16_t keyix);
641  
642  /**
643   * wlan_crypto_get_peer_fils_aead() - Get peer fils aead set flag
644   * @peer: Peer object
645   *
646   * This function returns the peer fils aead set flag value.
647   *
648   * Return: 1 for enabled, 0 for disabled
649   */
650  uint8_t wlan_crypto_get_peer_fils_aead(struct wlan_objmgr_peer *peer);
651  
652  /**
653   * wlan_crypto_set_peer_fils_aead() - Set peer fils aead set flag
654   * @peer: Peer object
655   * @value: Value to set the flag
656   *
657   * This function set the peer fils aead set flag once FILS AUTH received.
658   *
659   * Return: None
660   */
661  void wlan_crypto_set_peer_fils_aead(
662  			struct wlan_objmgr_peer *peer, uint8_t value);
663  
664  /**
665   * wlan_crypto_get_key_header() - get header length
666   * @key: key
667   *
668   * This function gets header length based on keytype
669   *
670   * Return: header length
671   */
672  uint8_t wlan_crypto_get_key_header(struct wlan_crypto_key *key);
673  
674  /**
675   * wlan_crypto_get_key_trailer() - get cipher trailer length
676   * @key: key
677   *
678   * This function gets cipher trailer length based on keytype
679   *
680   * Return: cipher trailer length
681   */
682  uint8_t wlan_crypto_get_key_trailer(struct wlan_crypto_key *key);
683  
684  /**
685   * wlan_crypto_get_key_miclen() - get cipher miclen length
686   * @key: key
687   *
688   * This function gets cipher miclen length based on keytype
689   *
690   * Return: cipher miclen length
691   */
692  uint8_t wlan_crypto_get_key_miclen(struct wlan_crypto_key *key);
693  
694  /**
695   * wlan_crypto_get_keyid() - get keyid from frame
696   * @data: frame
697   * @hdrlen: 802.11 header length
698   *
699   * This function parse frame and returns keyid
700   *
701   * Return: keyid
702   */
703  uint16_t wlan_crypto_get_keyid(uint8_t *data, int hdrlen);
704  
705  /**
706   * wlan_crypto_restore_keys() - restore crypto keys in hw keycache
707   * @vdev: vdev
708   *
709   * This function restores keys in hw keycache
710   *
711   * Return: void
712   */
713  void wlan_crypto_restore_keys(struct wlan_objmgr_vdev *vdev);
714  
715  /**
716   * wlan_crypto_check_rsn_match() - called by ucfg to check for RSN match
717   * @psoc: psoc pointer
718   * @vdev_id: vdev id
719   * @ie_ptr: pointer to IEs
720   * @ie_len: IE length
721   * @peer_crypto_params: return peer crypto parameters
722   *
723   * This function gets called from ucfg to check RSN match.
724   *
725   * Return: true or false
726   */
727  bool wlan_crypto_check_rsn_match(struct wlan_objmgr_psoc *psoc,
728  				 uint8_t vdev_id, uint8_t *ie_ptr,
729  				 uint16_t ie_len, struct wlan_crypto_params *
730  				 peer_crypto_params);
731  
732  /**
733   * wlan_crypto_check_wpa_match() - called by ucfg to check for WPA match
734   * @psoc: psoc pointer
735   * @vdev_id: vdev id
736   * @ie_ptr: pointer to IEs
737   * @ie_len: IE length
738   * @peer_crypto_params: return peer crypto parameters
739   *
740   * This function gets called from ucfg to check WPA match.
741   *
742   * Return: true or false
743   */
744  bool wlan_crypto_check_wpa_match(struct wlan_objmgr_psoc *psoc,
745  				 uint8_t vdev_id, uint8_t *ie_ptr,
746  				 uint16_t ie_len, struct wlan_crypto_params *
747  				 peer_crypto_params);
748  
749  /**
750   * wlan_crypto_parse_rsnxe_ie() - parse RSNXE IE
751   * @rsnxe_ie: RSNXE IE pointer
752   * @cap_len: pointer to hold len of ext capability
753   *
754   * Return: pointer to RSNXE capability or NULL
755   */
756  const uint8_t *
757  wlan_crypto_parse_rsnxe_ie(const uint8_t *rsnxe_ie, uint8_t *cap_len);
758  
759  /**
760   * wlan_get_crypto_params_from_wapi_ie() - Function to get crypto params
761   * from wapi ie
762   * @crypto_params: return crypto parameters
763   * @ie_ptr: pointer to IEs
764   * @ie_len: IE length
765   *
766   * This function is used to get the crypto parameters from wapi ie
767   *
768   * Context: Any context.
769   * Return: QDF_STATUS
770   */
771  #ifdef FEATURE_WLAN_WAPI
772  QDF_STATUS
773  wlan_get_crypto_params_from_wapi_ie(struct wlan_crypto_params *crypto_params,
774  				    const uint8_t *ie_ptr, uint16_t ie_len);
775  
776  #else
777  static inline QDF_STATUS
wlan_get_crypto_params_from_wapi_ie(struct wlan_crypto_params * crypto_params,const uint8_t * ie_ptr,uint16_t ie_len)778  wlan_get_crypto_params_from_wapi_ie(struct wlan_crypto_params *crypto_params,
779  				    const uint8_t *ie_ptr, uint16_t ie_len)
780  {
781  	return QDF_STATUS_E_NOSUPPORT;
782  }
783  #endif
784  
785  /**
786   * wlan_get_crypto_params_from_wpa_ie() - Function to get crypto params
787   * from wpa ie
788   * @crypto_params: return crypto parameters
789   * @ie_ptr: pointer to IEs
790   * @ie_len: IE length
791   *
792   * This function is used to get the crypto parameters from wpa ie
793   *
794   * Context: Any context.
795   * Return: QDF_STATUS
796   */
797  QDF_STATUS
798  wlan_get_crypto_params_from_wpa_ie(struct wlan_crypto_params *crypto_params,
799  				   const uint8_t *ie_ptr, uint16_t ie_len);
800  
801  /**
802   * wlan_get_crypto_params_from_rsn_ie() - Function to get crypto params
803   * from rsn ie
804   * @crypto_params: return crypto parameters
805   * @ie_ptr: pointer to IEs
806   * @ie_len: IE length
807   *
808   * This function is used to get the crypto parameters from rsn ie
809   *
810   * Context: Any context.
811   * Return: QDF_STATUS
812   */
813  QDF_STATUS
814  wlan_get_crypto_params_from_rsn_ie(struct wlan_crypto_params *crypto_params,
815  				   const uint8_t *ie_ptr, uint16_t ie_len);
816  
817  /**
818   * wlan_set_vdev_crypto_prarams_from_ie() - Sets vdev crypto params from IE info
819   * @vdev: vdev pointer
820   * @ie_ptr: pointer to IE
821   * @ie_len: IE length
822   *
823   * This function gets called from ucfg to set crypto params from IE data.
824   *
825   * Return: QDF_STATUS_SUCCESS or error code
826   */
827  QDF_STATUS wlan_set_vdev_crypto_prarams_from_ie(struct wlan_objmgr_vdev *vdev,
828  						uint8_t *ie_ptr,
829  						uint16_t ie_len);
830  #ifdef WLAN_CRYPTO_GCM_OS_DERIVATIVE
wlan_crypto_aes_gmac(const uint8_t * key,size_t key_len,uint8_t * iv,size_t iv_len,const uint8_t * aad,size_t aad_len,uint8_t * tag)831  static inline int wlan_crypto_aes_gmac(const uint8_t *key, size_t key_len,
832  				       uint8_t *iv, size_t iv_len,
833  				       const uint8_t *aad, size_t aad_len,
834  				       uint8_t *tag)
835  {
836  	return qdf_crypto_aes_gmac(key, key_len, iv, aad,
837  				   aad + AAD_LEN,
838  				   aad_len - AAD_LEN -
839  				   IEEE80211_MMIE_GMAC_MICLEN,
840  				   tag);
841  }
842  #endif
843  #ifdef WLAN_CRYPTO_OMAC1_OS_DERIVATIVE
omac1_aes_128(const uint8_t * key,const uint8_t * data,size_t data_len,uint8_t * mac)844  static inline int omac1_aes_128(const uint8_t *key, const uint8_t *data,
845  				size_t data_len, uint8_t *mac)
846  {
847  	return qdf_crypto_aes_128_cmac(key, data, data_len, mac);
848  }
849  
omac1_aes_256(const uint8_t * key,const uint8_t * data,size_t data_len,uint8_t * mac)850  static inline int omac1_aes_256(const uint8_t *key, const uint8_t *data,
851  				size_t data_len, uint8_t *mac)
852  {
853  	return 0;
854  }
855  #endif
856  
857  /**
858   * ucfg_crypto_set_key_req() - Set key request to UCFG
859   * @vdev: vdev object
860   * @req: key request information
861   * @key_type: indicates the type of key to be set, unicast or group key
862   *
863   * Return: None
864   */
865  QDF_STATUS ucfg_crypto_set_key_req(struct wlan_objmgr_vdev *vdev,
866  				   struct wlan_crypto_key *req,
867  				   enum wlan_crypto_key_type key_type);
868  
869  /**
870   * wlan_crypto_get_default_key_idx() - Get the default key index
871   * @vdev: vdev object
872   * @igtk: denotes if the request is for igtk key type or not
873   *
874   * Return: Index of the requested key
875   */
876  int8_t wlan_crypto_get_default_key_idx(struct wlan_objmgr_vdev *vdev,
877  				       bool igtk);
878  
879  /**
880   * wlan_crypto_get_cipher() - Get the cipher type for the vdev
881   * @vdev: vdev object
882   * @pairwise: denotes if the request is for pairwise cipher or not
883   * @key_index: Index of the key whose cipher type has to be returned
884   *
885   * Return: enum wlan_crypto_cipher_type
886   */
887  enum wlan_crypto_cipher_type
888  wlan_crypto_get_cipher(struct wlan_objmgr_vdev *vdev,
889  		       bool pairwise, uint8_t key_index);
890  
891  /**
892   * wlan_crypto_get_secure_akm_available() - Search the AKM bitmap to
893   * find the most secure AKM.
894   * @akm: Bitmap of available AKMs.
895   *
896   * Search in the decreasing order of AKM security and return the
897   * first matching AKM available in @akm bitmap.
898   *
899   * Return: enum wlan_crypto_key_mgmt
900   */
901  wlan_crypto_key_mgmt wlan_crypto_get_secure_akm_available(uint32_t akm);
902  #ifdef CRYPTO_SET_KEY_CONVERGED
903  /**
904   * wlan_crypto_update_set_key_peer() - Update the peer for set key
905   * @vdev: vdev object
906   * @pairwise: denotes if the request is for pairwise cipher or not
907   * @key_index: Index of the key whose peer has to be set
908   * @peer_mac: MAC address of the peer
909   *
910   * Return: None
911   */
912  void wlan_crypto_update_set_key_peer(struct wlan_objmgr_vdev *vdev,
913  				     bool pairwise, uint8_t key_index,
914  				     struct qdf_mac_addr *peer_mac);
915  
916  /**
917   * wlan_crypto_validate_key_params() - validates key parameters
918   * @cipher: cipher type
919   * @key_index: the index of the key
920   * @key_len: key length
921   * @seq_len: sequence counter length
922   *
923   * Return: QDF_STATUS
924   */
925  QDF_STATUS wlan_crypto_validate_key_params(enum wlan_crypto_cipher_type cipher,
926  					   uint8_t key_index, uint8_t key_len,
927  					   uint8_t seq_len);
928  /**
929   * wlan_crypto_save_ml_sta_key - Allocate memory for ml sta key
930   * @psoc: psoc handler
931   * @key_index: key index
932   * @crypto_key: crypto key
933   * @link_addr: link addr
934   * @link_id: link id
935   *
936   * Return: zero on success
937   */
938  QDF_STATUS
939  wlan_crypto_save_ml_sta_key(struct wlan_objmgr_psoc *psoc,
940  			    uint8_t key_index,
941  			    struct wlan_crypto_key *crypto_key,
942  			    struct qdf_mac_addr *link_addr, uint8_t link_id);
943  
944  /**
945   * wlan_crypto_save_key() - Allocate memory for storing key
946   * @vdev: vdev object
947   * @key_index: the index of the key that needs to be allocated
948   * @crypto_key: Pointer to crypto key
949   *
950   * Return: QDF_STATUS
951   */
952  QDF_STATUS wlan_crypto_save_key(struct wlan_objmgr_vdev *vdev,
953  				uint8_t key_index,
954  				struct wlan_crypto_key *crypto_key);
955  
956  /**
957   * wlan_crypto_get_ml_sta_link_key() - Get the stored key info
958   *						by link id
959   * @psoc: psoc handler
960   * @key_index: key index
961   * @link_addr: link address
962   * @link_id: link id
963   */
964  struct wlan_crypto_key *wlan_crypto_get_ml_sta_link_key(
965  				struct wlan_objmgr_psoc *psoc,
966  				uint8_t key_index,
967  				struct qdf_mac_addr *link_addr,
968  				uint8_t link_id);
969  /**
970   * wlan_crypto_get_key() - Get the stored key information
971   * @vdev: vdev object
972   * @key_index: the index of the key that needs to be retrieved
973   *
974   * Return: Key material
975   */
976  struct wlan_crypto_key *wlan_crypto_get_key(struct wlan_objmgr_vdev *vdev,
977  					    uint8_t key_index);
978  
979  /**
980   * wlan_crypto_set_key_req() - Set key request
981   * @vdev: vdev object
982   * @req: key request information
983   * @key_type: indicates the type of key to be set, unicast or group key
984   *
985   * Return: QDF status
986   */
987  QDF_STATUS wlan_crypto_set_key_req(struct wlan_objmgr_vdev *vdev,
988  				   struct wlan_crypto_key *req,
989  				   enum wlan_crypto_key_type key_type);
990  
991  /**
992   * wlan_crypto_free_key() - Free the given key
993   * @crypto_key: pointer to the key
994   *
995   * This function frees keys stored in vdev crypto object.
996   *
997   * Return: None
998   */
999  void wlan_crypto_free_key(struct wlan_crypto_keys *crypto_key);
1000  
1001  /**
1002   * wlan_crypto_free_vdev_key() - Free keys for vdev
1003   * @vdev: vdev object
1004   *
1005   * This function frees keys stored in vdev crypto object.
1006   *
1007   * Return: None
1008   */
1009  void wlan_crypto_free_vdev_key(struct wlan_objmgr_vdev *vdev);
1010  
1011  /**
1012   * wlan_crypto_reset_vdev_params() - Reset params for vdev
1013   * @vdev: vdev object
1014   *
1015   * This function reset params stored in vdev crypto object.
1016   *
1017   * Return: None
1018   */
1019  void wlan_crypto_reset_vdev_params(struct wlan_objmgr_vdev *vdev);
1020  #else
wlan_crypto_update_set_key_peer(struct wlan_objmgr_vdev * vdev,bool pairwise,uint8_t key_index,struct qdf_mac_addr * peer_mac)1021  static inline void wlan_crypto_update_set_key_peer(
1022  						struct wlan_objmgr_vdev *vdev,
1023  						bool pairwise,
1024  						uint8_t key_index,
1025  						struct qdf_mac_addr *peer_mac)
1026  {
1027  }
1028  
1029  static inline QDF_STATUS
wlan_crypto_save_key(struct wlan_objmgr_vdev * vdev,uint8_t key_index,struct wlan_crypto_key * crypto_key)1030  wlan_crypto_save_key(struct wlan_objmgr_vdev *vdev, uint8_t key_index,
1031  		     struct wlan_crypto_key *crypto_key)
1032  {
1033  	return QDF_STATUS_SUCCESS;
1034  }
1035  
1036  static inline struct wlan_crypto_key *
wlan_crypto_get_key(struct wlan_objmgr_vdev * vdev,uint8_t key_index)1037  wlan_crypto_get_key(struct wlan_objmgr_vdev *vdev, uint8_t key_index)
1038  {
1039  	return NULL;
1040  }
1041  
1042  static inline
wlan_crypto_set_key_req(struct wlan_objmgr_vdev * vdev,struct wlan_crypto_key * req,enum wlan_crypto_key_type key_type)1043  QDF_STATUS wlan_crypto_set_key_req(struct wlan_objmgr_vdev *vdev,
1044  				   struct wlan_crypto_key *req,
1045  				   enum wlan_crypto_key_type key_type)
1046  {
1047  	return QDF_STATUS_SUCCESS;
1048  }
1049  
wlan_crypto_free_vdev_key(struct wlan_objmgr_vdev * vdev)1050  static inline void wlan_crypto_free_vdev_key(struct wlan_objmgr_vdev *vdev)
1051  {
1052  }
1053  
wlan_crypto_reset_vdev_params(struct wlan_objmgr_vdev * vdev)1054  static inline void wlan_crypto_reset_vdev_params(struct wlan_objmgr_vdev *vdev)
1055  {
1056  }
1057  #endif /* CRYPTO_SET_KEY_CONVERGED */
1058  
1059  /**
1060   * wlan_crypto_vdev_set_param() - Send vdev set param to firmware.
1061   * @psoc: Pointer to PSOC object
1062   * @vdev_id: vdev id
1063   * @param_id: Param id
1064   * @param_value: Param value
1065   *
1066   * Return: QDF_STATUS
1067   */
1068  QDF_STATUS
1069  wlan_crypto_vdev_set_param(struct wlan_objmgr_psoc *psoc, uint32_t vdev_id,
1070  			   uint32_t param_id, uint32_t param_value);
1071  
1072  /**
1073   * wlan_crypto_get_peer_pmksa() - called to get pmksa based on pmksa parameter
1074   * @vdev: vdev
1075   * @pmksa: bssid
1076   *
1077   * This function is to get pmksa based on pmksa parameter
1078   *
1079   * Return: wlan_crypto_pmksa when match found else NULL.
1080   */
1081  struct wlan_crypto_pmksa *
1082  wlan_crypto_get_peer_pmksa(struct wlan_objmgr_vdev *vdev,
1083  			   struct wlan_crypto_pmksa *pmksa);
1084  
1085  /**
1086   * wlan_crypto_get_pmksa() - called to get pmksa of bssid passed.
1087   * @vdev: vdev
1088   * @bssid: bssid
1089   *
1090   * This function gets called from to get pmksa for the bssid.
1091   *
1092   * Return: wlan_crypto_pmksa when match found else NULL.
1093   */
1094  struct wlan_crypto_pmksa *
1095  wlan_crypto_get_pmksa(struct wlan_objmgr_vdev *vdev,
1096  		      struct qdf_mac_addr *bssid);
1097  
1098  /**
1099   * wlan_crypto_get_fils_pmksa() - Get the PMKSA for FILS
1100   * SSID, if the SSID and cache id matches
1101   * @vdev:     Pointer with VDEV object
1102   * @cache_id: Cache id
1103   * @ssid:     Pointer to ssid
1104   * @ssid_len: SSID length
1105   *
1106   * Return: PMKSA entry if the cache id and SSID matches
1107   */
1108  struct wlan_crypto_pmksa *
1109  wlan_crypto_get_fils_pmksa(struct wlan_objmgr_vdev *vdev,
1110  			   uint8_t *cache_id, uint8_t *ssid,
1111  			   uint8_t ssid_len);
1112  
1113  /**
1114   * wlan_crypto_pmksa_flush() - called to flush saved pmksa
1115   * @crypto_params: crypto_params
1116   *
1117   * This function flush saved pmksa from crypto params.
1118   *
1119   * Return: QDF_STATUS_SUCCESS - in case of success
1120   */
1121  QDF_STATUS wlan_crypto_pmksa_flush(struct wlan_crypto_params *crypto_params);
1122  
1123  /**
1124   * wlan_crypto_set_del_pmksa() - called by ucfg to set/delete PMKSA
1125   * @vdev: vdev
1126   * @pmksa: pmksa to be set/del.
1127   * @set: set(set=1) or del(set=0) pmksa from the list.
1128   *
1129   * This function gets called from ucfg to set or del pmksa.
1130   * when given pmksa is NULL and set is 0, it is for flush all entries.
1131   *
1132   * Return: QDF_STATUS_SUCCESS - in case of success
1133   */
1134  QDF_STATUS wlan_crypto_set_del_pmksa(struct wlan_objmgr_vdev *vdev,
1135  				     struct wlan_crypto_pmksa *pmksa,
1136  				     bool set);
1137  
1138  /**
1139   * wlan_crypto_update_pmk_cache_ft() - Updates the mobility domain information
1140   * for a BSSID in the PMKSA Cache table.
1141   * @vdev: vdev
1142   * @pmksa: pmksa to be updated.
1143   *
1144   * This function gets called from ucfg to update pmksa with mdid.
1145   * And flush the matching mdid entries.
1146   *
1147   * Return: QDF_STATUS_SUCCESS - in case of success
1148   */
1149  QDF_STATUS wlan_crypto_update_pmk_cache_ft(struct wlan_objmgr_vdev *vdev,
1150  					   struct wlan_crypto_pmksa *pmksa);
1151  
1152  #if defined(WLAN_SAE_SINGLE_PMK) && defined(WLAN_FEATURE_ROAM_OFFLOAD)
1153  /**
1154   * wlan_crypto_selective_clear_sae_single_pmk_entries() - Clear the PMK entries
1155   * for BSS which have the single PMK flag set other than the current connected
1156   * AP
1157   * @vdev:       Vdev
1158   * @conn_bssid: Connected bssid
1159   */
1160  void
1161  wlan_crypto_selective_clear_sae_single_pmk_entries(
1162  		struct wlan_objmgr_vdev *vdev, struct qdf_mac_addr *conn_bssid);
1163  
1164  /**
1165   * wlan_crypto_set_sae_single_pmk_bss_cap() - Set the peer SAE single pmk
1166   * feature supported status
1167   * @vdev: Vdev
1168   * @bssid: BSSID for which the flag is to be set
1169   * @single_pmk_capable_bss: Flag to indicate Sae single pmk supported BSSID or
1170   * not
1171   */
1172  void wlan_crypto_set_sae_single_pmk_bss_cap(struct wlan_objmgr_vdev *vdev,
1173  					    struct qdf_mac_addr *bssid,
1174  					    bool single_pmk_capable_bss);
1175  
1176  /**
1177   * wlan_crypto_set_sae_single_pmk_info() - Set the peer SAE single pmk info
1178   * @vdev: Vdev
1179   * @roam_sync_pmksa: pmk info for roamed AP
1180   */
1181  void
1182  wlan_crypto_set_sae_single_pmk_info(struct wlan_objmgr_vdev *vdev,
1183  				    struct wlan_crypto_pmksa *roam_sync_pmksa);
1184  
1185  #else
1186  static inline void
wlan_crypto_selective_clear_sae_single_pmk_entries(struct wlan_objmgr_vdev * vdev,struct qdf_mac_addr * conn_bssid)1187  wlan_crypto_selective_clear_sae_single_pmk_entries(
1188  		struct wlan_objmgr_vdev *vdev, struct qdf_mac_addr *conn_bssid)
1189  {
1190  }
1191  
1192  static inline
wlan_crypto_set_sae_single_pmk_bss_cap(struct wlan_objmgr_vdev * vdev,struct qdf_mac_addr * bssid,bool single_pmk_capable_bss)1193  void wlan_crypto_set_sae_single_pmk_bss_cap(struct wlan_objmgr_vdev *vdev,
1194  					    struct qdf_mac_addr *bssid,
1195  					    bool single_pmk_capable_bss)
1196  {
1197  }
1198  
1199  static inline void
wlan_crypto_set_sae_single_pmk_info(struct wlan_objmgr_vdev * vdev,struct wlan_crypto_pmksa * roam_sync_pmksa)1200  wlan_crypto_set_sae_single_pmk_info(struct wlan_objmgr_vdev *vdev,
1201  				    struct wlan_crypto_pmksa *roam_sync_pmksa)
1202  {
1203  }
1204  #endif
1205  
1206  #if defined(WIFI_POS_CONVERGED) && defined(WLAN_FEATURE_RTT_11AZ_SUPPORT)
1207  QDF_STATUS
1208  wlan_crypto_set_ltf_keyseed(struct wlan_objmgr_psoc *psoc,
1209  			    struct wlan_crypto_ltf_keyseed_data *data);
1210  #else
1211  static inline QDF_STATUS
wlan_crypto_set_ltf_keyseed(struct wlan_objmgr_psoc * psoc,struct wlan_crypto_ltf_keyseed_data * data)1212  wlan_crypto_set_ltf_keyseed(struct wlan_objmgr_psoc *psoc,
1213  			    struct wlan_crypto_ltf_keyseed_data *data)
1214  {
1215  	return QDF_STATUS_SUCCESS;
1216  }
1217  #endif
1218  
1219  #ifdef WLAN_FEATURE_FILS_SK
1220  /**
1221   * wlan_crypto_create_fils_rik() - This API create rik using rrk coming from
1222   * supplicant.
1223   * @rrk: input rrk
1224   * @rrk_len: rrk length
1225   * @rik: Created rik
1226   * @rik_len: rik length to be filled
1227   *
1228   * rIK = KDF (K, S), where
1229   * K = rRK and
1230   * S = rIK Label + "\0" + cryptosuite + length
1231   * The rIK Label is the 8-bit ASCII string:
1232   * Re-authentication Integrity Key@ietf.org
1233   *
1234   * Return: QDF_STATUS
1235   */
1236  QDF_STATUS wlan_crypto_create_fils_rik(uint8_t *rrk, uint8_t rrk_len,
1237  				       uint8_t *rik, uint32_t *rik_len);
1238  /**
1239   * wlan_crypto_aquire_lock() - Acquire the crypto lock before crypto set/get
1240   */
1241  void wlan_crypto_aquire_lock(void);
1242  
1243  /**
1244   * wlan_crypto_release_lock() - Release the crypto lock after crypto set/get
1245   */
1246  void wlan_crypto_release_lock(void);
1247  #endif /* WLAN_FEATURE_FILS_SK */
1248  
1249  /**
1250   * crypto_flush_entries - This API will flush crypto keys
1251   * @psoc: psoc handler
1252   *
1253   * Return: None
1254   */
1255  void crypto_flush_entries(struct wlan_objmgr_psoc *psoc);
1256  
1257  /**
1258   * ucfg_crypto_flush_entries - wrapper API for "crypto_flush_entries"
1259   * @psoc: psoc handler
1260   *
1261   * Return: None
1262   */
1263  void ucfg_crypto_flush_entries(struct wlan_objmgr_psoc *psoc);
1264  
1265  /**
1266   * ucfg_crypto_free_key_by_link_id - free key by link id
1267   * @psoc: psoc handler
1268   * @link_addr: link address
1269   * @link_id: link id
1270   *
1271   * Return: None
1272   */
1273  void ucfg_crypto_free_key_by_link_id(struct wlan_objmgr_psoc *psoc,
1274  				     struct qdf_mac_addr *link_addr,
1275  				     uint8_t link_id);
1276  #endif /* end of _WLAN_CRYPTO_GLOBAL_API_H_ */
1277