Linux Audio

Check our new training course

Loading...
Note: File does not exist in v3.1.
  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
 50enum {
 51	REALTEK_ALT6_CONTINUOUS_TX_CHIP,
 52
 53	__REALTEK_NUM_FLAGS,
 54};
 55
 56struct btrealtek_data {
 57	DECLARE_BITMAP(flags, __REALTEK_NUM_FLAGS);
 58};
 59
 60#define btrealtek_set_flag(hdev, nr)					\
 61	do {								\
 62		struct btrealtek_data *realtek = hci_get_priv((hdev));	\
 63		set_bit((nr), realtek->flags);				\
 64	} while (0)
 65
 66#define btrealtek_get_flag(hdev)					\
 67	(((struct btrealtek_data *)hci_get_priv(hdev))->flags)
 68
 69#define btrealtek_test_flag(hdev, nr)	test_bit((nr), btrealtek_get_flag(hdev))
 70
 71#if IS_ENABLED(CONFIG_BT_RTL)
 72
 73struct btrtl_device_info *btrtl_initialize(struct hci_dev *hdev,
 74					   const char *postfix);
 75void btrtl_free(struct btrtl_device_info *btrtl_dev);
 76int btrtl_download_firmware(struct hci_dev *hdev,
 77			    struct btrtl_device_info *btrtl_dev);
 78void btrtl_set_quirks(struct hci_dev *hdev,
 79		      struct btrtl_device_info *btrtl_dev);
 80int btrtl_setup_realtek(struct hci_dev *hdev);
 81int btrtl_shutdown_realtek(struct hci_dev *hdev);
 82int btrtl_get_uart_settings(struct hci_dev *hdev,
 83			    struct btrtl_device_info *btrtl_dev,
 84			    unsigned int *controller_baudrate,
 85			    u32 *device_baudrate, bool *flow_control);
 86
 87#else
 88
 89static inline struct btrtl_device_info *btrtl_initialize(struct hci_dev *hdev,
 90							 const char *postfix)
 91{
 92	return ERR_PTR(-EOPNOTSUPP);
 93}
 94
 95static inline void btrtl_free(struct btrtl_device_info *btrtl_dev)
 96{
 97}
 98
 99static inline int btrtl_download_firmware(struct hci_dev *hdev,
100					  struct btrtl_device_info *btrtl_dev)
101{
102	return -EOPNOTSUPP;
103}
104
105static inline void btrtl_set_quirks(struct hci_dev *hdev,
106				    struct btrtl_device_info *btrtl_dev)
107{
108}
109
110static inline int btrtl_setup_realtek(struct hci_dev *hdev)
111{
112	return -EOPNOTSUPP;
113}
114
115static inline int btrtl_shutdown_realtek(struct hci_dev *hdev)
116{
117	return -EOPNOTSUPP;
118}
119
120static inline int btrtl_get_uart_settings(struct hci_dev *hdev,
121					  struct btrtl_device_info *btrtl_dev,
122					  unsigned int *controller_baudrate,
123					  u32 *device_baudrate,
124					  bool *flow_control)
125{
126	return -ENOENT;
127}
128
129#endif