Conversation

00xc

The PCCT (Platform Communications Channel Table) is a generic mechanism for OSPM to communicate with an entity in the platform (e.g. a platform controller, or a Baseboard Management Controller (BMC)).

The table provides access to a new namespace, to which Generic Address Structures (GAS) in other tables can refer to. Each entry in the PCCT is an addressable subspace, which provides the address and length of a shared memory region that can be used for communication with the platform. Subspaces may also have a doorbell register to notify the platform of certain events, as well as additional registers.

See the ACPI spec for more information: https://uefi.org/htmlspecs/ACPI_Spec_6_4_html/14_Platform_Communications_Channel/Platform_Comm_Channel.html

Unfortunately for us, the PCC address space allows all access size values (as opposed to e.g. system memory, which only allows 1, 2, 4 and 8-byte access sizes), which means we must remove the AccessSize enum, and have a regular u8 in the GenericAddress struct.

For certain address spaces, like the PCC (Platform Communications
Channel), all access size values in a GAS (Generic Address Structure)
are valid. Therefore, while this might make sense for other address
spaces (like system memory), we cannot keep the enum with a subset of
valid values.
The PCCT (Platform Communications Channel Table) is a generic
mechanism for OSPM to communicate with an entity in the platform (e.g.
a platform controller, or a Baseboard Management Controller (BMC)).

The table provides access to a new namespace, to which Generic Address
Structures (GAS) in other tables can refer to. Each entry in the PCCT
is an addressable subspace, which provides the address and length of a
shared memory region that can be used for communication with the
platform. Subspaces may also have a doorbell register to notify the
platform of certain events, as well as additional registers.
@00xc

@IsaacWoods have you had time to review this?

@IsaacWoods

Wow, thanks for working on this and apologies for the delay in reviewing.

I have not had the chance to look into the PCC very much, but have just glanced over the section in the spec. Have you managed to test this with a machine that actually has the tables for the PCC - I can imagine it existing mainly on servers with BMCs but maybe it is present on e.g. enterprise thin-clients with BMCs for remote management?

I'll hopefully have a chance to sit and look through the structures in detail soon, but they don't look unreasonable at first glance. One thing you could address is the master/slave terminology - I can see that they're the terms used by the spec, but I generally try to avoid them, and this is an instance where they don't even really seem to make sense. I'll leave an alternative up to you - something like Ospm and Firmware / Controller and Platform, whatever really.

Sign up for free to join this conversation on . Already have an account? Sign in to comment
None yet
None yet

Successfully merging this pull request may close these issues.