diff options
Diffstat (limited to 'net/bluetooth/hci_sysfs.c')
-rw-r--r-- | net/bluetooth/hci_sysfs.c | 99 |
1 files changed, 58 insertions, 41 deletions
diff --git a/net/bluetooth/hci_sysfs.c b/net/bluetooth/hci_sysfs.c index 937f3187eafa..a20e61c3653d 100644 --- a/net/bluetooth/hci_sysfs.c +++ b/net/bluetooth/hci_sysfs.c | |||
@@ -1,10 +1,6 @@ | |||
1 | /* Bluetooth HCI driver model support. */ | 1 | /* Bluetooth HCI driver model support. */ |
2 | 2 | ||
3 | #include <linux/kernel.h> | ||
4 | #include <linux/slab.h> | ||
5 | #include <linux/init.h> | ||
6 | #include <linux/debugfs.h> | 3 | #include <linux/debugfs.h> |
7 | #include <linux/seq_file.h> | ||
8 | #include <linux/module.h> | 4 | #include <linux/module.h> |
9 | 5 | ||
10 | #include <net/bluetooth/bluetooth.h> | 6 | #include <net/bluetooth/bluetooth.h> |
@@ -31,27 +27,30 @@ static inline char *link_typetostr(int type) | |||
31 | } | 27 | } |
32 | } | 28 | } |
33 | 29 | ||
34 | static ssize_t show_link_type(struct device *dev, struct device_attribute *attr, char *buf) | 30 | static ssize_t show_link_type(struct device *dev, |
31 | struct device_attribute *attr, char *buf) | ||
35 | { | 32 | { |
36 | struct hci_conn *conn = to_hci_conn(dev); | 33 | struct hci_conn *conn = to_hci_conn(dev); |
37 | return sprintf(buf, "%s\n", link_typetostr(conn->type)); | 34 | return sprintf(buf, "%s\n", link_typetostr(conn->type)); |
38 | } | 35 | } |
39 | 36 | ||
40 | static ssize_t show_link_address(struct device *dev, struct device_attribute *attr, char *buf) | 37 | static ssize_t show_link_address(struct device *dev, |
38 | struct device_attribute *attr, char *buf) | ||
41 | { | 39 | { |
42 | struct hci_conn *conn = to_hci_conn(dev); | 40 | struct hci_conn *conn = to_hci_conn(dev); |
43 | return sprintf(buf, "%s\n", batostr(&conn->dst)); | 41 | return sprintf(buf, "%s\n", batostr(&conn->dst)); |
44 | } | 42 | } |
45 | 43 | ||
46 | static ssize_t show_link_features(struct device *dev, struct device_attribute *attr, char *buf) | 44 | static ssize_t show_link_features(struct device *dev, |
45 | struct device_attribute *attr, char *buf) | ||
47 | { | 46 | { |
48 | struct hci_conn *conn = to_hci_conn(dev); | 47 | struct hci_conn *conn = to_hci_conn(dev); |
49 | 48 | ||
50 | return sprintf(buf, "0x%02x%02x%02x%02x%02x%02x%02x%02x\n", | 49 | return sprintf(buf, "0x%02x%02x%02x%02x%02x%02x%02x%02x\n", |
51 | conn->features[0], conn->features[1], | 50 | conn->features[0], conn->features[1], |
52 | conn->features[2], conn->features[3], | 51 | conn->features[2], conn->features[3], |
53 | conn->features[4], conn->features[5], | 52 | conn->features[4], conn->features[5], |
54 | conn->features[6], conn->features[7]); | 53 | conn->features[6], conn->features[7]); |
55 | } | 54 | } |
56 | 55 | ||
57 | #define LINK_ATTR(_name, _mode, _show, _store) \ | 56 | #define LINK_ATTR(_name, _mode, _show, _store) \ |
@@ -185,19 +184,22 @@ static inline char *host_typetostr(int type) | |||
185 | } | 184 | } |
186 | } | 185 | } |
187 | 186 | ||
188 | static ssize_t show_bus(struct device *dev, struct device_attribute *attr, char *buf) | 187 | static ssize_t show_bus(struct device *dev, |
188 | struct device_attribute *attr, char *buf) | ||
189 | { | 189 | { |
190 | struct hci_dev *hdev = to_hci_dev(dev); | 190 | struct hci_dev *hdev = to_hci_dev(dev); |
191 | return sprintf(buf, "%s\n", host_bustostr(hdev->bus)); | 191 | return sprintf(buf, "%s\n", host_bustostr(hdev->bus)); |
192 | } | 192 | } |
193 | 193 | ||
194 | static ssize_t show_type(struct device *dev, struct device_attribute *attr, char *buf) | 194 | static ssize_t show_type(struct device *dev, |
195 | struct device_attribute *attr, char *buf) | ||
195 | { | 196 | { |
196 | struct hci_dev *hdev = to_hci_dev(dev); | 197 | struct hci_dev *hdev = to_hci_dev(dev); |
197 | return sprintf(buf, "%s\n", host_typetostr(hdev->dev_type)); | 198 | return sprintf(buf, "%s\n", host_typetostr(hdev->dev_type)); |
198 | } | 199 | } |
199 | 200 | ||
200 | static ssize_t show_name(struct device *dev, struct device_attribute *attr, char *buf) | 201 | static ssize_t show_name(struct device *dev, |
202 | struct device_attribute *attr, char *buf) | ||
201 | { | 203 | { |
202 | struct hci_dev *hdev = to_hci_dev(dev); | 204 | struct hci_dev *hdev = to_hci_dev(dev); |
203 | char name[HCI_MAX_NAME_LENGTH + 1]; | 205 | char name[HCI_MAX_NAME_LENGTH + 1]; |
@@ -210,55 +212,64 @@ static ssize_t show_name(struct device *dev, struct device_attribute *attr, char | |||
210 | return sprintf(buf, "%s\n", name); | 212 | return sprintf(buf, "%s\n", name); |
211 | } | 213 | } |
212 | 214 | ||
213 | static ssize_t show_class(struct device *dev, struct device_attribute *attr, char *buf) | 215 | static ssize_t show_class(struct device *dev, |
216 | struct device_attribute *attr, char *buf) | ||
214 | { | 217 | { |
215 | struct hci_dev *hdev = to_hci_dev(dev); | 218 | struct hci_dev *hdev = to_hci_dev(dev); |
216 | return sprintf(buf, "0x%.2x%.2x%.2x\n", | 219 | return sprintf(buf, "0x%.2x%.2x%.2x\n", hdev->dev_class[2], |
217 | hdev->dev_class[2], hdev->dev_class[1], hdev->dev_class[0]); | 220 | hdev->dev_class[1], hdev->dev_class[0]); |
218 | } | 221 | } |
219 | 222 | ||
220 | static ssize_t show_address(struct device *dev, struct device_attribute *attr, char *buf) | 223 | static ssize_t show_address(struct device *dev, |
224 | struct device_attribute *attr, char *buf) | ||
221 | { | 225 | { |
222 | struct hci_dev *hdev = to_hci_dev(dev); | 226 | struct hci_dev *hdev = to_hci_dev(dev); |
223 | return sprintf(buf, "%s\n", batostr(&hdev->bdaddr)); | 227 | return sprintf(buf, "%s\n", batostr(&hdev->bdaddr)); |
224 | } | 228 | } |
225 | 229 | ||
226 | static ssize_t show_features(struct device *dev, struct device_attribute *attr, char *buf) | 230 | static ssize_t show_features(struct device *dev, |
231 | struct device_attribute *attr, char *buf) | ||
227 | { | 232 | { |
228 | struct hci_dev *hdev = to_hci_dev(dev); | 233 | struct hci_dev *hdev = to_hci_dev(dev); |
229 | 234 | ||
230 | return sprintf(buf, "0x%02x%02x%02x%02x%02x%02x%02x%02x\n", | 235 | return sprintf(buf, "0x%02x%02x%02x%02x%02x%02x%02x%02x\n", |
231 | hdev->features[0], hdev->features[1], | 236 | hdev->features[0], hdev->features[1], |
232 | hdev->features[2], hdev->features[3], | 237 | hdev->features[2], hdev->features[3], |
233 | hdev->features[4], hdev->features[5], | 238 | hdev->features[4], hdev->features[5], |
234 | hdev->features[6], hdev->features[7]); | 239 | hdev->features[6], hdev->features[7]); |
235 | } | 240 | } |
236 | 241 | ||
237 | static ssize_t show_manufacturer(struct device *dev, struct device_attribute *attr, char *buf) | 242 | static ssize_t show_manufacturer(struct device *dev, |
243 | struct device_attribute *attr, char *buf) | ||
238 | { | 244 | { |
239 | struct hci_dev *hdev = to_hci_dev(dev); | 245 | struct hci_dev *hdev = to_hci_dev(dev); |
240 | return sprintf(buf, "%d\n", hdev->manufacturer); | 246 | return sprintf(buf, "%d\n", hdev->manufacturer); |
241 | } | 247 | } |
242 | 248 | ||
243 | static ssize_t show_hci_version(struct device *dev, struct device_attribute *attr, char *buf) | 249 | static ssize_t show_hci_version(struct device *dev, |
250 | struct device_attribute *attr, char *buf) | ||
244 | { | 251 | { |
245 | struct hci_dev *hdev = to_hci_dev(dev); | 252 | struct hci_dev *hdev = to_hci_dev(dev); |
246 | return sprintf(buf, "%d\n", hdev->hci_ver); | 253 | return sprintf(buf, "%d\n", hdev->hci_ver); |
247 | } | 254 | } |
248 | 255 | ||
249 | static ssize_t show_hci_revision(struct device *dev, struct device_attribute *attr, char *buf) | 256 | static ssize_t show_hci_revision(struct device *dev, |
257 | struct device_attribute *attr, char *buf) | ||
250 | { | 258 | { |
251 | struct hci_dev *hdev = to_hci_dev(dev); | 259 | struct hci_dev *hdev = to_hci_dev(dev); |
252 | return sprintf(buf, "%d\n", hdev->hci_rev); | 260 | return sprintf(buf, "%d\n", hdev->hci_rev); |
253 | } | 261 | } |
254 | 262 | ||
255 | static ssize_t show_idle_timeout(struct device *dev, struct device_attribute *attr, char *buf) | 263 | static ssize_t show_idle_timeout(struct device *dev, |
264 | struct device_attribute *attr, char *buf) | ||
256 | { | 265 | { |
257 | struct hci_dev *hdev = to_hci_dev(dev); | 266 | struct hci_dev *hdev = to_hci_dev(dev); |
258 | return sprintf(buf, "%d\n", hdev->idle_timeout); | 267 | return sprintf(buf, "%d\n", hdev->idle_timeout); |
259 | } | 268 | } |
260 | 269 | ||
261 | static ssize_t store_idle_timeout(struct device *dev, struct device_attribute *attr, const char *buf, size_t count) | 270 | static ssize_t store_idle_timeout(struct device *dev, |
271 | struct device_attribute *attr, | ||
272 | const char *buf, size_t count) | ||
262 | { | 273 | { |
263 | struct hci_dev *hdev = to_hci_dev(dev); | 274 | struct hci_dev *hdev = to_hci_dev(dev); |
264 | unsigned int val; | 275 | unsigned int val; |
@@ -276,13 +287,16 @@ static ssize_t store_idle_timeout(struct device *dev, struct device_attribute *a | |||
276 | return count; | 287 | return count; |
277 | } | 288 | } |
278 | 289 | ||
279 | static ssize_t show_sniff_max_interval(struct device *dev, struct device_attribute *attr, char *buf) | 290 | static ssize_t show_sniff_max_interval(struct device *dev, |
291 | struct device_attribute *attr, char *buf) | ||
280 | { | 292 | { |
281 | struct hci_dev *hdev = to_hci_dev(dev); | 293 | struct hci_dev *hdev = to_hci_dev(dev); |
282 | return sprintf(buf, "%d\n", hdev->sniff_max_interval); | 294 | return sprintf(buf, "%d\n", hdev->sniff_max_interval); |
283 | } | 295 | } |
284 | 296 | ||
285 | static ssize_t store_sniff_max_interval(struct device *dev, struct device_attribute *attr, const char *buf, size_t count) | 297 | static ssize_t store_sniff_max_interval(struct device *dev, |
298 | struct device_attribute *attr, | ||
299 | const char *buf, size_t count) | ||
286 | { | 300 | { |
287 | struct hci_dev *hdev = to_hci_dev(dev); | 301 | struct hci_dev *hdev = to_hci_dev(dev); |
288 | u16 val; | 302 | u16 val; |
@@ -300,13 +314,16 @@ static ssize_t store_sniff_max_interval(struct device *dev, struct device_attrib | |||
300 | return count; | 314 | return count; |
301 | } | 315 | } |
302 | 316 | ||
303 | static ssize_t show_sniff_min_interval(struct device *dev, struct device_attribute *attr, char *buf) | 317 | static ssize_t show_sniff_min_interval(struct device *dev, |
318 | struct device_attribute *attr, char *buf) | ||
304 | { | 319 | { |
305 | struct hci_dev *hdev = to_hci_dev(dev); | 320 | struct hci_dev *hdev = to_hci_dev(dev); |
306 | return sprintf(buf, "%d\n", hdev->sniff_min_interval); | 321 | return sprintf(buf, "%d\n", hdev->sniff_min_interval); |
307 | } | 322 | } |
308 | 323 | ||
309 | static ssize_t store_sniff_min_interval(struct device *dev, struct device_attribute *attr, const char *buf, size_t count) | 324 | static ssize_t store_sniff_min_interval(struct device *dev, |
325 | struct device_attribute *attr, | ||
326 | const char *buf, size_t count) | ||
310 | { | 327 | { |
311 | struct hci_dev *hdev = to_hci_dev(dev); | 328 | struct hci_dev *hdev = to_hci_dev(dev); |
312 | u16 val; | 329 | u16 val; |
@@ -335,11 +352,11 @@ static DEVICE_ATTR(hci_version, S_IRUGO, show_hci_version, NULL); | |||
335 | static DEVICE_ATTR(hci_revision, S_IRUGO, show_hci_revision, NULL); | 352 | static DEVICE_ATTR(hci_revision, S_IRUGO, show_hci_revision, NULL); |
336 | 353 | ||
337 | static DEVICE_ATTR(idle_timeout, S_IRUGO | S_IWUSR, | 354 | static DEVICE_ATTR(idle_timeout, S_IRUGO | S_IWUSR, |
338 | show_idle_timeout, store_idle_timeout); | 355 | show_idle_timeout, store_idle_timeout); |
339 | static DEVICE_ATTR(sniff_max_interval, S_IRUGO | S_IWUSR, | 356 | static DEVICE_ATTR(sniff_max_interval, S_IRUGO | S_IWUSR, |
340 | show_sniff_max_interval, store_sniff_max_interval); | 357 | show_sniff_max_interval, store_sniff_max_interval); |
341 | static DEVICE_ATTR(sniff_min_interval, S_IRUGO | S_IWUSR, | 358 | static DEVICE_ATTR(sniff_min_interval, S_IRUGO | S_IWUSR, |
342 | show_sniff_min_interval, store_sniff_min_interval); | 359 | show_sniff_min_interval, store_sniff_min_interval); |
343 | 360 | ||
344 | static struct attribute *bt_host_attrs[] = { | 361 | static struct attribute *bt_host_attrs[] = { |
345 | &dev_attr_bus.attr, | 362 | &dev_attr_bus.attr, |
@@ -455,8 +472,8 @@ static void print_bt_uuid(struct seq_file *f, u8 *uuid) | |||
455 | memcpy(&data5, &uuid[14], 2); | 472 | memcpy(&data5, &uuid[14], 2); |
456 | 473 | ||
457 | seq_printf(f, "%.8x-%.4x-%.4x-%.4x-%.8x%.4x\n", | 474 | seq_printf(f, "%.8x-%.4x-%.4x-%.4x-%.8x%.4x\n", |
458 | ntohl(data0), ntohs(data1), ntohs(data2), | 475 | ntohl(data0), ntohs(data1), ntohs(data2), ntohs(data3), |
459 | ntohs(data3), ntohl(data4), ntohs(data5)); | 476 | ntohl(data4), ntohs(data5)); |
460 | } | 477 | } |
461 | 478 | ||
462 | static int uuids_show(struct seq_file *f, void *p) | 479 | static int uuids_show(struct seq_file *f, void *p) |
@@ -513,7 +530,7 @@ static int auto_accept_delay_get(void *data, u64 *val) | |||
513 | } | 530 | } |
514 | 531 | ||
515 | DEFINE_SIMPLE_ATTRIBUTE(auto_accept_delay_fops, auto_accept_delay_get, | 532 | DEFINE_SIMPLE_ATTRIBUTE(auto_accept_delay_fops, auto_accept_delay_get, |
516 | auto_accept_delay_set, "%llu\n"); | 533 | auto_accept_delay_set, "%llu\n"); |
517 | 534 | ||
518 | void hci_init_sysfs(struct hci_dev *hdev) | 535 | void hci_init_sysfs(struct hci_dev *hdev) |
519 | { | 536 | { |
@@ -547,15 +564,15 @@ int hci_add_sysfs(struct hci_dev *hdev) | |||
547 | return 0; | 564 | return 0; |
548 | 565 | ||
549 | debugfs_create_file("inquiry_cache", 0444, hdev->debugfs, | 566 | debugfs_create_file("inquiry_cache", 0444, hdev->debugfs, |
550 | hdev, &inquiry_cache_fops); | 567 | hdev, &inquiry_cache_fops); |
551 | 568 | ||
552 | debugfs_create_file("blacklist", 0444, hdev->debugfs, | 569 | debugfs_create_file("blacklist", 0444, hdev->debugfs, |
553 | hdev, &blacklist_fops); | 570 | hdev, &blacklist_fops); |
554 | 571 | ||
555 | debugfs_create_file("uuids", 0444, hdev->debugfs, hdev, &uuids_fops); | 572 | debugfs_create_file("uuids", 0444, hdev->debugfs, hdev, &uuids_fops); |
556 | 573 | ||
557 | debugfs_create_file("auto_accept_delay", 0444, hdev->debugfs, hdev, | 574 | debugfs_create_file("auto_accept_delay", 0444, hdev->debugfs, hdev, |
558 | &auto_accept_delay_fops); | 575 | &auto_accept_delay_fops); |
559 | return 0; | 576 | return 0; |
560 | } | 577 | } |
561 | 578 | ||