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, bdaddr_t *src)
34{
35 unsigned char *d = (unsigned char *) dst;
36 unsigned char *s = (unsigned char *) src;
37 unsigned int i;
38
39 for (i = 0; i < 6; i++)
40 d[i] = s[5 - i];
41}
42EXPORT_SYMBOL(baswap);
43
44char *batostr(bdaddr_t *ba)
45{
46 static char str[2][18];
47 static int i = 1;
48
49 i ^= 1;
50 sprintf(str[i], "%2.2X:%2.2X:%2.2X:%2.2X:%2.2X:%2.2X",
51 ba->b[5], ba->b[4], ba->b[3],
52 ba->b[2], ba->b[1], ba->b[0]);
53
54 return str[i];
55}
56EXPORT_SYMBOL(batostr);
57
58
59int bt_to_errno(__u16 code)
60{
61 switch (code) {
62 case 0:
63 return 0;
64
65 case 0x01:
66 return EBADRQC;
67
68 case 0x02:
69 return ENOTCONN;
70
71 case 0x03:
72 return EIO;
73
74 case 0x04:
75 return EHOSTDOWN;
76
77 case 0x05:
78 return EACCES;
79
80 case 0x06:
81 return EBADE;
82
83 case 0x07:
84 return ENOMEM;
85
86 case 0x08:
87 return ETIMEDOUT;
88
89 case 0x09:
90 return EMLINK;
91
92 case 0x0a:
93 return EMLINK;
94
95 case 0x0b:
96 return EALREADY;
97
98 case 0x0c:
99 return EBUSY;
100
101 case 0x0d:
102 case 0x0e:
103 case 0x0f:
104 return ECONNREFUSED;
105
106 case 0x10:
107 return ETIMEDOUT;
108
109 case 0x11:
110 case 0x27:
111 case 0x29:
112 case 0x20:
113 return EOPNOTSUPP;
114
115 case 0x12:
116 return EINVAL;
117
118 case 0x13:
119 case 0x14:
120 case 0x15:
121 return ECONNRESET;
122
123 case 0x16:
124 return ECONNABORTED;
125
126 case 0x17:
127 return ELOOP;
128
129 case 0x18:
130 return EACCES;
131
132 case 0x1a:
133 return EPROTONOSUPPORT;
134
135 case 0x1b:
136 return ECONNREFUSED;
137
138 case 0x19:
139 case 0x1e:
140 case 0x23:
141 case 0x24:
142 case 0x25:
143 return EPROTO;
144
145 default:
146 return ENOSYS;
147 }
148}
149EXPORT_SYMBOL(bt_to_errno);
150
151int bt_info(const char *format, ...)
152{
153 struct va_format vaf;
154 va_list args;
155 int r;
156
157 va_start(args, format);
158
159 vaf.fmt = format;
160 vaf.va = &args;
161
162 r = pr_info("%pV", &vaf);
163
164 va_end(args);
165
166 return r;
167}
168EXPORT_SYMBOL(bt_info);
169
170int bt_err(const char *format, ...)
171{
172 struct va_format vaf;
173 va_list args;
174 int r;
175
176 va_start(args, format);
177
178 vaf.fmt = format;
179 vaf.va = &args;
180
181 r = pr_err("%pV", &vaf);
182
183 va_end(args);
184
185 return r;
186}
187EXPORT_SYMBOL(bt_err);
188