From nobody Sat Nov 15 12:44:53 2025 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1751551217; cv=none; d=zohomail.com; s=zohoarc; b=AomTVxuuAxVZvnvd/D3fpeHANZ9uwP+lvRaPnUPrSwvi6kFWs+ckY+KpOoijgRaoJ4zwTq6zY/ob1bETN/w2zsrgLf3H0IsuJMe9FJbQXPPIdwW0u6FAYL9xQrGrf4RKLt4eZuE8Af9y9HXz0pcqBj5+KGXirepGPBWw7vkWyUI= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751551217; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=FvLhRPj1vfT6fjk88OGyW5S9WumCYLF9auEExY5jSXI=; b=gcYjHX+LqAIq+OJtpDF/xeSOQv+MItElgbq9ZJ1kb9kaozK6jwtA1NsQyGphTqLRTmzfUlQ+Y9VOYEtWZoJbJ5WzH22W03sVl7DiPmDyztvCeHx6X9bOm5t6BkxIYk2lG8ccNLuInR83lzGcKaO1vh5ydSx1bHx6dXOtNgYOezk= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1751551217482349.36994364997247; Thu, 3 Jul 2025 07:00:17 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uXKSq-0000wt-K8; Thu, 03 Jul 2025 09:59:01 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1uXKSn-0000vL-Th for qemu-devel@nongnu.org; Thu, 03 Jul 2025 09:58:58 -0400 Received: from mail-ed1-x536.google.com ([2a00:1450:4864:20::536]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1uXKSh-0000j1-4R for qemu-devel@nongnu.org; Thu, 03 Jul 2025 09:58:56 -0400 Received: by mail-ed1-x536.google.com with SMTP id 4fb4d7f45d1cf-60c60f7eeaaso13331234a12.0 for ; Thu, 03 Jul 2025 06:58:49 -0700 (PDT) Received: from [127.0.1.1] (ppp-2-86-212-125.home.otenet.gr. [2.86.212.125]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-ae353ca1ca6sm1279678966b.176.2025.07.03.06.58.45 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 03 Jul 2025 06:58:45 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1751551128; x=1752155928; darn=nongnu.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=FvLhRPj1vfT6fjk88OGyW5S9WumCYLF9auEExY5jSXI=; b=bLRT/dQRdX6LnRYM6hls61xW10xrpDDSHNswVjnne/B0d7dEVnU4TwqcQ2ClhHTjge veer6IJb+r4eyxftYMxpkJKB26CDa64cRDq4HhtE/gENqEZG6pU/Zfa5klhdWEhAPP1e 1uYKXJFSuxLktIpcF/lEkA2j6vyCRuoWSexu6YJ5KIjztX1hOdZpmJ5E2/tz5EtSoUzn 0Y9+fv/y6vowiUtOQ5lcAAthkhL1K+FLYT3jgE9HZ1lTiiJHB7M1lvHkpxWWZekCoRI0 vrDupeRKPxrQ4IhQqrsISOKJXjTCC6wFHx/pUG2CswWBSLyyE6ku8EyyAMA9FouWnbYQ zbzA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751551128; x=1752155928; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=FvLhRPj1vfT6fjk88OGyW5S9WumCYLF9auEExY5jSXI=; b=MG42wzk0NVhsaf49lyLIvUZir9yoMGTslGEjFbTesif15MAQapv7SQ/r8r60uQt0j8 hjFHNd4j+Gu9HSrF7NC63LQy7ew9paUrUNhk12ndxclhEfxOrlc2tD0ks1nVMs57GH/h JpZJaFoIIOf5XmPLhrWI27JF8jziAC9eAEg0qDGBNmD17MbH7+ozL2/WWURfexsJth1k faw2YFMpSqG8CwYyr1YZRVQPilPaIa6VxtoZpHBYQ+yAwmAslq35/kgJyy4HcD+4jinZ uY4KYkItfJesyzMx58uFXMxLK1K0mitH+8i5grHafZcV9jGoutwaqfR0AG3rMSDegyNO 57+w== X-Gm-Message-State: AOJu0YxyI+NtykboN7IQOTOcKDfA2Ff3kkFblQFPf8lQQ+YpBdxEnRvx pWY0y5J09RByRTUq3LERdh/+y76fMIcqX39AXiimxsicOSjXQMHZxCp/gQQJoocdf7BLp12R3Xz OkURGe64= X-Gm-Gg: ASbGncv1tcr4F9+u2//vJB7wIT27ni8V0eQF5InCGY0s3RldizMZ+laVgFKRfhPdVTj QX8+SUo+8z16+TWQhuKMSpLzuozJX3IFyn5mr03GGga0WNu4h/uAcOG45PPy1ygYIPQB8E3G5wm mRyiiSf3/vq+8zEZXXp56ygOMj6HUCUWJJLsR0KYSMirzfp02118va9hqFWgxqvTFAjlpy2pbCo cUciUVVSfCI3gkERrnnYAIi+zgXCWyQt+XZxZIpeYK+HYrw2iyVQKYFVPtx9kMH9uIqhBJHoZc2 FRZuP3m4c0raBtpW619uiKWShXA0Vi0xtdTSyYzAfykRGbNYh4HRmgQcWULVyvQpYiHCoh9xlpQ lQzcoLHHu/3xZbWNZqqCKPU3R+AnVayU= X-Google-Smtp-Source: AGHT+IGf7K/lYxBnK79Pkd0vYng8HmYU6tcGoPpnW3smMJIVl7aAEy+LUcFgfTUGARAIxdMsC8kPgg== X-Received: by 2002:a17:907:9495:b0:ae3:6cc8:e431 with SMTP id a640c23a62f3a-ae3c2db00cemr769035966b.57.1751551126031; Thu, 03 Jul 2025 06:58:46 -0700 (PDT) From: Manos Pitsidianakis Date: Thu, 03 Jul 2025 16:58:11 +0300 Subject: [PATCH 1/3] rust/memory: replace size arg with Bits enum MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250703-rust-mem-api-v1-1-cd5314bdf580@linaro.org> References: <20250703-rust-mem-api-v1-0-cd5314bdf580@linaro.org> In-Reply-To: <20250703-rust-mem-api-v1-0-cd5314bdf580@linaro.org> To: qemu-devel@nongnu.org Cc: qemu-rust@nongnu.org, Paolo Bonzini , Zhao Liu , Manos Pitsidianakis X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=8208; i=manos.pitsidianakis@linaro.org; h=from:subject:message-id; bh=b5wGxgQqVBjenLdl6KFUgyRLn8oJlLD3hMKTz4nl5dQ=; b=LS0tLS1CRUdJTiBQR1AgTUVTU0FHRS0tLS0tCgpvd0VCYlFLUy9aQU5Bd0FLQVhjcHgzQi9mZ 25RQWNzbVlnQm9ab3lUWFVFbmoxZmJxazVyaE5wK2VFR21nSXdaCkRGRmpOaUFjVzBjTis4bEpt RnlKQWpNRUFBRUtBQjBXSVFUTVhCdE9SS0JXODRkd0hSQjNLY2R3ZjM0SjBBVUMKYUdhTWt3QUt DUkIzS2Nkd2YzNEowTnJMRC9zR1RGU1QyeStSTWxtMXJvc0plc05sOEhzM1JGTk5iNlFQYXVaQg pLL05YbzlMd2x2bXFaR29ZRFhxYTJzRysvK0FPMWpXb20wRk9NY1BuQm03SkM3RTlCaWxIZHM4c 0RPeVFtRnVQCjFTMjhmRk1MeENCNzJmQyttMGFOV2dySTF5Z0I0YytiOU5sYkFYQVF5NjJnOGVG QTk4OG52alcxL2ttbWF2a0IKZVJqNjlkNGd6MllKa2p0eHh2QkdpeHMzMmZlWHNBRVl0cDZWYnJ VVk12OFZiOEZHNzdRZk1aek9USGZXRW53VApES1hYNFNYUFB5SHdXZlpTSkRUbDNGak0wNWxINV FZeVNUaEFuck9ESWRMSlRvZENwQ2Z2S1VUdi9Pd3BYZWx2CmE5aWd4OEU0UGYyWGdYYkpQaVozT nlXNitPK2YwRzQ3dWhRT2dtdkVWcW5YcDhydkg5OFFpYUFXaGZ5V1BMTW8KRUtENGNhQ1EvZGJB b3BGTVl4QVkvczdJWVJVRjR4bHlzVWFJMVdJRDMzbzdtazFOUW13dVNMN3dTY080TEdnMQpjVVh IUmo4QWxFZGMzbkZPczRBYXdkMGpIYTA2QlpqWFd4SnJtYWNWdUpsRkJrM1V2eDgyZkY3TzE0Sm pXNGp1CnNKWHhJQ2xEQUZMZ3Q0ZGxxZ2dOdUxRNG9MSHRwejY5b09zMjFEc0MvQnRLbVRmK0dPN UYyTUdLUFhBZnNZREQKV3BFeVR6Sk1kY1dxc1NPUGFiREEvdmRIbFljazBTZjhFVzVuUTAyeXhC SmpLc3oyczU3SkNYKzJiV3RsZDd6Rgp5UW1TVVpVclk3RjhzSzFUdWltUFpURmwzcEJNbXZVNTZ haWhiRXVWREF2SFU0dlU5dS9nWGhIKzh2V3BhbDdqCjNYazVZZz09Cj1ieU9zCi0tLS0tRU5EIF BHUCBNRVNTQUdFLS0tLS0K X-Developer-Key: i=manos.pitsidianakis@linaro.org; a=openpgp; fpr=7C721DF9DB3CC7182311C0BF68BC211D47B421E1 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2a00:1450:4864:20::536; envelope-from=manos.pitsidianakis@linaro.org; helo=mail-ed1-x536.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1751551219499116600 We have the ability to make memory accesses use a typesafe access width type in Rust, which the C API currently lacks as it does not use a newtype wrapper for specifying the amount of bytes a memory access has; it uses a plain 32-bit integer value instead. Replace use of u32 size arguments with a Bits enum that has only the allowed byte sizes as variants and has a u32 representation so that it can be fed back into C as well. Signed-off-by: Manos Pitsidianakis Reviewed-by: Zhao Liu --- rust/hw/char/pl011/src/device.rs | 8 ++++---- rust/hw/timer/hpet/src/device.rs | 14 +++++++------- rust/qemu-api/src/memory.rs | 34 ++++++++++++++++++++++++---------- 3 files changed, 35 insertions(+), 21 deletions(-) diff --git a/rust/hw/char/pl011/src/device.rs b/rust/hw/char/pl011/src/devi= ce.rs index 5b53f2649f161287f40f79075afba47db6d9315c..0c146821fbec4d310963264b90b= b2bf2d30b901d 100644 --- a/rust/hw/char/pl011/src/device.rs +++ b/rust/hw/char/pl011/src/device.rs @@ -10,7 +10,7 @@ irq::{IRQState, InterruptSource}, log::Log, log_mask_ln, - memory::{hwaddr, MemoryRegion, MemoryRegionOps, MemoryRegionOpsBuilder= }, + memory::{hwaddr, Bits, MemoryRegion, MemoryRegionOps, MemoryRegionOpsB= uilder}, prelude::*, qdev::{Clock, ClockEvent, DeviceImpl, DeviceState, Property, ResetType= , ResettablePhasesImpl}, qom::{ObjectImpl, Owned, ParentField, ParentInit}, @@ -501,7 +501,7 @@ unsafe fn init(mut this: ParentInit) { .read(&PL011State::read) .write(&PL011State::write) .native_endian() - .impl_sizes(4, 4) + .impl_sizes(Bits::_32, Bits::_32) .build(); =20 // SAFETY: this and this.iomem are guaranteed to be valid at this = point @@ -534,7 +534,7 @@ fn post_init(&self) { } } =20 - fn read(&self, offset: hwaddr, _size: u32) -> u64 { + fn read(&self, offset: hwaddr, _size: Bits) -> u64 { match RegisterOffset::try_from(offset) { Err(v) if (0x3f8..0x400).contains(&(v >> 2)) =3D> { let device_id =3D self.get_class().device_id; @@ -555,7 +555,7 @@ fn read(&self, offset: hwaddr, _size: u32) -> u64 { } } =20 - fn write(&self, offset: hwaddr, value: u64, _size: u32) { + fn write(&self, offset: hwaddr, value: u64, _size: Bits) { let mut update_irq =3D false; if let Ok(field) =3D RegisterOffset::try_from(offset) { // qemu_chr_fe_write_all() calls into the can_receive diff --git a/rust/hw/timer/hpet/src/device.rs b/rust/hw/timer/hpet/src/devi= ce.rs index acf7251029e912f18a5690b0d6cf04ea8151c5e1..a94e128e302a57df709ef364369= 4308833791859 100644 --- a/rust/hw/timer/hpet/src/device.rs +++ b/rust/hw/timer/hpet/src/device.rs @@ -18,7 +18,7 @@ cell::{BqlCell, BqlRefCell}, irq::InterruptSource, memory::{ - hwaddr, MemoryRegion, MemoryRegionOps, MemoryRegionOpsBuilder, MEM= TXATTRS_UNSPECIFIED, + hwaddr, Bits, MemoryRegion, MemoryRegionOps, MemoryRegionOpsBuilde= r, MEMTXATTRS_UNSPECIFIED, }, prelude::*, qdev::{DeviceImpl, DeviceState, Property, ResetType, ResettablePhasesI= mpl}, @@ -703,8 +703,8 @@ unsafe fn init(mut this: ParentInit) { .read(&HPETState::read) .write(&HPETState::write) .native_endian() - .valid_sizes(4, 8) - .impl_sizes(4, 8) + .valid_sizes(Bits::_32, Bits::_64) + .impl_sizes(Bits::_32, Bits::_64) .build(); =20 MemoryRegion::init_io( @@ -771,9 +771,9 @@ fn reset_hold(&self, _type: ResetType) { self.rtc_irq_level.set(0); } =20 - fn decode(&self, mut addr: hwaddr, size: u32) -> HPETAddrDecode<'_> { + fn decode(&self, mut addr: hwaddr, size: Bits) -> HPETAddrDecode<'_> { let shift =3D ((addr & 4) * 8) as u32; - let len =3D std::cmp::min(size * 8, 64 - shift); + let len =3D std::cmp::min(size as u32 * 8, 64 - shift); =20 addr &=3D !4; let reg =3D if (0..=3D0xff).contains(&addr) { @@ -796,7 +796,7 @@ fn decode(&self, mut addr: hwaddr, size: u32) -> HPETAd= drDecode<'_> { HPETAddrDecode { shift, len, reg } } =20 - fn read(&self, addr: hwaddr, size: u32) -> u64 { + fn read(&self, addr: hwaddr, size: Bits) -> u64 { // TODO: Add trace point - trace_hpet_ram_read(addr) let HPETAddrDecode { shift, reg, .. } =3D self.decode(addr, size); =20 @@ -823,7 +823,7 @@ fn read(&self, addr: hwaddr, size: u32) -> u64 { }) >> shift } =20 - fn write(&self, addr: hwaddr, value: u64, size: u32) { + fn write(&self, addr: hwaddr, value: u64, size: Bits) { let HPETAddrDecode { shift, len, reg } =3D self.decode(addr, size); =20 // TODO: Add trace point - trace_hpet_ram_write(addr, value) diff --git a/rust/qemu-api/src/memory.rs b/rust/qemu-api/src/memory.rs index e40fad6cf19ea7971daf78afdf9ac886308ef5c3..b1907aa01300a3fac8e1f3b69c5= d50da631a556d 100644 --- a/rust/qemu-api/src/memory.rs +++ b/rust/qemu-api/src/memory.rs @@ -20,6 +20,15 @@ zeroable::Zeroable, }; =20 +#[derive(Copy, Clone, Debug, Eq, PartialEq, qemu_api_macros::TryInto)] +#[repr(u32)] +pub enum Bits { + _8 =3D 1, + _16 =3D 2, + _32 =3D 4, + _64 =3D 8, +} + pub struct MemoryRegionOps( bindings::MemoryRegionOps, // Note: quite often you'll see PhantomData mentioned when dis= cussing @@ -41,32 +50,37 @@ unsafe impl Sync for MemoryRegionOps {} #[derive(Clone)] pub struct MemoryRegionOpsBuilder(bindings::MemoryRegionOps, PhantomDat= a); =20 -unsafe extern "C" fn memory_region_ops_read_cb FnCall<(&'a T= , hwaddr, u32), u64>>( +unsafe extern "C" fn memory_region_ops_read_cb FnCall<(&'a T= , hwaddr, Bits), u64>>( opaque: *mut c_void, addr: hwaddr, size: c_uint, ) -> u64 { + let size =3D Bits::try_from(size).expect("invalid size argument"); F::call((unsafe { &*(opaque.cast::()) }, addr, size)) } =20 -unsafe extern "C" fn memory_region_ops_write_cb FnCall<(&'a = T, hwaddr, u64, u32)>>( +unsafe extern "C" fn memory_region_ops_write_cb< + T, + F: for<'a> FnCall<(&'a T, hwaddr, u64, Bits)>, +>( opaque: *mut c_void, addr: hwaddr, data: u64, size: c_uint, ) { + let size =3D Bits::try_from(size).expect("invalid size argument"); F::call((unsafe { &*(opaque.cast::()) }, addr, data, size)) } =20 impl MemoryRegionOpsBuilder { #[must_use] - pub const fn read FnCall<(&'a T, hwaddr, u32), u64>>(mut se= lf, _f: &F) -> Self { + pub const fn read FnCall<(&'a T, hwaddr, Bits), u64>>(mut s= elf, _f: &F) -> Self { self.0.read =3D Some(memory_region_ops_read_cb::); self } =20 #[must_use] - pub const fn write FnCall<(&'a T, hwaddr, u64, u32)>>(mut s= elf, _f: &F) -> Self { + pub const fn write FnCall<(&'a T, hwaddr, u64, Bits)>>(mut = self, _f: &F) -> Self { self.0.write =3D Some(memory_region_ops_write_cb::); self } @@ -90,9 +104,9 @@ pub const fn native_endian(mut self) -> Self { } =20 #[must_use] - pub const fn valid_sizes(mut self, min: u32, max: u32) -> Self { - self.0.valid.min_access_size =3D min; - self.0.valid.max_access_size =3D max; + pub const fn valid_sizes(mut self, min: Bits, max: Bits) -> Self { + self.0.valid.min_access_size =3D min as u32; + self.0.valid.max_access_size =3D max as u32; self } =20 @@ -103,9 +117,9 @@ pub const fn valid_unaligned(mut self) -> Self { } =20 #[must_use] - pub const fn impl_sizes(mut self, min: u32, max: u32) -> Self { - self.0.impl_.min_access_size =3D min; - self.0.impl_.max_access_size =3D max; + pub const fn impl_sizes(mut self, min: Bits, max: Bits) -> Self { + self.0.impl_.min_access_size =3D min as u32; + self.0.impl_.max_access_size =3D max as u32; self } =20 --=20 2.47.2 From nobody Sat Nov 15 12:44:53 2025 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1751551198; cv=none; d=zohomail.com; s=zohoarc; b=KGJv9Ute2ln/3hiFOZlPlq54P78MMKAQz72ZTtEu5zBZi1Nf5Fbe+5T6cq9qiONHjJuq6x7nA/Li9oOaj3TbdLlUgtjljVIv0wrCTHaQ1aaoLkbhqJwZB1cYyvRhSyZHTcPI/Pnctw8MC6fOexD+WgUul1ugoUukRZyvncRjn6k= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751551198; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=O07bbkkqKS35tHr8MO8G+GvqnuZRF6z78OKIb4PLGf4=; b=SjPa6tHE0I6Eu1MsS/89x0+3pMRwAg7HIOJrCuoza2vlrLTU3SR7z4zYk8vpsFltDzVl2Xy4umVds9Wz8akj8idnAWQj0ThaAXLkh/7HfeansQAatXtHZU8neFBkWN5eW/ugE8NT95G3xGtk/JMmr4Qb78HH3oCrxu1ulNWuiVk= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1751551198234850.8226724265664; Thu, 3 Jul 2025 06:59:58 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uXKSn-0000ul-AY; Thu, 03 Jul 2025 09:58:57 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1uXKSl-0000u3-AN for qemu-devel@nongnu.org; Thu, 03 Jul 2025 09:58:55 -0400 Received: from mail-ed1-x529.google.com ([2a00:1450:4864:20::529]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1uXKSf-0000iw-83 for qemu-devel@nongnu.org; Thu, 03 Jul 2025 09:58:55 -0400 Received: by mail-ed1-x529.google.com with SMTP id 4fb4d7f45d1cf-60768f080d8so11826526a12.1 for ; Thu, 03 Jul 2025 06:58:48 -0700 (PDT) Received: from [127.0.1.1] (ppp-2-86-212-125.home.otenet.gr. [2.86.212.125]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-ae353ca1ca6sm1279678966b.176.2025.07.03.06.58.46 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 03 Jul 2025 06:58:46 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1751551127; x=1752155927; darn=nongnu.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=O07bbkkqKS35tHr8MO8G+GvqnuZRF6z78OKIb4PLGf4=; b=o5oZxbDMbsSgAFkAJm4+cL4RZ3kB5s1BonCoPKDJmgmCR/qXO6kP3mG08UTTElW4gc 7Bwt0jFWkQFxzJFQgIc/1L9z5T84wLrjSrgw82Z6vxE69dfNO5n5Ypxv4TVfkkzmBcXV Azv6bYrVF/D44G6zj/dHRaXGLGhaqYM8GLn2eh+RpNduXOSKEByUzanWiUxkjHNOuEYs zVIsdR9xb11ELFfJw08KWt5W/A+dYYAnzGd7zAJWvuEP/vA+jCY28YTctEgNRp/yoZoe +mz4tGLaFRG9G5UKqsyuLbEW9Nb6KZaGGppbqHr5CDT2r9WJ9CfDWMF0wHHKVfwMH1mj MFIw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751551127; x=1752155927; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=O07bbkkqKS35tHr8MO8G+GvqnuZRF6z78OKIb4PLGf4=; b=Tx+niCFgcVlgBARAEch/fBRsh5OuI7bdEnChrCLZ/zPj797RdTo27Q0pICwKfTeXvr p+ivcIpgo1sXX2E2775qGR9zhOS/Jk5Zfvjyby03mm8pVIs3NaZ+MMOwOpSAUYL3aMfv 8axnGOir9bt6G3qTJOlmPvM892TydZ/oduZ5fjr/2/3wEOLzcmtTw1fgYIAH5ZAQ6GM1 ExTG/aWM5pdUf5HBPtSGfb/iIcsA574og+E1sr1zKkqKGbfvfQP5Qx1owOenf3LaRTYj BzWCrY6IfJs1Bv2FAdlHFsNA0KOKgrAghyCMyoiu1iVcqRYNNLu2SKr0kr6hk0zf4UMg oJMQ== X-Gm-Message-State: AOJu0Yzn9j+c656CzZgQ8e9k6r/X0+nC5tw98tbMCGdixq9nMIM2hHwM Ehrlqb+PxkT3UtUP+MblHcWaeZgba7cE69OXFQ8DXRHJX0nqpxHTKVIKbtPMiizZsnY= X-Gm-Gg: ASbGncuDgD/rgUfkhLZ02E0FH1g7on9wjrz1eOFJrIcoX1EaEw9DFxGM3gIIfw1X8oU ugkBCxCK9DlVEhXkrxudy0zn9sMW14M1/73Uj81jO571TZoVnI0adstdE6RXBE5p71sriMsXuTN lrCBycDzcD5Rh+NVULXH+XKfD2/TlP6e2Fze5zImWaZ5NMk8ZhcQ+smMFsdSiuHbNJULSM1+K4b SDmI6qCyE/RRDtUDVKOWBK/fgKphJYp3kBKefOnFup8aWQ9f2DlMiVlNRZDRLcF1qgh6/Vab+xQ SlnfvrjVW1B9BNju3e0JgAyzifHE5eDvNssVH9n9CjcERGFtclPpUEFWv1q4n2YKtrk6Awx6FyV nhHu0qauEbeZ/mh5GEZs3/RYoJx6p9cc= X-Google-Smtp-Source: AGHT+IFINac6KJTtfWQZffSnEtlYgBwoR5EwnGdvVHCVgPij3iY5Pp2h6xJiUJoCtBqTFgwvZY44vg== X-Received: by 2002:a17:907:7f24:b0:ae0:d66c:5968 with SMTP id a640c23a62f3a-ae3d886be2emr366015266b.46.1751551127118; Thu, 03 Jul 2025 06:58:47 -0700 (PDT) From: Manos Pitsidianakis Date: Thu, 03 Jul 2025 16:58:12 +0300 Subject: [PATCH 2/3] memattrs.h: make MemTxAttrs into enum MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250703-rust-mem-api-v1-2-cd5314bdf580@linaro.org> References: <20250703-rust-mem-api-v1-0-cd5314bdf580@linaro.org> In-Reply-To: <20250703-rust-mem-api-v1-0-cd5314bdf580@linaro.org> To: qemu-devel@nongnu.org Cc: qemu-rust@nongnu.org, Paolo Bonzini , Zhao Liu , Manos Pitsidianakis X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=1312; i=manos.pitsidianakis@linaro.org; h=from:subject:message-id; bh=NevvNxLKgIVDzO2wket28GXOp7d3QUgciZxG/+W4+YQ=; b=LS0tLS1CRUdJTiBQR1AgTUVTU0FHRS0tLS0tCgpvd0VCYlFLUy9aQU5Bd0FLQVhjcHgzQi9mZ 25RQWNzbVlnQm9ab3lUcDV2TW9sZEFoaFRoamRhS1ZLWDhMcStvCmdKMGR0eGluRWNzRHFIbldF VnVKQWpNRUFBRUtBQjBXSVFUTVhCdE9SS0JXODRkd0hSQjNLY2R3ZjM0SjBBVUMKYUdhTWt3QUt DUkIzS2Nkd2YzNEowT1JCRC93Tk1YcnVHV2pPS3JZQmFHUEFkMDcyL0x6ek9VS3BBaDNlcjNWZg o2OVpvRkp0ZEJ5UG00RmUvekg4cTZUTEJKeVVLNjU5a0ViSEV1R2Y1UlVDMGRqRGFQbHNlOU84Y Vc5bGQ4bUN4Cmd2Z2p1OWJyQW9QZ2Zoa3gvZkdrVUtoQlJsZ1VSZjV3K2lhcU9teVcxRnV2NW15 S0w5ckJEbGt5SFU1Wk1oMlkKVXJEQ1EzY0kwc2JzTUdTdjdSLy96am82TFNDMG4xYmg5TkdOejB BelVoMmxHL25LSU1zOU1ROHlzcTB4WTQyWAp0SVJnR2pBUm5wMnBFV3FzSEkyWE54RlkvS0MxT0 9lT2hEalRTelhsTDJXRURoRXVxSXB4QjA5eUpLcy9pZ2hhCm0xenNOdHhGTjcxaENma21ESjdNQ U1LRlRmY2hjMWI4SEhkY2UzYmdrR29BR2VmRXdUNTBUaUg0SllDd0dlQkgKOGZnaUl2ekRSbCsz UnVVWllkRkNrdW5PclZjU0tTQ0xwVWlGNWt3elNHcFVEZ2dnc2JhMVVEcUpTR2ZOMWd3ZApQY0M 2Zng4Q1ZkeEtKSGpSVVhOVG9GN0htajdLME9HUkVzVjV3WVk1L1FySmZFa3VwelFyanJyZE5EdU t5SFp6CldpKzJFOERWa1dubkdxc0ZFK2tOdFl2RVRtb0lZbTlEODZSWGxweFNORjBHNklZVTZ5e ko2RWJwRit3ODA5S24KMzB3d0htb2VlcW9LM2xkMlp0WXZNMmRzeG14VXVNNVRLNjN5V2FEcElO c3FoZ1BtVWN5KysvTEFPWTNaTUp5eApSa1QxSXMwTGVDU0hyVEt6TTF4Ymc1TEozSEw1Q2Z1U2x rQ0dNd1U5Q2hzdTg1eEpOUDBEZERiWG85NndhR0UxCjM3aGZaZz09Cj1xRkdoCi0tLS0tRU5EIF BHUCBNRVNTQUdFLS0tLS0K X-Developer-Key: i=manos.pitsidianakis@linaro.org; a=openpgp; fpr=7C721DF9DB3CC7182311C0BF68BC211D47B421E1 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2a00:1450:4864:20::529; envelope-from=manos.pitsidianakis@linaro.org; helo=mail-ed1-x529.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, T_SPF_TEMPERROR=0.01 autolearn=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1751551199053116600 Convert MemTxResult defines into an enum. This will allow bindgen to generate a bitflag using the enum variants as its domain of values. Signed-off-by: Manos Pitsidianakis Reviewed-by: Philippe Mathieu-Daud=C3=A9 Reviewed-by: Zhao Liu --- include/exec/memattrs.h | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/include/exec/memattrs.h b/include/exec/memattrs.h index 8db1d3046479c21a32928086ea8804a66a5d5ffa..dc99b456edb0d99eced6f6513c4= e1c8013e84c3e 100644 --- a/include/exec/memattrs.h +++ b/include/exec/memattrs.h @@ -81,10 +81,11 @@ QEMU_BUILD_BUG_ON(sizeof(MemTxAttrs) > 8); * of some kind. The memory subsystem will bitwise-OR together results * if it is synthesizing an operation from multiple smaller accesses. */ -#define MEMTX_OK 0 -#define MEMTX_ERROR (1U << 0) /* device returned an error */ -#define MEMTX_DECODE_ERROR (1U << 1) /* nothing at that address */ -#define MEMTX_ACCESS_ERROR (1U << 2) /* access denied */ -typedef uint32_t MemTxResult; +typedef enum MemTxResult { + MEMTX_OK =3D 0, + MEMTX_ERROR =3D (1U << 0), /* device returned an error */ + MEMTX_DECODE_ERROR =3D (1U << 1), /* nothing at that address */ + MEMTX_ACCESS_ERROR =3D (1U << 2), /* access denied */ +} MemTxResult; =20 #endif --=20 2.47.2 From nobody Sat Nov 15 12:44:53 2025 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1751551173; cv=none; d=zohomail.com; s=zohoarc; b=XzG1s3RMvjavHBmbZaVbxw2gauhhEqLpgXCrSpYTKa0fCxGQHYfFDUXYxXLK19XeFkU6ovK1dNUi9WK9vPv7YsgtYRsumcdAYZmp4XeCuWx3H6vrlPVS5zM819pRcJZ/3ow4oSoBkXUO1edinFTXx6xGqqM5s7RnvYz1Da1Bs0c= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751551173; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=jF8aqDbU3LXGxNB2udC3gwDcAxLsQwt6wTonGUyu9pA=; b=Ge+HOOEnSDeDv2HhryUud7aOpnz5mQBrVTByn/5jxPrRQWZksbWNk2F5hDVhj3PteHQXe/QlzYf5/8S6bjeWeSvLHcRSZVBE5lS7dTXCW59SuxB6WM94YwrCeMOujU53V0zjMAAMU2igEGQ4+6+ZqgoDUTw0sbDn5i8O5mnPV6Q= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1751551173469758.7495491158886; Thu, 3 Jul 2025 06:59:33 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uXKSk-0000tY-SH; Thu, 03 Jul 2025 09:58:54 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1uXKSj-0000sI-5K for qemu-devel@nongnu.org; Thu, 03 Jul 2025 09:58:53 -0400 Received: from mail-ej1-x62d.google.com ([2a00:1450:4864:20::62d]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1uXKSg-0000j9-If for qemu-devel@nongnu.org; Thu, 03 Jul 2025 09:58:52 -0400 Received: by mail-ej1-x62d.google.com with SMTP id a640c23a62f3a-ae36dc91dc7so953465866b.2 for ; Thu, 03 Jul 2025 06:58:49 -0700 (PDT) Received: from [127.0.1.1] (ppp-2-86-212-125.home.otenet.gr. [2.86.212.125]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-ae353ca1ca6sm1279678966b.176.2025.07.03.06.58.47 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 03 Jul 2025 06:58:47 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1751551128; x=1752155928; darn=nongnu.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=jF8aqDbU3LXGxNB2udC3gwDcAxLsQwt6wTonGUyu9pA=; b=FoVlHEqjHbU6TgJvk0Rmd8JilWw6UI51DO7SOkuVGIrMW/4eRzJDHdrKDbM+zUawhh WjKyesPCWOAdf/zeFhsTgSS0cgPqqaRfTklDICnaOe/0QJfZjAkDviKYvBCjUpZ2QPp5 IPS7ipo9AXKndyAbaXQd3Pq9hMZvXI/MV4sBji+mXSlWY2JTIZNT/7+qYMO61q6/lnPX hFeXFoGT1tV9LzWEmLP6y/7XjhiH+NqSdGUBN0c2TY+mW24Sv66OKKq2pYwivONU+PIK j+YRtog73a3k6lpmA8UiNkddChC8AvOvVqfUf3nhe7s5FeYH2em54KG0hK4rJqwBe6An y8wA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751551128; x=1752155928; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=jF8aqDbU3LXGxNB2udC3gwDcAxLsQwt6wTonGUyu9pA=; b=Iczz9+rQa3RKQDySNtJxYpOkb3MdNGbtlAZUY1P9veazQ1U5SlMoTuz2lOT2zEZH7I YvIIMwu8CXH/JmuLico5S35dnoksIhSUHponJ8ej9GU2aCRUAqd6OybtwJ7jBXl/6It1 twHF6CHBcgE+4rN30WyEdY8stwhDN5YgRj9MyfsiUwTAaU8Ll/PYUMJzWG4COiHgXonU za5zZf5N6pyGMoS41HLQnXgUGz7/xu9+UguDd9IDBhloG6C71D9nrG2aPiXAZZPfy1rw RbFupJ5nEmBL/Pih/gjD0SFq2oJeJUoUmVBlEhj4ynbGjMVmNa4FF7H3dew1jQdoO/fD cgzA== X-Gm-Message-State: AOJu0YwWaLVyiRRZ6E24hdfCMPxQkap2kHkXNR6FFjI8UK2VrBx5CUTc p+sSnsDAnmPlRT9WD41mHHaTGmRvW87Ny4vq5QBjJUL4U1YvVn3WwU46FH9PNx2jT7vSG9/riFE Pp/KsrVE= X-Gm-Gg: ASbGnctu3POHJDXF7eSJANglPm1DnTpRzawbk5OuID/kmO9LCsrBUC3P7tY8UPM3P8H mtciRbATMUgHuXpkYzGXJ9Omv+XJxwppXUjhw8XDJXRFmVP8QD//OB49CIhVwkQXZfStOIRnhaj lb55arbdMjBYHjplPv7hLYkh7ahhpQd6yjgltVY3NRN9XeGGRwILqqoeaZ8fvgTMidkfk/BJX7/ FGm5IhHGf/hykak9vVtjxGEddy4BGo3K11EoFYCOBkbU6D1iVBt8ZsHa5gShjgmOx7KxzQIdH+r kkmUjhRLV1JK0hnN2TOh6CwRJgh0VTWv2Ho4HwCAp8rU4oh5Z9pTltz2BrWAL56IiLQ6+xbKJ17 OaZSZBbYhQ0uOfmNAHVxVm2unG5A2Gxw= X-Google-Smtp-Source: AGHT+IG3N/M9icLX7qjM1o7pOePX0VOawUQ0FpVJu5KZpLU7NYRtk5P60awXFNpV+ee3EQ6YVob1MQ== X-Received: by 2002:a17:907:7292:b0:ad2:43b6:dd75 with SMTP id a640c23a62f3a-ae3c2b3c08dmr734217066b.10.1751551128203; Thu, 03 Jul 2025 06:58:48 -0700 (PDT) From: Manos Pitsidianakis Date: Thu, 03 Jul 2025 16:58:13 +0300 Subject: [PATCH 3/3] rust: add *_with_attrs methods to MemoryRegionOps MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250703-rust-mem-api-v1-3-cd5314bdf580@linaro.org> References: <20250703-rust-mem-api-v1-0-cd5314bdf580@linaro.org> In-Reply-To: <20250703-rust-mem-api-v1-0-cd5314bdf580@linaro.org> To: qemu-devel@nongnu.org Cc: qemu-rust@nongnu.org, Paolo Bonzini , Zhao Liu , Manos Pitsidianakis X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=3630; i=manos.pitsidianakis@linaro.org; h=from:subject:message-id; bh=1P+RBgerOZPwGjZrNaYJyYxeZQDGYekhtRtwSuEW7oM=; b=LS0tLS1CRUdJTiBQR1AgTUVTU0FHRS0tLS0tCgpvd0VCYlFLUy9aQU5Bd0FLQVhjcHgzQi9mZ 25RQWNzbVlnQm9ab3lUWXlGTk9xWUZNakU2Ky9qYU02YmNTU3VUCldBczhvbGVZeWxiRHFnQ3pQ Y0NKQWpNRUFBRUtBQjBXSVFUTVhCdE9SS0JXODRkd0hSQjNLY2R3ZjM0SjBBVUMKYUdhTWt3QUt DUkIzS2Nkd2YzNEowSytlRC80MXFlbG10cE9NcjdNcmZ0alFCT3R6enFaeEt6L2FKdDBSOXNlVA pEeURWejRmSXUwUnI0K2JGcE5oc2RMWUxPWC9GVzRZMFpOVXZoTXFLc0J4RTNpRVFGWEJtNXRkR ERFVjlPeWE1CmtudWZKdEJRTVI0dDhDcEI2clFsOGw2UStHbmFnRTlNUzY4cUJtblhwbTA4L1ha SGhGVjErMCtVM1NpNU9rckkKMUx0ZDhmeVZ0d01LK3BxSlIrdDRoczRtVkpIUmZPaGdFSnl3MWp RZ0EwdWFqTVRMYWxBTU9xM2Q2QVo4MGtOMgp1SjI2VWYvSGpqNE8wVktnMllHL25Pb3YxTzFETW N5SUF0NkxsQm9waDBSSmxqK0toOHZ4d2xzZnh2cERJcXdLCjdxaHJmcERxQWJEek5rekhDcXFJR ThyYUtDM3pKRDZSbTEzY2RGTFdnOFhLaVZsWDl5WCtFc01pRy9Dbjh3bzEKMWhwSnRMZkhVSTA4 STZ5amRRcjVkSjlmWTZmZCtGL2dKbDdSOG1DbU5xUmJqdFUwdUJnK0wzbnhEcVBYZEgvWgpaMjI 2ZTRIYWFHdEtDTXUxRVc1a1dENGlxWHU3TUh6YzJsUVBkdlNGTmR4Qjhnc2duRlE3bU8xSkhjNX Q5Y0drCi93dzJKaVJ1bDFuYkp4a1UwNGZYV0pxY0N0a25xbG1JeDNxWUFENXdDdGsxd3Jtby80S mhibG9DU2F1alhLN3QKM0ExaUdIblg4ekZadEthZVZKWXRURDhwd2FqdTNtYzR1MlZFSHhNQXNo UGR2VFFWejdlcnhOZEU0NWhXNTU3NApyV2FOS0JGTTZXTmJqdlFnL2Ixa1pDcXhZYWZvVTF2eFZ lbXZRMjdYTUZPcWplWWFHYzQ0VnVwOXFsTUZVYm5ICjhGaHA1UT09Cj1XNit0Ci0tLS0tRU5EIF BHUCBNRVNTQUdFLS0tLS0K X-Developer-Key: i=manos.pitsidianakis@linaro.org; a=openpgp; fpr=7C721DF9DB3CC7182311C0BF68BC211D47B421E1 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2a00:1450:4864:20::62d; envelope-from=manos.pitsidianakis@linaro.org; helo=mail-ej1-x62d.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1751551174745116600 MemoryRegionOps (and its builder type) only support read/write callbacks. Add the ability to define {read,write}_with_attrs callbacks for devices that need them. Signed-off-by: Manos Pitsidianakis Reviewed-by: Zhao Liu --- rust/qemu-api/meson.build | 1 + rust/qemu-api/src/memory.rs | 52 +++++++++++++++++++++++++++++++++++++++++= +++- 2 files changed, 52 insertions(+), 1 deletion(-) diff --git a/rust/qemu-api/meson.build b/rust/qemu-api/meson.build index a090297c458b1a282211b9e241c0e447dd594167..95c097ec8f8dd31a863339d58ea= a8bfc4d4dea18 100644 --- a/rust/qemu-api/meson.build +++ b/rust/qemu-api/meson.build @@ -26,6 +26,7 @@ foreach enum : c_enums endforeach c_bitfields =3D [ 'ClockEvent', + 'MemTxResult', 'VMStateFlags', ] foreach enum : c_bitfields diff --git a/rust/qemu-api/src/memory.rs b/rust/qemu-api/src/memory.rs index b1907aa01300a3fac8e1f3b69c5d50da631a556d..98d1e116147aba2c9034a611594= 92382b1ee0e5e 100644 --- a/rust/qemu-api/src/memory.rs +++ b/rust/qemu-api/src/memory.rs @@ -9,7 +9,7 @@ marker::PhantomData, }; =20 -pub use bindings::{hwaddr, MemTxAttrs}; +pub use bindings::{hwaddr, MemTxAttrs, MemTxResult}; =20 use crate::{ bindings::{self, device_endian, memory_region_init_io}, @@ -59,6 +59,20 @@ unsafe impl Sync for MemoryRegionOps {} F::call((unsafe { &*(opaque.cast::()) }, addr, size)) } =20 +unsafe extern "C" fn memory_region_ops_read_with_attrs_cb< + T, + F: for<'a> FnCall<(&'a T, hwaddr, *mut u64, Bits, MemTxAttrs), MemTxRe= sult>, +>( + opaque: *mut c_void, + addr: hwaddr, + data: *mut u64, + size: c_uint, + attrs: MemTxAttrs, +) -> MemTxResult { + let size =3D Bits::try_from(size).expect("invalid size argument"); + F::call((unsafe { &*(opaque.cast::()) }, addr, data, size, attrs)) +} + unsafe extern "C" fn memory_region_ops_write_cb< T, F: for<'a> FnCall<(&'a T, hwaddr, u64, Bits)>, @@ -72,6 +86,20 @@ unsafe impl Sync for MemoryRegionOps {} F::call((unsafe { &*(opaque.cast::()) }, addr, data, size)) } =20 +unsafe extern "C" fn memory_region_ops_write_with_attrs_cb< + T, + F: for<'a> FnCall<(&'a T, hwaddr, u64, Bits, MemTxAttrs), MemTxResult>, +>( + opaque: *mut c_void, + addr: hwaddr, + data: u64, + size: c_uint, + attrs: MemTxAttrs, +) -> MemTxResult { + let size =3D Bits::try_from(size).expect("invalid size argument"); + F::call((unsafe { &*(opaque.cast::()) }, addr, data, size, attrs)) +} + impl MemoryRegionOpsBuilder { #[must_use] pub const fn read FnCall<(&'a T, hwaddr, Bits), u64>>(mut s= elf, _f: &F) -> Self { @@ -86,6 +114,28 @@ pub const fn write FnCall<(&'a T, hwaddr, u6= 4, Bits)>>(mut self, _f: } =20 #[must_use] + pub const fn read_with_attrs< + F: for<'a> FnCall<(&'a T, hwaddr, *mut u64, Bits, MemTxAttrs), Mem= TxResult>, + >( + mut self, + _f: &F, + ) -> Self { + self.0.read_with_attrs =3D Some(memory_region_ops_read_with_attrs_= cb::); + self + } + + #[must_use] + pub const fn write_with_attrs< + F: for<'a> FnCall<(&'a T, hwaddr, u64, Bits, MemTxAttrs), MemTxRes= ult>, + >( + mut self, + _f: &F, + ) -> Self { + self.0.write_with_attrs =3D Some(memory_region_ops_write_with_attr= s_cb::); + self + } + + #[must_use] pub const fn big_endian(mut self) -> Self { self.0.endianness =3D device_endian::DEVICE_BIG_ENDIAN; self --=20 2.47.2