1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27#define pr_fmt(fmt) "Bluetooth: " fmt
28
29#include <linux/export.h>
30
31#include <net/bluetooth/bluetooth.h>
32
33void baswap(bdaddr_t *dst, const bdaddr_t *src)
34{
35 const unsigned char *s = (const unsigned char *)src;
36 unsigned char *d = (unsigned char *)dst;
37 unsigned int i;
38
39 for (i = 0; i < 6; i++)
40 d[i] = s[5 - i];
41}
42EXPORT_SYMBOL(baswap);
43
44
45int bt_to_errno(__u16 code)
46{
47 switch (code) {
48 case 0:
49 return 0;
50
51 case 0x01:
52 return EBADRQC;
53
54 case 0x02:
55 return ENOTCONN;
56
57 case 0x03:
58 return EIO;
59
60 case 0x04:
61 case 0x3c:
62 return EHOSTDOWN;
63
64 case 0x05:
65 return EACCES;
66
67 case 0x06:
68 return EBADE;
69
70 case 0x07:
71 return ENOMEM;
72
73 case 0x08:
74 return ETIMEDOUT;
75
76 case 0x09:
77 return EMLINK;
78
79 case 0x0a:
80 return EMLINK;
81
82 case 0x0b:
83 return EALREADY;
84
85 case 0x0c:
86 return EBUSY;
87
88 case 0x0d:
89 case 0x0e:
90 case 0x0f:
91 return ECONNREFUSED;
92
93 case 0x10:
94 return ETIMEDOUT;
95
96 case 0x11:
97 case 0x27:
98 case 0x29:
99 case 0x20:
100 return EOPNOTSUPP;
101
102 case 0x12:
103 return EINVAL;
104
105 case 0x13:
106 case 0x14:
107 case 0x15:
108 return ECONNRESET;
109
110 case 0x16:
111 return ECONNABORTED;
112
113 case 0x17:
114 return ELOOP;
115
116 case 0x18:
117 return EACCES;
118
119 case 0x1a:
120 return EPROTONOSUPPORT;
121
122 case 0x1b:
123 return ECONNREFUSED;
124
125 case 0x19:
126 case 0x1e:
127 case 0x23:
128 case 0x24:
129 case 0x25:
130 return EPROTO;
131
132 default:
133 return ENOSYS;
134 }
135}
136EXPORT_SYMBOL(bt_to_errno);
137
138void bt_info(const char *format, ...)
139{
140 struct va_format vaf;
141 va_list args;
142
143 va_start(args, format);
144
145 vaf.fmt = format;
146 vaf.va = &args;
147
148 pr_info("%pV", &vaf);
149
150 va_end(args);
151}
152EXPORT_SYMBOL(bt_info);
153
154void bt_warn(const char *format, ...)
155{
156 struct va_format vaf;
157 va_list args;
158
159 va_start(args, format);
160
161 vaf.fmt = format;
162 vaf.va = &args;
163
164 pr_warn("%pV", &vaf);
165
166 va_end(args);
167}
168EXPORT_SYMBOL(bt_warn);
169
170void bt_err(const char *format, ...)
171{
172 struct va_format vaf;
173 va_list args;
174
175 va_start(args, format);
176
177 vaf.fmt = format;
178 vaf.va = &args;
179
180 pr_err("%pV", &vaf);
181
182 va_end(args);
183}
184EXPORT_SYMBOL(bt_err);
185
186#ifdef CONFIG_BT_FEATURE_DEBUG
187static bool debug_enable;
188
189void bt_dbg_set(bool enable)
190{
191 debug_enable = enable;
192}
193
194bool bt_dbg_get(void)
195{
196 return debug_enable;
197}
198
199void bt_dbg(const char *format, ...)
200{
201 struct va_format vaf;
202 va_list args;
203
204 if (likely(!debug_enable))
205 return;
206
207 va_start(args, format);
208
209 vaf.fmt = format;
210 vaf.va = &args;
211
212 printk(KERN_DEBUG pr_fmt("%pV"), &vaf);
213
214 va_end(args);
215}
216EXPORT_SYMBOL(bt_dbg);
217#endif
218
219void bt_warn_ratelimited(const char *format, ...)
220{
221 struct va_format vaf;
222 va_list args;
223
224 va_start(args, format);
225
226 vaf.fmt = format;
227 vaf.va = &args;
228
229 pr_warn_ratelimited("%pV", &vaf);
230
231 va_end(args);
232}
233EXPORT_SYMBOL(bt_warn_ratelimited);
234
235void bt_err_ratelimited(const char *format, ...)
236{
237 struct va_format vaf;
238 va_list args;
239
240 va_start(args, format);
241
242 vaf.fmt = format;
243 vaf.va = &args;
244
245 pr_err_ratelimited("%pV", &vaf);
246
247 va_end(args);
248}
249EXPORT_SYMBOL(bt_err_ratelimited);
250