From 89e29cd46f77aff69d08b11a8920084187fa9d8c Mon Sep 17 00:00:00 2001 From: Fabian Date: Fri, 15 Dec 2023 13:12:25 -0500 Subject: [PATCH] pic: refactor {set,clear}_irq --- src/rust/cpu/pic.rs | 62 ++++++++++++++++++++------------------------- 1 file changed, 28 insertions(+), 34 deletions(-) diff --git a/src/rust/cpu/pic.rs b/src/rust/cpu/pic.rs index 76e0d906af..3e786a7bc4 100644 --- a/src/rust/cpu/pic.rs +++ b/src/rust/cpu/pic.rs @@ -206,10 +206,10 @@ unsafe fn check_irqs(pic: &mut Pic) { } else { if is_set { - pic_set_irq(2); + set_irq(&mut master, 2); } else { - pic_clear_irq(2); + clear_irq(&mut master, 2); } } } @@ -224,20 +224,19 @@ pub unsafe fn pic_set_irq(i: u8) { } if i < 8 { - let mask = 1 << i; - if master.irq_value & mask == 0 || master.elcr & mask != 0 { - master.irr |= mask; - master.irq_value |= mask; - check_irqs(&mut master); - } + set_irq(&mut master, i); } else { - let mask = 1 << (i - 8); - if slave.irq_value & mask == 0 || slave.elcr & mask != 0 { - slave.irr |= mask; - slave.irq_value |= mask; - check_irqs(&mut slave); - } + set_irq(&mut slave, i - 8); + } +} + +unsafe fn set_irq(pic: &mut Pic, i: u8) { + let mask = 1 << i; + if pic.irq_value & mask == 0 || pic.elcr & mask != 0 { + pic.irr |= mask; + pic.irq_value |= mask; + check_irqs(pic); } } @@ -251,27 +250,22 @@ pub unsafe fn pic_clear_irq(i: u8) { } if i < 8 { - let mask = 1 << i; - if master.elcr & mask != 0 { - master.irq_value &= !mask; - master.irr &= !mask; - check_irqs(&mut master); - } - else if master.irq_value & mask != 0 { - master.irq_value &= !mask; - check_irqs(&mut master); - } + clear_irq(&mut master, i); } else { - let mask = 1 << (i - 8); - if slave.elcr & mask != 0 { - slave.irq_value &= !mask; - slave.irr &= !mask; - check_irqs(&mut slave); - } - else if slave.irq_value & mask != 0 { - slave.irq_value &= !mask; - check_irqs(&mut slave); - } + clear_irq(&mut slave, i - 8); + } +} + +unsafe fn clear_irq(pic: &mut Pic, i: u8) { + let mask = 1 << i; + if pic.elcr & mask != 0 { + pic.irq_value &= !mask; + pic.irr &= !mask; + check_irqs(pic); + } + else if pic.irq_value & mask != 0 { + pic.irq_value &= !mask; + check_irqs(pic); } }