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 15 struct btrtl_device_info; 16 17 struct rtl_download_cmd { 18 __u8 index; 19 __u8 data[RTL_FRAG_LEN]; 20 } __packed; 21 22 struct rtl_download_response { 23 __u8 status; 24 __u8 index; 25 } __packed; 26 27 struct rtl_rom_version_evt { 28 __u8 status; 29 __u8 version; 30 } __packed; 31 32 struct rtl_epatch_header { 33 __u8 signature[8]; 34 __le32 fw_version; 35 __le16 num_patches; 36 } __packed; 37 38 struct rtl_vendor_config_entry { 39 __le16 offset; 40 __u8 len; 41 __u8 data[0]; 42 } __packed; 43 44 struct rtl_vendor_config { 45 __le32 signature; 46 __le16 total_len; 47 struct rtl_vendor_config_entry entry[0]; 48 } __packed; 49 50 #if IS_ENABLED(CONFIG_BT_RTL) 51 52 struct btrtl_device_info *btrtl_initialize(struct hci_dev *hdev, 53 const char *postfix); 54 void btrtl_free(struct btrtl_device_info *btrtl_dev); 55 int btrtl_download_firmware(struct hci_dev *hdev, 56 struct btrtl_device_info *btrtl_dev); 57 int btrtl_setup_realtek(struct hci_dev *hdev); 58 int btrtl_get_uart_settings(struct hci_dev *hdev, 59 struct btrtl_device_info *btrtl_dev, 60 unsigned int *controller_baudrate, 61 u32 *device_baudrate, bool *flow_control); 62 63 #else 64 65 static inline struct btrtl_device_info *btrtl_initialize(struct hci_dev *hdev, 66 const char *postfix) 67 { 68 return ERR_PTR(-EOPNOTSUPP); 69 } 70 71 static inline void btrtl_free(struct btrtl_device_info *btrtl_dev) 72 { 73 } 74 75 static inline int btrtl_download_firmware(struct hci_dev *hdev, 76 struct btrtl_device_info *btrtl_dev) 77 { 78 return -EOPNOTSUPP; 79 } 80 81 static inline int btrtl_setup_realtek(struct hci_dev *hdev) 82 { 83 return -EOPNOTSUPP; 84 } 85 86 static inline int btrtl_get_uart_settings(struct hci_dev *hdev, 87 struct btrtl_device_info *btrtl_dev, 88 unsigned int *controller_baudrate, 89 u32 *device_baudrate, 90 bool *flow_control) 91 { 92 return -ENOENT; 93 } 94 95 #endif 96