@ -33,6 +33,8 @@
# include <linux/init.h>
# include <linux/wait.h>
# include <linux/device.h>
# include <linux/debugfs.h>
# include <linux/seq_file.h>
# include <linux/net.h>
# include <linux/mutex.h>
# include <linux/kthread.h>
@ -2098,14 +2100,10 @@ static struct hci_cb rfcomm_cb = {
. security_cfm = rfcomm_security_cfm
} ;
static ssize_t rfcomm_dlc_sysfs_show ( struct class * dev ,
struct class_attribute * attr ,
char * buf )
static int rfcomm_dlc_debugfs_show ( struct seq_file * f , void * x )
{
struct rfcomm_session * s ;
struct list_head * pp , * p ;
char * str = buf ;
int size = PAGE_SIZE ;
rfcomm_lock ( ) ;
@ -2114,29 +2112,33 @@ static ssize_t rfcomm_dlc_sysfs_show(struct class *dev,
list_for_each ( pp , & s - > dlcs ) {
struct sock * sk = s - > sock - > sk ;
struct rfcomm_dlc * d = list_entry ( pp , struct rfcomm_dlc , list ) ;
int len ;
len = snprintf ( str , size , " %s %s %ld %d %d %d %d \n " ,
batostr ( & bt_sk ( sk ) - > src ) , batostr ( & bt_sk ( sk ) - > dst ) ,
d - > state , d - > dlci , d - > mtu , d - > rx_credits , d - > tx_credits ) ;
size - = len ;
if ( size < = 0 )
break ;
str + = len ;
seq_printf ( f , " %s %s %ld %d %d %d %d \n " ,
batostr ( & bt_sk ( sk ) - > src ) ,
batostr ( & bt_sk ( sk ) - > dst ) ,
d - > state , d - > dlci , d - > mtu ,
d - > rx_credits , d - > tx_credits ) ;
}
if ( size < = 0 )
break ;
}
rfcomm_unlock ( ) ;
return ( str - buf ) ;
return 0 ;
}
static int rfcomm_dlc_debugfs_open ( struct inode * inode , struct file * file )
{
return single_open ( file , rfcomm_dlc_debugfs_show , inode - > i_private ) ;
}
static CLASS_ATTR ( rfcomm_dlc , S_IRUGO , rfcomm_dlc_sysfs_show , NULL ) ;
static const struct file_operations rfcomm_dlc_debugfs_fops = {
. open = rfcomm_dlc_debugfs_open ,
. read = seq_read ,
. llseek = seq_lseek ,
. release = single_release ,
} ;
static struct dentry * rfcomm_dlc_debugfs ;
/* ---- Initialization ---- */
static int __init rfcomm_init ( void )
@ -2153,8 +2155,12 @@ static int __init rfcomm_init(void)
goto unregister ;
}
if ( class_create_file ( bt_class , & class_attr_rfcomm_dlc ) < 0 )
BT_ERR ( " Failed to create RFCOMM info file " ) ;
if ( bt_debugfs ) {
rfcomm_dlc_debugfs = debugfs_create_file ( " rfcomm_dlc " , 0444 ,
bt_debugfs , NULL , & rfcomm_dlc_debugfs_fops ) ;
if ( ! rfcomm_dlc_debugfs )
BT_ERR ( " Failed to create RFCOMM debug file " ) ;
}
err = rfcomm_init_ttys ( ) ;
if ( err < 0 )
@ -2182,7 +2188,7 @@ unregister:
static void __exit rfcomm_exit ( void )
{
class_remove_file ( bt_class , & class_attr_rfcomm_dlc ) ;
debugfs_remove ( rfcomm_dlc_debugfs ) ;
hci_unregister_cb ( & rfcomm_cb ) ;