struct xensnd_open_req { uint32_t pcm_rate; /* 0 4 */ uint8_t pcm_format; /* 4 1 */ uint8_t pcm_channels; /* 5 1 */ uint16_t reserved; /* 6 2 */ uint32_t buffer_sz; /* 8 4 */ grant_ref_t gref_directory_start; /* 12 4 */ /* size: 16, cachelines: 1, members: 6 */ /* last cacheline: 16 bytes */ }; struct xensnd_page_directory { grant_ref_t gref_dir_next_page; /* 0 4 */ grant_ref_t gref[1]; /* 4 4 */ /* size: 8, cachelines: 1, members: 2 */ /* last cacheline: 8 bytes */ }; struct xensnd_rw_req { uint32_t offset; /* 0 4 */ uint32_t len; /* 4 4 */ /* size: 8, cachelines: 1, members: 2 */ /* last cacheline: 8 bytes */ }; struct xensnd_req { uint16_t id; /* 0 2 */ uint8_t operation; /* 2 1 */ uint8_t reserved[5]; /* 3 5 */ union { struct xensnd_open_req open; /* 16 */ struct xensnd_rw_req rw; /* 8 */ uint8_t reserved[24]; /* 24 */ } op; /* 8 24 */ /* size: 32, cachelines: 1, members: 4 */ /* last cacheline: 32 bytes */ }; struct xensnd_resp { uint16_t id; /* 0 2 */ uint8_t operation; /* 2 1 */ uint8_t reserved; /* 3 1 */ int32_t status; /* 4 4 */ uint8_t reserved1[24]; /* 8 24 */ /* size: 32, cachelines: 1, members: 5 */ /* last cacheline: 32 bytes */ };