vserver 1.9.5.x5
[linux-2.6.git] / drivers / char / snsc.c
index 25917e0..9d027ec 100644 (file)
 #include <linux/poll.h>
 #include <linux/module.h>
 #include <linux/slab.h>
+#include <asm/sn/io.h>
 #include <asm/sn/sn_sal.h>
+#include <asm/sn/module.h>
+#include <asm/sn/geo.h>
 #include <asm/sn/nodepda.h>
 #include "snsc.h"
 
@@ -364,17 +367,15 @@ int __init
 scdrv_init(void)
 {
        geoid_t geoid;
-       cmoduleid_t cmod;
-       int i;
+       cnodeid_t cnode;
        char devname[32];
        char *devnamep;
-       module_t *m;
        struct sysctl_data_s *scd;
        void *salbuf;
        struct class_simple *snsc_class;
        dev_t first_dev, dev;
 
-       if (alloc_chrdev_region(&first_dev, 0, (MAX_SLABS*nummodules),
+       if (alloc_chrdev_region(&first_dev, 0, numionodes,
                                SYSCTL_BASENAME) < 0) {
                printk("%s: failed to register SN system controller device\n",
                       __FUNCTION__);
@@ -382,16 +383,8 @@ scdrv_init(void)
        }
        snsc_class = class_simple_create(THIS_MODULE, SYSCTL_BASENAME);
 
-       for (cmod = 0; cmod < nummodules; cmod++) {
-               m = sn_modules[cmod];
-               for (i = 0; i <= MAX_SLABS; i++) {
-
-                       if (m->nodes[i] == -1) {
-                               /* node is not alive in module */
-                               continue;
-                       }
-
-                       geoid = m->geoid[i];
+       for (cnode = 0; cnode < numionodes; cnode++) {
+                       geoid = cnodeid_get_geoid(cnode);
                        devnamep = devname;
                        format_module_id(devnamep, geo_module(geoid),
                                         MODULE_FORMAT_BRIEF);
@@ -410,7 +403,7 @@ scdrv_init(void)
                        memset(scd, 0, sizeof (struct sysctl_data_s));
 
                        /* initialize sysctl device data fields */
-                       scd->scd_nasid = cnodeid_to_nasid(m->nodes[i]);
+                       scd->scd_nasid = cnodeid_to_nasid(cnode);
                        if (!(salbuf = kmalloc(SCDRV_BUFSZ, GFP_KERNEL))) {
                                printk("%s: failed to allocate driver buffer"
                                       "(%s%s)\n", __FUNCTION__,
@@ -431,7 +424,7 @@ scdrv_init(void)
                                continue;
                        }
 
-                       dev = first_dev + m->nodes[i];
+                       dev = first_dev + cnode;
                        cdev_init(&scd->scd_cdev, &scdrv_fops);
                        if (cdev_add(&scd->scd_cdev, dev, 1)) {
                                printk("%s: failed to register system"
@@ -448,7 +441,6 @@ scdrv_init(void)
                        ia64_sn_irtr_intr_enable(scd->scd_nasid,
                                                 0 /*ignored */ ,
                                                 SAL_IROUTER_INTR_RECV);
-               }
        }
        return 0;
 }