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>
This commit is contained in:
Geert Uytterhoeven 2013-10-04 09:38:53 +02:00
parent 986ea58dfb
commit bd9ba8f40e
8 changed files with 72 additions and 46 deletions

View File

@ -28,6 +28,7 @@
#include <linux/keyboard.h> #include <linux/keyboard.h>
#include <asm/bootinfo.h> #include <asm/bootinfo.h>
#include <asm/byteorder.h>
#include <asm/setup.h> #include <asm/setup.h>
#include <asm/pgtable.h> #include <asm/pgtable.h>
#include <asm/amigahw.h> #include <asm/amigahw.h>
@ -176,10 +177,10 @@ int __init amiga_parse_bootinfo(const struct bi_record *record)
const struct ConfigDev *cd = (struct ConfigDev *)data; const struct ConfigDev *cd = (struct ConfigDev *)data;
struct zorro_dev_init *dev = &zorro_autocon_init[zorro_num_autocon++]; struct zorro_dev_init *dev = &zorro_autocon_init[zorro_num_autocon++];
dev->rom = cd->cd_Rom; dev->rom = cd->cd_Rom;
dev->slotaddr = cd->cd_SlotAddr; dev->slotaddr = be16_to_cpu(cd->cd_SlotAddr);
dev->slotsize = cd->cd_SlotSize; dev->slotsize = be16_to_cpu(cd->cd_SlotSize);
dev->boardaddr = (u32)cd->cd_BoardAddr; dev->boardaddr = be32_to_cpu(cd->cd_BoardAddr);
dev->boardsize = cd->cd_BoardSize; dev->boardsize = be32_to_cpu(cd->cd_BoardSize);
} else } else
printk("amiga_parse_bootinfo: too many AutoConfig devices\n"); printk("amiga_parse_bootinfo: too many AutoConfig devices\n");
#endif /* CONFIG_ZORRO */ #endif /* CONFIG_ZORRO */

View File

@ -13,6 +13,7 @@
#include <asm/amigahw.h> #include <asm/amigahw.h>
#include <asm/amigayle.h> #include <asm/amigayle.h>
#include <asm/byteorder.h>
#ifdef CONFIG_ZORRO #ifdef CONFIG_ZORRO
@ -66,10 +67,12 @@ static int __init z_dev_present(zorro_id id)
{ {
unsigned int i; unsigned int i;
for (i = 0; i < zorro_num_autocon; i++) for (i = 0; i < zorro_num_autocon; i++) {
if (zorro_autocon_init[i].rom.er_Manufacturer == ZORRO_MANUF(id) && const struct ExpansionRom *rom = &zorro_autocon_init[i].rom;
zorro_autocon_init[i].rom.er_Product == ZORRO_PROD(id)) if (be16_to_cpu(rom->er_Manufacturer) == ZORRO_MANUF(id) &&
rom->er_Product == ZORRO_PROD(id))
return 1; return 1;
}
return 0; return 0;
} }

View File

