use crate::{GenericAddressStructure, pcct::subspace::MasterSlaveCommunicationsChannelSMR};
#[derive(Copy, Clone)]
#[repr(C, packed)]
pub struct ExtendedPCC {
pub r#type: u8,
pub length: u8,
pub platform_interrupt: u32,
pub platform_interrupt_flags: u8,
reserved0: u8,
pub base_address: u64,
pub memory_length: u32,
pub doorbell_register: GenericAddressStructure,
pub doorbell_preserve: u64,
pub doorbell_write: u64,
pub nominal_latency: u32,
pub max_periodic_access_rate: u32,
pub min_request_turnaround_time: u32,
pub platform_interrupt_ack_register: GenericAddressStructure,
pub platform_interrupt_ack_preserve: u64,
pub platform_interrupt_ack_set: u64,
reserved1: u64,
pub command_complete_check_register_address: GenericAddressStructure,
pub command_complete_check_mask: u64,
pub command_complete_update_register: GenericAddressStructure,
pub command_complete_update_preserve_mask: u64,
pub command_complete_update_set_mask: u64,
pub error_status_register: GenericAddressStructure,
pub error_status_mask: u64,
}
impl ExtendedPCC {
pub const fn smr(&self) -> &MasterSlaveCommunicationsChannelSMR {
unsafe { &*(self.base_address as *const MasterSlaveCommunicationsChannelSMR) }
}
pub const fn communication_subspace(&self) -> &[u8] {
unsafe {
core::slice::from_raw_parts(
(self.base_address + 16) as *const u8,
self.memory_length as usize - 16,
)
}
}
}