]> bbs.cooldavid.org Git - net-next-2.6.git/blobdiff - drivers/net/enic/vnic_dev.c
enic: fix pci_alloc_consistent argument
[net-next-2.6.git] / drivers / net / enic / vnic_dev.c
index d43a9d43bbff9a45f9297be3c8c1cff8c3ec8c97..e0d33281ec980b6013dea7c1632b19358af7d30c 100644 (file)
@@ -530,7 +530,7 @@ void vnic_dev_packet_filter(struct vnic_dev *vdev, int directed, int multicast,
                printk(KERN_ERR "Can't set packet filter\n");
 }
 
-void vnic_dev_add_addr(struct vnic_dev *vdev, u8 *addr)
+int vnic_dev_add_addr(struct vnic_dev *vdev, u8 *addr)
 {
        u64 a0 = 0, a1 = 0;
        int wait = 1000;
@@ -543,9 +543,11 @@ void vnic_dev_add_addr(struct vnic_dev *vdev, u8 *addr)
        err = vnic_dev_cmd(vdev, CMD_ADDR_ADD, &a0, &a1, wait);
        if (err)
                printk(KERN_ERR "Can't add addr [%pM], %d\n", addr, err);
+
+       return err;
 }
 
-void vnic_dev_del_addr(struct vnic_dev *vdev, u8 *addr)
+int vnic_dev_del_addr(struct vnic_dev *vdev, u8 *addr)
 {
        u64 a0 = 0, a1 = 0;
        int wait = 1000;
@@ -558,6 +560,8 @@ void vnic_dev_del_addr(struct vnic_dev *vdev, u8 *addr)
        err = vnic_dev_cmd(vdev, CMD_ADDR_DEL, &a0, &a1, wait);
        if (err)
                printk(KERN_ERR "Can't del addr [%pM], %d\n", addr, err);
+
+       return err;
 }
 
 int vnic_dev_raise_intr(struct vnic_dev *vdev, u16 intr)
@@ -682,6 +686,56 @@ int vnic_dev_init(struct vnic_dev *vdev, int arg)
        return r;
 }
 
+int vnic_dev_init_done(struct vnic_dev *vdev, int *done, int *err)
+{
+       u64 a0 = 0, a1 = 0;
+       int wait = 1000;
+       int ret;
+
+       *done = 0;
+
+       ret = vnic_dev_cmd(vdev, CMD_INIT_STATUS, &a0, &a1, wait);
+       if (ret)
+               return ret;
+
+       *done = (a0 == 0);
+
+       *err = (a0 == 0) ? a1 : 0;
+
+       return 0;
+}
+
+int vnic_dev_init_prov(struct vnic_dev *vdev, u8 *buf, u32 len)
+{
+       u64 a0, a1 = len;
+       int wait = 1000;
+       dma_addr_t prov_pa;
+       void *prov_buf;
+       int ret;
+
+       prov_buf = pci_alloc_consistent(vdev->pdev, len, &prov_pa);
+       if (!prov_buf)
+               return -ENOMEM;
+
+       memcpy(prov_buf, buf, len);
+
+       a0 = prov_pa;
+
+       ret = vnic_dev_cmd(vdev, CMD_INIT_PROV_INFO, &a0, &a1, wait);
+
+       pci_free_consistent(vdev->pdev, len, prov_buf, prov_pa);
+
+       return ret;
+}
+
+int vnic_dev_deinit(struct vnic_dev *vdev)
+{
+       u64 a0 = 0, a1 = 0;
+       int wait = 1000;
+
+       return vnic_dev_cmd(vdev, CMD_DEINIT, &a0, &a1, wait);
+}
+
 int vnic_dev_link_status(struct vnic_dev *vdev)
 {
        if (vdev->linkstatus)