Skip to main content

owned_wait_queue_bindings/
owned_wait_queue_bindings.rs

1// Copyright 2026 The Fuchsia Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5// This file is automatically generated by //zircon/kernel/kernel:_kernel_bindgen_crate.owned-wait-queue-bindings.bindgen.
6
7#![expect(non_camel_case_types)]
8#![expect(non_upper_case_globals)]
9#![no_std]
10pub use zx_types::zx_status_t;
11pub type Deadline = core::ffi::c_void;
12pub type Thread = core::ffi::c_void;
13pub type SchedulerState_BaseProfile = core::ffi::c_void;
14pub type SchedulerState_WaitQueueInheritedSchedulerState = core::ffi::c_void;
15
16#[derive(PartialEq, Eq, Copy, Clone, Debug, Hash)]
17#[repr(C, align(8))]
18pub struct __BindgenOpaqueArray8<T>(pub T);
19impl<T: Copy + Default, const N: usize> Default for __BindgenOpaqueArray8<[T; N]> {
20    fn default() -> Self {
21        Self([<T as Default>::default(); N])
22    }
23}
24#[repr(C)]
25#[repr(align(8))]
26#[derive(Debug, Copy, Clone)]
27pub struct SchedulerState_EffectiveProfile {
28    pub _bindgen_opaque_blob: __BindgenOpaqueArray8<[u8; 32usize]>,
29}
30#[repr(i32)]
31#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)]
32pub enum ResourceOwnership {
33    Normal = 0,
34    Reader = 1,
35}
36#[repr(u8)]
37#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)]
38pub enum Interruptible {
39    No = 0,
40    Yes = 1,
41}
42#[repr(u8)]
43#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)]
44pub enum ForceInheritance {
45    No = 0,
46    Yes = 1,
47}
48#[repr(C)]
49#[repr(align(8))]
50#[derive(Debug, Copy, Clone)]
51pub struct WaitQueueBase {
52    pub _bindgen_opaque_blob: __BindgenOpaqueArray8<[u8; 56usize]>,
53}
54pub type Thread_UnblockList = __BindgenOpaqueArray8<[u8; 8usize]>;
55#[repr(C)]
56#[derive(Debug)]
57pub struct OwnedWaitQueue {
58    pub _base: WaitQueueBase,
59    pub _base_1: __BindgenOpaqueArray8<[u8; 16usize]>,
60    pub owner_: *mut Thread,
61    pub inherited_scheduler_state_storage_: *mut SchedulerState_WaitQueueInheritedSchedulerState,
62}
63#[repr(C)]
64#[derive(Debug, Copy, Clone)]
65pub struct OwnedWaitQueue_BAAOLockingDetails {
66    pub new_owner: *mut Thread,
67    pub stop_point: *const ::core::ffi::c_void,
68}
69#[repr(C)]
70#[derive(Debug, Copy, Clone)]
71pub struct OwnedWaitQueue_WakeThreadsResult {
72    pub woken: u32,
73    pub still_waiting: u32,
74    pub owner: *mut Thread,
75}
76#[repr(i32)]
77#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)]
78pub enum OwnedWaitQueue_WakeOption {
79    None = 0,
80    AssignOwner = 1,
81}
82pub const OwnedWaitQueue_kOwnedMagic: u32 = 1870098033;
83unsafe extern "C" {
84    pub fn cpp_thread_unblock_list_init(list: *mut u8);
85}
86unsafe extern "C" {
87    pub fn cpp_thread_unblock_list_destroy(list: *mut Thread_UnblockList);
88}
89unsafe extern "C" {
90    pub fn cpp_owned_wait_queue_init(wait_queue: *mut u8);
91}
92unsafe extern "C" {
93    pub fn cpp_owned_wait_queue_disown_all_queues(t: *mut Thread);
94}
95unsafe extern "C" {
96    pub fn cpp_owned_wait_queue_get_effective_profile(
97        wait_queue: *const OwnedWaitQueue,
98        out_profile: *mut u8,
99    );
100}
101unsafe extern "C" {
102    pub fn cpp_owned_wait_queue_set_thread_base_profile_and_propagate(
103        thread: *mut Thread,
104        profile: *const SchedulerState_BaseProfile,
105    );
106}
107unsafe extern "C" {
108    pub fn cpp_owned_wait_queue_lock_pi_chain_thread(start: *mut Thread) -> Result;
109}
110unsafe extern "C" {
111    pub fn cpp_owned_wait_queue_lock_pi_chain_queue(start: *mut WaitQueueBase) -> Result;
112}
113unsafe extern "C" {
114    pub fn cpp_owned_wait_queue_assert_not_owned(wait_queue: *const OwnedWaitQueue);
115}
116unsafe extern "C" {
117    pub fn cpp_owned_wait_queue_assign_owner(
118        wait_queue: *mut OwnedWaitQueue,
119        new_owner: *mut Thread,
120    ) -> zx_status_t;
121}
122unsafe extern "C" {
123    pub fn cpp_owned_wait_queue_assign_owner_locked(
124        wait_queue: *mut OwnedWaitQueue,
125        new_owner: *mut Thread,
126    ) -> zx_status_t;
127}
128unsafe extern "C" {
129    pub fn cpp_owned_wait_queue_reset_owner_if_no_waiters(wait_queue: *mut OwnedWaitQueue);
130}
131unsafe extern "C" {
132    pub fn cpp_owned_wait_queue_assert_safe_for_pooling(wait_queue: *const OwnedWaitQueue);
133}
134unsafe extern "C" {
135    pub fn cpp_owned_wait_queue_block_and_assign_owner(
136        wait_queue: *mut OwnedWaitQueue,
137        deadline: *const Deadline,
138        new_owner: *mut Thread,
139        resource_ownership: ResourceOwnership,
140        interruptible: Interruptible,
141    ) -> zx_status_t;
142}
143unsafe extern "C" {
144    pub fn cpp_owned_wait_queue_block_and_assign_owner_locked(
145        wait_queue: *mut OwnedWaitQueue,
146        current_thread: *mut Thread,
147        deadline: *const Deadline,
148        details: *const OwnedWaitQueue_BAAOLockingDetails,
149        resource_ownership: ResourceOwnership,
150        interruptible: Interruptible,
151        force_inheritance: ForceInheritance,
152    ) -> zx_status_t;
153}
154unsafe extern "C" {
155    pub fn cpp_owned_wait_queue_cancel_baao_operation_locked(
156        wait_queue: *mut OwnedWaitQueue,
157        current_thread: *mut Thread,
158        details: *const OwnedWaitQueue_BAAOLockingDetails,
159    );
160}
161unsafe extern "C" {
162    pub fn cpp_owned_wait_queue_lock_for_baao_operation_or_backoff(
163        wait_queue: *mut OwnedWaitQueue,
164        current_thread: *mut Thread,
165        new_owner: *mut Thread,
166        details_out: *mut OwnedWaitQueue_BAAOLockingDetails,
167    ) -> bool;
168}
169unsafe extern "C" {
170    pub fn cpp_owned_wait_queue_try_lock_for_baao_operation_locked(
171        wait_queue: *mut OwnedWaitQueue,
172        current_thread: *mut Thread,
173        new_owner: *mut Thread,
174        details_out: *mut OwnedWaitQueue_BAAOLockingDetails,
175    ) -> bool;
176}
177unsafe extern "C" {
178    pub fn cpp_owned_wait_queue_wake_threads(
179        wait_queue: *mut OwnedWaitQueue,
180        wake_count: u32,
181        wake_hooks: *mut ::core::ffi::c_void,
182        out_result: *mut OwnedWaitQueue_WakeThreadsResult,
183    );
184}
185unsafe extern "C" {
186    pub fn cpp_owned_wait_queue_wake_thread_and_assign_owner(
187        wait_queue: *mut OwnedWaitQueue,
188        wake_hooks: *mut ::core::ffi::c_void,
189        out_result: *mut OwnedWaitQueue_WakeThreadsResult,
190    );
191}
192unsafe extern "C" {
193    pub fn cpp_owned_wait_queue_wake_threads_locked(
194        wait_queue: *mut OwnedWaitQueue,
195        threads: *mut Thread_UnblockList,
196        wake_hooks: *mut ::core::ffi::c_void,
197        option: OwnedWaitQueue_WakeOption,
198        force_inheritance: ForceInheritance,
199        out_result: *mut OwnedWaitQueue_WakeThreadsResult,
200    );
201}
202unsafe extern "C" {
203    pub fn cpp_owned_wait_queue_lock_for_wake_operation_or_backoff(
204        wait_queue: *mut OwnedWaitQueue,
205        max_wake: u32,
206        wake_hooks: *mut ::core::ffi::c_void,
207        unblock_list_out: *mut Thread_UnblockList,
208    ) -> bool;
209}
210unsafe extern "C" {
211    pub fn cpp_owned_wait_queue_lock_for_wake_operation_locked(
212        wait_queue: *mut OwnedWaitQueue,
213        max_wake: u32,
214        wake_hooks: *mut ::core::ffi::c_void,
215        unblock_list_out: *mut Thread_UnblockList,
216    ) -> bool;
217}
218unsafe extern "C" {
219    pub fn cpp_owned_wait_queue_wake_and_requeue(
220        wait_queue: *mut OwnedWaitQueue,
221        requeue_target: *mut OwnedWaitQueue,
222        new_requeue_owner: *mut Thread,
223        wake_count: u32,
224        requeue_count: u32,
225        wake_hooks: *mut ::core::ffi::c_void,
226        requeue_hooks: *mut ::core::ffi::c_void,
227        wake_option: OwnedWaitQueue_WakeOption,
228        out_result: *mut OwnedWaitQueue_WakeThreadsResult,
229    );
230}
231#[repr(i32)]
232#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)]
233pub enum Result {
234    Ok = 0,
235    Retry = 1,
236    Backoff = 2,
237    Cycle = 3,
238}