Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
torvalds
GitHub Repository: torvalds/linux
Path: blob/master/drivers/bluetooth/btrtl.h
26378 views
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_chip_type_evt {
18
__u8 status;
19
__u8 type;
20
} __packed;
21
22
struct rtl_download_cmd {
23
__u8 index;
24
__u8 data[RTL_FRAG_LEN];
25
} __packed;
26
27
struct rtl_download_response {
28
__u8 status;
29
__u8 index;
30
} __packed;
31
32
struct rtl_rom_version_evt {
33
__u8 status;
34
__u8 version;
35
} __packed;
36
37
struct rtl_epatch_header {
38
__u8 signature[8];
39
__le32 fw_version;
40
__le16 num_patches;
41
} __packed;
42
43
struct rtl_vendor_config_entry {
44
__le16 offset;
45
__u8 len;
46
__u8 data[];
47
} __packed;
48
49
struct rtl_vendor_config {
50
__le32 signature;
51
__le16 total_len;
52
__u8 entry[];
53
} __packed;
54
55
struct rtl_epatch_header_v2 {
56
__u8 signature[8];
57
__u8 fw_version[8];
58
__le32 num_sections;
59
} __packed;
60
61
struct rtl_section {
62
__le32 opcode;
63
__le32 len;
64
u8 data[];
65
} __packed;
66
67
struct rtl_section_hdr {
68
__le16 num;
69
__le16 reserved;
70
} __packed;
71
72
struct rtl_common_subsec {
73
__u8 eco;
74
__u8 prio;
75
__u8 cb[2];
76
__le32 len;
77
__u8 data[];
78
};
79
80
struct 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
89
struct rtl_subsection {
90
struct list_head list;
91
u32 opcode;
92
u32 len;
93
u8 prio;
94
u8 *data;
95
};
96
97
struct rtl_iovec {
98
u8 *data;
99
u32 len;
100
};
101
102
struct rtl_vendor_cmd {
103
__u8 param[5];
104
} __packed;
105
106
enum {
107
REALTEK_ALT6_CONTINUOUS_TX_CHIP,
108
109
__REALTEK_NUM_FLAGS,
110
};
111
112
struct rtl_dump_info {
113
const char *driver_name;
114
char *controller;
115
u32 fw_version;
116
};
117
118
struct 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
137
struct btrtl_device_info *btrtl_initialize(struct hci_dev *hdev,
138
const char *postfix);
139
void btrtl_free(struct btrtl_device_info *btrtl_dev);
140
int btrtl_download_firmware(struct hci_dev *hdev,
141
struct btrtl_device_info *btrtl_dev);
142
void btrtl_set_quirks(struct hci_dev *hdev,
143
struct btrtl_device_info *btrtl_dev);
144
int btrtl_setup_realtek(struct hci_dev *hdev);
145
int btrtl_shutdown_realtek(struct hci_dev *hdev);
146
int 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);
150
void btrtl_set_driver_name(struct hci_dev *hdev, const char *driver_name);
151
152
#else
153
154
static inline struct btrtl_device_info *btrtl_initialize(struct hci_dev *hdev,
155
const char *postfix)
156
{
157
return ERR_PTR(-EOPNOTSUPP);
158
}
159
160
static inline void btrtl_free(struct btrtl_device_info *btrtl_dev)
161
{
162
}
163
164
static inline int btrtl_download_firmware(struct hci_dev *hdev,
165
struct btrtl_device_info *btrtl_dev)
166
{
167
return -EOPNOTSUPP;
168
}
169
170
static inline void btrtl_set_quirks(struct hci_dev *hdev,
171
struct btrtl_device_info *btrtl_dev)
172
{
173
}
174
175
static inline int btrtl_setup_realtek(struct hci_dev *hdev)
176
{
177
return -EOPNOTSUPP;
178
}
179
180
static inline int btrtl_shutdown_realtek(struct hci_dev *hdev)
181
{
182
return -EOPNOTSUPP;
183
}
184
185
static 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
194
static inline void btrtl_set_driver_name(struct hci_dev *hdev, const char *driver_name)
195
{
196
}
197
198
#endif
199
200