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_shutdown_realtek(struct hci_dev *hdev); 59 int 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 66 static inline struct btrtl_device_info *btrtl_initialize(struct hci_dev *hdev, 67 const char *postfix) 68 { 69 return ERR_PTR(-EOPNOTSUPP); 70 } 71 72 static inline void btrtl_free(struct btrtl_device_info *btrtl_dev) 73 { 74 } 75 76 static inline int btrtl_download_firmware(struct hci_dev *hdev, 77 struct btrtl_device_info *btrtl_dev) 78 { 79 return -EOPNOTSUPP; 80 } 81 82 static inline int btrtl_setup_realtek(struct hci_dev *hdev) 83 { 84 return -EOPNOTSUPP; 85 } 86 87 static inline int btrtl_shutdown_realtek(struct hci_dev *hdev) 88 { 89 return -EOPNOTSUPP; 90 } 91 92 static 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