2017-11-07 14:58:43 +01:00
// SPDX-License-Identifier: GPL-2.0+
2008-11-04 20:29:31 -08:00
/*
2014-03-18 02:14:20 -05:00
* / proc interface for comedi
*
* COMEDI - Linux Control and Measurement Device Interface
* Copyright ( C ) 1998 David A . Schleef < ds @ schleef . org >
*/
2008-11-04 20:29:31 -08:00
/*
2014-03-18 02:14:20 -05:00
* This is some serious bloatware .
*
* Taken from Dave A . ' s PCL - 711 driver , ' cuz I thought it
* was cool .
*/
2008-11-04 20:29:31 -08:00
2021-11-17 12:05:59 +00:00
# include <linux/comedi/comedidev.h>
2012-06-19 10:17:46 +01:00
# include "comedi_internal.h"
2008-11-04 20:29:31 -08:00
# include <linux/proc_fs.h>
2013-04-08 16:39:33 +01:00
# include <linux/seq_file.h>
2008-11-04 20:29:31 -08:00
2013-04-08 16:39:33 +01:00
static int comedi_read ( struct seq_file * m , void * v )
2008-11-04 20:29:31 -08:00
{
int i ;
int devices_q = 0 ;
2009-03-16 22:05:25 -04:00
struct comedi_driver * driv ;
2008-11-04 20:29:31 -08:00
2014-03-18 02:14:20 -05:00
seq_printf ( m , " comedi version " COMEDI_RELEASE " \n format string: %s \n " ,
" \" %2d: %-20s %-20s %4d \" , i, driver_name, board_name, n_subdevices " ) ;
2008-11-04 20:29:31 -08:00
for ( i = 0 ; i < COMEDI_NUM_BOARD_MINORS ; i + + ) {
2013-11-08 15:03:36 +00:00
struct comedi_device * dev = comedi_dev_get_from_minor ( i ) ;
2012-12-19 15:35:23 -07:00
if ( ! dev )
2009-03-16 22:03:56 -04:00
continue ;
2008-11-04 20:29:31 -08:00
2013-11-08 15:03:36 +00:00
down_read ( & dev - > attach_lock ) ;
2008-11-04 20:29:31 -08:00
if ( dev - > attached ) {
devices_q = 1 ;
2013-04-08 16:39:33 +01:00
seq_printf ( m , " %2d: %-20s %-20s %4d \n " ,
i , dev - > driver - > driver_name ,
dev - > board_name , dev - > n_subdevices ) ;
2008-11-04 20:29:31 -08:00
}
2013-11-08 15:03:36 +00:00
up_read ( & dev - > attach_lock ) ;
comedi_dev_put ( dev ) ;
2008-11-04 20:29:31 -08:00
}
2009-03-16 22:04:23 -04:00
if ( ! devices_q )
2013-04-08 16:39:33 +01:00
seq_puts ( m , " no devices \n " ) ;
2008-11-04 20:29:31 -08:00
2013-06-27 14:50:58 +01:00
mutex_lock ( & comedi_drivers_list_lock ) ;
2008-11-04 20:29:31 -08:00
for ( driv = comedi_drivers ; driv ; driv = driv - > next ) {
2013-04-08 16:39:33 +01:00
seq_printf ( m , " %s: \n " , driv - > driver_name ) ;
for ( i = 0 ; i < driv - > num_names ; i + + )
seq_printf ( m , " %s \n " ,
* ( char * * ) ( ( char * ) driv - > board_name +
i * driv - > offset ) ) ;
2009-03-16 22:04:23 -04:00
if ( ! driv - > num_names )
2013-04-08 16:39:33 +01:00
seq_printf ( m , " %s \n " , driv - > driver_name ) ;
2008-11-04 20:29:31 -08:00
}
2013-06-27 14:50:58 +01:00
mutex_unlock ( & comedi_drivers_list_lock ) ;
2008-11-04 20:29:31 -08:00
2013-04-08 16:39:33 +01:00
return 0 ;
}
2016-12-30 19:26:50 +08:00
void __init comedi_proc_init ( void )
2008-11-04 20:29:31 -08:00
{
2018-05-15 15:57:23 +02:00
if ( ! proc_create_single ( " comedi " , 0444 , NULL , comedi_read ) )
2016-12-30 19:27:41 +08:00
pr_warn ( " comedi: unable to create proc entry \n " ) ;
2008-11-04 20:29:31 -08:00
}
void comedi_proc_cleanup ( void )
{
2010-05-03 15:32:04 -07:00
remove_proc_entry ( " comedi " , NULL ) ;
2008-11-04 20:29:31 -08:00
}