PCI endianess

Anil K Prasad aprasad at in.ibm.com
Tue Sep 3 19:54:48 EST 2002


>> >as far as I know, the PCI bus is little endian, even on big endian
>> machines.
>> >Is this true for RS6000 (44p/270) too ?
>>
>> Yes, even on RS6K machines its little endian.
>> You should write to PCI mapped register in little endian byte order.

>So commands/data to my memory-mapped PCI card need to be converted, right
?
>E.g. if the cards memory has a structure like
>struct {
>  u16 command;
>  u32 length;
>  u32 data[128];
>}

>I need to convert all data to that structure ?
If you need to copy this data from system memory to card memory (or other
way), you need to convert it from big-endian to little-endian(or reverse).
For example if structure is something like

x.command = 0x1234;
x.length = 0x567890AB;
where is x is an instance of above struct.

and assume X is at address 0x10000000 in system memory,
Then following will give view of structure in system memory

0x10000000 --> 0x12
0x10000001 --> 0x34 (0x10000002 and 0x10000002 will unused because of
padding)
0x10000004 --> 0x56
0x10000005 --> 0x78
0x10000006 --> 0x90
0x10000007 --> 0xAB;


Inside Card memory  this structure should look like(lets assume address of
structure is 0xf0000000)

0xf0000000 --> 0x34
0xf0000001 --> 0x12

0xf0000003 --> 0xAB
0xf0000004 --> 0x90
0xf0000005 --> 0x78
0xf0000006 --> 0x56

Regards,
Anil.


** Sent via the linuxppc64-dev mail list. See http://lists.linuxppc.org/





More information about the Linuxppc64-dev mailing list