brintos

brintos / linux-shallow public Read only

0
0
Text · 4.0 KiB · a2d9d34 Raw
199 lines · c
1/* SPDX-License-Identifier: GPL-2.0-or-later */2/*3 *  Bluetooth support for Realtek devices4 *5 *  Copyright (C) 2015 Endless Mobile, Inc.6 */7 8#define RTL_FRAG_LEN 2529 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_chip_type_evt {18	__u8 status;19	__u8 type;20} __packed;21 22struct rtl_download_cmd {23	__u8 index;24	__u8 data[RTL_FRAG_LEN];25} __packed;26 27struct rtl_download_response {28	__u8 status;29	__u8 index;30} __packed;31 32struct rtl_rom_version_evt {33	__u8 status;34	__u8 version;35} __packed;36 37struct rtl_epatch_header {38	__u8 signature[8];39	__le32 fw_version;40	__le16 num_patches;41} __packed;42 43struct rtl_vendor_config_entry {44	__le16 offset;45	__u8 len;46	__u8 data[];47} __packed;48 49struct rtl_vendor_config {50	__le32 signature;51	__le16 total_len;52	__u8 entry[];53} __packed;54 55struct rtl_epatch_header_v2 {56	__u8   signature[8];57	__u8   fw_version[8];58	__le32 num_sections;59} __packed;60 61struct rtl_section {62	__le32 opcode;63	__le32 len;64	u8     data[];65} __packed;66 67struct rtl_section_hdr {68	__le16 num;69	__le16 reserved;70} __packed;71 72struct rtl_common_subsec {73	__u8   eco;74	__u8   prio;75	__u8   cb[2];76	__le32 len;77	__u8   data[];78};79 80struct rtl_sec_hdr {81	__u8   eco;82	__u8   prio;83	__u8   key_id;84	__u8   reserved;85	__le32 len;86	__u8   data[];87} __packed;88 89struct rtl_subsection {90	struct list_head list;91	u32 opcode;92	u32 len;93	u8 prio;94	u8 *data;95};96 97struct rtl_iovec {98	u8  *data;99	u32 len;100};101 102struct rtl_vendor_cmd {103	__u8 param[5];104} __packed;105 106enum {107	REALTEK_ALT6_CONTINUOUS_TX_CHIP,108 109	__REALTEK_NUM_FLAGS,110};111 112struct rtl_dump_info {113	const char *driver_name;114	char *controller;115	u32  fw_version;116};117 118struct btrealtek_data {119	DECLARE_BITMAP(flags, __REALTEK_NUM_FLAGS);120 121	struct rtl_dump_info rtl_dump;122};123 124#define btrealtek_set_flag(hdev, nr)					\125	do {								\126		struct btrealtek_data *realtek = hci_get_priv((hdev));	\127		set_bit((nr), realtek->flags);				\128	} while (0)129 130#define btrealtek_get_flag(hdev)					\131	(((struct btrealtek_data *)hci_get_priv(hdev))->flags)132 133#define btrealtek_test_flag(hdev, nr)	test_bit((nr), btrealtek_get_flag(hdev))134 135#if IS_ENABLED(CONFIG_BT_RTL)136 137struct btrtl_device_info *btrtl_initialize(struct hci_dev *hdev,138					   const char *postfix);139void btrtl_free(struct btrtl_device_info *btrtl_dev);140int btrtl_download_firmware(struct hci_dev *hdev,141			    struct btrtl_device_info *btrtl_dev);142void btrtl_set_quirks(struct hci_dev *hdev,143		      struct btrtl_device_info *btrtl_dev);144int btrtl_setup_realtek(struct hci_dev *hdev);145int btrtl_shutdown_realtek(struct hci_dev *hdev);146int btrtl_get_uart_settings(struct hci_dev *hdev,147			    struct btrtl_device_info *btrtl_dev,148			    unsigned int *controller_baudrate,149			    u32 *device_baudrate, bool *flow_control);150void btrtl_set_driver_name(struct hci_dev *hdev, const char *driver_name);151 152#else153 154static inline struct btrtl_device_info *btrtl_initialize(struct hci_dev *hdev,155							 const char *postfix)156{157	return ERR_PTR(-EOPNOTSUPP);158}159 160static inline void btrtl_free(struct btrtl_device_info *btrtl_dev)161{162}163 164static inline int btrtl_download_firmware(struct hci_dev *hdev,165					  struct btrtl_device_info *btrtl_dev)166{167	return -EOPNOTSUPP;168}169 170static inline void btrtl_set_quirks(struct hci_dev *hdev,171				    struct btrtl_device_info *btrtl_dev)172{173}174 175static inline int btrtl_setup_realtek(struct hci_dev *hdev)176{177	return -EOPNOTSUPP;178}179 180static inline int btrtl_shutdown_realtek(struct hci_dev *hdev)181{182	return -EOPNOTSUPP;183}184 185static inline int btrtl_get_uart_settings(struct hci_dev *hdev,186					  struct btrtl_device_info *btrtl_dev,187					  unsigned int *controller_baudrate,188					  u32 *device_baudrate,189					  bool *flow_control)190{191	return -ENOENT;192}193 194static inline void btrtl_set_driver_name(struct hci_dev *hdev, const char *driver_name)195{196}197 198#endif199