//! Two physical block reads with request identity and generation guards. use super::*; pub fn run(boot: &BootData, allocator: &mut memory::FrameAllocator) -> Result<(), &'static str> { let mut disk = virtio_ro_turkfs::RoDisk::open( boot, allocator, "TURKOS/OS/K1510-GET")?; if disk.capacity() != 2048 { return Err("k1510-disk-capacity"); } disk.reject_stale_request_without_publish()?; let mut first = [0xa5u8; 512]; let mut last = [0xa5u8; 512]; disk.read(0, &mut first)?; disk.read(2047, &mut last)?; if first.iter().any(|&byte| byte != 0) || last.iter().any(|&byte| byte != 0) { return Err("k1510-read-data"); } let ids = disk.request_ids(); if ids[0] == 0 || ids[1] <= ids[0] || !disk.foreign_completion_rejected() { return Err("k1510-request-identities"); } disk.close(allocator)?; write_str("TURKOS/OS/K1510-REQUESTS: FIRST_ID=0x"); write_hex(ids[0] as usize); write_str(" SECOND_ID=0x"); write_hex(ids[1] as usize); write_line(" STALE=REJECTED FOREIGN=REJECTED GETS=2 DATA=ZERO OWNERS=0 FRAMES=RETURNED"); Ok(()) }