1/* SPDX-License-Identifier: GPL-2.0-or-later */ 2/* 3 * Bluetooth support for Realtek devices 4 * 5 * Copyright (C) 2015 Endless Mobile, Inc. 6 */ 7 8#define RTL_FRAG_LEN 252 9 10#define rtl_dev_err(dev, fmt, ...) bt_dev_err(dev, "RTL: " fmt, ##__VA_ARGS__) 11#define rtl_dev_warn(dev, fmt, ...) bt_dev_warn(dev, "RTL: " fmt, ##__VA_ARGS__) 12#define rtl_dev_info(dev, fmt, ...) bt_dev_info(dev, "RTL: " fmt, ##__VA_ARGS__) 13#define rtl_dev_dbg(dev, fmt, ...) bt_dev_dbg(dev, "RTL: " fmt, ##__VA_ARGS__) 14 15struct btrtl_device_info; 16 17struct rtl_download_cmd { 18 __u8 index; 19 __u8 data[RTL_FRAG_LEN]; 20} __packed; 21 22struct rtl_download_response { 23 __u8 status; 24 __u8 index; 25} __packed; 26 27struct rtl_rom_version_evt { 28 __u8 status; 29 __u8 version; 30} __packed; 31 32struct rtl_epatch_header { 33 __u8 signature[8]; 34 __le32 fw_version; 35 __le16 num_patches; 36} __packed; 37 38struct rtl_vendor_config_entry { 39 __le16 offset; 40 __u8 len; 41 __u8 data[]; 42} __packed; 43 44struct rtl_vendor_config { 45 __le32 signature; 46 __le16 total_len; 47 struct rtl_vendor_config_entry entry[]; 48} __packed; 49 50#if IS_ENABLED(CONFIG_BT_RTL) 51 52struct btrtl_device_info *btrtl_initialize(struct hci_dev *hdev, 53 const char *postfix); 54void btrtl_free(struct btrtl_device_info *btrtl_dev); 55int btrtl_download_firmware(struct hci_dev *hdev, 56 struct btrtl_device_info *btrtl_dev); 57int btrtl_setup_realtek(struct hci_dev *hdev); 58int btrtl_shutdown_realtek(struct hci_dev *hdev); 59int btrtl_get_uart_settings(struct hci_dev *hdev, 60 struct btrtl_device_info *btrtl_dev, 61 unsigned int *controller_baudrate, 62 u32 *device_baudrate, bool *flow_control); 63 64#else 65 66static inline struct btrtl_device_info *btrtl_initialize(struct hci_dev *hdev, 67 const char *postfix) 68{ 69 return ERR_PTR(-EOPNOTSUPP); 70} 71 72static inline void btrtl_free(struct btrtl_device_info *btrtl_dev) 73{ 74} 75 76static inline int btrtl_download_firmware(struct hci_dev *hdev, 77 struct btrtl_device_info *btrtl_dev) 78{ 79 return -EOPNOTSUPP; 80} 81 82static inline int btrtl_setup_realtek(struct hci_dev *hdev) 83{ 84 return -EOPNOTSUPP; 85} 86 87static inline int btrtl_shutdown_realtek(struct hci_dev *hdev) 88{ 89 return -EOPNOTSUPP; 90} 91 92static inline int btrtl_get_uart_settings(struct hci_dev *hdev, 93 struct btrtl_device_info *btrtl_dev, 94 unsigned int *controller_baudrate, 95 u32 *device_baudrate, 96 bool *flow_control) 97{ 98 return -ENOENT; 99} 100 101#endif 102