]> git.hungrycats.org Git - linux/commitdiff
[PATCH] abstract out mpparse code
authorMartin J. Bligh <mbligh@aracnet.com>
Mon, 23 Dec 2002 02:19:42 +0000 (18:19 -0800)
committerPatrick Mochel <mochel@osdl.org>
Mon, 23 Dec 2002 02:19:42 +0000 (18:19 -0800)
Most of code originally by James Cleverdon.

Abstracts out code from the mpparse stuff into:

 - mpc_apic_id()
 - apicid_to_cpu_present()

instead of using clustered_apic_mode switching.

arch/i386/kernel/mpparse.c
include/asm-i386/mach-default/mach_apic.h
include/asm-i386/mach-numaq/mach_apic.h

index 1cde8562b4a64948901ca075f1a47b926cc702ef..12231f7b60b05bc7fc3ba469cc77397ac6c776ab 100644 (file)
@@ -104,28 +104,12 @@ static struct mpc_config_translation *translation_table[MAX_MPC_ENTRY] __initdat
 
 void __init MP_processor_info (struct mpc_config_processor *m)
 {
-       int ver, quad, logical_apicid;
+       int ver, apicid;
        
        if (!(m->mpc_cpuflag & CPU_ENABLED))
                return;
 
-       logical_apicid = m->mpc_apicid;
-       if (clustered_apic_mode) {
-               quad = translation_table[mpc_record]->trans_quad;
-               logical_apicid = (quad << 4) + 
-                       (m->mpc_apicid ? m->mpc_apicid << 1 : 1);
-               printk("Processor #%d %ld:%ld APIC version %d (quad %d, apic %d)\n",
-                       m->mpc_apicid,
-                       (m->mpc_cpufeature & CPU_FAMILY_MASK)>>8,
-                       (m->mpc_cpufeature & CPU_MODEL_MASK)>>4,
-                       m->mpc_apicver, quad, logical_apicid);
-       } else {
-               printk("Processor #%d %ld:%ld APIC version %d\n",
-                       m->mpc_apicid,
-                       (m->mpc_cpufeature & CPU_FAMILY_MASK)>>8,
-                       (m->mpc_cpufeature & CPU_MODEL_MASK)>>4,
-                       m->mpc_apicver);
-       }
+       apicid = mpc_apic_id(m, translation_table[mpc_record]->trans_quad);
 
        if (m->mpc_featureflag&(1<<0))
                Dprintk("    Floating point unit present.\n");
@@ -178,7 +162,7 @@ void __init MP_processor_info (struct mpc_config_processor *m)
        if (m->mpc_cpuflag & CPU_BOOTPROCESSOR) {
                Dprintk("    Bootup CPU\n");
                boot_cpu_physical_apicid = m->mpc_apicid;
-               boot_cpu_logical_apicid = logical_apicid;
+               boot_cpu_logical_apicid = apicid;
        }
 
        num_processors++;
@@ -191,11 +175,8 @@ void __init MP_processor_info (struct mpc_config_processor *m)
        }
        ver = m->mpc_apicver;
 
-       if (clustered_apic_mode) {
-               phys_cpu_present_map |= (logical_apicid&0xf) << (4*quad);
-       } else {
-               phys_cpu_present_map |= apicid_to_cpu_present(m->mpc_apicid);
-       }
+       phys_cpu_present_map |= apicid_to_cpu_present(apicid);
+       
        /*
         * Validate version
         */
index b527dcdc68f703de991d8d8b0132e7912a123be2..7d26f6aeedc5477f4ad219fc9ab6a9dbcfeb3d9c 100644 (file)
@@ -57,9 +57,19 @@ static inline int cpu_present_to_apicid(int mps_cpu)
        return  mps_cpu;
 }
 
-static inline unsigned long apicid_to_cpu_present(int apicid)
+static inline unsigned long apicid_to_cpu_present(int phys_apicid)
 {
-       return (1ul << apicid);
+       return (1ul << phys_apicid);
+}
+
+static inline int mpc_apic_id(struct mpc_config_processor *m, int quad)
+{
+       printk("Processor #%d %ld:%ld APIC version %d\n",
+                       m->mpc_apicid,
+                       (m->mpc_cpufeature & CPU_FAMILY_MASK) >> 8,
+                       (m->mpc_cpufeature & CPU_MODEL_MASK) >> 4,
+                       m->mpc_apicver);
+       return (m->mpc_apicid);
 }
 
 #endif /* __ASM_MACH_APIC_H */
index 82a4a7fae61d30c8401e39fb2739910928e671cc..c4b5047a0bcc3e59bc91293d737888c435f6a79a 100644 (file)
@@ -40,9 +40,31 @@ static inline int cpu_present_to_apicid(int mps_cpu)
        return ( ((mps_cpu/4)*16) + (1<<(mps_cpu%4)) );
 }
 
-static inline unsigned long apicid_to_cpu_present(int apicid)
+static inline int generate_logical_apicid(int quad, int phys_apicid)
 {
-       return (1ul << apicid);
+       return ( (quad << 4) + (phys_apicid ? phys_apicid << 1 : 1) );
+}
+
+static inline int apicid_to_quad(int logical_apicid) 
+{
+       return (logical_apicid >> 4);
+}
+
+static inline unsigned long apicid_to_cpu_present(int logical_apicid)
+{
+       return ( (logical_apicid&0xf) << (4*apicid_to_quad(logical_apicid)) );
+}
+
+static inline int mpc_apic_id(struct mpc_config_processor *m, int quad)
+{
+       int logical_apicid = generate_logical_apicid(quad, m->mpc_apicid);
+
+       printk("Processor #%d %ld:%ld APIC version %d (quad %d, apic %d)\n",
+                       m->mpc_apicid,
+                       (m->mpc_cpufeature & CPU_FAMILY_MASK) >> 8,
+                       (m->mpc_cpufeature & CPU_MODEL_MASK) >> 4,
+                       m->mpc_apicver, quad, logical_apicid);
+       return logical_apicid;
 }
 
 #endif /* __ASM_MACH_APIC_H */