On Friday, October 3, 2008 2:49 am Benjamin Herrenschmidt wrote:
> +     /* WARNING: The generic code is idiotic. It gets passed a pointer
> +      * to what can be a 1, 2 or 4 byte quantity and always reads that
> +      * as a u32, which means that we have to correct the location of
> +      * the data read within those 32 bits for size 1 and 2
> +      */
> +     switch(size) {
> +     case 1:
> +             out_8(addr, val >> 24);
> +             return 1;
> +     case 2:
> +             if (port & 1)
> +                     return -EINVAL;
> +             out_le16(addr, val >> 16);
> +             return 2;
> +     case 4:
> +             if (port & 3)
> +                     return -EINVAL;
> +             out_le32(addr, val);
> +             return 4;
> +     }
> +     return -EINVAL;

Feel free to change the generic code if it makes things easier for you, the 
only limitation is that we have to live within the generic sysfs read/write 
functions.  Obviously I didn't worry about it when doing this code on ia64...

Jesse
_______________________________________________
Linuxppc-dev mailing list
Linuxppc-dev@ozlabs.org
https://ozlabs.org/mailman/listinfo/linuxppc-dev

Reply via email to