proc.c revision 4da5fa9a439fda3019585aecab44462fd641b6f8
11da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* 21da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds module/proc.c 31da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds /proc interface for comedi 41da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 51da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds COMEDI - Linux Control and Measurement Device Interface 61da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds Copyright (C) 1998 David A. Schleef <ds@schleef.org> 71da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 8fbb7a2dc2be493c87399550bdc2ddaa510cdf450Bob Moore This program is free software; you can redistribute it and/or modify 91da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds it under the terms of the GNU General Public License as published by 101da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds the Free Software Foundation; either version 2 of the License, or 111da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds (at your option) any later version. 121da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 131da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds This program is distributed in the hope that it will be useful, 141da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds but WITHOUT ANY WARRANTY; without even the implied warranty of 151da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 161da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds GNU General Public License for more details. 171da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 181da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds You should have received a copy of the GNU General Public License 191da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds along with this program; if not, write to the Free Software 201da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 211da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 221da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds*/ 231da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 241da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* 251da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds This is some serious bloatware. 261da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 271da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds Taken from Dave A.'s PCL-711 driver, 'cuz I thought it 281da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds was cool. 291da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds*/ 301da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 311da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#include "comedidev.h" 321da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#include "comedi_internal.h" 331da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#include <linux/proc_fs.h> 341da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#include <linux/string.h> 351da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 361da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#ifdef CONFIG_PROC_FS 371da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstatic int comedi_read(char *buf, char **start, off_t offset, int len, 381da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds int *eof, void *data) 391da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds{ 401da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds int i; 411da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds int devices_q = 0; 421da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds int l = 0; 431da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds struct comedi_driver *driv; 441da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 45e2f7a7772880458edff1b1cc5a988947229fac26Len Brown l += sprintf(buf + l, 46e2f7a7772880458edff1b1cc5a988947229fac26Len Brown "comedi version " COMEDI_RELEASE "\n" 471da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds "format string: %s\n", 481da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds "\"%2d: %-20s %-20s %4d\", i, " 494be44fcd3bf648b782f4460fd06dfae6c42ded4bLen Brown "driver_name, board_name, n_subdevices"); 501da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 511da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds for (i = 0; i < COMEDI_NUM_BOARD_MINORS; i++) { 521da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds struct comedi_device *dev = comedi_dev_from_minor(i); 531da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 541da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds if (!dev) 551da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds continue; 561da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 571da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds if (dev->attached) { 581da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds devices_q = 1; 591da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds l += sprintf(buf + l, "%2d: %-20s %-20s %4d\n", 601da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds i, 611da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds dev->driver->driver_name, 624be44fcd3bf648b782f4460fd06dfae6c42ded4bLen Brown dev->board_name, dev->n_subdevices); 631da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds } 644be44fcd3bf648b782f4460fd06dfae6c42ded4bLen Brown } 654be44fcd3bf648b782f4460fd06dfae6c42ded4bLen Brown if (!devices_q) 664be44fcd3bf648b782f4460fd06dfae6c42ded4bLen Brown l += sprintf(buf + l, "no devices\n"); 671da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 68b229cf92eee616c7cb5ad8cdb35a19b119f00bc8Bob Moore for (driv = comedi_drivers; driv; driv = driv->next) { 691da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds l += sprintf(buf + l, "%s:\n", driv->driver_name); 701da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds for (i = 0; i < driv->num_names; i++) { 711da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds l += sprintf(buf + l, " %s\n", 721da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *(char **)((char *)driv->board_name + 7352fc0b026e99b5d5d585095148d997d5634bbc25Bob Moore i * driv->offset)); 741da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds } 751da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds if (!driv->num_names) 761da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds l += sprintf(buf + l, " %s\n", driv->driver_name); 7752fc0b026e99b5d5d585095148d997d5634bbc25Bob Moore } 781da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 791da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds return l; 804be44fcd3bf648b782f4460fd06dfae6c42ded4bLen Brown} 811da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 8252fc0b026e99b5d5d585095148d997d5634bbc25Bob Moorevoid comedi_proc_init(void) 831da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds{ 841da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds struct proc_dir_entry *comedi_proc; 851da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 861da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds comedi_proc = create_proc_entry("comedi", S_IFREG | S_IRUGO, NULL); 871da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds if (comedi_proc) 881da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds comedi_proc->read_proc = comedi_read; 891da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds} 9044f6c01242da4e162f28d8e1216a8c7a91174605Robert Moore 9144f6c01242da4e162f28d8e1216a8c7a91174605Robert Moorevoid comedi_proc_cleanup(void) 921da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds{ 931da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds remove_proc_entry("comedi", NULL); 941da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds} 954be44fcd3bf648b782f4460fd06dfae6c42ded4bLen Brown#endif 961da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds