Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

zorro/UAPI: Use proper types (endianness/size) in <linux/zorro.h>

Fix member definitions for non-native userspace handling:
- All multi-byte values are big-endian, hence use __be*,
- All pointers are 32-bit pointers under AmigaOS, but unused (except for
cd_BoardAddr) under Linux, hence use __be32.

Signed-off-by: Geert Uytterhoeven <geert@linux-m68k.org>

+72 -46
+5 -4
arch/m68k/amiga/config.c
··· 28 28 #include <linux/keyboard.h> 29 29 30 30 #include <asm/bootinfo.h> 31 + #include <asm/byteorder.h> 31 32 #include <asm/setup.h> 32 33 #include <asm/pgtable.h> 33 34 #include <asm/amigahw.h> ··· 177 176 const struct ConfigDev *cd = (struct ConfigDev *)data; 178 177 struct zorro_dev_init *dev = &zorro_autocon_init[zorro_num_autocon++]; 179 178 dev->rom = cd->cd_Rom; 180 - dev->slotaddr = cd->cd_SlotAddr; 181 - dev->slotsize = cd->cd_SlotSize; 182 - dev->boardaddr = (u32)cd->cd_BoardAddr; 183 - dev->boardsize = cd->cd_BoardSize; 179 + dev->slotaddr = be16_to_cpu(cd->cd_SlotAddr); 180 + dev->slotsize = be16_to_cpu(cd->cd_SlotSize); 181 + dev->boardaddr = be32_to_cpu(cd->cd_BoardAddr); 182 + dev->boardsize = be32_to_cpu(cd->cd_BoardSize); 184 183 } else 185 184 printk("amiga_parse_bootinfo: too many AutoConfig devices\n"); 186 185 #endif /* CONFIG_ZORRO */
+6 -3
arch/m68k/amiga/platform.c
··· 13 13 14 14 #include <asm/amigahw.h> 15 15 #include <asm/amigayle.h> 16 + #include <asm/byteorder.h> 16 17 17 18 18 19 #ifdef CONFIG_ZORRO ··· 67 66 { 68 67 unsigned int i; 69 68 70 - for (i = 0; i < zorro_num_autocon; i++) 71 - if (zorro_autocon_init[i].rom.er_Manufacturer == ZORRO_MANUF(id) && 72 - zorro_autocon_init[i].rom.er_Product == ZORRO_PROD(id)) 69 + for (i = 0; i < zorro_num_autocon; i++) { 70 + const struct ExpansionRom *rom = &zorro_autocon_init[i].rom; 71 + if (be16_to_cpu(rom->er_Manufacturer) == ZORRO_MANUF(id) && 72 + rom->er_Product == ZORRO_PROD(id)) 73 73 return 1; 74 + } 74 75 75 76 return 0; 76 77 }
+6 -3
drivers/net/ethernet/amd/a2065.c
··· 57 57 #include <linux/zorro.h> 58 58 #include <linux/bitops.h> 59 59 60 + #include <asm/byteorder.h> 60 61 #include <asm/irq.h> 61 62 #include <asm/amigaints.h> 62 63 #include <asm/amigahw.h> ··· 679 678 unsigned long base_addr = board + A2065_LANCE; 680 679 unsigned long mem_start = board + A2065_RAM; 681 680 struct resource *r1, *r2; 681 + u32 serial; 682 682 int err; 683 683 684 684 r1 = request_mem_region(base_addr, sizeof(struct lance_regs), ··· 704 702 r1->name = dev->name; 705 703 r2->name = dev->name; 706 704 705 + serial = be32_to_cpu(z->rom.er_SerialNumber); 707 706 dev->dev_addr[0] = 0x00; 708 707 if (z->id != ZORRO_PROD_AMERISTAR_A2065) { /* Commodore */ 709 708 dev->dev_addr[1] = 0x80; ··· 713 710 dev->dev_addr[1] = 0x00; 714 711 dev->dev_addr[2] = 0x9f; 715 712 } 716 - dev->dev_addr[3] = (z->rom.er_SerialNumber >> 16) & 0xff; 717 - dev->dev_addr[4] = (z->rom.er_SerialNumber >> 8) & 0xff; 718 - dev->dev_addr[5] = z->rom.er_SerialNumber & 0xff; 713 + dev->dev_addr[3] = (serial >> 16) & 0xff; 714 + dev->dev_addr[4] = (serial >> 8) & 0xff; 715 + dev->dev_addr[5] = serial & 0xff; 719 716 dev->base_addr = (unsigned long)ZTWO_VADDR(base_addr); 720 717 dev->mem_start = (unsigned long)ZTWO_VADDR(mem_start); 721 718 dev->mem_end = dev->mem_start + A2065_RAM_SIZE;
+6 -3
drivers/net/ethernet/amd/ariadne.c
··· 51 51 #include <linux/zorro.h> 52 52 #include <linux/bitops.h> 53 53 54 + #include <asm/byteorder.h> 54 55 #include <asm/amigaints.h> 55 56 #include <asm/amigahw.h> 56 57 #include <asm/irq.h> ··· 719 718 struct resource *r1, *r2; 720 719 struct net_device *dev; 721 720 struct ariadne_private *priv; 721 + u32 serial; 722 722 int err; 723 723 724 724 r1 = request_mem_region(base_addr, sizeof(struct Am79C960), "Am79C960"); ··· 743 741 r1->name = dev->name; 744 742 r2->name = dev->name; 745 743 744 + serial = be32_to_cpu(z->rom.er_SerialNumber); 746 745 dev->dev_addr[0] = 0x00; 747 746 dev->dev_addr[1] = 0x60; 748 747 dev->dev_addr[2] = 0x30; 749 - dev->dev_addr[3] = (z->rom.er_SerialNumber >> 16) & 0xff; 750 - dev->dev_addr[4] = (z->rom.er_SerialNumber >> 8) & 0xff; 751 - dev->dev_addr[5] = z->rom.er_SerialNumber & 0xff; 748 + dev->dev_addr[3] = (serial >> 16) & 0xff; 749 + dev->dev_addr[4] = (serial >> 8) & 0xff; 750 + dev->dev_addr[5] = serial & 0xff; 752 751 dev->base_addr = (unsigned long)ZTWO_VADDR(base_addr); 753 752 dev->mem_start = (unsigned long)ZTWO_VADDR(mem_start); 754 753 dev->mem_end = dev->mem_start + ARIADNE_RAM_SIZE;
+6 -4
drivers/zorro/proc.c
··· 14 14 #include <linux/seq_file.h> 15 15 #include <linux/init.h> 16 16 #include <linux/export.h> 17 + 18 + #include <asm/byteorder.h> 17 19 #include <asm/uaccess.h> 18 20 #include <asm/amigahw.h> 19 21 #include <asm/setup.h> ··· 43 41 /* Construct a ConfigDev */ 44 42 memset(&cd, 0, sizeof(cd)); 45 43 cd.cd_Rom = z->rom; 46 - cd.cd_SlotAddr = z->slotaddr; 47 - cd.cd_SlotSize = z->slotsize; 48 - cd.cd_BoardAddr = (void *)zorro_resource_start(z); 49 - cd.cd_BoardSize = zorro_resource_len(z); 44 + cd.cd_SlotAddr = cpu_to_be16(z->slotaddr); 45 + cd.cd_SlotSize = cpu_to_be16(z->slotsize); 46 + cd.cd_BoardAddr = cpu_to_be32(zorro_resource_start(z)); 47 + cd.cd_BoardSize = cpu_to_be32(zorro_resource_len(z)); 50 48 51 49 if (copy_to_user(buf, (void *)&cd + pos, nbytes)) 52 50 return -EFAULT;
+17 -5
drivers/zorro/zorro-sysfs.c
··· 16 16 #include <linux/stat.h> 17 17 #include <linux/string.h> 18 18 19 + #include <asm/byteorder.h> 20 + 19 21 #include "zorro.h" 20 22 21 23 ··· 35 33 36 34 zorro_config_attr(id, id, "0x%08x\n"); 37 35 zorro_config_attr(type, rom.er_Type, "0x%02x\n"); 38 - zorro_config_attr(serial, rom.er_SerialNumber, "0x%08x\n"); 39 36 zorro_config_attr(slotaddr, slotaddr, "0x%04x\n"); 40 37 zorro_config_attr(slotsize, slotsize, "0x%04x\n"); 38 + 39 + static ssize_t 40 + show_serial(struct device *dev, struct device_attribute *attr, char *buf) 41 + { 42 + struct zorro_dev *z; 43 + 44 + z = to_zorro_dev(dev); 45 + return sprintf(buf, "0x%08x\n", be32_to_cpu(z->rom.er_SerialNumber)); 46 + } 47 + 48 + static DEVICE_ATTR(serial, S_IRUGO, show_serial, NULL); 41 49 42 50 static ssize_t zorro_show_resource(struct device *dev, struct device_attribute *attr, char *buf) 43 51 { ··· 72 60 /* Construct a ConfigDev */ 73 61 memset(&cd, 0, sizeof(cd)); 74 62 cd.cd_Rom = z->rom; 75 - cd.cd_SlotAddr = z->slotaddr; 76 - cd.cd_SlotSize = z->slotsize; 77 - cd.cd_BoardAddr = (void *)zorro_resource_start(z); 78 - cd.cd_BoardSize = zorro_resource_len(z); 63 + cd.cd_SlotAddr = cpu_to_be16(z->slotaddr); 64 + cd.cd_SlotSize = cpu_to_be16(z->slotsize); 65 + cd.cd_BoardAddr = cpu_to_be32(zorro_resource_start(z)); 66 + cd.cd_BoardSize = cpu_to_be32(zorro_resource_len(z)); 79 67 80 68 return memory_read_from_buffer(buf, count, &off, &cd, sizeof(cd)); 81 69 }
+3 -1
drivers/zorro/zorro.c
··· 18 18 #include <linux/platform_device.h> 19 19 #include <linux/slab.h> 20 20 21 + #include <asm/byteorder.h> 21 22 #include <asm/setup.h> 22 23 #include <asm/amigahw.h> 23 24 ··· 162 161 z = &zorro_autocon[i]; 163 162 164 163 z->rom = zi->rom; 165 - z->id = (z->rom.er_Manufacturer<<16) | (z->rom.er_Product<<8); 164 + z->id = (be16_to_cpu(z->rom.er_Manufacturer) << 16) | 165 + (z->rom.er_Product << 8); 166 166 if (z->id == ZORRO_PROD_GVP_EPC_BASE) { 167 167 /* GVP quirk */ 168 168 unsigned long magic = zi->boardaddr + 0x8000;
+23 -23
include/uapi/linux/zorro.h
··· 63 63 64 64 65 65 struct Node { 66 - struct Node *ln_Succ; /* Pointer to next (successor) */ 67 - struct Node *ln_Pred; /* Pointer to previous (predecessor) */ 68 - __u8 ln_Type; 69 - __s8 ln_Pri; /* Priority, for sorting */ 70 - __s8 *ln_Name; /* ID string, null terminated */ 66 + __be32 ln_Succ; /* Pointer to next (successor) */ 67 + __be32 ln_Pred; /* Pointer to previous (predecessor) */ 68 + __u8 ln_Type; 69 + __s8 ln_Pri; /* Priority, for sorting */ 70 + __be32 ln_Name; /* ID string, null terminated */ 71 71 } __packed; 72 72 73 73 struct ExpansionRom { 74 74 /* -First 16 bytes of the expansion ROM */ 75 - __u8 er_Type; /* Board type, size and flags */ 76 - __u8 er_Product; /* Product number, assigned by manufacturer */ 77 - __u8 er_Flags; /* Flags */ 78 - __u8 er_Reserved03; /* Must be zero ($ff inverted) */ 79 - __u16 er_Manufacturer; /* Unique ID, ASSIGNED BY COMMODORE-AMIGA! */ 80 - __u32 er_SerialNumber; /* Available for use by manufacturer */ 81 - __u16 er_InitDiagVec; /* Offset to optional "DiagArea" structure */ 82 - __u8 er_Reserved0c; 83 - __u8 er_Reserved0d; 84 - __u8 er_Reserved0e; 85 - __u8 er_Reserved0f; 75 + __u8 er_Type; /* Board type, size and flags */ 76 + __u8 er_Product; /* Product number, assigned by manufacturer */ 77 + __u8 er_Flags; /* Flags */ 78 + __u8 er_Reserved03; /* Must be zero ($ff inverted) */ 79 + __be16 er_Manufacturer; /* Unique ID, ASSIGNED BY COMMODORE-AMIGA! */ 80 + __be32 er_SerialNumber; /* Available for use by manufacturer */ 81 + __be16 er_InitDiagVec; /* Offset to optional "DiagArea" structure */ 82 + __u8 er_Reserved0c; 83 + __u8 er_Reserved0d; 84 + __u8 er_Reserved0e; 85 + __u8 er_Reserved0f; 86 86 } __packed; 87 87 88 88 /* er_Type board type bits */ ··· 99 99 __u8 cd_Flags; /* (read/write) */ 100 100 __u8 cd_Pad; /* reserved */ 101 101 struct ExpansionRom cd_Rom; /* copy of board's expansion ROM */ 102 - void *cd_BoardAddr; /* where in memory the board was placed */ 103 - __u32 cd_BoardSize; /* size of board in bytes */ 104 - __u16 cd_SlotAddr; /* which slot number (PRIVATE) */ 105 - __u16 cd_SlotSize; /* number of slots (PRIVATE) */ 106 - void *cd_Driver; /* pointer to node of driver */ 107 - struct ConfigDev *cd_NextCD; /* linked list of drivers to config */ 108 - __u32 cd_Unused[4]; /* for whatever the driver wants */ 102 + __be32 cd_BoardAddr; /* where in memory the board was placed */ 103 + __be32 cd_BoardSize; /* size of board in bytes */ 104 + __be16 cd_SlotAddr; /* which slot number (PRIVATE) */ 105 + __be16 cd_SlotSize; /* number of slots (PRIVATE) */ 106 + __be32 cd_Driver; /* pointer to node of driver */ 107 + __be32 cd_NextCD; /* linked list of drivers to config */ 108 + __be32 cd_Unused[4]; /* for whatever the driver wants */ 109 109 } __packed; 110 110 111 111 #define ZORRO_NUM_AUTO 16