This patch against ia64-test-2.6.12 is needed for forthcoming
Altix chipsets. It renames geoid_any_t to geoid_common_t and
splits the 8bit 'slab' field into two 4bit fields for 'slab'
and 'slot'. Similar changes in the Altix SAL will retain backward
compatibility for old kernels.

Tony, could you please apply, thanks.

Signed-off-by: Mark Goodwin <[EMAIL PROTECTED]>
===== arch/ia64/sn/kernel/sn2/sn_hwperf.c 1.10 vs edited =====
--- 1.10/arch/ia64/sn/kernel/sn2/sn_hwperf.c    2005-03-15 05:16:19 +11:00
+++ edited/arch/ia64/sn/kernel/sn2/sn_hwperf.c  2005-03-15 13:04:49 +11:00
@@ -116,7 +116,7 @@
                module_id = geo_module(geoid);
                this_rack = MODULE_GET_RACK(module_id);
                this_bay = MODULE_GET_BPOS(module_id);
-               this_slot = 0; /* XXX */
+               this_slot = geo_slot(geoid);
                this_slab = geo_slab(geoid);
                if (rack == this_rack && bay == this_bay &&
                        slot == this_slot && slab == this_slab) {
===== include/asm-ia64/sn/geo.h 1.5 vs edited =====
--- 1.5/include/asm-ia64/sn/geo.h       2004-10-12 06:04:12 +10:00
+++ edited/include/asm-ia64/sn/geo.h    2005-03-16 07:50:33 +11:00
@@ -18,32 +18,34 @@
 #define GEOID_SIZE     8       /* Would 16 be better?  The size can
                                   be different on different platforms. */
 
-#define MAX_SLABS      0xe     /* slabs per module */
+#define MAX_SLOTS      0xf     /* slots per module */
+#define MAX_SLABS      0xf     /* slabs per slot */
 
 typedef unsigned char  geo_type_t;
 
 /* Fields common to all substructures */
-typedef struct geo_any_s {
+typedef struct geo_common_s {
     moduleid_t module;         /* The module (box) this h/w lives in */
     geo_type_t type;           /* What type of h/w is named by this geoid_t */
-    slabid_t   slab;           /* The logical assembly within the module */
-} geo_any_t;
+    slabid_t   slab:4;         /* slab (ASIC), 0 .. 15 within slot */
+    slotid_t   slot:4;         /* slot (Blade), 0 .. 15 within module */
+} geo_common_t;
 
 /* Additional fields for particular types of hardware */
 typedef struct geo_node_s {
-    geo_any_t  any;            /* No additional fields needed */
+    geo_common_t       common;         /* No additional fields needed */
 } geo_node_t;
 
 typedef struct geo_rtr_s {
-    geo_any_t  any;            /* No additional fields needed */
+    geo_common_t       common;         /* No additional fields needed */
 } geo_rtr_t;
 
 typedef struct geo_iocntl_s {
-    geo_any_t  any;            /* No additional fields needed */
+    geo_common_t       common;         /* No additional fields needed */
 } geo_iocntl_t;
 
 typedef struct geo_pcicard_s {
-    geo_iocntl_t       any;
+    geo_iocntl_t       common;
     char               bus;    /* Bus/widget number */
     char               slot;   /* PCI slot number */
 } geo_pcicard_t;
@@ -62,14 +64,14 @@
 
 
 typedef union geoid_u {
-    geo_any_t  any;
-    geo_node_t node;
+    geo_common_t       common;
+    geo_node_t         node;
     geo_iocntl_t       iocntl;
     geo_pcicard_t      pcicard;
-    geo_rtr_t  rtr;
-    geo_cpu_t  cpu;
-    geo_mem_t  mem;
-    char       padsize[GEOID_SIZE];
+    geo_rtr_t          rtr;
+    geo_cpu_t          cpu;
+    geo_mem_t          mem;
+    char               padsize[GEOID_SIZE];
 } geoid_t;
 
 
@@ -104,19 +106,26 @@
 #define INVALID_CNODEID         ((cnodeid_t)-1)
 #define INVALID_PNODEID         ((pnodeid_t)-1)
 #define INVALID_SLAB            (slabid_t)-1
+#define INVALID_SLOT            (slotid_t)-1
 #define INVALID_MODULE          ((moduleid_t)-1)
 #define INVALID_PARTID          ((partid_t)-1)
 
 static inline slabid_t geo_slab(geoid_t g)
 {
-       return (g.any.type == GEO_TYPE_INVALID) ?
-               INVALID_SLAB : g.any.slab;
+       return (g.common.type == GEO_TYPE_INVALID) ?
+               INVALID_SLAB : g.common.slab;
+}
+
+static inline slotid_t geo_slot(geoid_t g)
+{
+       return (g.common.type == GEO_TYPE_INVALID) ?
+               INVALID_SLOT : g.common.slot;
 }
 
 static inline moduleid_t geo_module(geoid_t g)
 {
-       return (g.any.type == GEO_TYPE_INVALID) ?
-               INVALID_MODULE : g.any.module;
+       return (g.common.type == GEO_TYPE_INVALID) ?
+               INVALID_MODULE : g.common.module;
 }
 
 extern geoid_t cnodeid_get_geoid(cnodeid_t cnode);
===== include/asm-ia64/sn/types.h 1.8 vs edited =====
--- 1.8/include/asm-ia64/sn/types.h     2004-11-03 07:29:08 +11:00
+++ edited/include/asm-ia64/sn/types.h  2005-03-15 12:47:09 +11:00
@@ -16,7 +16,8 @@
 typedef signed char    partid_t;       /* partition ID type */
 typedef unsigned int    moduleid_t;     /* user-visible module number type */
 typedef unsigned int    cmoduleid_t;    /* kernel compact module id type */
-typedef signed char     slabid_t;
+typedef unsigned char  slotid_t;       /* slot (blade) within module */
+typedef unsigned char  slabid_t;       /* slab (asic) within slot */
 typedef u64 nic_t;
 typedef unsigned long iopaddr_t;
 typedef unsigned long paddr_t;

Reply via email to