summaryrefslogtreecommitdiffstats
path: root/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fwvid.h
blob: 43df58bb70ad33e3616f66eaa92ab2ef5161b929 (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
/* SPDX-License-Identifier: ISC */
/*
 * Copyright (c) 2022 Broadcom Corporation
 */
#ifndef FWVID_H_
#define FWVID_H_

#include "firmware.h"

struct brcmf_pub;

struct brcmf_fwvid_ops {
	int (*attach)(struct brcmf_pub *drvr);
	void (*detach)(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_ops(struct brcmf_pub *drvr);
void brcmf_fwvid_detach_ops(struct brcmf_pub *drvr);
const char *brcmf_fwvid_vendor_name(struct brcmf_pub *drvr);

static inline int brcmf_fwvid_attach(struct brcmf_pub *drvr)
{
	int ret;

	ret = brcmf_fwvid_attach_ops(drvr);
	if (ret)
		return ret;

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

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

	drvr->vops->detach(drvr);
	brcmf_fwvid_detach_ops(drvr);
}

#endif /* FWVID_H_ */