// SPDX-License-Identifier: ISC /* * Copyright (c) 2022 Broadcom Corporation */ #include #include #include #include #include #include #include "vops.h" #define BRCMF_CYW_E_LAST 197 static int brcmf_cyw_set_sae_pwd(struct brcmf_if *ifp, struct cfg80211_crypto_settings *crypto) { struct brcmf_pub *drvr = ifp->drvr; struct brcmf_wsec_sae_pwd_le sae_pwd; u16 pwd_len = crypto->sae_pwd_len; int err; if (pwd_len > BRCMF_WSEC_MAX_SAE_PASSWORD_LEN) { bphy_err(drvr, "sae_password must be less than %d\n", BRCMF_WSEC_MAX_SAE_PASSWORD_LEN); return -EINVAL; } sae_pwd.key_len = cpu_to_le16(pwd_len); memcpy(sae_pwd.key, crypto->sae_pwd, pwd_len); err = brcmf_fil_iovar_data_set(ifp, "sae_password", &sae_pwd, sizeof(sae_pwd)); if (err < 0) bphy_err(drvr, "failed to set SAE password in firmware (len=%u)\n", pwd_len); return err; } static int brcmf_cyw_alloc_fweh_info(struct brcmf_pub *drvr) { struct brcmf_fweh_info *fweh; fweh = kzalloc(struct_size(fweh, evt_handler, BRCMF_CYW_E_LAST), GFP_KERNEL); if (!fweh) return -ENOMEM; fweh->num_event_codes = BRCMF_CYW_E_LAST; drvr->fweh = fweh; return 0; } const struct brcmf_fwvid_ops brcmf_cyw_ops = { .set_sae_password = brcmf_cyw_set_sae_pwd, .alloc_fweh_info = brcmf_cyw_alloc_fweh_info, };