]> git.karo-electronics.de Git - mv-sheeva.git/blobdiff - arch/x86/kernel/mpparse.c
Merge tag 'v2.6.38' of git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6
[mv-sheeva.git] / arch / x86 / kernel / mpparse.c
index 9af64d9c4b6770c4fea928f6b2a9533c1f4620e8..01b0f6d0645128ecd85e9e73a7f366e7c0c8734f 100644 (file)
@@ -118,21 +118,8 @@ static void __init MP_bus_info(struct mpc_bus *m)
 
 static void __init MP_ioapic_info(struct mpc_ioapic *m)
 {
-       if (!(m->flags & MPC_APIC_USABLE))
-               return;
-
-       printk(KERN_INFO "I/O APIC #%d Version %d at 0x%X.\n",
-              m->apicid, m->apicver, m->apicaddr);
-
-       mp_register_ioapic(m->apicid, m->apicaddr, gsi_top);
-}
-
-static void print_MP_intsrc_info(struct mpc_intsrc *m)
-{
-       apic_printk(APIC_VERBOSE, "Int: type %d, pol %d, trig %d, bus %02x,"
-               " IRQ %02x, APIC ID %x, APIC INT %02x\n",
-               m->irqtype, m->irqflag & 3, (m->irqflag >> 2) & 3, m->srcbus,
-               m->srcbusirq, m->dstapic, m->dstirq);
+       if (m->flags & MPC_APIC_USABLE)
+               mp_register_ioapic(m->apicid, m->apicaddr, gsi_top);
 }
 
 static void __init print_mp_irq_info(struct mpc_intsrc *mp_irq)
@@ -144,73 +131,11 @@ static void __init print_mp_irq_info(struct mpc_intsrc *mp_irq)
                mp_irq->srcbusirq, mp_irq->dstapic, mp_irq->dstirq);
 }
 
-static void __init assign_to_mp_irq(struct mpc_intsrc *m,
-                                   struct mpc_intsrc *mp_irq)
-{
-       mp_irq->dstapic = m->dstapic;
-       mp_irq->type = m->type;
-       mp_irq->irqtype = m->irqtype;
-       mp_irq->irqflag = m->irqflag;
-       mp_irq->srcbus = m->srcbus;
-       mp_irq->srcbusirq = m->srcbusirq;
-       mp_irq->dstirq = m->dstirq;
-}
-
-static void __init assign_to_mpc_intsrc(struct mpc_intsrc *mp_irq,
-                                       struct mpc_intsrc *m)
-{
-       m->dstapic = mp_irq->dstapic;
-       m->type = mp_irq->type;
-       m->irqtype = mp_irq->irqtype;
-       m->irqflag = mp_irq->irqflag;
-       m->srcbus = mp_irq->srcbus;
-       m->srcbusirq = mp_irq->srcbusirq;
-       m->dstirq = mp_irq->dstirq;
-}
-
-static int __init mp_irq_mpc_intsrc_cmp(struct mpc_intsrc *mp_irq,
-                                       struct mpc_intsrc *m)
-{
-       if (mp_irq->dstapic != m->dstapic)
-               return 1;
-       if (mp_irq->type != m->type)
-               return 2;
-       if (mp_irq->irqtype != m->irqtype)
-               return 3;
-       if (mp_irq->irqflag != m->irqflag)
-               return 4;
-       if (mp_irq->srcbus != m->srcbus)
-               return 5;
-       if (mp_irq->srcbusirq != m->srcbusirq)
-               return 6;
-       if (mp_irq->dstirq != m->dstirq)
-               return 7;
-
-       return 0;
-}
-
-static void __init MP_intsrc_info(struct mpc_intsrc *m)
-{
-       int i;
-
-       print_MP_intsrc_info(m);
-
-       for (i = 0; i < mp_irq_entries; i++) {
-               if (!mp_irq_mpc_intsrc_cmp(&mp_irqs[i], m))
-                       return;
-       }
-
-       assign_to_mp_irq(m, &mp_irqs[mp_irq_entries]);
-       if (++mp_irq_entries == MAX_IRQ_SOURCES)
-               panic("Max # of irq sources exceeded!!\n");
-}
 #else /* CONFIG_X86_IO_APIC */
 static inline void __init MP_bus_info(struct mpc_bus *m) {}
 static inline void __init MP_ioapic_info(struct mpc_ioapic *m) {}
-static inline void __init MP_intsrc_info(struct mpc_intsrc *m) {}
 #endif /* CONFIG_X86_IO_APIC */
 
