On Thu, 2015-26-03 at 16:04:45 UTC, =?utf-8?q?C=C3=A9dric_Le_Goater?= wrote:
> OPAL has its own list of return codes. The patch provides a translation
> of such codes in errnos for the opal_sensor_read call.
> 
> Signed-off-by: Cédric Le Goater <c...@fr.ibm.com>
> ---
>  arch/powerpc/platforms/powernv/opal-sensor.c |   37 
> ++++++++++++++++++++++++++-
>  1 file changed, 36 insertions(+), 1 deletion(-)
> 
> Index: linux.git/arch/powerpc/platforms/powernv/opal-sensor.c
> ===================================================================
> --- linux.git.orig/arch/powerpc/platforms/powernv/opal-sensor.c
> +++ linux.git/arch/powerpc/platforms/powernv/opal-sensor.c
> @@ -26,6 +26,38 @@
  
> +static int convert_opal_code(int ret)
> +{
> +     switch (ret) {
> +     case OPAL_SUCCESS:              return 0;
> +     case OPAL_PARAMETER:            return -EINVAL;
> +     case OPAL_UNSUPPORTED:          return -ENOSYS;
> +     case OPAL_ASYNC_COMPLETION:     return -EAGAIN;
> +     case OPAL_BUSY_EVENT:           return -EBUSY;
> +     case OPAL_NO_MEM:               return -ENOMEM;
> +     case OPAL_HARDWARE:             return -ENOENT;
> +     case OPAL_INTERNAL_ERROR:       return -EIO;
> +     default:                        return -EIO;
> +     }
> +}

That looks a bit familiar :)

static int rtas_error_rc(int rtas_rc)
{
        int rc;

        switch (rtas_rc) {
                case -1:                /* Hardware Error */
                        rc = -EIO;
                        break;
                case -3:                /* Bad indicator/domain/etc */
                        rc = -EINVAL;
                        break;
                case -9000:             /* Isolation error */
                        rc = -EFAULT;
                        break;
                case -9001:             /* Outstanding TCE/PTE */
                        rc = -EEXIST;
                        break;
                case -9002:             /* No usable slot */
                        rc = -ENODEV;
                        break;
                default:
                        printk(KERN_ERR "%s: unexpected RTAS error %d\n",
                                        __func__, rtas_rc);
                        rc = -ERANGE;
                        break;
        }
        return rc;
}


But I guess we still should have it.

Can you put it in opal.h and give it a better name, maybe opal_error_code() ?

>  /*
>   * This will return sensor information to driver based on the requested 
> sensor
>   * handle. A handle is an opaque id for the powernv, read by the driver from 
> the
> @@ -46,8 +78,10 @@ int opal_get_sensor_data(u32 sensor_hndl
>  
>       mutex_lock(&opal_sensor_mutex);
>       ret = opal_sensor_read(sensor_hndl, token, &data);
> -     if (ret != OPAL_ASYNC_COMPLETION)
> +     if (ret != OPAL_ASYNC_COMPLETION) {
> +             ret = convert_opal_code(ret);
>               goto out_token;
> +     }
>  
>       ret = opal_async_wait_response(token, &msg);
>       if (ret) {
> @@ -58,6 +92,7 @@ int opal_get_sensor_data(u32 sensor_hndl
>  
>       *sensor_data = be32_to_cpu(data);
>       ret = be64_to_cpu(msg.params[1]);
> +     ret = convert_opal_code(ret);

I'd do:
        ret = convert_opal_code(be64_to_cpu(msg.params[1]));

cheers
_______________________________________________
Linuxppc-dev mailing list
Linuxppc-dev@lists.ozlabs.org
https://lists.ozlabs.org/listinfo/linuxppc-dev

Reply via email to