qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Qemu-devel] Character order of ATA identity


From: 乔天香
Subject: [Qemu-devel] Character order of ATA identity
Date: Thu, 16 Apr 2015 14:07:49 -0400

Hi, all

I'm learning operating system and trying to write a little toy kernel. Before doing disk I/O, I issued the *ATA identify* command to obtain information about the master device on the primary channel. When I ran my code with QEMU, I found it gives some ASCII string fields in a wrong byte order, for example, the model name is given as:

    EQUMH RADDSI K

but actually it should be

    QEMU HARDDISK

So I referred to the source code file `hw/ide/core.c` and found a function doing this:


  61 static void padstr(char *str, const char *src, int len)
  62 {
  63     int i, v;
  64     for(i = 0; i < len; i++) {
  65         if (*src)
  66             v = *src++;
  67         else
  68             v = ' ';
  69         str[i^1] = v;
  70     }
  71 }


And it is called like:

     112     padstr((char *)(p + 27), s->drive_model_str, 40); /* model */

Now I'm wondering why it does this "byte swapping"? I read the ATA specification about this *ATA identify* command and didn't find anything related to byte order. Is it required by hardware?

Thanks for your kind help.

reply via email to

[Prev in Thread] Current Thread [Next in Thread]