This patch completely removes drivers/ocp/ocp-proc.c from 2.5, along with all references to it - it's been terminally broken for some time now. Shall I commit this to linuxppc-2.5?
diff -urN /home/dgibson/kernel/linuxppc-2.5/arch/ppc/platforms/4xx/Config.in linux-bluefish/arch/ppc/platforms/4xx/Config.in --- /home/dgibson/kernel/linuxppc-2.5/arch/ppc/platforms/4xx/Config.in 2002-09-19 16:08:06.000000000 +1000 +++ linux-bluefish/arch/ppc/platforms/4xx/Config.in 2002-10-03 16:17:07.000000000 +1000 @@ -133,9 +133,6 @@ -o "$CONFIG_XILINX_OCP" = "y" ]; then define_bool CONFIG_OCP y fi - if [ "$CONFIG_OCP" = "y" ]; then - bool 'OCP Device proc fs support (experimental)' CONFIG_OCP_PROC - fi bool "PCI support" CONFIG_PCI dep_bool 'Power Management support (experimental)' CONFIG_PM $CONFIG_EXPERIMENTAL diff -urN /home/dgibson/kernel/linuxppc-2.5/drivers/ocp/Makefile linux-bluefish/drivers/ocp/Makefile --- /home/dgibson/kernel/linuxppc-2.5/drivers/ocp/Makefile 2002-09-19 16:09:26.000000000 +1000 +++ linux-bluefish/drivers/ocp/Makefile 2002-09-19 17:02:04.000000000 +1000 @@ -14,7 +14,6 @@ export-objs := ocp.o ocp-driver.o ocp-probe.o ocp-hotplug.o obj-y += ocp.o ocp-driver.o ocp-probe.o -obj-$(CONFIG_OCP_PROC) += ocp-proc.o obj-$(CONFIG_PM) += ocp-power.o obj-$(CONFIG_HOTPLUG) += ocp-hotplug.o diff -urN /home/dgibson/kernel/linuxppc-2.5/drivers/ocp/ocp-hotplug.c linux-bluefish/drivers/ocp/ocp-hotplug.c --- /home/dgibson/kernel/linuxppc-2.5/drivers/ocp/ocp-hotplug.c 2002-09-19 16:09:26.000000000 +1000 +++ linux-bluefish/drivers/ocp/ocp-hotplug.c 2002-09-19 17:02:04.000000000 +1000 @@ -58,9 +58,6 @@ { list_add_tail(&dev->bus_list, &bus->devices); list_add_tail(&dev->global_list, &ocp_devices); -#ifdef CONFIG_PROC_FS - ocp_proc_attach_device(dev); -#endif /* notify userspace of new hotplug device */ run_sbin_hotplug(dev, TRUE); } @@ -93,9 +90,6 @@ list_del(&dev->bus_list); list_del(&dev->global_list); // ocp_free_resources(dev); -#ifdef CONFIG_PROC_FS - ocp_proc_detach_device(dev); -#endif /* notify userspace of hotplug device removal */ run_sbin_hotplug(dev, FALSE); diff -urN /home/dgibson/kernel/linuxppc-2.5/drivers/ocp/ocp-proc.c linux-bluefish/drivers/ocp/ocp-proc.c --- /home/dgibson/kernel/linuxppc-2.5/drivers/ocp/ocp-proc.c Thu Sep 19 16:09:26 2002 +++ linux-bluefish/drivers/ocp/ocp-proc.c Thu Jan 01 10:00:00 1970 @@ -1,235 +0,0 @@ -/* - * FILE NAME: ocp-proc.c - * - * BRIEF MODULE DESCRIPTION: - * Based on drivers/pci/proc.c, Copyright (c) 1997--1999 Martin Mares - * - * Author: Armin <akuster at mvista.com> - * - * - * 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 SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN - * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON - * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * 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. - * - * Version 1.0 02/10/02 -Armin - * initial release - * - * Version 1.1 02/13/02 - Armin - * Added emac support - * - * Version 1.2 05/25/02 -Armin - * struct name change from ocp_dev to ocp_dev - * - * Version 1.3 05/30/02 - Armin - * added ZMII to show funcs. - * - * Version 1.4 06/14/02 - Armin/David Gidson - * using OCP_IRQ_MUL for those devices that have - * more than one irq . - * cleaned the up display format - * Added some cleanups from David Gibson - * - * Version 1.5 06/28/02 - Armin - * removed use/need of irq_* - * - */ - -#include <linux/types.h> -#include <linux/kernel.h> -#include <linux/proc_fs.h> -#include <linux/init.h> -#include <linux/seq_file.h> - -#include <asm/uaccess.h> -#include <asm/byteorder.h> -#include <asm/ocp.h> -extern struct type_info ocp_type_info[]; - -/* iterator */ -static void * -ocp_seq_start(struct seq_file *m, loff_t * pos) -{ - struct list_head *p = &ocp_list; - loff_t n = *pos; - - /* XXX: surely we need some locking for traversing the list? */ - while (n--) { - p = p->next; - if (p == &ocp_list) - return NULL; - } - return p; -} -static void * -ocp_seq_next(struct seq_file *m, void *v, loff_t * pos) -{ - struct list_head *p = v; - (*pos)++; - return p->next != &ocp_list ? p->next : NULL; -} -static void -ocp_seq_stop(struct seq_file *m, void *v) -{ - /* release whatever locks we need */ -} - -static int -show_device(struct seq_file *m, void *v) -{ - struct list_head *p = v; - int i; - const struct ocp_dev *drv; - - if (p == &ocp_list) - return 0; - - drv = ocp_dev_g(p); - seq_printf(m, "%s\t %02d", drv->name, drv->num); - i = ocp_get_irq(drv->type, drv->num); - if (i == OCP_IRQ_NA) - seq_printf(m, " N/A"); - else - seq_printf(m, " %02d", drv->irq); - - seq_printf(m, " %x", drv->paddr); - if (drv->vaddr) - seq_printf(m, " %x", drv->vaddr); - else - seq_printf(m, " N/A"); - seq_putc(m, '\n'); - return 0; -} - -/* - * Convert some of the configuration space registers of the device at - * address (bus,devfn) into a string (possibly several lines each). - * The configuration string is stored starting at buf[len]. If the - * string would exceed the size of the buffer (SIZE), 0 is returned. - */ -static int -show_config(struct seq_file *m, void *v) -{ - struct list_head *p = v; - int i; - const struct ocp_dev *drv; - if (p == &ocp_list) { - seq_puts(m, "OCP devices found:\n"); - return 0; - } - drv = ocp_dev_g(p); - seq_printf(m, " Device: %s%02d\n", drv->name, drv->num); - seq_printf(m, " description: %s\n", ocp_type_info[drv->type].desc); - i = ocp_get_irq(drv->type, drv->num); - if (i == OCP_IRQ_NA) - seq_printf(m, " irq: N/A\n"); - else - seq_printf(m, " irq: %02d\n", drv->irq); - - - seq_printf(m, " physical: 0x%p\n", drv->paddr); - if (drv->vaddr) - seq_printf(m, " virtual: 0x%p\n\n", drv->vaddr); - else - seq_printf(m, " virtual: N/A\n\n"); - return 0; -} -static struct seq_operations proc_ocp_op = { - start:ocp_seq_start, - next:ocp_seq_next, - stop:ocp_seq_stop, - show:show_device -}; - -static struct seq_operations proc_bus_ocp_op = { - start:ocp_seq_start, - next:ocp_seq_next, - stop:ocp_seq_stop, - show:show_config -}; - -static int -proc_ocp_open(struct inode *inode, struct file *file) -{ - return seq_open(file, &proc_ocp_op); -} -static struct file_operations proc_ocp_operations = { - open:proc_ocp_open, - read:seq_read, - llseek:seq_lseek, - release:seq_release, -}; - -static struct proc_dir_entry *proc_bus_ocp_dir; - -int -ocp_proc_attach_device(struct ocp_dev *dev) -{ - struct proc_dir_entry *e; - char name[16]; - - sprintf(name, "%s%d", dev->name, dev->num); - e = dev->procent = - create_proc_entry(name, S_IFREG | S_IRUGO | S_IWUSR, - proc_bus_ocp_dir); - if (!e) - return -ENOMEM; - e->proc_fops = &proc_ocp_operations; - e->data = dev; - e->size = 256; - return 0; -} - -int -ocp_proc_detach_device(struct ocp_dev *dev) -{ - struct proc_dir_entry *e; - - if ((e = dev->procent)) { - if (atomic_read(&e->count)) - return -EBUSY; - remove_proc_entry(e->name, proc_bus_ocp_dir); - dev->procent = NULL; - } - return 0; -} - -static int -proc_bus_ocp_open(struct inode *inode, struct file *file) -{ - return seq_open(file, &proc_bus_ocp_op); -} -static struct file_operations proc_bus_ocp_operations = { - open:proc_bus_ocp_open, - read:seq_read, - llseek:seq_lseek, - release:seq_release, -}; - -static int __init -ocp_proc_init(void) -{ - struct proc_dir_entry *entry; - proc_bus_ocp_dir = proc_mkdir("ocp", proc_bus); - entry = create_proc_entry("devices", 0, proc_bus_ocp_dir); - if (entry) - entry->proc_fops = &proc_bus_ocp_operations; - return 0; -} - -__initcall(ocp_proc_init); diff -urN /home/dgibson/kernel/linuxppc-2.5/include/linux/ocp.h linux-bluefish/include/linux/ocp.h --- /home/dgibson/kernel/linuxppc-2.5/include/linux/ocp.h 2002-09-20 14:36:11.000000000 +1000 +++ linux-bluefish/include/linux/ocp.h 2002-10-03 16:10:40.000000000 +1000 @@ -242,8 +242,6 @@ extern struct ocp_bus *ocp_scan_bus(int bus, void *sysdata); extern struct bus_type ocp_bus_type; extern struct ocp_device *ocp_get_dev(unsigned int device, int index); -extern int ocp_proc_attach_device(struct ocp_device *dev); -extern int ocp_proc_detach_device(struct ocp_device *dev); extern unsigned int ocp_get_device(unsigned int index); extern unsigned long ocp_get_paddr(unsigned int device, int dev_num); extern unsigned int ocp_get_max(unsigned int device); -- David Gibson | For every complex problem there is a david at gibson.dropbear.id.au | solution which is simple, neat and | wrong. http://www.ozlabs.org/people/dgibson ** Sent via the linuxppc-embedded mail list. See http://lists.linuxppc.org/