|
From: | Paolo Bonzini |
Subject: | Re: [PATCH 04/10] rust: add bindings for gpio_{in|out} initialization |
Date: | Wed, 29 Jan 2025 11:59:04 +0100 |
User-agent: | Mozilla Thunderbird |
On Sat, Jan 25, 2025 at 1:32 PM Zhao Liu <zhao1.liu@intel.com> wrote:
+ fn init_gpio_in<F: for<'a> FnCall<(&'a Self::Target, u32, u32)>>(&self, num_lines: u32, _f: F) { + unsafe extern "C" fn rust_irq_handler<T, F: for<'a> FnCall<(&'a T, u32, u32)>>( + opaque: *mut c_void, + line: c_int, + level: c_int, + ) { + // SAFETY: the opaque was passed as a reference to `T` + F::call((unsafe { &*(opaque.cast::<T>()) }, line as u32, level as u32)) + } + + let gpio_in_cb: unsafe extern "C" fn(*mut c_void, c_int, c_int) = + rust_irq_handler::<Self::Target, F>;
Please add "let _: () = F::ASSERT_IS_SOME;", which is added by the qdev_init_clock_in() patch.
Paolo
[Prev in Thread] | Current Thread | [Next in Thread] |