int ide_build_dmatable (ide_drive_t *drive, struct request *rq)
 {
        ide_hwif_t *hwif        = HWIF(drive);
-       unsigned int *table     = hwif->dmatable_cpu;
+       __le32 *table = (__le32 *)hwif->dmatable_cpu;
        unsigned int is_trm290  = (hwif->chipset == ide_trm290) ? 1 : 0;
        unsigned int count = 0;
        int i;
 
 
        if (byteswap) {
                /* convert from big-endian to host byte order */
-               for (p = end ; p != s;) {
-                       unsigned short *pp = (unsigned short *) (p -= 2);
-                       *pp = ntohs(*pp);
-               }
+               for (p = end ; p != s;)
+                       be16_to_cpus((u16 *)(p -= 2));
        }
        /* strip leading blanks */
        while (s != end && *s == ' ')
 
        len = sprintf(page, "\n");
 
        if (drive) {
-               unsigned short *val = (unsigned short *) page;
+               __le16 *val = (__le16 *)page;
 
                err = taskfile_lib_get_identify(drive, page);
                if (!err) {
                        page = out;
                        do {
                                out += sprintf(out, "%04x%c",
-                                       le16_to_cpu(*val), (++i & 7) ? ' ' : '\n');
+                                       le16_to_cpup(val), (++i & 7) ? ' ' : '\n');
                                val += 1;
                        } while (i < (SECTOR_WORDS * 2));
                        len = out - page;