]> pilppa.org Git - linux-2.6-omap-h63xx.git/blobdiff - arch/powerpc/platforms/iseries/viopath.c
[POWERPC] Remove iSeries_vio_dev
[linux-2.6-omap-h63xx.git] / arch / powerpc / platforms / iseries / viopath.c
index e2100ece9c652759162dec6f7b0bee08656a9297..df23331eb25c2416b99fd91c137fa62675c7bbb8 100644 (file)
@@ -36,8 +36,8 @@
 #include <linux/dma-mapping.h>
 #include <linux/wait.h>
 #include <linux/seq_file.h>
-#include <linux/smp_lock.h>
 #include <linux/interrupt.h>
+#include <linux/completion.h>
 
 #include <asm/system.h>
 #include <asm/uaccess.h>
@@ -82,7 +82,7 @@ static void handleMonitorEvent(struct HvLpEvent *event);
  * if system_state is not SYSTEM_RUNNING, then wait_atomic is used ...
  */
 struct alloc_parms {
-       struct semaphore sem;
+       struct completion done;
        int number;
        atomic_t wait_atomic;
        int used_wait_atomic;
@@ -116,7 +116,7 @@ static int proc_viopath_show(struct seq_file *m, void *v)
        u16 vlanMap;
        dma_addr_t handle;
        HvLpEvent_Rc hvrc;
-       DECLARE_MUTEX_LOCKED(Semaphore);
+       DECLARE_COMPLETION(done);
        struct device_node *node;
        const char *sysid;
 
@@ -124,8 +124,7 @@ static int proc_viopath_show(struct seq_file *m, void *v)
        if (!buf)
                return 0;
 
-       handle = dma_map_single(iSeries_vio_dev, buf, HW_PAGE_SIZE,
-                               DMA_FROM_DEVICE);
+       handle = iseries_hv_map(buf, HW_PAGE_SIZE, DMA_FROM_DEVICE);
 
        hvrc = HvCallEvent_signalLpEventFast(viopath_hostLp,
                        HvLpEvent_Type_VirtualIo,
@@ -133,21 +132,20 @@ static int proc_viopath_show(struct seq_file *m, void *v)
                        HvLpEvent_AckInd_DoAck, HvLpEvent_AckType_ImmediateAck,
                        viopath_sourceinst(viopath_hostLp),
                        viopath_targetinst(viopath_hostLp),
-                       (u64)(unsigned long)&Semaphore, VIOVERSION << 16,
+                       (u64)(unsigned long)&done, VIOVERSION << 16,
                        ((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);
 
-       down(&Semaphore);
+       wait_for_completion(&done);
 
        vlanMap = HvLpConfig_getVirtualLanIndexMap();
 
        buf[HW_PAGE_SIZE-1] = '\0';
        seq_printf(m, "%s", buf);
 
-       dma_unmap_single(iSeries_vio_dev, handle, HW_PAGE_SIZE,
-                        DMA_FROM_DEVICE);
+       iseries_hv_unmap(handle, HW_PAGE_SIZE, DMA_FROM_DEVICE);
        kfree(buf);
 
        seq_printf(m, "AVAILABLE_VETH=%x\n", vlanMap);
@@ -155,7 +153,7 @@ static int proc_viopath_show(struct seq_file *m, void *v)
        node = of_find_node_by_path("/");
        sysid = NULL;
        if (node != NULL)
-               sysid = get_property(node, "system-id", NULL);
+               sysid = of_get_property(node, "system-id", NULL);
 
        if (sysid == NULL)
                seq_printf(m, "SRLNBR=<UNKNOWN>\n");
@@ -354,7 +352,7 @@ static void handleConfig(struct HvLpEvent *event)
                return;
        }
 
-       up((struct semaphore *)event->xCorrelationToken);
+       complete((struct completion *)event->xCorrelationToken);
 }
 
 /*
@@ -465,7 +463,7 @@ static void viopath_donealloc(void *parm, int number)
        if (parmsp->used_wait_atomic)
                atomic_set(&parmsp->wait_atomic, 0);
        else
-               up(&parmsp->sem);
+               complete(&parmsp->done);
 }
 
 static int allocateEvents(HvLpIndex remoteLp, int numEvents)
@@ -477,7 +475,7 @@ static int allocateEvents(HvLpIndex remoteLp, int numEvents)
                atomic_set(&parms.wait_atomic, 1);
        } else {
                parms.used_wait_atomic = 0;
-               init_MUTEX_LOCKED(&parms.sem);
+               init_completion(&parms.done);
        }
        mf_allocate_lp_events(remoteLp, HvLpEvent_Type_VirtualIo, 250,  /* It would be nice to put a real number here! */
                            numEvents, &viopath_donealloc, &parms);
@@ -485,7 +483,7 @@ static int allocateEvents(HvLpIndex remoteLp, int numEvents)
                while (atomic_read(&parms.wait_atomic))
                        mb();
        } else
-               down(&parms.sem);
+               wait_for_completion(&parms.done);
        return parms.number;
 }
 
@@ -586,17 +584,17 @@ int viopath_close(HvLpIndex remoteLp, int subtype, int numReq)
        spin_unlock_irqrestore(&statuslock, flags);
 
        parms.used_wait_atomic = 0;
-       init_MUTEX_LOCKED(&parms.sem);
+       init_completion(&parms.done);
        mf_deallocate_lp_events(remoteLp, HvLpEvent_Type_VirtualIo,
                              numReq, &viopath_donealloc, &parms);
-       down(&parms.sem);
+       wait_for_completion(&parms.done);
 
        spin_lock_irqsave(&statuslock, flags);
        for (i = 0, numOpen = 0; i < VIO_MAX_SUBTYPES; i++)
                numOpen += viopathStatus[remoteLp].users[i];
 
        if ((viopathStatus[remoteLp].isOpen) && (numOpen == 0)) {
-               printk(VIOPATH_KERN_INFO "closing connection to partition %d",
+               printk(VIOPATH_KERN_INFO "closing connection to partition %d\n",
                                remoteLp);
 
                HvCallEvent_closeLpEventPath(remoteLp,