IDE & byte-swapping in 2.4.21

Andre Hedrick andre at linux-ide.org
Wed May 21 08:17:44 EST 2003


Linas,

All you need to do is override the io operations in the struct and
install you own functions-pointers.

Cheers,

On Tue, 20 May 2003 linas at austin.ibm.com wrote:
>
> I'm trying to debug a confusing IDE byteswapping bug in 2.4.21 on
> ppc64, and want to fish for some comments before I go off in the wrong
> direction. If you think you understand byteswapping, please help me
> out!
>
> Let me start at the begining: IDE in 2.4.21 in ppc64 doesn't work.
>
> I discovered that if I go into ide-iops.c and disable bytsewapping in
> the ide_fix_driveid() routine, then I can get IDE to sort-of work...
> it works in that I can create partions, fs, and read/write files.
> Unfortunately, the resulting partition tables & etc. are byte-swapped
> from 'normal': my whacked ide code cannot read ide drives from x86
> bboxes, or from 2.4.19 ppc boxes.
>
> The 2.4.19 code uses insw() for PIO (in
> drivers/ide/ide.c/ide_input_data()) and both ppc and ppc64 #define
> insw _insw_ns with comments suggesting that 'ns' stands for no-swap.
> Then routines like ppc64_ide_fix_driveid() perform the actual swap,
> and everything works.
>
> The 2.4.21 code introduces some new routines: ide_mm_insw() and its
> cousins in drivers/ide/ide-iops.c. These are similar, but crucially
> different from ide_insw(). Whereas the latter call insw(), the former
> call readw(), and this difference seems to be very very intentional.
> On ppc and ppc64, readw map to in_le16 calls (which swap bytes),
> whereas insw calls do not. This seems to be at the root of the
> problem.
>
> There's just enough mapping and redirection & etc. in this code that I
> haven't quite figured out what the intent was, and therefore, haven't
> really figured out what the right fix is ... is it in the ide code? In
> the ppc64-specific code? Am I the only big-endian platform with this
> problem? Have other big-endian platforms tested?

Andre Hedrick
LAD Storage Consulting Group

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





More information about the Linuxppc64-dev mailing list