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>
This commit is contained in:
Aaron Sierra 2013-12-09 10:05:40 -06:00 committed by Greg Kroah-Hartman
parent c326cc023e
commit 66a01f1158

View file

@ -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;