-
 static void __init MP_lintsrc_info(struct mpc_lintsrc *m)
 {
        apic_printk(APIC_VERBOSE, "Lint: type %d, pol %d, trig %d, bus %02x,"
@@ -222,7 +147,6 @@ static void __init MP_lintsrc_info(struct mpc_lintsrc *m)
 /*
  * Read/parse the MPC
  */
-
 static int __init smp_check_mpc(struct mpc_table *mpc, char *oem, char *str)
 {
 
@@ -275,18 +199,6 @@ static void __init smp_dump_mptable(struct mpc_table *mpc, unsigned char *mpt)
 
 void __init default_smp_read_mpc_oem(struct mpc_table *mpc) { }
 
-static void __init smp_register_lapic_address(unsigned long address)
-{
-       mp_lapic_addr = address;
-
-       set_fixmap_nocache(FIX_APIC_BASE, address);
-       if (boot_cpu_physical_apicid == -1U) {
-               boot_cpu_physical_apicid  = read_apic_id();
-               apic_version[boot_cpu_physical_apicid] =
-                        GET_APIC_VERSION(apic_read(APIC_LVR));
-       }
-}
-
 static int __init smp_read_mpc(struct mpc_table *mpc, unsigned early)
 {
        char str[16];
@@ -301,17 +213,13 @@ static int __init smp_read_mpc(struct mpc_table *mpc, unsigned early)
 #ifdef CONFIG_X86_32
        generic_mps_oem_check(mpc, oem, str);
 #endif
-       /* save the local APIC address, it might be non-default */
+       /* Initialize the lapic mapping */
        if (!acpi_lapic)
-               mp_lapic_addr = mpc->lapic;
+               register_lapic_address(mpc->lapic);
 
        if (early)
                return 1;
 
-       /* Initialize the lapic mapping */
-       if (!acpi_lapic)
-               smp_register_lapic_address(mpc->lapic);
-
        if (mpc->oemptr)
                x86_init.mpparse.smp_read_mpc_oem(mpc);
 
@@ -337,7 +245,7 @@ static int __init smp_read_mpc(struct mpc_table *mpc, unsigned early)
                        skip_entry(&mpt, &count, sizeof(struct mpc_ioapic));
                        break;
                case MP_INTSRC:
-                       MP_intsrc_info((struct mpc_intsrc *)mpt);
+                       mp_save_irq((struct mpc_intsrc *)mpt);
                        skip_entry(&mpt, &count, sizeof(struct mpc_intsrc));
                        break;
                case MP_LINTSRC:
@@ -429,13 +337,13 @@ static void __init construct_default_ioirq_mptable(int mpc_default_type)
 
                intsrc.srcbusirq = i;
                intsrc.dstirq = i ? i : 2;      /* IRQ0 to INTIN2 */
-               MP_intsrc_info(&intsrc);
+               mp_save_irq(&intsrc);
        }
 
        intsrc.irqtype = mp_ExtINT;
        intsrc.srcbusirq = 0;
        intsrc.dstirq = 0;      /* 8259A to INTIN0 */
-       MP_intsrc_info(&intsrc);
+       mp_save_irq(&intsrc);
 }
 
 
@@ -784,11 +692,11 @@ static void __init check_irq_src(struct mpc_intsrc *m, int *nr_m_spare)
        int i;
 
        apic_printk(APIC_VERBOSE, "OLD ");
-       print_MP_intsrc_info(m);
+       print_mp_irq_info(m);
 
        i = get_MP_intsrc_index(m);
        if (i > 0) {
-               assign_to_mpc_intsrc(&mp_irqs[i], m);
+               memcpy(m, &mp_irqs[i], sizeof(*m));
                apic_printk(APIC_VERBOSE, "NEW ");
                print_mp_irq_info(&mp_irqs[i]);
                return;
@@ -875,14 +783,14 @@ static int  __init replace_intsrc_all(struct mpc_table *mpc,
                if (nr_m_spare > 0) {
                        apic_printk(APIC_VERBOSE, "*NEW* found\n");
                        nr_m_spare--;
-                       assign_to_mpc_intsrc(&mp_irqs[i], m_spare[nr_m_spare]);
+                       memcpy(m_spare[nr_m_spare], &mp_irqs[i], sizeof(mp_irqs[i]));
                        m_spare[nr_m_spare] = NULL;
                } else {
                        struct mpc_intsrc *m = (struct mpc_intsrc *)mpt;
                        count += sizeof(struct mpc_intsrc);
                        if (check_slot(mpc_new_phys, mpc_new_length, count) < 0)
                                goto out;
-                       assign_to_mpc_intsrc(&mp_irqs[i], m);
+                       memcpy(m, &mp_irqs[i], sizeof(*m));
                        mpc->length = count;
                        mpt += sizeof(struct mpc_intsrc);
                }