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