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