blob: 2aa487b601870c59edcdbfd07673805e777214f8 [file] [log] [blame]
David Schleefed9eccb2008-11-04 20:29:31 -08001/*
2 module/proc.c
3 /proc interface for comedi
4
5 COMEDI - Linux Control and Measurement Device Interface
6 Copyright (C) 1998 David A. Schleef <ds@schleef.org>
7
8 This program is free software; you can redistribute it and/or modify
9 it under the terms of the GNU General Public License as published by
10 the Free Software Foundation; either version 2 of the License, or
11 (at your option) any later version.
12
13 This program is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 GNU General Public License for more details.
17
18 You should have received a copy of the GNU General Public License
19 along with this program; if not, write to the Free Software
20 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
21
22*/
23
24/*
25 This is some serious bloatware.
26
27 Taken from Dave A.'s PCL-711 driver, 'cuz I thought it
28 was cool.
29*/
30
31#define __NO_VERSION__
32#include "comedidev.h"
Greg Kroah-Hartmandc1da7f2010-04-30 15:59:18 -070033#include "comedi_fops.h"
David Schleefed9eccb2008-11-04 20:29:31 -080034#include <linux/proc_fs.h>
Greg Kroah-Hartman22d11422010-05-03 15:32:04 -070035#include <linux/string.h>
David Schleefed9eccb2008-11-04 20:29:31 -080036
Greg Kroah-Hartman22d11422010-05-03 15:32:04 -070037#ifdef CONFIG_PROC_FS
38static int comedi_read(char *buf, char **start, off_t offset, int len,
39 int *eof, void *data)
David Schleefed9eccb2008-11-04 20:29:31 -080040{
41 int i;
42 int devices_q = 0;
43 int l = 0;
Bill Pemberton139dfbd2009-03-16 22:05:25 -040044 struct comedi_driver *driv;
David Schleefed9eccb2008-11-04 20:29:31 -080045
46 l += sprintf(buf + l,
Mithlesh Thukral0a85b6f2009-06-08 21:04:41 +053047 "comedi version " COMEDI_RELEASE "\n"
48 "format string: %s\n",
Greg Kroah-Hartman8e81f182010-04-30 15:43:12 -070049 "\"%2d: %-20s %-20s %4d\", i, "
50 "driver_name, board_name, n_subdevices");
David Schleefed9eccb2008-11-04 20:29:31 -080051
52 for (i = 0; i < COMEDI_NUM_BOARD_MINORS; i++) {
Mithlesh Thukral0a85b6f2009-06-08 21:04:41 +053053 struct comedi_device_file_info *dev_file_info =
54 comedi_get_device_file_info(i);
Bill Pemberton71b5f4f2009-03-16 22:05:08 -040055 struct comedi_device *dev;
David Schleefed9eccb2008-11-04 20:29:31 -080056
Bill Pembertonc7427402009-03-16 22:03:56 -040057 if (dev_file_info == NULL)
58 continue;
David Schleefed9eccb2008-11-04 20:29:31 -080059 dev = dev_file_info->device;
60
61 if (dev->attached) {
62 devices_q = 1;
63 l += sprintf(buf + l, "%2d: %-20s %-20s %4d\n",
Mithlesh Thukral0a85b6f2009-06-08 21:04:41 +053064 i,
65 dev->driver->driver_name,
66 dev->board_name, dev->n_subdevices);
David Schleefed9eccb2008-11-04 20:29:31 -080067 }
68 }
Bill Pemberton82675f32009-03-16 22:04:23 -040069 if (!devices_q)
David Schleefed9eccb2008-11-04 20:29:31 -080070 l += sprintf(buf + l, "no devices\n");
David Schleefed9eccb2008-11-04 20:29:31 -080071
72 for (driv = comedi_drivers; driv; driv = driv->next) {
73 l += sprintf(buf + l, "%s:\n", driv->driver_name);
74 for (i = 0; i < driv->num_names; i++) {
75 l += sprintf(buf + l, " %s\n",
Mithlesh Thukral0a85b6f2009-06-08 21:04:41 +053076 *(char **)((char *)driv->board_name +
77 i * driv->offset));
David Schleefed9eccb2008-11-04 20:29:31 -080078 }
Bill Pemberton82675f32009-03-16 22:04:23 -040079 if (!driv->num_names)
David Schleefed9eccb2008-11-04 20:29:31 -080080 l += sprintf(buf + l, " %s\n", driv->driver_name);
David Schleefed9eccb2008-11-04 20:29:31 -080081 }
82
83 return l;
84}
85
86void comedi_proc_init(void)
87{
88 struct proc_dir_entry *comedi_proc;
89
Greg Kroah-Hartman22d11422010-05-03 15:32:04 -070090 comedi_proc = create_proc_entry("comedi", S_IFREG | S_IRUGO, NULL);
David Schleefed9eccb2008-11-04 20:29:31 -080091 if (comedi_proc)
Greg Kroah-Hartman22d11422010-05-03 15:32:04 -070092 comedi_proc->read_proc = comedi_read;
David Schleefed9eccb2008-11-04 20:29:31 -080093}
94
95void comedi_proc_cleanup(void)
96{
Greg Kroah-Hartman22d11422010-05-03 15:32:04 -070097 remove_proc_entry("comedi", NULL);
David Schleefed9eccb2008-11-04 20:29:31 -080098}
J.R. Mauroa8275fc2008-11-14 20:01:14 -050099#endif