proc.c revision c7427409cd071a34c4a13c5c24531b7a10334e31
1ed9eccbe8970f6eedc1b978c157caf1251a896d4David Schleef/* 2ed9eccbe8970f6eedc1b978c157caf1251a896d4David Schleef module/proc.c 3ed9eccbe8970f6eedc1b978c157caf1251a896d4David Schleef /proc interface for comedi 4ed9eccbe8970f6eedc1b978c157caf1251a896d4David Schleef 5ed9eccbe8970f6eedc1b978c157caf1251a896d4David Schleef COMEDI - Linux Control and Measurement Device Interface 6ed9eccbe8970f6eedc1b978c157caf1251a896d4David Schleef Copyright (C) 1998 David A. Schleef <ds@schleef.org> 7ed9eccbe8970f6eedc1b978c157caf1251a896d4David Schleef 8ed9eccbe8970f6eedc1b978c157caf1251a896d4David Schleef This program is free software; you can redistribute it and/or modify 9ed9eccbe8970f6eedc1b978c157caf1251a896d4David Schleef it under the terms of the GNU General Public License as published by 10ed9eccbe8970f6eedc1b978c157caf1251a896d4David Schleef the Free Software Foundation; either version 2 of the License, or 11ed9eccbe8970f6eedc1b978c157caf1251a896d4David Schleef (at your option) any later version. 12ed9eccbe8970f6eedc1b978c157caf1251a896d4David Schleef 13ed9eccbe8970f6eedc1b978c157caf1251a896d4David Schleef This program is distributed in the hope that it will be useful, 14ed9eccbe8970f6eedc1b978c157caf1251a896d4David Schleef but WITHOUT ANY WARRANTY; without even the implied warranty of 15ed9eccbe8970f6eedc1b978c157caf1251a896d4David Schleef MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16ed9eccbe8970f6eedc1b978c157caf1251a896d4David Schleef GNU General Public License for more details. 17ed9eccbe8970f6eedc1b978c157caf1251a896d4David Schleef 18ed9eccbe8970f6eedc1b978c157caf1251a896d4David Schleef You should have received a copy of the GNU General Public License 19ed9eccbe8970f6eedc1b978c157caf1251a896d4David Schleef along with this program; if not, write to the Free Software 20ed9eccbe8970f6eedc1b978c157caf1251a896d4David Schleef Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 21ed9eccbe8970f6eedc1b978c157caf1251a896d4David Schleef 22ed9eccbe8970f6eedc1b978c157caf1251a896d4David Schleef*/ 23ed9eccbe8970f6eedc1b978c157caf1251a896d4David Schleef 24ed9eccbe8970f6eedc1b978c157caf1251a896d4David Schleef/* 25ed9eccbe8970f6eedc1b978c157caf1251a896d4David Schleef This is some serious bloatware. 26ed9eccbe8970f6eedc1b978c157caf1251a896d4David Schleef 27ed9eccbe8970f6eedc1b978c157caf1251a896d4David Schleef Taken from Dave A.'s PCL-711 driver, 'cuz I thought it 28ed9eccbe8970f6eedc1b978c157caf1251a896d4David Schleef was cool. 29ed9eccbe8970f6eedc1b978c157caf1251a896d4David Schleef*/ 30ed9eccbe8970f6eedc1b978c157caf1251a896d4David Schleef 31ed9eccbe8970f6eedc1b978c157caf1251a896d4David Schleef#define __NO_VERSION__ 32ed9eccbe8970f6eedc1b978c157caf1251a896d4David Schleef#include "comedidev.h" 33ed9eccbe8970f6eedc1b978c157caf1251a896d4David Schleef#include <linux/proc_fs.h> 34b6c777571b8d387d3add91170826f32a379e4313Bill Pemberton/* #include <linux/string.h> */ 35ed9eccbe8970f6eedc1b978c157caf1251a896d4David Schleef 36ed9eccbe8970f6eedc1b978c157caf1251a896d4David Schleefint comedi_read_procmem(char *buf, char **start, off_t offset, int len, 37ed9eccbe8970f6eedc1b978c157caf1251a896d4David Schleef int *eof, void *data); 38ed9eccbe8970f6eedc1b978c157caf1251a896d4David Schleef 39ed9eccbe8970f6eedc1b978c157caf1251a896d4David Schleefextern comedi_driver *comedi_drivers; 40ed9eccbe8970f6eedc1b978c157caf1251a896d4David Schleef 41ed9eccbe8970f6eedc1b978c157caf1251a896d4David Schleefint comedi_read_procmem(char *buf, char **start, off_t offset, int len, 42ed9eccbe8970f6eedc1b978c157caf1251a896d4David Schleef int *eof, void *data) 43ed9eccbe8970f6eedc1b978c157caf1251a896d4David Schleef{ 44ed9eccbe8970f6eedc1b978c157caf1251a896d4David Schleef int i; 45ed9eccbe8970f6eedc1b978c157caf1251a896d4David Schleef int devices_q = 0; 46ed9eccbe8970f6eedc1b978c157caf1251a896d4David Schleef int l = 0; 47ed9eccbe8970f6eedc1b978c157caf1251a896d4David Schleef comedi_driver *driv; 48ed9eccbe8970f6eedc1b978c157caf1251a896d4David Schleef 49ed9eccbe8970f6eedc1b978c157caf1251a896d4David Schleef l += sprintf(buf + l, 50ed9eccbe8970f6eedc1b978c157caf1251a896d4David Schleef "comedi version " COMEDI_RELEASE "\n" 51ed9eccbe8970f6eedc1b978c157caf1251a896d4David Schleef "format string: %s\n", 52ed9eccbe8970f6eedc1b978c157caf1251a896d4David Schleef "\"%2d: %-20s %-20s %4d\",i,driver_name,board_name,n_subdevices"); 53ed9eccbe8970f6eedc1b978c157caf1251a896d4David Schleef 54ed9eccbe8970f6eedc1b978c157caf1251a896d4David Schleef for (i = 0; i < COMEDI_NUM_BOARD_MINORS; i++) { 55ed9eccbe8970f6eedc1b978c157caf1251a896d4David Schleef struct comedi_device_file_info *dev_file_info = comedi_get_device_file_info(i); 56ed9eccbe8970f6eedc1b978c157caf1251a896d4David Schleef comedi_device *dev; 57ed9eccbe8970f6eedc1b978c157caf1251a896d4David Schleef 58c7427409cd071a34c4a13c5c24531b7a10334e31Bill Pemberton if (dev_file_info == NULL) 59c7427409cd071a34c4a13c5c24531b7a10334e31Bill Pemberton continue; 60ed9eccbe8970f6eedc1b978c157caf1251a896d4David Schleef dev = dev_file_info->device; 61ed9eccbe8970f6eedc1b978c157caf1251a896d4David Schleef 62ed9eccbe8970f6eedc1b978c157caf1251a896d4David Schleef if (dev->attached) { 63ed9eccbe8970f6eedc1b978c157caf1251a896d4David Schleef devices_q = 1; 64ed9eccbe8970f6eedc1b978c157caf1251a896d4David Schleef l += sprintf(buf + l, "%2d: %-20s %-20s %4d\n", 65ed9eccbe8970f6eedc1b978c157caf1251a896d4David Schleef i, 66ed9eccbe8970f6eedc1b978c157caf1251a896d4David Schleef dev->driver->driver_name, 67ed9eccbe8970f6eedc1b978c157caf1251a896d4David Schleef dev->board_name, dev->n_subdevices); 68ed9eccbe8970f6eedc1b978c157caf1251a896d4David Schleef } 69ed9eccbe8970f6eedc1b978c157caf1251a896d4David Schleef } 70ed9eccbe8970f6eedc1b978c157caf1251a896d4David Schleef if (!devices_q) { 71ed9eccbe8970f6eedc1b978c157caf1251a896d4David Schleef l += sprintf(buf + l, "no devices\n"); 72ed9eccbe8970f6eedc1b978c157caf1251a896d4David Schleef } 73ed9eccbe8970f6eedc1b978c157caf1251a896d4David Schleef 74ed9eccbe8970f6eedc1b978c157caf1251a896d4David Schleef for (driv = comedi_drivers; driv; driv = driv->next) { 75ed9eccbe8970f6eedc1b978c157caf1251a896d4David Schleef l += sprintf(buf + l, "%s:\n", driv->driver_name); 76ed9eccbe8970f6eedc1b978c157caf1251a896d4David Schleef for (i = 0; i < driv->num_names; i++) { 77ed9eccbe8970f6eedc1b978c157caf1251a896d4David Schleef l += sprintf(buf + l, " %s\n", 78ed9eccbe8970f6eedc1b978c157caf1251a896d4David Schleef *(char **)((char *)driv->board_name + 79ed9eccbe8970f6eedc1b978c157caf1251a896d4David Schleef i * driv->offset)); 80ed9eccbe8970f6eedc1b978c157caf1251a896d4David Schleef } 81ed9eccbe8970f6eedc1b978c157caf1251a896d4David Schleef if (!driv->num_names) { 82ed9eccbe8970f6eedc1b978c157caf1251a896d4David Schleef l += sprintf(buf + l, " %s\n", driv->driver_name); 83ed9eccbe8970f6eedc1b978c157caf1251a896d4David Schleef } 84ed9eccbe8970f6eedc1b978c157caf1251a896d4David Schleef } 85ed9eccbe8970f6eedc1b978c157caf1251a896d4David Schleef 86ed9eccbe8970f6eedc1b978c157caf1251a896d4David Schleef return l; 87ed9eccbe8970f6eedc1b978c157caf1251a896d4David Schleef} 88ed9eccbe8970f6eedc1b978c157caf1251a896d4David Schleef 89a8275fcaa7ca1f720f0c1b1c4c373964ffc9f72dJ.R. Mauro#ifdef CONFIG_PROC_FS 90ed9eccbe8970f6eedc1b978c157caf1251a896d4David Schleefvoid comedi_proc_init(void) 91ed9eccbe8970f6eedc1b978c157caf1251a896d4David Schleef{ 92ed9eccbe8970f6eedc1b978c157caf1251a896d4David Schleef struct proc_dir_entry *comedi_proc; 93ed9eccbe8970f6eedc1b978c157caf1251a896d4David Schleef 94ed9eccbe8970f6eedc1b978c157caf1251a896d4David Schleef comedi_proc = create_proc_entry("comedi", S_IFREG | S_IRUGO, 0); 95ed9eccbe8970f6eedc1b978c157caf1251a896d4David Schleef if (comedi_proc) 96ed9eccbe8970f6eedc1b978c157caf1251a896d4David Schleef comedi_proc->read_proc = comedi_read_procmem; 97ed9eccbe8970f6eedc1b978c157caf1251a896d4David Schleef} 98ed9eccbe8970f6eedc1b978c157caf1251a896d4David Schleef 99ed9eccbe8970f6eedc1b978c157caf1251a896d4David Schleefvoid comedi_proc_cleanup(void) 100ed9eccbe8970f6eedc1b978c157caf1251a896d4David Schleef{ 101ed9eccbe8970f6eedc1b978c157caf1251a896d4David Schleef remove_proc_entry("comedi", 0); 102ed9eccbe8970f6eedc1b978c157caf1251a896d4David Schleef} 103a8275fcaa7ca1f720f0c1b1c4c373964ffc9f72dJ.R. Mauro#endif 104