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