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