Back to home page

OSCL-LXR

 
 

    


0001 /* SPDX-License-Identifier: GPL-2.0-or-later */
0002 /*
0003  *  Bluetooth support for Realtek devices
0004  *
0005  *  Copyright (C) 2015 Endless Mobile, Inc.
0006  */
0007 
0008 #define RTL_FRAG_LEN 252
0009 
0010 #define rtl_dev_err(dev, fmt, ...) bt_dev_err(dev, "RTL: " fmt, ##__VA_ARGS__)
0011 #define rtl_dev_warn(dev, fmt, ...) bt_dev_warn(dev, "RTL: " fmt, ##__VA_ARGS__)
0012 #define rtl_dev_info(dev, fmt, ...) bt_dev_info(dev, "RTL: " fmt, ##__VA_ARGS__)
0013 #define rtl_dev_dbg(dev, fmt, ...) bt_dev_dbg(dev, "RTL: " fmt, ##__VA_ARGS__)
0014 
0015 struct btrtl_device_info;
0016 
0017 struct rtl_download_cmd {
0018     __u8 index;
0019     __u8 data[RTL_FRAG_LEN];
0020 } __packed;
0021 
0022 struct rtl_download_response {
0023     __u8 status;
0024     __u8 index;
0025 } __packed;
0026 
0027 struct rtl_rom_version_evt {
0028     __u8 status;
0029     __u8 version;
0030 } __packed;
0031 
0032 struct rtl_epatch_header {
0033     __u8 signature[8];
0034     __le32 fw_version;
0035     __le16 num_patches;
0036 } __packed;
0037 
0038 struct rtl_vendor_config_entry {
0039     __le16 offset;
0040     __u8 len;
0041     __u8 data[];
0042 } __packed;
0043 
0044 struct rtl_vendor_config {
0045     __le32 signature;
0046     __le16 total_len;
0047     struct rtl_vendor_config_entry entry[];
0048 } __packed;
0049 
0050 #if IS_ENABLED(CONFIG_BT_RTL)
0051 
0052 struct btrtl_device_info *btrtl_initialize(struct hci_dev *hdev,
0053                        const char *postfix);
0054 void btrtl_free(struct btrtl_device_info *btrtl_dev);
0055 int btrtl_download_firmware(struct hci_dev *hdev,
0056                 struct btrtl_device_info *btrtl_dev);
0057 void btrtl_set_quirks(struct hci_dev *hdev,
0058               struct btrtl_device_info *btrtl_dev);
0059 int btrtl_setup_realtek(struct hci_dev *hdev);
0060 int btrtl_shutdown_realtek(struct hci_dev *hdev);
0061 int btrtl_get_uart_settings(struct hci_dev *hdev,
0062                 struct btrtl_device_info *btrtl_dev,
0063                 unsigned int *controller_baudrate,
0064                 u32 *device_baudrate, bool *flow_control);
0065 
0066 #else
0067 
0068 static inline struct btrtl_device_info *btrtl_initialize(struct hci_dev *hdev,
0069                              const char *postfix)
0070 {
0071     return ERR_PTR(-EOPNOTSUPP);
0072 }
0073 
0074 static inline void btrtl_free(struct btrtl_device_info *btrtl_dev)
0075 {
0076 }
0077 
0078 static inline int btrtl_download_firmware(struct hci_dev *hdev,
0079                       struct btrtl_device_info *btrtl_dev)
0080 {
0081     return -EOPNOTSUPP;
0082 }
0083 
0084 static inline void btrtl_set_quirks(struct hci_dev *hdev,
0085                     struct btrtl_device_info *btrtl_dev)
0086 {
0087 }
0088 
0089 static inline int btrtl_setup_realtek(struct hci_dev *hdev)
0090 {
0091     return -EOPNOTSUPP;
0092 }
0093 
0094 static inline int btrtl_shutdown_realtek(struct hci_dev *hdev)
0095 {
0096     return -EOPNOTSUPP;
0097 }
0098 
0099 static inline int btrtl_get_uart_settings(struct hci_dev *hdev,
0100                       struct btrtl_device_info *btrtl_dev,
0101                       unsigned int *controller_baudrate,
0102                       u32 *device_baudrate,
0103                       bool *flow_control)
0104 {
0105     return -ENOENT;
0106 }
0107 
0108 #endif