@ -57,6 +57,7 @@
#include <linux/zorro.h> #include <linux/zorro.h>
#include <linux/bitops.h> #include <linux/bitops.h>
#include <asm/byteorder.h>
#include <asm/irq.h> #include <asm/irq.h>
#include <asm/amigaints.h> #include <asm/amigaints.h>
#include <asm/amigahw.h> #include <asm/amigahw.h>
@ -678,6 +679,7 @@ static int a2065_init_one(struct zorro_dev *z,
unsigned long base_addr = board + A2065_LANCE; unsigned long base_addr = board + A2065_LANCE;
unsigned long mem_start = board + A2065_RAM; unsigned long mem_start = board + A2065_RAM;
struct resource *r1, *r2; struct resource *r1, *r2;
u32 serial;
int err; int err;
r1 = request_mem_region(base_addr, sizeof(struct lance_regs), r1 = request_mem_region(base_addr, sizeof(struct lance_regs),
@ -702,6 +704,7 @@ static int a2065_init_one(struct zorro_dev *z,
r1->name = dev->name; r1->name = dev->name;
r2->name = dev->name; r2->name = dev->name;
serial = be32_to_cpu(z->rom.er_SerialNumber);
dev->dev_addr[0] = 0x00; dev->dev_addr[0] = 0x00;
if (z->id != ZORRO_PROD_AMERISTAR_A2065) { /* Commodore */ if (z->id != ZORRO_PROD_AMERISTAR_A2065) { /* Commodore */
dev->dev_addr[1] = 0x80; dev->dev_addr[1] = 0x80;
@ -710,9 +713,9 @@ static int a2065_init_one(struct zorro_dev *z,
dev->dev_addr[1] = 0x00; dev->dev_addr[1] = 0x00;
dev->dev_addr[2] = 0x9f; dev->dev_addr[2] = 0x9f;
} }
dev->dev_addr[3] = (z->rom.er_SerialNumber >> 16) & 0xff; dev->dev_addr[3] = (serial >> 16) & 0xff;
dev->dev_addr[4] = (z->rom.er_SerialNumber >> 8) & 0xff; dev->dev_addr[4] = (serial >> 8) & 0xff;
dev->dev_addr[5] = z->rom.er_SerialNumber & 0xff; dev->dev_addr[5] = serial & 0xff;
dev->base_addr = (unsigned long)ZTWO_VADDR(base_addr); dev->base_addr = (unsigned long)ZTWO_VADDR(base_addr);
dev->mem_start = (unsigned long)ZTWO_VADDR(mem_start); dev->mem_start = (unsigned long)ZTWO_VADDR(mem_start);
dev->mem_end = dev->mem_start + A2065_RAM_SIZE; dev->mem_end = dev->mem_start + A2065_RAM_SIZE;

View File

@ -51,6 +51,7 @@
#include <linux/zorro.h> #include <linux/zorro.h>
#include <linux/bitops.h> #include <linux/bitops.h>
#include <asm/byteorder.h>
#include <asm/amigaints.h> #include <asm/amigaints.h>
#include <asm/amigahw.h> #include <asm/amigahw.h>
#include <asm/irq.h> #include <asm/irq.h>
@ -718,6 +719,7 @@ static int ariadne_init_one(struct zorro_dev *z,
struct resource *r1, *r2; struct resource *r1, *r2;
struct net_device *dev; struct net_device *dev;
struct ariadne_private *priv; struct ariadne_private *priv;
u32 serial;
int err; int err;
r1 = request_mem_region(base_addr, sizeof(struct Am79C960), "Am79C960"); r1 = request_mem_region(base_addr, sizeof(struct Am79C960), "Am79C960");
@ -741,12 +743,13 @@ static int ariadne_init_one(struct zorro_dev *z,
r1->name = dev->name; r1->name = dev->name;
r2->name = dev->name; r2->name = dev->name;
serial = be32_to_cpu(z->rom.er_SerialNumber);
dev->dev_addr[0] = 0x00; dev->dev_addr[0] = 0x00;
dev->dev_addr[1] = 0x60; dev->dev_addr[1] = 0x60;
dev->dev_addr[2] = 0x30; dev->dev_addr[2] = 0x30;
dev->dev_addr[3] = (z->rom.er_SerialNumber >> 16) & 0xff; dev->dev_addr[3] = (serial >> 16) & 0xff;
dev->dev_addr[4] = (z->rom.er_SerialNumber >> 8) & 0xff; dev->dev_addr[4] = (serial >> 8) & 0xff;
dev->dev_addr[5] = z->rom.er_SerialNumber & 0xff; dev->dev_addr[5] = serial & 0xff;
dev->base_addr = (unsigned long)ZTWO_VADDR(base_addr); dev->base_addr = (unsigned long)ZTWO_VADDR(base_addr);
dev->mem_start = (unsigned long)ZTWO_VADDR(mem_start); dev->mem_start = (unsigned long)ZTWO_VADDR(mem_start);
dev->mem_end = dev->mem_start + ARIADNE_RAM_SIZE; dev->mem_end = dev->mem_start + ARIADNE_RAM_SIZE;

View File

@ -14,6 +14,8 @@
#include <linux/seq_file.h> #include <linux/seq_file.h>
#include <linux/init.h> #include <linux/init.h>
#include <linux/export.h> #include <linux/export.h>
#include <asm/byteorder.h>
#include <asm/uaccess.h> #include <asm/uaccess.h>
#include <asm/amigahw.h> #include <asm/amigahw.h>
#include <asm/setup.h> #include <asm/setup.h>
@ -41,10 +43,10 @@ proc_bus_zorro_read(struct file *file, char __user *buf, size_t nbytes, loff_t *
/* Construct a ConfigDev */ /* Construct a ConfigDev */
memset(&cd, 0, sizeof(cd)); memset(&cd, 0, sizeof(cd));
cd.cd_Rom = z->rom; cd.cd_Rom = z->rom;
cd.cd_SlotAddr = z->slotaddr; cd.cd_SlotAddr = cpu_to_be16(z->slotaddr);
cd.cd_SlotSize = z->slotsize; cd.cd_SlotSize = cpu_to_be16(z->slotsize);
cd.cd_BoardAddr = (void *)zorro_resource_start(z); cd.cd_BoardAddr = cpu_to_be32(zorro_resource_start(z));
cd.cd_BoardSize = zorro_resource_len(z); cd.cd_BoardSize = cpu_to_be32(zorro_resource_len(z));
if (copy_to_user(buf, (void *)&cd + pos, nbytes)) if (copy_to_user(buf, (void *)&cd + pos, nbytes))
return -EFAULT; return -EFAULT;

View File

@ -16,6 +16,8 @@
#include <linux/stat.h> #include <linux/stat.h>
#include <linux/string.h> #include <linux/string.h>
#include <asm/byteorder.h>
#include "zorro.h" #include "zorro.h"
@ -33,10 +35,20 @@ static DEVICE_ATTR(name, S_IRUGO, show_##name, NULL);
zorro_config_attr(id, id, "0x%08x\n"); zorro_config_attr(id, id, "0x%08x\n");
zorro_config_attr(type, rom.er_Type, "0x%02x\n"); zorro_config_attr(type, rom.er_Type, "0x%02x\n");
zorro_config_attr(serial, rom.er_SerialNumber, "0x%08x\n");
zorro_config_attr(slotaddr, slotaddr, "0x%04x\n"); zorro_config_attr(slotaddr, slotaddr, "0x%04x\n");
zorro_config_attr(slotsize, slotsize, "0x%04x\n"); zorro_config_attr(slotsize, slotsize, "0x%04x\n");
static ssize_t
show_serial(struct device *dev, struct device_attribute *attr, char *buf)
{
struct zorro_dev *z;
z = to_zorro_dev(dev);
return sprintf(buf, "0x%08x\n", be32_to_cpu(z->rom.er_SerialNumber));
}
static DEVICE_ATTR(serial, S_IRUGO, show_serial, NULL);
static ssize_t zorro_show_resource(struct device *dev, struct device_attribute *attr, char *buf) static ssize_t zorro_show_resource(struct device *dev, struct device_attribute *attr, char *buf)
{ {
struct zorro_dev *z = to_zorro_dev(dev); struct zorro_dev *z = to_zorro_dev(dev);
@ -60,10 +72,10 @@ static ssize_t zorro_read_config(struct file *filp, struct kobject *kobj,
/* Construct a ConfigDev */ /* Construct a ConfigDev */
memset(&cd, 0, sizeof(cd)); memset(&cd, 0, sizeof(cd));
cd.cd_Rom = z->rom; cd.cd_Rom = z->rom;
cd.cd_SlotAddr = z->slotaddr; cd.cd_SlotAddr = cpu_to_be16(z->slotaddr);
cd.cd_SlotSize = z->slotsize; cd.cd_SlotSize = cpu_to_be16(z->slotsize);
cd.cd_BoardAddr = (void *)zorro_resource_start(z); cd.cd_BoardAddr = cpu_to_be32(zorro_resource_start(z));
cd.cd_BoardSize = zorro_resource_len(z); cd.cd_BoardSize = cpu_to_be32(zorro_resource_len(z));
return memory_read_from_buffer(buf, count, &off, &cd, sizeof(cd)); return memory_read_from_buffer(buf, count, &off, &cd, sizeof(cd));
} }

View File

@ -18,6 +18,7 @@
#include <linux/platform_device.h> #include <linux/platform_device.h>
#include <linux/slab.h> #include <linux/slab.h>
#include <asm/byteorder.h>
#include <asm/setup.h> #include <asm/setup.h>
#include <asm/amigahw.h> #include <asm/amigahw.h>
@ -161,7 +162,8 @@ static int __init amiga_zorro_probe(struct platform_device *pdev)
z = &zorro_autocon[i]; z = &zorro_autocon[i];
z->rom = zi->rom; z->rom = zi->rom;
z->id = (z->rom.er_Manufacturer<<16) | (z->rom.er_Product<<8); z->id = (be16_to_cpu(z->rom.er_Manufacturer) << 16) |
(z->rom.er_Product << 8);
if (z->id == ZORRO_PROD_GVP_EPC_BASE) { if (z->id == ZORRO_PROD_GVP_EPC_BASE) {
/* GVP quirk */ /* GVP quirk */
unsigned long magic = zi->boardaddr + 0x8000; unsigned long magic = zi->boardaddr + 0x8000;

View File

@ -63,26 +63,26 @@ enum GVP_flags {
struct Node { struct Node {
struct Node *ln_Succ; /* Pointer to next (successor) */ __be32 ln_Succ; /* Pointer to next (successor) */
struct Node *ln_Pred; /* Pointer to previous (predecessor) */ __be32 ln_Pred; /* Pointer to previous (predecessor) */
__u8 ln_Type; __u8 ln_Type;
__s8 ln_Pri; /* Priority, for sorting */ __s8 ln_Pri; /* Priority, for sorting */
__s8 *ln_Name; /* ID string, null terminated */ __be32 ln_Name; /* ID string, null terminated */
} __packed; } __packed;
struct ExpansionRom { struct ExpansionRom {
/* -First 16 bytes of the expansion ROM */ /* -First 16 bytes of the expansion ROM */
__u8 er_Type; /* Board type, size and flags */ __u8 er_Type; /* Board type, size and flags */
__u8 er_Product; /* Product number, assigned by manufacturer */ __u8 er_Product; /* Product number, assigned by manufacturer */
__u8 er_Flags; /* Flags */ __u8 er_Flags; /* Flags */
__u8 er_Reserved03; /* Must be zero ($ff inverted) */ __u8 er_Reserved03; /* Must be zero ($ff inverted) */
__u16 er_Manufacturer; /* Unique ID, ASSIGNED BY COMMODORE-AMIGA! */ __be16 er_Manufacturer; /* Unique ID, ASSIGNED BY COMMODORE-AMIGA! */
__u32 er_SerialNumber; /* Available for use by manufacturer */ __be32 er_SerialNumber; /* Available for use by manufacturer */
__u16 er_InitDiagVec; /* Offset to optional "DiagArea" structure */ __be16 er_InitDiagVec; /* Offset to optional "DiagArea" structure */
__u8 er_Reserved0c; __u8 er_Reserved0c;
__u8 er_Reserved0d; __u8 er_Reserved0d;
__u8 er_Reserved0e; __u8 er_Reserved0e;
__u8 er_Reserved0f; __u8 er_Reserved0f;
} __packed; } __packed;
/* er_Type board type bits */ /* er_Type board type bits */
@ -99,13 +99,13 @@ struct ConfigDev {
__u8 cd_Flags; /* (read/write) */ __u8 cd_Flags; /* (read/write) */
__u8 cd_Pad; /* reserved */ __u8 cd_Pad; /* reserved */
struct ExpansionRom cd_Rom; /* copy of board's expansion ROM */ struct ExpansionRom cd_Rom; /* copy of board's expansion ROM */
void *cd_BoardAddr; /* where in memory the board was placed */ __be32 cd_BoardAddr; /* where in memory the board was placed */
__u32 cd_BoardSize; /* size of board in bytes */ __be32 cd_BoardSize; /* size of board in bytes */
__u16 cd_SlotAddr; /* which slot number (PRIVATE) */ __be16 cd_SlotAddr; /* which slot number (PRIVATE) */
__u16 cd_SlotSize; /* number of slots (PRIVATE) */ __be16 cd_SlotSize; /* number of slots (PRIVATE) */
void *cd_Driver; /* pointer to node of driver */ __be32 cd_Driver; /* pointer to node of driver */
struct ConfigDev *cd_NextCD; /* linked list of drivers to config */ __be32 cd_NextCD; /* linked list of drivers to config */
__u32 cd_Unused[4]; /* for whatever the driver wants */ __be32 cd_Unused[4]; /* for whatever the driver wants */
} __packed; } __packed;
#define ZORRO_NUM_AUTO 16 #define ZORRO_NUM_AUTO 16