| // Copyright lowRISC contributors. |
| // Licensed under the Apache License, Version 2.0, see LICENSE for details. |
| // SPDX-License-Identifier: Apache-2.0 |
| |
| use std::fmt; |
| |
| pub struct TpmStatus(u32); |
| |
| impl TpmStatus { |
| pub const TPM_GO: u32 = 1 << 5; |
| pub const CMD_READY: u32 = 1 << 6; |
| |
| pub fn is_valid(&self) -> bool { |
| (self.0 >> 7) & 1 == 1 |
| } |
| |
| pub fn data_available(&self) -> bool { |
| (self.0 >> 4) & 1 == 1 |
| } |
| |
| pub fn burst_count(&self) -> usize { |
| ((self.0 >> 8) & 0xFFFF) as usize |
| } |
| |
| pub fn _expect(&self) -> bool { |
| (self.0 >> 3) & 1 == 1 |
| } |
| |
| pub fn raw_value(&self) -> u32 { |
| self.0 |
| } |
| |
| pub fn from_bytes(val: [u8; 4]) -> Self { |
| Self(u32::from_le_bytes(val)) |
| } |
| } |
| |
| impl fmt::Display for TpmStatus { |
| fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { |
| write!( |
| f, |
| "Valid: {} Burst: {} Avail: {}", |
| self.is_valid(), |
| self.burst_count(), |
| self.data_available() |
| ) |
| } |
| } |