struct xenkbd_motion { uint8_t type; /* 0 1 */ /* XXX 3 bytes hole, try to pack */ int32_t rel_x; /* 4 4 */ int32_t rel_y; /* 8 4 */ int32_t rel_z; /* 12 4 */ /* size: 16, cachelines: 1, members: 4 */ /* sum members: 13, holes: 1, sum holes: 3 */ /* last cacheline: 16 bytes */ }; struct xenkbd_key { uint8_t type; /* 0 1 */ uint8_t pressed; /* 1 1 */ /* XXX 2 bytes hole, try to pack */ uint32_t keycode; /* 4 4 */ /* size: 8, cachelines: 1, members: 3 */ /* sum members: 6, holes: 1, sum holes: 2 */ /* last cacheline: 8 bytes */ }; struct xenkbd_position { uint8_t type; /* 0 1 */ /* XXX 3 bytes hole, try to pack */ int32_t abs_x; /* 4 4 */ int32_t abs_y; /* 8 4 */ int32_t rel_z; /* 12 4 */ /* size: 16, cachelines: 1, members: 4 */ /* sum members: 13, holes: 1, sum holes: 3 */ /* last cacheline: 16 bytes */ }; struct xenkbd_mtouch { uint8_t type; /* 0 1 */ uint8_t event_type; /* 1 1 */ uint8_t contact_id; /* 2 1 */ uint8_t reserved[5]; /* 3 5 */ union { struct { int32_t abs_x; /* 8 4 */ int32_t abs_y; /* 12 4 */ } pos; /* 8 */ struct { uint32_t major; /* 8 4 */ uint32_t minor; /* 12 4 */ } shape; /* 8 */ int16_t orientation; /* 2 */ } u; /* 8 8 */ /* size: 16, cachelines: 1, members: 5 */ /* last cacheline: 16 bytes */ }; struct xenkbd_page { uint32_t in_cons; /* 0 4 */ uint32_t in_prod; /* 4 4 */ uint32_t out_cons; /* 8 4 */ uint32_t out_prod; /* 12 4 */ /* size: 16, cachelines: 1, members: 4 */ /* last cacheline: 16 bytes */ };