xref: /linux/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fwvid.h (revision df9c299371054cb725eef730fd0f1d0fe2ed6bb0)
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 
11 struct brcmf_pub;
12 struct brcmf_if;
13 
14 struct 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 	int (*activate_events)(struct brcmf_if *ifp);
19 	void (*get_cfg80211_ops)(struct brcmf_pub *drvr);
20 	void (*register_event_handlers)(struct brcmf_pub *drvr);
21 };
22 
23 /* exported functions */
24 int brcmf_fwvid_register_vendor(enum brcmf_fwvendor fwvid, struct module *mod,
25 				const struct brcmf_fwvid_ops *ops);
26 int brcmf_fwvid_unregister_vendor(enum brcmf_fwvendor fwvid, struct module *mod);
27 
28 /* core driver functions */
29 int brcmf_fwvid_attach(struct brcmf_pub *drvr);
30 void brcmf_fwvid_detach(struct brcmf_pub *drvr);
31 const char *brcmf_fwvid_vendor_name(struct brcmf_pub *drvr);
32 
33 static inline void brcmf_fwvid_feat_attach(struct brcmf_if *ifp)
34 {
35 	const struct brcmf_fwvid_ops *vops = ifp->drvr->vops;
36 
37 	if (!vops->feat_attach)
38 		return;
39 
40 	vops->feat_attach(ifp);
41 }
42 
43 static inline int brcmf_fwvid_set_sae_password(struct brcmf_if *ifp,
44 					       struct cfg80211_crypto_settings *crypto)
45 {
46 	const struct brcmf_fwvid_ops *vops = ifp->drvr->vops;
47 
48 	if (!vops || !vops->set_sae_password)
49 		return -EOPNOTSUPP;
50 
51 	return vops->set_sae_password(ifp, crypto);
52 }
53 
54 static inline int brcmf_fwvid_alloc_fweh_info(struct brcmf_pub *drvr)
55 {
56 	if (!drvr->vops)
57 		return -EIO;
58 
59 	return drvr->vops->alloc_fweh_info(drvr);
60 }
61 
62 static inline int brcmf_fwvid_activate_events(struct brcmf_if *ifp)
63 {
64 	const struct brcmf_fwvid_ops *vops = ifp->drvr->vops;
65 
66 	if (!vops || !vops->activate_events)
67 		return -EOPNOTSUPP;
68 
69 	return vops->activate_events(ifp);
70 }
71 
72 static inline void brcmf_fwvid_get_cfg80211_ops(struct brcmf_pub *drvr)
73 {
74 	if (!drvr->vops || !drvr->vops->get_cfg80211_ops)
75 		return;
76 
77 	drvr->vops->get_cfg80211_ops(drvr);
78 }
79 
80 static inline void brcmf_fwvid_register_event_handlers(struct brcmf_pub *drvr)
81 {
82 	if (!drvr->vops || !drvr->vops->register_event_handlers)
83 		return;
84 
85 	drvr->vops->register_event_handlers(drvr);
86 }
87 
88 #endif /* FWVID_H_ */
89