Pull sony into release branch
[pandora-kernel.git] / arch / ia64 / sn / kernel / sn2 / sn_proc_fs.c
index c686d9c..62b3e9a 100644 (file)
@@ -5,7 +5,6 @@
  *
  * Copyright (C) 2000-2005 Silicon Graphics, Inc. All rights reserved.
  */
-#include <linux/config.h>
 
 #ifdef CONFIG_PROC_FS
 #include <linux/proc_fs.h>
@@ -90,60 +89,80 @@ static int coherence_id_open(struct inode *inode, struct file *file)
        return single_open(file, coherence_id_show, NULL);
 }
 
-static struct proc_dir_entry
-*sn_procfs_create_entry(const char *name, struct proc_dir_entry *parent,
-                       int (*openfunc)(struct inode *, struct file *),
-                       int (*releasefunc)(struct inode *, struct file *))
-{
-       struct proc_dir_entry *e = create_proc_entry(name, 0444, parent);
-
-       if (e) {
-               e->proc_fops = (struct file_operations *)kmalloc(
-                       sizeof(struct file_operations), GFP_KERNEL);
-               if (e->proc_fops) {
-                       memset(e->proc_fops, 0, sizeof(struct file_operations));
-                       e->proc_fops->open = openfunc;
-                       e->proc_fops->read = seq_read;
-                       e->proc_fops->llseek = seq_lseek;
-                       e->proc_fops->release = releasefunc;
-               }
-       }
-
-       return e;
-}
-
 /* /proc/sgi_sn/sn_topology uses seq_file, see sn_hwperf.c */
 extern int sn_topology_open(struct inode *, struct file *);
 extern int sn_topology_release(struct inode *, struct file *);
 
+static const struct file_operations proc_partition_id_fops = {
+       .open           = partition_id_open,
+       .read           = seq_read,
+       .llseek         = seq_lseek,
+       .release        = single_release,
+};
+
+static const struct file_operations proc_system_sn_fops = {
+       .open           = system_serial_number_open,
+       .read           = seq_read,
+       .llseek         = seq_lseek,
+       .release        = single_release,
+};
+
+static const struct file_operations proc_license_id_fops = {
+       .open           = licenseID_open,
+       .read           = seq_read,
+       .llseek         = seq_lseek,
+       .release        = single_release,
+};
+
+static const struct file_operations proc_sn_force_intr_fops = {
+       .open           = sn_force_interrupt_open,
+       .read           = seq_read,
+       .write          = sn_force_interrupt_write_proc,
+       .llseek         = seq_lseek,
+       .release        = single_release,
+};
+
+static const struct file_operations proc_coherence_id_fops = {
+       .open           = coherence_id_open,
+       .read           = seq_read,
+       .llseek         = seq_lseek,
+       .release        = single_release,
+};
+
+static const struct file_operations proc_sn_topo_fops = {
+       .open           = sn_topology_open,
+       .read           = seq_read,
+       .llseek         = seq_lseek,
+       .release        = sn_topology_release,
+};
+
 void register_sn_procfs(void)
 {
        static struct proc_dir_entry *sgi_proc_dir = NULL;
-       struct proc_dir_entry *e;
+       struct proc_dir_entry *pde;
 
        BUG_ON(sgi_proc_dir != NULL);
        if (!(sgi_proc_dir = proc_mkdir("sgi_sn", NULL)))
                return;
 
-       sn_procfs_create_entry("partition_id", sgi_proc_dir,
-                              partition_id_open, single_release);
-
-       sn_procfs_create_entry("system_serial_number", sgi_proc_dir,
-                              system_serial_number_open, single_release);
-
-       sn_procfs_create_entry("licenseID", sgi_proc_dir, 
-                              licenseID_open, single_release);
-
-       e = sn_procfs_create_entry("sn_force_interrupt", sgi_proc_dir, 
-                                  sn_force_interrupt_open, single_release);
-       if (e) 
-               e->proc_fops->write = sn_force_interrupt_write_proc;
-
-       sn_procfs_create_entry("coherence_id", sgi_proc_dir, 
-                              coherence_id_open, single_release);
-       
-       sn_procfs_create_entry("sn_topology", sgi_proc_dir,
-                              sn_topology_open, sn_topology_release);
+       pde = create_proc_entry("partition_id", 0444, sgi_proc_dir);
+       if (pde)
+               pde->proc_fops = &proc_partition_id_fops;
+       pde = create_proc_entry("system_serial_number", 0444, sgi_proc_dir);
+       if (pde)
+               pde->proc_fops = &proc_system_sn_fops;
+       pde = create_proc_entry("licenseID", 0444, sgi_proc_dir);
+       if (pde)
+               pde->proc_fops = &proc_license_id_fops;
+       pde = create_proc_entry("sn_force_interrupt", 0644, sgi_proc_dir);
+       if (pde)
+               pde->proc_fops = &proc_sn_force_intr_fops;
+       pde = create_proc_entry("coherence_id", 0444, sgi_proc_dir);
+       if (pde)
+               pde->proc_fops = &proc_coherence_id_fops;
+       pde = create_proc_entry("sn_topology", 0444, sgi_proc_dir);
+       if (pde)
+               pde->proc_fops = &proc_sn_topo_fops;
 }
 
 #endif /* CONFIG_PROC_FS */