diff options
author | Aaron Sierra <asierra@xes-inc.com> | 2013-12-09 10:05:40 -0600 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2013-12-17 17:06:19 -0800 |
commit | 66a01f1158cf5dbe18dd2d5db7bb24080363ae21 (patch) | |
tree | 18e940199aaf250110cf95edf7f352c91b30889a /drivers/staging | |
parent | c326cc023e40ef741751a084b72796947bd37a66 (diff) | |
download | talos-op-linux-66a01f1158cf5dbe18dd2d5db7bb24080363ae21.tar.gz talos-op-linux-66a01f1158cf5dbe18dd2d5db7bb24080363ae21.zip |
vme_user: Update API to work in mixed environments
This patch updates the vme_master and vme_slave structures to use
types with well defined size and to prevent the compiler from
inserting padding (between enable and vme_addr for one).
The original vme_master and vme_slave structs would be different
sizes and have different layouts depending on whether they were built
for a 32-bit or 64-bit system.
On x86 it is possible to have a 32-bit userspace and a 64-bit kernel.
In this type of environment, the userspace and kernel vme_user APIs
would disagree and prevent ioctls from executing (based on ioctl
signatures from _IOR and _IOW).
Signed-off-by: Aaron Sierra <asierra@xes-inc.com>
Acked-by: Martyn Welch <martyn.welch@ge.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'drivers/staging')
-rw-r--r-- | drivers/staging/vme/devices/vme_user.h | 20 |
1 files changed, 10 insertions, 10 deletions
diff --git a/drivers/staging/vme/devices/vme_user.h b/drivers/staging/vme/devices/vme_user.h index 280ccc7f26bb..c3b496413211 100644 --- a/drivers/staging/vme/devices/vme_user.h +++ b/drivers/staging/vme/devices/vme_user.h @@ -7,10 +7,10 @@ * VMEbus Master Window Configuration Structure */ struct vme_master { - int enable; /* State of Window */ - unsigned long long vme_addr; /* Starting Address on the VMEbus */ - unsigned long long size; /* Window Size */ - u32 aspace; /* Address Space */ + u32 enable; /* State of Window */ + u64 vme_addr; /* Starting Address on the VMEbus */ + u64 size; /* Window Size */ + u32 aspace; /* Address Space */ u32 cycle; /* Cycle properties */ u32 dwidth; /* Maximum Data Width */ #if 0 @@ -18,7 +18,7 @@ struct vme_master { int prefetchsize; /* Prefetch Read Size (Cache Lines) */ char wrpostenable; /* Write Post State */ #endif -}; +} __packed; /* @@ -31,17 +31,17 @@ struct vme_master { /* VMEbus Slave Window Configuration Structure */ struct vme_slave { - int enable; /* State of Window */ - unsigned long long vme_addr; /* Starting Address on the VMEbus */ - unsigned long long size; /* Window Size */ - u32 aspace; /* Address Space */ + u32 enable; /* State of Window */ + u64 vme_addr; /* Starting Address on the VMEbus */ + u64 size; /* Window Size */ + u32 aspace; /* Address Space */ u32 cycle; /* Cycle properties */ #if 0 char wrpostenable; /* Write Post State */ char rmwlock; /* Lock PCI during RMW Cycles */ char data64bitcapable; /* non-VMEbus capable of 64-bit Data */ #endif -}; +} __packed; struct vme_irq_id { __u8 level; |