mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-04 16:23:55 -06:00
rust/hw/char/pl011: Extract extract DR read logic into separate function
- Split `read()` DR case into `read_data_register()` Signed-off-by: Rakesh Jeyasingh <rakeshjb010@gmail.com> Link: https://lore.kernel.org/r/20250407181327.171563-2-rakeshjb010@gmail.com Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
This commit is contained in:
parent
d031d2fac9
commit
efc5603292
1 changed files with 20 additions and 19 deletions
|
@ -190,25 +190,7 @@ impl PL011Registers {
|
|||
|
||||
let mut update = false;
|
||||
let result = match offset {
|
||||
DR => {
|
||||
self.flags.set_receive_fifo_full(false);
|
||||
let c = self.read_fifo[self.read_pos];
|
||||
if self.read_count > 0 {
|
||||
self.read_count -= 1;
|
||||
self.read_pos = (self.read_pos + 1) & (self.fifo_depth() - 1);
|
||||
}
|
||||
if self.read_count == 0 {
|
||||
self.flags.set_receive_fifo_empty(true);
|
||||
}
|
||||
if self.read_count + 1 == self.read_trigger {
|
||||
self.int_level &= !Interrupt::RX.0;
|
||||
}
|
||||
// Update error bits.
|
||||
self.receive_status_error_clear.set_from_data(c);
|
||||
// Must call qemu_chr_fe_accept_input
|
||||
update = true;
|
||||
u32::from(c)
|
||||
}
|
||||
DR => self.read_data_register(&mut update),
|
||||
RSR => u32::from(self.receive_status_error_clear),
|
||||
FR => u32::from(self.flags),
|
||||
FBRD => self.fbrd,
|
||||
|
@ -306,6 +288,25 @@ impl PL011Registers {
|
|||
false
|
||||
}
|
||||
|
||||
fn read_data_register(&mut self, update: &mut bool) -> u32 {
|
||||
self.flags.set_receive_fifo_full(false);
|
||||
let c = self.read_fifo[self.read_pos];
|
||||
|
||||
if self.read_count > 0 {
|
||||
self.read_count -= 1;
|
||||
self.read_pos = (self.read_pos + 1) & (self.fifo_depth() - 1);
|
||||
}
|
||||
if self.read_count == 0 {
|
||||
self.flags.set_receive_fifo_empty(true);
|
||||
}
|
||||
if self.read_count + 1 == self.read_trigger {
|
||||
self.int_level &= !Interrupt::RX.0;
|
||||
}
|
||||
self.receive_status_error_clear.set_from_data(c);
|
||||
*update = true;
|
||||
u32::from(c)
|
||||
}
|
||||
|
||||
#[inline]
|
||||
#[must_use]
|
||||
fn loopback_tx(&mut self, value: registers::Data) -> bool {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue