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