>Hi Paul,
>
>i converted b_swap's to cpu_to_xxx and xxx_to_cpu macros, and during
>that, found that the following part may not work correctly on BE.
>
>static inline unsigned long long hdsp_read64 (hdsp_t *hdsp, int reg)
>{
>       unsigned long long val;
>       val = hdsp_read(hdsp, reg);
>       val = (val<<32)|hdsp_read(hdsp, reg + 4);
>
>       return le64_to_cpu(val);
>}
>
>since hdsp_read returns the already converted 32bit word, the
>resultant 64bit word will be flipped again badly.
>i think we don't need here any endian conversion here.
>could you confirm this?

thats correct. its not significant yet, because i am still not quite
sure "where" the RMS meters (the only 64 bit registers) actually live.

the one other area of this that i am not sure about is the area where
we write the firmware. perhaps someone can help me out, since
endianness always fries my mind. that firmware is
stored/declared/defined as a char array. its written as a series of 32
bit words. the char array was taken from the OS X driver (i.e. for a
big-endian system). The OS X driver explicitly did *not* byteswap the
data when it wrote it. I assumed, therefore, that I should byteswap it
on an LE system. That didn't work - I just went back to writing it
with swapping, and the firmware download worked. The question now
arises: what to do on a BE system? its probably just my lousy
programming skills in this area, but i would have thought that:

    char c[4] = { 0xfe, 0xed, 0xfa, 0xce };
    int  i  = *((int *) c);

would give different results on BE and LE systems ...

--p

_______________________________________________________________

Don't miss the 2002 Sprint PCS Application Developer's Conference
August 25-28 in Las Vegas -- http://devcon.sprintpcs.com/adp/index.cfm

_______________________________________________
Alsa-devel mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/alsa-devel

Reply via email to