xref: /freebsd/sys/contrib/dev/broadcom/brcm80211/brcmfmac/xtlv.h (revision b4c3e9b5b09c829b4135aff738bd2893ed052377)
1*b4c3e9b5SBjoern A. Zeeb // SPDX-License-Identifier: ISC
2*b4c3e9b5SBjoern A. Zeeb /*
3*b4c3e9b5SBjoern A. Zeeb  * Copyright (c) 2019 Broadcom
4*b4c3e9b5SBjoern A. Zeeb  */
5*b4c3e9b5SBjoern A. Zeeb #ifndef __BRCMF_XTLV_H
6*b4c3e9b5SBjoern A. Zeeb #define __BRCMF_XTLV_H
7*b4c3e9b5SBjoern A. Zeeb 
8*b4c3e9b5SBjoern A. Zeeb #include <linux/types.h>
9*b4c3e9b5SBjoern A. Zeeb #include <linux/bits.h>
10*b4c3e9b5SBjoern A. Zeeb 
11*b4c3e9b5SBjoern A. Zeeb /* bcm type(id), length, value with w/16 bit id/len. The structure below
12*b4c3e9b5SBjoern A. Zeeb  * is nominal, and is used to support variable length id and type. See
13*b4c3e9b5SBjoern A. Zeeb  * xtlv options below.
14*b4c3e9b5SBjoern A. Zeeb  */
15*b4c3e9b5SBjoern A. Zeeb struct brcmf_xtlv {
16*b4c3e9b5SBjoern A. Zeeb 	u16 id;
17*b4c3e9b5SBjoern A. Zeeb 	u16 len;
18*b4c3e9b5SBjoern A. Zeeb 	u8 data[];
19*b4c3e9b5SBjoern A. Zeeb };
20*b4c3e9b5SBjoern A. Zeeb 
21*b4c3e9b5SBjoern A. Zeeb enum brcmf_xtlv_option {
22*b4c3e9b5SBjoern A. Zeeb 	BRCMF_XTLV_OPTION_ALIGN32 = BIT(0),
23*b4c3e9b5SBjoern A. Zeeb 	BRCMF_XTLV_OPTION_IDU8 = BIT(1),
24*b4c3e9b5SBjoern A. Zeeb 	BRCMF_XTLV_OPTION_LENU8 = BIT(2),
25*b4c3e9b5SBjoern A. Zeeb };
26*b4c3e9b5SBjoern A. Zeeb 
27*b4c3e9b5SBjoern A. Zeeb int brcmf_xtlv_data_size(int dlen, u16 opts);
28*b4c3e9b5SBjoern A. Zeeb void brcmf_xtlv_pack_header(struct brcmf_xtlv *xtlv, u16 id, u16 len,
29*b4c3e9b5SBjoern A. Zeeb 			    const u8 *data, u16 opts);
30*b4c3e9b5SBjoern A. Zeeb 
31*b4c3e9b5SBjoern A. Zeeb #endif /* __BRCMF_XTLV_H */
32