indexbus_abi/layouts/shared.rs
1use crate::{caps, IndexbusAtomicU32, LayoutHeader};
2
3use super::common::{IndexQueue, MpscQueue, SlotPoolLayout};
4
5/// Shared events region (SPSC + MPSC) base layout.
6#[repr(C, align(64))]
7pub struct SharedLayout {
8 /// Common region header (magic/version/capabilities/layout size).
9 pub header: LayoutHeader,
10
11 /// 0 = uninitialized, 1 = initializing, 2 = initialized
12 pub initialized: IndexbusAtomicU32,
13 /// Padding (reserved).
14 pub pad0: u32,
15
16 /// Pad to 64 so `SlotPoolLayout` (align 64) starts at offset 64.
17 pub pad_to_64: [u8; 40],
18
19 /// Slot pool backing both the SPSC and MPSC queues.
20 pub slot_pool: SlotPoolLayout,
21 /// SPSC queue of slot indices.
22 pub queue: IndexQueue,
23 /// MPSC queue of slot indices.
24 pub mpsc_queue: MpscQueue,
25}
26
27impl SharedLayout {
28 /// Capabilities required for this region to be considered compatible.
29 pub const REQUIRED_CAPS: u32 = caps::INDEXBUS_CAP_SUPPORTS_EVENTS;
30}