(&mut self, _base: u64, offset: u64, data: &mut [u8])
| 349 | |
| 350 | impl BusDevice for Tpm { |
| 351 | fn read(&mut self, _base: u64, offset: u64, data: &mut [u8]) { |
| 352 | let mut offset: u32 = offset as u32; |
| 353 | let read_len: usize = data.len(); |
| 354 | |
| 355 | if offset >= CRB_DATA_BUFFER |
| 356 | && (offset + read_len as u32) < (CRB_DATA_BUFFER + self.data_buff.len() as u32) |
| 357 | { |
| 358 | // Read from Data Buffer |
| 359 | let start: usize = (offset as usize) - (CRB_DATA_BUFFER as usize); |
| 360 | let end: usize = start + read_len; |
| 361 | data[..].clone_from_slice(&self.data_buff[start..end]); |
| 362 | } else { |
| 363 | offset &= 0xff; |
| 364 | let mut val = self.regs[offset as usize]; |
| 365 | |
| 366 | if offset == CRB_LOC_STATE && !self.emulator.get_established_flag() { |
| 367 | val |= 0x1; |
| 368 | } |
| 369 | |
| 370 | if data.len() <= 4 { |
| 371 | data.clone_from_slice(val.to_ne_bytes()[0..read_len].as_ref()); |
| 372 | } else { |
| 373 | error!( |
| 374 | "Invalid tpm read: offset {:#X}, data length {:?}", |
| 375 | offset, |
| 376 | data.len() |
| 377 | ); |
| 378 | } |
| 379 | } |
| 380 | debug!( |
| 381 | "MMIO Read: offset {:#X} len {:?} val = {:02X?} ", |
| 382 | offset, |
| 383 | data.len(), |
| 384 | data |
| 385 | ); |
| 386 | } |
| 387 | |
| 388 | fn write(&mut self, _base: u64, offset: u64, data: &[u8]) -> Option<Arc<Barrier>> { |
| 389 | debug!( |
nothing calls this directly
no test coverage detected