From 9315af5e41c8f831fc718652052cf468a2678372 Mon Sep 17 00:00:00 2001 From: Jeremy Soller Date: Sun, 20 Nov 2022 13:16:51 -0700 Subject: [PATCH] Match ac97 and hda buffering --- ac97d/src/device.rs | 4 ++-- ihdad/src/hda/device.rs | 12 ++++-------- 2 files changed, 6 insertions(+), 10 deletions(-) diff --git a/ac97d/src/device.rs b/ac97d/src/device.rs index 6dccdc7f39..1a6fd0a93b 100644 --- a/ac97d/src/device.rs +++ b/ac97d/src/device.rs @@ -266,8 +266,8 @@ impl SchemeBlockMut for Ac97 { let civ = self.bus.po.civ.read() as usize; let mut lvi = self.bus.po.lvi.read() as usize; - if lvi == (civ + 1) % NUM_SUB_BUFFS { - // Block if we already are 1 buffer ahead + if lvi == (civ + 3) % NUM_SUB_BUFFS { + // Block if we already are 3 buffers ahead Ok(None) } else { // Fill next buffer diff --git a/ihdad/src/hda/device.rs b/ihdad/src/hda/device.rs index dfcb092784..d1a81c8f4b 100755 --- a/ihdad/src/hda/device.rs +++ b/ihdad/src/hda/device.rs @@ -55,7 +55,7 @@ const IRV: u16 = 1 << 1; const COMMAND_BUFFER_OFFSET: usize = 0x40; -const NUM_SUB_BUFFS: usize = 4; +const NUM_SUB_BUFFS: usize = 32; const SUB_BUFF_SIZE: usize = 2048; enum Handle { @@ -781,16 +781,12 @@ impl IntelHDA { let os = self.output_streams.get_mut(index as usize).unwrap(); //let sample_size:usize = output.sample_size(); - let mut open_block = (output.link_position() as usize) / os.block_size(); - - open_block += NUM_SUB_BUFFS / 2; - while open_block >= NUM_SUB_BUFFS { - open_block -= NUM_SUB_BUFFS; - } + let open_block = (output.link_position() as usize) / os.block_size(); //log::info!("Status: {:02X} Pos: {:08X} Output CTL: {:06X}", output.status(), output.link_position(), output.control()); - if open_block == os.current_block() { + if os.current_block() == (open_block + 3) % NUM_SUB_BUFFS { + // Block if we already are 3 buffers ahead Ok(None) } else { os.write_block(buf).map(|count| Some(count))