rocker: fix non-portable err return codes
authorScott Feldman <sfeldma@gmail.com>
Thu, 26 Feb 2015 04:15:36 +0000 (20:15 -0800)
committerDavid S. Miller <davem@davemloft.net>
Thu, 26 Feb 2015 16:21:57 +0000 (11:21 -0500)
The rocker device returns error codes if something goes wrong with descriptor
processing.  Originally the device used standard errno codes for different
errors, but since those errno codes aren't portable across ARCHs, the device
now returns hard-coded error codes that stay constant across diff ARCHs.  Fix
driver to use those same hard-coded values.

Signed-off-by: Scott Feldman <sfeldma@gmail.com>
Acked-by: Jiri Pirko <jiri@resnulli.us>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/rocker/rocker.c
drivers/net/ethernet/rocker/rocker.h

index 34389b6aa67cbd26263366ca1bff769f1b27c68a..61f2ef4dfa8d4796885983c86b73558bbb063592 100644 (file)
@@ -789,7 +789,30 @@ static u32 __pos_inc(u32 pos, size_t limit)
 
 static int rocker_desc_err(struct rocker_desc_info *desc_info)
 {
-       return -(desc_info->desc->comp_err & ~ROCKER_DMA_DESC_COMP_ERR_GEN);
+       int err = desc_info->desc->comp_err & ~ROCKER_DMA_DESC_COMP_ERR_GEN;
+
+       switch (err) {
+       case ROCKER_OK:
+               return 0;
+       case -ROCKER_ENOENT:
+               return -ENOENT;
+       case -ROCKER_ENXIO:
+               return -ENXIO;
+       case -ROCKER_ENOMEM:
+               return -ENOMEM;
+       case -ROCKER_EEXIST:
+               return -EEXIST;
+       case -ROCKER_EINVAL:
+               return -EINVAL;
+       case -ROCKER_EMSGSIZE:
+               return -EMSGSIZE;
+       case -ROCKER_ENOTSUP:
+               return -EOPNOTSUPP;
+       case -ROCKER_ENOBUFS:
+               return -ENOBUFS;
+       }
+
+       return -EINVAL;
 }
 
 static void rocker_desc_gen_clear(struct rocker_desc_info *desc_info)
index a5bc432feada1986eb41a1f3fa935c9fa38d5e4d..76e79ede617f6e9925a69a6bef6a6b68b0ea0bbb 100644 (file)
 
 #include <linux/types.h>
 
+/* Return codes */
+enum {
+       ROCKER_OK = 0,
+       ROCKER_ENOENT = 2,
+       ROCKER_ENXIO = 6,
+       ROCKER_ENOMEM = 12,
+       ROCKER_EEXIST = 17,
+       ROCKER_EINVAL = 22,
+       ROCKER_EMSGSIZE = 90,
+       ROCKER_ENOTSUP = 95,
+       ROCKER_ENOBUFS = 105,
+};
+
 #define PCI_VENDOR_ID_REDHAT           0x1b36
 #define PCI_DEVICE_ID_REDHAT_ROCKER    0x0006