summaryrefslogtreecommitdiff
path: root/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fwvid.h
blob: f3e011d090f29a93eb9fe5c1c2d802a9a5a0403a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
/* SPDX-License-Identifier: ISC */
/*
 * Copyright (c) 2022 Broadcom Corporation
 */
#ifndef FWVID_H_
#define FWVID_H_

#include "firmware.h"
#include "cfg80211.h"

struct brcmf_pub;
struct brcmf_if;

struct brcmf_fwvid_ops {
	void (*feat_attach)(struct brcmf_if *ifp);
	int (*set_sae_password)(struct brcmf_if *ifp, struct cfg80211_crypto_settings *crypto);
	int (*alloc_fweh_info)(struct brcmf_pub *drvr);
	int (*activate_events)(struct brcmf_if *ifp);
	void (*get_cfg80211_ops)(struct brcmf_pub *drvr);
	void (*register_event_handlers)(struct brcmf_pub *drvr);
};

/* exported functions */
int brcmf_fwvid_register_vendor(enum brcmf_fwvendor fwvid, struct module *mod,
				const struct brcmf_fwvid_ops *ops);
int brcmf_fwvid_unregister_vendor(enum brcmf_fwvendor fwvid, struct module *mod);

/* core driver functions */
int brcmf_fwvid_attach(struct brcmf_pub *drvr);
void brcmf_fwvid_detach(struct brcmf_pub *drvr);
const char *brcmf_fwvid_vendor_name(struct brcmf_pub *drvr);

static inline void brcmf_fwvid_feat_attach(struct brcmf_if *ifp)
{
	const struct brcmf_fwvid_ops *vops = ifp->drvr->vops;

	if (!vops->feat_attach)
		return;

	vops->feat_attach(ifp);
}

static inline int brcmf_fwvid_set_sae_password(struct brcmf_if *ifp,
					       struct cfg80211_crypto_settings *crypto)
{
	const struct brcmf_fwvid_ops *vops = ifp->drvr->vops;

	if (!vops || !vops->set_sae_password)
		return -EOPNOTSUPP;

	return vops->set_sae_password(ifp, crypto);
}

static inline int brcmf_fwvid_alloc_fweh_info(struct brcmf_pub *drvr)
{
	if (!drvr->vops)
		return -EIO;

	return drvr->vops->alloc_fweh_info(drvr);
}

static inline int brcmf_fwvid_activate_events(struct brcmf_if *ifp)
{
	const struct brcmf_fwvid_ops *vops = ifp->drvr->vops;

	if (!vops || !vops->activate_events)
		return -EOPNOTSUPP;

	return vops->activate_events(ifp);
}

static inline void brcmf_fwvid_get_cfg80211_ops(struct brcmf_pub *drvr)
{
	if (!drvr->vops || !drvr->vops->get_cfg80211_ops)
		return;

	drvr->vops->get_cfg80211_ops(drvr);
}

static inline void brcmf_fwvid_register_event_handlers(struct brcmf_pub *drvr)
{
	if (!drvr->vops || !drvr->vops->register_event_handlers)
		return;

	drvr->vops->register_event_handlers(drvr);
}

#endif /* FWVID_H_ */