summaryrefslogtreecommitdiff
path: root/drivers/staging/vme
diff options
context:
space:
mode:
authorAaron Sierra <asierra@xes-inc.com>2013-12-09 16:05:40 (GMT)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2013-12-18 01:06:19 (GMT)
commit66a01f1158cf5dbe18dd2d5db7bb24080363ae21 (patch)
tree18e940199aaf250110cf95edf7f352c91b30889a /drivers/staging/vme
parentc326cc023e40ef741751a084b72796947bd37a66 (diff)
downloadlinux-66a01f1158cf5dbe18dd2d5db7bb24080363ae21.tar.xz
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/vme')
-rw-r--r--drivers/staging/vme/devices/vme_user.h20
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 280ccc7..c3b4964 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;