1 /* SPDX-License-Identifier: GPL-2.0 */
3 * BlueZ - Bluetooth protocol stack for Linux
5 * Copyright (C) 2021 Intel Corporation
8 #include <asm/unaligned.h>
10 void eir_create(struct hci_dev *hdev, u8 *data);
12 u8 eir_create_adv_data(struct hci_dev *hdev, u8 instance, u8 *ptr);
13 u8 eir_create_scan_rsp(struct hci_dev *hdev, u8 instance, u8 *ptr);
15 u8 eir_append_local_name(struct hci_dev *hdev, u8 *eir, u8 ad_len);
16 u8 eir_append_appearance(struct hci_dev *hdev, u8 *ptr, u8 ad_len);
18 static inline u16 eir_append_data(u8 *eir, u16 eir_len, u8 type,
19 u8 *data, u8 data_len)
21 eir[eir_len++] = sizeof(type) + data_len;
22 eir[eir_len++] = type;
23 memcpy(&eir[eir_len], data, data_len);
29 static inline u16 eir_append_le16(u8 *eir, u16 eir_len, u8 type, u16 data)
31 eir[eir_len++] = sizeof(type) + sizeof(data);
32 eir[eir_len++] = type;
33 put_unaligned_le16(data, &eir[eir_len]);
34 eir_len += sizeof(data);
39 static inline void *eir_get_data(u8 *eir, size_t eir_len, u8 type,
47 while (parsed < eir_len - 1) {
48 u8 field_len = eir[0];
53 parsed += field_len + 1;
63 /* Zero length data */
68 *data_len = field_len - 1;