WARNING - OLD ARCHIVES

This is an archived copy of the Xen.org mailing list, which we have preserved to ensure that existing links to archives are not broken. The live archive, which contains the latest emails, can be found at http://lists.xen.org/
   
 
 
Xen 
 
Home Products Support Community News
 
   
 

xen-ppc-devel

[XenPPC] [pushed] [ppc] remove (almost) all mpic code from external.c an

To: xen-ppc-devel@xxxxxxxxxxxxxxxxxxx
Subject: [XenPPC] [pushed] [ppc] remove (almost) all mpic code from external.c and put it in mpic_init.c
From: jimix@xxxxxxxxxxxxxx
Date: Fri, 19 May 2006 07:05:10 -0400
Delivery-date: Fri, 19 May 2006 04:03:10 -0700
Envelope-to: www-data@xxxxxxxxxxxxxxxxxx
List-help: <mailto:xen-ppc-devel-request@lists.xensource.com?subject=help>
List-id: Xen PPC development <xen-ppc-devel.lists.xensource.com>
List-post: <mailto:xen-ppc-devel@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-ppc-devel>, <mailto:xen-ppc-devel-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-ppc-devel>, <mailto:xen-ppc-devel-request@lists.xensource.com?subject=unsubscribe>
Sender: xen-ppc-devel-bounces@xxxxxxxxxxxxxxxxxxx
changeset:   10297:2c4956f3947b2d3af9e1c8c843589aea852c8667
tag:         tip
user:        jimix@xxxxxxxxxxxxxxxxxxxxx
date:        Fri May 19 07:01:47 2006 -0400
files:       xen/arch/ppc/external.c xen/arch/ppc/mpic_init.c 
xen/arch/ppc/mpic_init.h
description:
[ppc] remove (almost) all mpic code from external.c and put it in mpic_init.c


diff -r b5a8acc8a021b509267de6a80a693abdbc029bae -r 
2c4956f3947b2d3af9e1c8c843589aea852c8667 xen/arch/ppc/external.c
--- a/xen/arch/ppc/external.c   Fri May 19 06:35:16 2006 -0400
+++ b/xen/arch/ppc/external.c   Fri May 19 07:01:47 2006 -0400
@@ -26,7 +26,7 @@
 #include <asm/current.h>
 #include <asm/hardirq.h>
 #include <asm/mpic.h>
-#include "find_mpic.h"
+#include "mpic_init.h"
 
 #undef DEBUG
 #ifdef DEBUG
@@ -42,8 +42,7 @@ unsigned long io_apic_irqs;
 unsigned long io_apic_irqs;
 int ioapic_ack_new = 1;
 
-static struct mpic *mpic;
-static struct hw_interrupt_type hc_irq;
+static struct hw_interrupt_type *hc_irq;
 
 /* deliver_ee: called with interrupts off when resuming every vcpu */
 void deliver_ee(struct cpu_user_regs *regs)
