MCPcopy Create free account
hub / github.com/cloud-hypervisor/cloud-hypervisor / read

Method read

devices/src/tpm.rs:351–386  ·  view source on GitHub ↗
(&mut self, _base: u64, offset: u64, data: &mut [u8])

Source from the content-addressed store, hash-verified

349
350impl 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!(

Callers

nothing calls this directly

Calls 2

get_established_flagMethod · 0.80
lenMethod · 0.45

Tested by

no test coverage detected