Enable bus mastering
This commit is contained in:
parent
f624a5e322
commit
4544f9039a
|
@ -108,6 +108,12 @@ fn main() {
|
||||||
}
|
}
|
||||||
|
|
||||||
if let Some(ref args) = driver.command {
|
if let Some(ref args) = driver.command {
|
||||||
|
// Enable bus mastering
|
||||||
|
unsafe {
|
||||||
|
let cmd = pci.read(bus.num, dev.num, func.num, 0x04);
|
||||||
|
pci.write(bus.num, dev.num, func.num, 0x04, cmd | 4);
|
||||||
|
}
|
||||||
|
|
||||||
let mut args = args.iter();
|
let mut args = args.iter();
|
||||||
if let Some(program) = args.next() {
|
if let Some(program) = args.next() {
|
||||||
let mut command = Command::new(program);
|
let mut command = Command::new(program);
|
||||||
|
|
|
@ -34,6 +34,17 @@ impl Pci {
|
||||||
: "={eax}"(value) : "{eax}"(address) : "dx" : "intel", "volatile");
|
: "={eax}"(value) : "{eax}"(address) : "dx" : "intel", "volatile");
|
||||||
value
|
value
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[cfg(any(target_arch = "x86", target_arch = "x86_64"))]
|
||||||
|
pub unsafe fn write(&self, bus: u8, dev: u8, func: u8, offset: u8, value: u32) {
|
||||||
|
let address = 0x80000000 | ((bus as u32) << 16) | ((dev as u32) << 11) | ((func as u32) << 8) | ((offset as u32) & 0xFC);
|
||||||
|
asm!("mov dx, 0xCF8
|
||||||
|
out dx, eax"
|
||||||
|
: : "{eax}"(address) : "dx" : "intel", "volatile");
|
||||||
|
asm!("mov dx, 0xCFC
|
||||||
|
out dx, eax"
|
||||||
|
: : "{eax}"(value) : "dx" : "intel", "volatile");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub struct PciIter<'pci> {
|
pub struct PciIter<'pci> {
|
||||||
|
|
Loading…
Reference in a new issue