@@ -82,19 +81,14 @@ void do_external(struct cpu_user_regs *r
     BUG_ON(!(regs->msr & MSR_EE));
     BUG_ON(mfmsr() & MSR_EE);
 
-    for (;;) {
-        vec = mpic_get_one_irq(mpic, regs);
-
-        if (vec != -1) {
-            DBG("EE:0x%lx isrc: %d\n", regs->msr, vec);
-            regs->entry_vector = vec;
-            do_IRQ(regs);
-
-            BUG_ON(mfmsr() & MSR_EE);
-
-            continue;
-        }
-        break;
+    vec = xen_mpic_get_irq(regs);
+
+    if (vec != -1) {
+        DBG("EE:0x%lx isrc: %d\n", regs->msr, vec);
+        regs->entry_vector = vec;
+        do_IRQ(regs);
+
+        BUG_ON(mfmsr() & MSR_EE);
     }
 }
 
@@ -113,7 +107,7 @@ static unsigned int xen_startup_irq(unsi
 {
     DBG("%s(%d)\n", __func__, irq);
     if (xen_local_irq(irq)) {
-        return hc_irq.startup(irq);
+        return hc_irq->startup(irq);
     }
        return 0;
 }
@@ -122,7 +116,7 @@ static void xen_shutdown_irq(unsigned in
 {
     DBG("%s(%d)\n", __func__, irq);
     if (xen_local_irq(irq)) {
-        hc_irq.shutdown(irq);
+        hc_irq->shutdown(irq);
     }
 }
 
@@ -130,7 +124,7 @@ static void xen_enable_irq(unsigned int 
 {
     DBG("%s(%d)\n", __func__, irq);
     if (xen_local_irq(irq)) {
-        hc_irq.enable(irq);
+        hc_irq->enable(irq);
     }
 }
 
@@ -138,7 +132,7 @@ static void xen_disable_irq(unsigned int
 {
     DBG("%s(%d)\n", __func__, irq);
     if (xen_local_irq(irq)) {
-        hc_irq.disable(irq);
+        hc_irq->disable(irq);
     }
 }
     
@@ -146,7 +140,7 @@ static void xen_ack_irq(unsigned int irq
 {
     DBG("%s(%d)\n", __func__, irq);
     if (xen_local_irq(irq)) {
-        if (hc_irq.ack) hc_irq.ack(irq);
+        if (hc_irq->ack) hc_irq->ack(irq);
     }
 }
 
@@ -154,7 +148,7 @@ static void xen_end_irq(unsigned int irq
 {
     DBG("%s(%d)\n", __func__, irq);
     if (xen_local_irq(irq)) {
-        hc_irq.end(irq);
+        hc_irq->end(irq);
     }
 }
 
@@ -162,72 +156,23 @@ static void xen_set_affinity(unsigned in
 {
     DBG("%s(%d)\n", __func__, irq);
     if (xen_local_irq(irq)) {
-        if (hc_irq.set_affinity) hc_irq.set_affinity(irq, mask);
-    }
-}
+        if (hc_irq->set_affinity) hc_irq->set_affinity(irq, mask);
+    }
+}
+
+static struct hw_interrupt_type xen_irq = {
+    .startup = xen_startup_irq,
+    .enable = xen_enable_irq,
+    .disable = xen_disable_irq,
+    .shutdown = xen_shutdown_irq,
+    .ack = xen_ack_irq,
+    .end = xen_end_irq,
+    .set_affinity = xen_set_affinity,
+};
 
 void init_IRQ(unsigned long oftree)
 {
-    unsigned int isu_size;
-    unsigned int irq_offset;
-    unsigned int irq_count;
-    unsigned int ipi_offset;
-    unsigned char *senses;
-    unsigned int senses_count;
-
-    printk("%s: start\n", __func__);
-
-    io_apic_irqs = ~0;  /* all IRQs go through IOAPIC */
-       irq_vector[0] = FIRST_DEVICE_VECTOR;
-       vector_irq[FIRST_DEVICE_VECTOR] = 0;
-
-    isu_size = 0;
-    irq_offset = 0;
-    irq_count = 128;
-    ipi_offset = 128;
-    senses = NULL;
-    senses_count = 0;
-
-    if (find_mpic(oftree)) {
-        printk("%s: ERROR: Could not find open pic.\n", __func__);
-        return;
-    } else {
-        unsigned long opic_addr = get_mpic_address();
-        unsigned int opic_flags = get_mpic_flags();
-
-        mpic = mpic_alloc(opic_addr,
-                          MPIC_PRIMARY |
-                          MPIC_BROKEN_U3 | MPIC_WANTS_RESET |
-                          opic_flags,
-                          isu_size, irq_offset, irq_count,
-                          ipi_offset, senses, senses_count, "Xen-U3-MPIC");
-
-        BUG_ON(mpic == NULL);
-        mpic_init(mpic);
-
-        hc_irq.startup = mpic->hc_irq.startup;
-        mpic->hc_irq.startup = xen_startup_irq;
-
-        hc_irq.enable = mpic->hc_irq.enable;
-        mpic->hc_irq.enable = xen_enable_irq;
-
-        hc_irq.disable = mpic->hc_irq.disable;
-        mpic->hc_irq.disable = xen_disable_irq;
-
-        hc_irq.shutdown = mpic->hc_irq.shutdown;
-        mpic->hc_irq.shutdown = xen_shutdown_irq;
-
-        hc_irq.ack = mpic->hc_irq.ack;
-        mpic->hc_irq.ack = xen_ack_irq;
-
-        hc_irq.end = mpic->hc_irq.end;
-        mpic->hc_irq.end = xen_end_irq;
-
-        hc_irq.set_affinity = mpic->hc_irq.set_affinity;
-        mpic->hc_irq.set_affinity = xen_set_affinity;
-
-        printk("%s: success\n", __func__);
-    }
+    hc_irq = xen_mpic_init(oftree, &xen_irq);
 }
 
 void ack_APIC_irq(void) {
diff -r b5a8acc8a021b509267de6a80a693abdbc029bae -r 
2c4956f3947b2d3af9e1c8c843589aea852c8667 xen/arch/ppc/mpic_init.c
--- a/xen/arch/ppc/mpic_init.c  Fri May 19 06:35:16 2006 -0400
+++ b/xen/arch/ppc/mpic_init.c  Fri May 19 07:01:47 2006 -0400
@@ -5,6 +5,7 @@
 #include <xen/compile.h>
 #include <public/of-devtree.h>
 #include <asm/mpic.h>
+#include "mpic_init.h"
 
 #undef DEBUG
 #undef NOSERIAL
@@ -22,9 +23,9 @@ int of_printf(const char *fmt, ...)
 
 #define PANIC(fmt...) DBG(fmt)
 
-unsigned long opic_addr;
-unsigned int opic_flags;
-
+static struct mpic *mpic;
+static unsigned long opic_addr;
+static unsigned int opic_flags;
 
 /*
  * from OF_IEEE_1275
@@ -207,7 +208,7 @@ static unsigned int find_pic_flags_from_
     return flags;
 }
 
-static int find_mpic_simple_probe(void *oft_p )
+static int find_mpic_simple_probe(void *oft_p)
 {
     u32 addr_cells;
     int rc;
@@ -287,7 +288,7 @@ static int find_mpic_canonical_probe(voi
     return -1;
 }
 
-int find_mpic(unsigned long oftree)
+static int find_mpic(unsigned long oftree)
 {
     void *oft_p;
     int rc;
@@ -306,12 +307,74 @@ int find_mpic(unsigned long oftree)
     return rc;
 }
 
-unsigned long get_mpic_address()
-{
-    return opic_addr;
-}
-
-unsigned int get_mpic_flags()
-{
-    return opic_flags;
-}
+static struct hw_interrupt_type hc_irq;
+
+struct hw_interrupt_type *xen_mpic_init(
+    unsigned long oftree, struct hw_interrupt_type *xen_irq)
+{
+    unsigned int isu_size;
+    unsigned int irq_offset;
+    unsigned int irq_count;
+    unsigned int ipi_offset;
+    unsigned char *senses;
+    unsigned int senses_count;
+
+    printk("%s: start\n", __func__);
+
+    io_apic_irqs = ~0;  /* all IRQs go through IOAPIC */
+       irq_vector[0] = FIRST_DEVICE_VECTOR;
+       vector_irq[FIRST_DEVICE_VECTOR] = 0;
+
+    isu_size = 0;
+    irq_offset = 0;
+    irq_count = 128;
+    ipi_offset = 128;
+    senses = NULL;
+    senses_count = 0;
+
+    if (find_mpic(oftree)) {
+        printk("%s: ERROR: Could not find open pic.\n", __func__);
+        return NULL;
+    }
+
+    mpic = mpic_alloc(opic_addr,
+                      MPIC_PRIMARY |
+                      MPIC_BROKEN_U3 | MPIC_WANTS_RESET |
+                      opic_flags,
+                      isu_size, irq_offset, irq_count,
+                      ipi_offset, senses, senses_count, "Xen-U3-MPIC");
+
+    BUG_ON(mpic == NULL);
+    mpic_init(mpic);
+
+    hc_irq.startup = mpic->hc_irq.startup;
+    mpic->hc_irq.startup = xen_irq->startup;
+
+    hc_irq.enable = mpic->hc_irq.enable;
+    mpic->hc_irq.enable = xen_irq->enable;
+
+    hc_irq.disable = mpic->hc_irq.disable;
+    mpic->hc_irq.disable = xen_irq->disable;
+
+    hc_irq.shutdown = mpic->hc_irq.shutdown;
+    mpic->hc_irq.shutdown = xen_irq->shutdown;
+
+    hc_irq.ack = mpic->hc_irq.ack;
+    mpic->hc_irq.ack = xen_irq->ack;
+
+    hc_irq.end = mpic->hc_irq.end;
+    mpic->hc_irq.end = xen_irq->end;
+
+    hc_irq.set_affinity = mpic->hc_irq.set_affinity;
+    mpic->hc_irq.set_affinity = xen_irq->set_affinity;
+
+    printk("%s: success\n", __func__);
+    return &hc_irq;
+}
+
+int xen_mpic_get_irq(struct cpu_user_regs *regs)
+{
+    BUG_ON(mpic == NULL);
+
+       return mpic_get_one_irq(mpic, regs);
+}
diff -r b5a8acc8a021b509267de6a80a693abdbc029bae -r 
2c4956f3947b2d3af9e1c8c843589aea852c8667 xen/arch/ppc/mpic_init.h
--- a/xen/arch/ppc/mpic_init.h  Fri May 19 06:35:16 2006 -0400
+++ b/xen/arch/ppc/mpic_init.h  Fri May 19 07:01:47 2006 -0400
@@ -1,8 +1,9 @@
-#ifndef _FIND_MPIC_H
-#define _FIND_MPIC_H
+#ifndef _MPIC_INIT_H
+#define _MPIC_INIT_H
 
-int find_mpic(unsigned long oftree);
-unsigned long get_mpic_address();
-unsigned int get_mpic_flags();
+extern struct hw_interrupt_type *xen_mpic_init(
+    unsigned long oftree, struct hw_interrupt_type *xen_irq);
 
-#endif  /* #ifndef _FIND_MPIC_H */
+extern int xen_mpic_get_irq(struct cpu_user_regs *regs);
+
+#endif  /* #ifndef _MPIC_INIT_H */



_______________________________________________
Xen-ppc-devel mailing list
Xen-ppc-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-ppc-devel

<Prev in Thread] Current Thread [Next in Thread>
  • [XenPPC] [pushed] [ppc] remove (almost) all mpic code from external.c and put it in mpic_init.c, jimix <=