[PATCH] powerpc: cleanup of iSeries flat device tree
[powerpc.git] / arch / powerpc / platforms / iseries / viopath.c
index 72dfcb6..622a301 100644 (file)
@@ -46,7 +46,7 @@
 #include <asm/iseries/hv_lp_event.h>
 #include <asm/iseries/hv_lp_config.h>
 #include <asm/iseries/mf.h>
-#include <asm/iSeries/vio.h>
+#include <asm/iseries/vio.h>
 
 /* Status of the path to each other partition in the system.
  * This is overkill, since we will only ever establish connections
@@ -68,7 +68,8 @@ static DEFINE_SPINLOCK(statuslock);
  * For each kind of event we allocate a buffer that is
  * guaranteed not to cross a page boundary
  */
-static unsigned char event_buffer[VIO_MAX_SUBTYPES * 256] __page_aligned;
+static unsigned char event_buffer[VIO_MAX_SUBTYPES * 256]
+       __attribute__((__aligned__(4096)));
 static atomic_t event_buffer_available[VIO_MAX_SUBTYPES];
 static int event_buffer_initialised;
 
@@ -116,12 +117,12 @@ static int proc_viopath_show(struct seq_file *m, void *v)
        HvLpEvent_Rc hvrc;
        DECLARE_MUTEX_LOCKED(Semaphore);
 
-       buf = kmalloc(PAGE_SIZE, GFP_KERNEL);
+       buf = kmalloc(HW_PAGE_SIZE, GFP_KERNEL);
        if (!buf)
                return 0;
-       memset(buf, 0, PAGE_SIZE);
+       memset(buf, 0, HW_PAGE_SIZE);
 
-       handle = dma_map_single(iSeries_vio_dev, buf, PAGE_SIZE,
+       handle = dma_map_single(iSeries_vio_dev, buf, HW_PAGE_SIZE,
                                DMA_FROM_DEVICE);
 
        hvrc = HvCallEvent_signalLpEventFast(viopath_hostLp,
@@ -131,7 +132,7 @@ static int proc_viopath_show(struct seq_file *m, void *v)
                        viopath_sourceinst(viopath_hostLp),
                        viopath_targetinst(viopath_hostLp),
                        (u64)(unsigned long)&Semaphore, VIOVERSION << 16,
-                       ((u64)handle) << 32, PAGE_SIZE, 0, 0);
+                       ((u64)handle) << 32, HW_PAGE_SIZE, 0, 0);
 
        if (hvrc != HvLpEvent_Rc_Good)
                printk(VIOPATH_KERN_WARN "hv error on op %d\n", (int)hvrc);
@@ -140,7 +141,7 @@ static int proc_viopath_show(struct seq_file *m, void *v)
 
        vlanMap = HvLpConfig_getVirtualLanIndexMap();
 
-       buf[PAGE_SIZE-1] = '\0';
+       buf[HW_PAGE_SIZE-1] = '\0';
        seq_printf(m, "%s", buf);
        seq_printf(m, "AVAILABLE_VETH=%x\n", vlanMap);
        seq_printf(m, "SRLNBR=%c%c%c%c%c%c%c\n",
@@ -152,7 +153,8 @@ static int proc_viopath_show(struct seq_file *m, void *v)
                   e2a(xItExtVpdPanel.systemSerial[4]),
                   e2a(xItExtVpdPanel.systemSerial[5]));
 
-       dma_unmap_single(iSeries_vio_dev, handle, PAGE_SIZE, DMA_FROM_DEVICE);
+       dma_unmap_single(iSeries_vio_dev, handle, HW_PAGE_SIZE,
+                        DMA_FROM_DEVICE);
        kfree(buf);
 
        return 0;
@@ -268,7 +270,7 @@ static void handleMonitorEvent(struct HvLpEvent *event)
         * First see if this is just a normal monitor message from the
         * other partition
         */
-       if (event->xFlags.xFunction == HvLpEvent_Function_Int) {
+       if (hvlpevent_is_int(event)) {
                remoteLp = event->xSourceLp;
                if (!viopathStatus[remoteLp].isActive)
                        sendMonMsg(remoteLp);
@@ -329,13 +331,12 @@ static void handleConfig(struct HvLpEvent *event)
 {
        if (!event)
                return;
-       if (event->xFlags.xFunction == HvLpEvent_Function_Int) {
+       if (hvlpevent_is_int(event)) {
                printk(VIOPATH_KERN_WARN
                       "unexpected config request from partition %d",
                       event->xSourceLp);
 
-               if ((event->xFlags.xFunction == HvLpEvent_Function_Int) &&
-                   (event->xFlags.xAckInd == HvLpEvent_AckInd_DoAck)) {
+               if (hvlpevent_need_ack(event)) {
                        event->xRc = HvLpEvent_Rc_InvalidSubtype;
                        HvCallEvent_ackLpEvent(event);
                }
@@ -375,7 +376,7 @@ static void vio_handleEvent(struct HvLpEvent *event, struct pt_regs *regs)
        int subtype = (event->xSubtype & VIOMAJOR_SUBTYPE_MASK)
                >> VIOMAJOR_SUBTYPE_SHIFT;
 
-       if (event->xFlags.xFunction == HvLpEvent_Function_Int) {
+       if (hvlpevent_is_int(event)) {
                remoteLp = event->xSourceLp;
                /*
                 * The isActive is checked because if the hosting partition
@@ -434,8 +435,7 @@ static void vio_handleEvent(struct HvLpEvent *event, struct pt_regs *regs)
                       "unexpected virtual io event subtype %d from partition %d\n",
                       event->xSubtype, remoteLp);
                /* No handler.  Ack if necessary */
-               if ((event->xFlags.xFunction == HvLpEvent_Function_Int) &&
-                   (event->xFlags.xAckInd == HvLpEvent_AckInd_DoAck)) {
+               if (hvlpevent_is_int(event) && hvlpevent_need_ack(event)) {
                        event->xRc = HvLpEvent_Rc_InvalidSubtype;
                        HvCallEvent_ackLpEvent(event);
                }