diff options
author | Johan Hedberg <johan.hedberg@nokia.com> | 2011-01-04 04:39:44 -0500 |
---|---|---|
committer | Gustavo F. Padovan <padovan@profusion.mobi> | 2011-02-07 22:40:06 -0500 |
commit | 930e13363fb0e94db6e8b59c54dfb5c59355113e (patch) | |
tree | 09153ad2a38045a9758abed08f195e5ad27e669a /net/bluetooth/hci_sysfs.c | |
parent | 2aeb9a1ae0e34fb46cb78b82f827a6a54ab65111 (diff) |
Bluetooth: Implement debugfs support for listing UUIDs
This patch adds a debugfs entry to list the UUIDs that have been
registered through the management interface.
Signed-off-by: Johan Hedberg <johan.hedberg@nokia.com>
Signed-off-by: Gustavo F. Padovan <padovan@profusion.mobi>
Diffstat (limited to 'net/bluetooth/hci_sysfs.c')
-rw-r--r-- | net/bluetooth/hci_sysfs.c | 52 |
1 files changed, 52 insertions, 0 deletions
diff --git a/net/bluetooth/hci_sysfs.c b/net/bluetooth/hci_sysfs.c index 5fce3d6d07b4..23471dd9ee2f 100644 --- a/net/bluetooth/hci_sysfs.c +++ b/net/bluetooth/hci_sysfs.c | |||
@@ -461,6 +461,56 @@ static const struct file_operations blacklist_fops = { | |||
461 | .llseek = seq_lseek, | 461 | .llseek = seq_lseek, |
462 | .release = single_release, | 462 | .release = single_release, |
463 | }; | 463 | }; |
464 | |||
465 | static void print_bt_uuid(struct seq_file *f, u8 *uuid) | ||
466 | { | ||
467 | u32 data0, data4; | ||
468 | u16 data1, data2, data3, data5; | ||
469 | |||
470 | memcpy(&data0, &uuid[0], 4); | ||
471 | memcpy(&data1, &uuid[4], 2); | ||
472 | memcpy(&data2, &uuid[6], 2); | ||
473 | memcpy(&data3, &uuid[8], 2); | ||
474 | memcpy(&data4, &uuid[10], 4); | ||
475 | memcpy(&data5, &uuid[14], 2); | ||
476 | |||
477 | seq_printf(f, "%.8x-%.4x-%.4x-%.4x-%.8x%.4x\n", | ||
478 | ntohl(data0), ntohs(data1), ntohs(data2), | ||
479 | ntohs(data3), ntohl(data4), ntohs(data5)); | ||
480 | } | ||
481 | |||
482 | static int uuids_show(struct seq_file *f, void *p) | ||
483 | { | ||
484 | struct hci_dev *hdev = f->private; | ||
485 | struct list_head *l; | ||
486 | |||
487 | hci_dev_lock_bh(hdev); | ||
488 | |||
489 | list_for_each(l, &hdev->uuids) { | ||
490 | struct bt_uuid *uuid; | ||
491 | |||
492 | uuid = list_entry(l, struct bt_uuid, list); | ||
493 | |||
494 | print_bt_uuid(f, uuid->uuid); | ||
495 | } | ||
496 | |||
497 | hci_dev_unlock_bh(hdev); | ||
498 | |||
499 | return 0; | ||
500 | } | ||
501 | |||
502 | static int uuids_open(struct inode *inode, struct file *file) | ||
503 | { | ||
504 | return single_open(file, uuids_show, inode->i_private); | ||
505 | } | ||
506 | |||
507 | static const struct file_operations uuids_fops = { | ||
508 | .open = uuids_open, | ||
509 | .read = seq_read, | ||
510 | .llseek = seq_lseek, | ||
511 | .release = single_release, | ||
512 | }; | ||
513 | |||
464 | int hci_register_sysfs(struct hci_dev *hdev) | 514 | int hci_register_sysfs(struct hci_dev *hdev) |
465 | { | 515 | { |
466 | struct device *dev = &hdev->dev; | 516 | struct device *dev = &hdev->dev; |
@@ -493,6 +543,8 @@ int hci_register_sysfs(struct hci_dev *hdev) | |||
493 | debugfs_create_file("blacklist", 0444, hdev->debugfs, | 543 | debugfs_create_file("blacklist", 0444, hdev->debugfs, |
494 | hdev, &blacklist_fops); | 544 | hdev, &blacklist_fops); |
495 | 545 | ||
546 | debugfs_create_file("uuids", 0444, hdev->debugfs, hdev, &uuids_fops); | ||
547 | |||
496 | return 0; | 548 | return 0; |
497 | } | 549 | } |
498 | 550 | ||