cregit-Linux how code gets into the kernel

Release 4.11 drivers/pnp/isapnp/proc.c

/*
 *  ISA Plug & Play support
 *  Copyright (c) by Jaroslav Kysela <perex@perex.cz>
 *
 *   This program is free software; you can redistribute it and/or modify
 *   it under the terms of the GNU General Public License as published by
 *   the Free Software Foundation; either version 2 of the License, or
 *   (at your option) any later version.
 *
 *   This program is distributed in the hope that it will be useful,
 *   but WITHOUT ANY WARRANTY; without even the implied warranty of
 *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *   GNU General Public License for more details.
 *
 *   You should have received a copy of the GNU General Public License
 *   along with this program; if not, write to the Free Software
 *   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */

#include <linux/module.h>
#include <linux/isapnp.h>
#include <linux/proc_fs.h>
#include <linux/init.h>
#include <linux/uaccess.h>

extern struct pnp_protocol isapnp_protocol;


static struct proc_dir_entry *isapnp_proc_bus_dir = NULL;


static loff_t isapnp_proc_bus_lseek(struct file *file, loff_t off, int whence) { return fixed_size_llseek(file, off, whence, 256); }

Contributors

PersonTokensPropCommitsCommitProp
Adam Belay2068.97%125.00%
Al Viro724.14%250.00%
Arnd Bergmann26.90%125.00%
Total29100.00%4100.00%


static ssize_t isapnp_proc_bus_read(struct file *file, char __user * buf, size_t nbytes, loff_t * ppos) { struct pnp_dev *dev = PDE_DATA(file_inode(file)); int pos = *ppos; int cnt, size = 256; if (pos >= size) return 0; if (nbytes >= size) nbytes = size; if (pos + nbytes > size) nbytes = size - pos; cnt = nbytes; if (!access_ok(VERIFY_WRITE, buf, cnt)) return -EINVAL; isapnp_cfg_begin(dev->card->number, dev->number); for (; pos < 256 && cnt > 0; pos++, buf++, cnt--) { unsigned char val; val = isapnp_read_byte(pos); __put_user(val, buf); } isapnp_cfg_end(); *ppos = pos; return nbytes; }

Contributors

PersonTokensPropCommitsCommitProp
Adam Belay15895.18%125.00%
Al Viro84.82%375.00%
Total166100.00%4100.00%

static const struct file_operations isapnp_proc_bus_file_operations = { .owner = THIS_MODULE, .llseek = isapnp_proc_bus_lseek, .read = isapnp_proc_bus_read, };
static int isapnp_proc_attach_device(struct pnp_dev *dev) { struct pnp_card *bus = dev->card; struct proc_dir_entry *de, *e; char name[16]; if (!(de = bus->procdir)) { sprintf(name, "%02x", bus->number); de = bus->procdir = proc_mkdir(name, isapnp_proc_bus_dir); if (!de) return -ENOMEM; } sprintf(name, "%02x", dev->number); e = dev->procent = proc_create_data(name, S_IFREG | S_IRUGO, de, &isapnp_proc_bus_file_operations, dev); if (!e) return -ENOMEM; proc_set_size(e, 256); return 0; }

Contributors

PersonTokensPropCommitsCommitProp
Adam Belay12292.42%133.33%
Denis V. Lunev64.55%133.33%
David Howells43.03%133.33%
Total132100.00%3100.00%


int __init isapnp_proc_init(void) { struct pnp_dev *dev; isapnp_proc_bus_dir = proc_mkdir("bus/isapnp", NULL); protocol_for_each_dev(&isapnp_protocol, dev) { isapnp_proc_attach_device(dev); } return 0; }

Contributors

PersonTokensPropCommitsCommitProp
Adam Belay3694.74%266.67%
Alexey Dobriyan25.26%133.33%
Total38100.00%3100.00%


Overall Contributors

PersonTokensPropCommitsCommitProp
Adam Belay36587.53%212.50%
Al Viro153.60%425.00%
Jaroslav Kysela122.88%318.75%
Denis V. Lunev112.64%16.25%
David Howells40.96%16.25%
Art Haas40.96%16.25%
Arnd Bergmann20.48%16.25%
Alexey Dobriyan20.48%16.25%
Arjan van de Ven10.24%16.25%
Andrew Lutomirski10.24%16.25%
Total417100.00%16100.00%
Information contained on this website is for historical information purposes only and does not indicate or represent copyright ownership.
Created with cregit.