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[]; 42 } __packed; 43 44 struct 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 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 void btrtl_set_quirks(struct hci_dev *hdev, 58 struct btrtl_device_info *btrtl_dev); 59 int btrtl_setup_realtek(struct hci_dev *hdev); 60 int btrtl_shutdown_realtek(struct hci_dev *hdev); 61 int btrtl_get_uart_settings(struct hci_dev *hdev, 62 struct btrtl_device_info *btrtl_dev, 63 unsigned int *controller_baudrate, 64 u32 *device_baudrate, bool *flow_control); 65 66 #else 67 68 static inline struct btrtl_device_info *btrtl_initialize(struct hci_dev *hdev, 69 const char *postfix) 70 { 71 return ERR_PTR(-EOPNOTSUPP); 72 } 73 74 static inline void btrtl_free(struct btrtl_device_info *btrtl_dev) 75 { 76 } 77 78 static inline int btrtl_download_firmware(struct hci_dev *hdev, 79 struct btrtl_device_info *btrtl_dev) 80 { 81 return -EOPNOTSUPP; 82 } 83 84 static inline void btrtl_set_quirks(struct hci_dev *hdev, 85 struct btrtl_device_info *btrtl_dev) 86 { 87 } 88 89 static inline int btrtl_setup_realtek(struct hci_dev *hdev) 90 { 91 return -EOPNOTSUPP; 92 } 93 94 static inline int btrtl_shutdown_realtek(struct hci_dev *hdev) 95 { 96 return -EOPNOTSUPP; 97 } 98 99 static inline int btrtl_get_uart_settings(struct hci_dev *hdev, 100 struct btrtl_device_info *btrtl_dev, 101 unsigned int *controller_baudrate, 102 u32 *device_baudrate, 103 bool *flow_control) 104 { 105 return -ENOENT; 106 } 107 108 #endif 109