1/* SPDX-License-Identifier: ISC */
2/*
3 * Copyright (c) 2022 Broadcom Corporation
4 */
5#ifndef FWVID_H_
6#define FWVID_H_
7
8#include "firmware.h"
9#include "cfg80211.h"
10
11struct brcmf_pub;
12struct brcmf_if;
13
14struct brcmf_fwvid_ops {
15	void (*feat_attach)(struct brcmf_if *ifp);
16	int (*set_sae_password)(struct brcmf_if *ifp, struct cfg80211_crypto_settings *crypto);
17	int (*alloc_fweh_info)(struct brcmf_pub *drvr);
18};
19
20/* exported functions */
21int brcmf_fwvid_register_vendor(enum brcmf_fwvendor fwvid, struct module *mod,
22				const struct brcmf_fwvid_ops *ops);
23int brcmf_fwvid_unregister_vendor(enum brcmf_fwvendor fwvid, struct module *mod);
24
25/* core driver functions */
26int brcmf_fwvid_attach(struct brcmf_pub *drvr);
27void brcmf_fwvid_detach(struct brcmf_pub *drvr);
28const char *brcmf_fwvid_vendor_name(struct brcmf_pub *drvr);
29
30static inline void brcmf_fwvid_feat_attach(struct brcmf_if *ifp)
31{
32	const struct brcmf_fwvid_ops *vops = ifp->drvr->vops;
33
34	if (!vops->feat_attach)
35		return;
36
37	vops->feat_attach(ifp);
38}
39
40static inline int brcmf_fwvid_set_sae_password(struct brcmf_if *ifp,
41					       struct cfg80211_crypto_settings *crypto)
42{
43	const struct brcmf_fwvid_ops *vops = ifp->drvr->vops;
44
45	if (!vops || !vops->set_sae_password)
46		return -EOPNOTSUPP;
47
48	return vops->set_sae_password(ifp, crypto);
49}
50
51static inline int brcmf_fwvid_alloc_fweh_info(struct brcmf_pub *drvr)
52{
53	if (!drvr->vops)
54		return -EIO;
55
56	return drvr->vops->alloc_fweh_info(drvr);
57}
58
59#endif /* FWVID_H_ */
60