Skip to content

Commit de3ea7c

Browse files
committed
ACPI 6.1: Support for new PCCT subtable
Additional subspace structure was added.
1 parent e6b726d commit de3ea7c

File tree

8 files changed

+95
-21
lines changed

8 files changed

+95
-21
lines changed

source/common/dmtable.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -327,6 +327,7 @@ static const char *AcpiDmPcctSubnames[] =
327327
{
328328
"Generic Communications Subspace", /* ACPI_PCCT_TYPE_GENERIC_SUBSPACE */
329329
"HW-Reduced Comm Subspace", /* ACPI_PCCT_TYPE_HW_REDUCED_SUBSPACE */
330+
"HW-Reduced Comm Subspace Type2", /* ACPI_PCCT_TYPE_HW_REDUCED_SUBSPACE_TYPE2 */
330331
"Unknown Subtable Type" /* Reserved */
331332
};
332333

source/common/dmtbdump.c

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2969,6 +2969,11 @@ AcpiDmDumpPcct (
29692969
InfoTable = AcpiDmTableInfoPcct1;
29702970
break;
29712971

2972+
case ACPI_PCCT_TYPE_HW_REDUCED_SUBSPACE_TYPE2:
2973+
2974+
InfoTable = AcpiDmTableInfoPcct2;
2975+
break;
2976+
29722977
default:
29732978

29742979
AcpiOsPrintf (

source/common/dmtbinfo.c

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -290,6 +290,7 @@
290290
#define ACPI_NFIT6_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_NFIT_FLUSH_ADDRESS,f)
291291
#define ACPI_PCCT0_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_PCCT_SUBSPACE,f)
292292
#define ACPI_PCCT1_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_PCCT_HW_REDUCED,f)
293+
#define ACPI_PCCT2_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_PCCT_HW_REDUCED_TYPE2,f)
293294
#define ACPI_PMTT0_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_PMTT_SOCKET,f)
294295
#define ACPI_PMTT1_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_PMTT_CONTROLLER,f)
295296
#define ACPI_PMTT1A_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_PMTT_DOMAIN,f)
@@ -351,6 +352,7 @@
351352
#define ACPI_NFIT4_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_NFIT_CONTROL_REGION,f,o)
352353
#define ACPI_PCCT_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_TABLE_PCCT,f,o)
353354
#define ACPI_PCCT1_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_PCCT_HW_REDUCED,f,o)
355+
#define ACPI_PCCT2_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_PCCT_HW_REDUCED_TYPE2,f,o)
354356
#define ACPI_PMTTH_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_PMTT_HEADER,f,o)
355357
#define ACPI_WDDT_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_TABLE_WDDT,f,o)
356358
#define ACPI_EINJ0_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_WHEA_HEADER,f,o)
@@ -2411,6 +2413,29 @@ ACPI_DMTABLE_INFO AcpiDmTableInfoPcct1[] =
24112413
ACPI_DMT_TERMINATOR
24122414
};
24132415

2416+
/* 2: HW-reduced Communications Subspace Type 2 (ACPI 6.1) */
2417+
2418+
ACPI_DMTABLE_INFO AcpiDmTableInfoPcct2[] =
2419+
{
2420+
{ACPI_DMT_UINT32, ACPI_PCCT2_OFFSET (DoorbellInterrupt), "Doorbell Interrupt", 0},
2421+
{ACPI_DMT_UINT8, ACPI_PCCT2_OFFSET (Flags), "Flags (Decoded Below)", DT_FLAG},
2422+
{ACPI_DMT_FLAG0, ACPI_PCCT2_FLAG_OFFSET (Flags,0), "Polarity", 0},
2423+
{ACPI_DMT_FLAG1, ACPI_PCCT2_FLAG_OFFSET (Flags,0), "Mode", 0},
2424+
{ACPI_DMT_UINT8, ACPI_PCCT2_OFFSET (Reserved), "Reserved", 0},
2425+
{ACPI_DMT_UINT64, ACPI_PCCT2_OFFSET (BaseAddress), "Base Address", 0},
2426+
{ACPI_DMT_UINT64, ACPI_PCCT2_OFFSET (Length), "Address Length", 0},
2427+
{ACPI_DMT_GAS, ACPI_PCCT2_OFFSET (DoorbellRegister), "Doorbell Register", 0},
2428+
{ACPI_DMT_UINT64, ACPI_PCCT2_OFFSET (PreserveMask), "Preserve Mask", 0},
2429+
{ACPI_DMT_UINT64, ACPI_PCCT2_OFFSET (WriteMask), "Write Mask", 0},
2430+
{ACPI_DMT_UINT32, ACPI_PCCT2_OFFSET (Latency), "Command Latency", 0},
2431+
{ACPI_DMT_UINT32, ACPI_PCCT2_OFFSET (MaxAccessRate), "Maximum Access Rate", 0},
2432+
{ACPI_DMT_UINT16, ACPI_PCCT2_OFFSET (MinTurnaroundTime), "Minimum Turnaround Time", 0},
2433+
{ACPI_DMT_GAS, ACPI_PCCT2_OFFSET (DoorbellAckRegister), "Doorbell ACK Register", 0},
2434+
{ACPI_DMT_UINT64, ACPI_PCCT2_OFFSET (AckPreserveMask), "ACK Preserve Mask", 0},
2435+
{ACPI_DMT_UINT64, ACPI_PCCT2_OFFSET (AckWriteMask), "ACK Write Mask", 0},
2436+
ACPI_DMT_TERMINATOR
2437+
};
2438+
24142439

24152440
/*******************************************************************************
24162441
*

source/compiler/dttable2.c

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -830,6 +830,11 @@ DtCompilePcct (
830830
InfoTable = AcpiDmTableInfoPcct1;
831831
break;
832832

833+
case ACPI_PCCT_TYPE_HW_REDUCED_SUBSPACE_TYPE2:
834+
835+
InfoTable = AcpiDmTableInfoPcct2;
836+
break;
837+
833838
default:
834839

835840
DtFatal (ASL_MSG_UNKNOWN_SUBTABLE, SubtableStart, "PCCT");

source/compiler/dttemplate.h

Lines changed: 29 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -916,28 +916,39 @@ const unsigned char TemplateMtmr[] =
916916

917917
const unsigned char TemplatePcct[] =
918918
{
919-
0x50,0x43,0x43,0x54,0xAC,0x00,0x00,0x00, /* 00000000 "PCCT...." */
920-
0x01,0xCF,0x49,0x4E,0x54,0x45,0x4C,0x20, /* 00000008 "..INTEL " */
921-
0x54,0x65,0x6D,0x70,0x6C,0x61,0x74,0x65, /* 00000010 "Template" */
919+
0x50,0x43,0x43,0x54,0x06,0x01,0x00,0x00, /* 00000000 "PCCT...." */
920+
0x01,0xE3,0x49,0x4E,0x54,0x45,0x4C,0x20, /* 00000008 "..INTEL " */
921+
0x54,0x45,0x4D,0x50,0x4C,0x41,0x54,0x45, /* 00000010 "TEMPLATE" */
922922
0x01,0x00,0x00,0x00,0x49,0x4E,0x54,0x4C, /* 00000018 "....INTL" */
923-
0x27,0x06,0x14,0x20,0x01,0x00,0x00,0x00, /* 00000020 "'.. ...." */
923+
0x18,0x03,0x16,0x20,0x01,0x00,0x00,0x00, /* 00000020 "... ...." */
924924
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000028 "........" */
925925
0x00,0x3E,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000030 ".>......" */
926-
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000038 "........" */
927-
0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000040 "........" */
928-
0x01,0x32,0x00,0x03,0x00,0x00,0x00,0x00, /* 00000048 ".2......" */
929-
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000050 "........" */
930-
0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF, /* 00000058 "........" */
931-
0xFF,0xFF,0xFF,0xFF,0x01,0x00,0x00,0x00, /* 00000060 "........" */
932-
0x01,0x00,0x00,0x00,0x01,0x00,0x01,0x3E, /* 00000068 ".......>" */
933-
0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00, /* 00000070 "........" */
934-
0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00, /* 00000078 "........" */
926+
0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11, /* 00000038 "........" */
927+
0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22, /* 00000040 """""""""" */
928+
0x01,0x32,0x00,0x03,0x33,0x33,0x33,0x33, /* 00000048 ".2..3333" */
929+
0x33,0x33,0x33,0x33,0x44,0x44,0x44,0x44, /* 00000050 "3333DDDD" */
930+
0x44,0x44,0x44,0x44,0x55,0x55,0x55,0x55, /* 00000058 "DDDDUUUU" */
931+
0x55,0x55,0x55,0x55,0x66,0x66,0x66,0x66, /* 00000060 "UUUUffff" */
932+
0x77,0x77,0x77,0x77,0x88,0x88,0x01,0x3E, /* 00000068 "wwww...>" */
933+
0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00, /* 00000070 "........" */
934+
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000078 "........" */
935935
0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x32, /* 00000080 ".......2" */
936-
0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000088 "........" */
937-
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000090 "........" */
938-
0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, /* 00000098 "........" */
939-
0xFF,0xFF,0x01,0x00,0x00,0x00,0x01,0x00, /* 000000A0 "........" */
940-
0x00,0x00,0x01,0x00 /* 000000A8 "...." */
936+
0x00,0x03,0x44,0x44,0x44,0x44,0x44,0x44, /* 00000088 "..DDDDDD" */
937+
0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44, /* 00000090 "DDDDDDDD" */
938+
0x44,0x44,0x55,0x55,0x55,0x55,0x55,0x55, /* 00000098 "DDUUUUUU" */
939+
0x55,0x55,0x66,0x66,0x66,0x66,0x77,0x77, /* 000000A0 "UUffffww" */
940+
0x77,0x77,0x88,0x88,0x02,0x5A,0x01,0x00, /* 000000A8 "ww...Z.." */
941+
0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00, /* 000000B0 "........" */
942+
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000000B8 "........" */
943+
0x00,0x00,0x00,0x00,0x01,0x32,0x00,0x03, /* 000000C0 ".....2.." */
944+
0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44, /* 000000C8 "DDDDDDDD" */
945+
0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44, /* 000000D0 "DDDDDDDD" */
946+
0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55, /* 000000D8 "UUUUUUUU" */
947+
0x66,0x66,0x66,0x66,0x77,0x77,0x77,0x77, /* 000000E0 "ffffwwww" */
948+
0x88,0x88,0x01,0x32,0x00,0x03,0x33,0x33, /* 000000E8 "...2..33" */
949+
0x33,0x33,0x33,0x33,0x33,0x33,0x44,0x44, /* 000000F0 "333333DD" */
950+
0x44,0x44,0x44,0x44,0x44,0x44,0x55,0x55, /* 000000F8 "DDDDDDUU" */
951+
0x55,0x55,0x55,0x55,0x55,0x55 /* 00000100 "UUUUUU" */
941952
};
942953

943954
const unsigned char TemplatePmtt[] =

source/include/acdisasm.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -457,6 +457,7 @@ extern ACPI_DMTABLE_INFO AcpiDmTableInfoPcct[];
457457
extern ACPI_DMTABLE_INFO AcpiDmTableInfoPcctHdr[];
458458
extern ACPI_DMTABLE_INFO AcpiDmTableInfoPcct0[];
459459
extern ACPI_DMTABLE_INFO AcpiDmTableInfoPcct1[];
460+
extern ACPI_DMTABLE_INFO AcpiDmTableInfoPcct2[];
460461
extern ACPI_DMTABLE_INFO AcpiDmTableInfoRsdp1[];
461462
extern ACPI_DMTABLE_INFO AcpiDmTableInfoRsdp2[];
462463
extern ACPI_DMTABLE_INFO AcpiDmTableInfoS3pt[];

source/include/actbl3.h

Lines changed: 28 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -635,9 +635,10 @@ typedef struct acpi_table_pcct
635635

636636
enum AcpiPcctType
637637
{
638-
ACPI_PCCT_TYPE_GENERIC_SUBSPACE = 0,
639-
ACPI_PCCT_TYPE_HW_REDUCED_SUBSPACE = 1,
640-
ACPI_PCCT_TYPE_RESERVED = 2 /* 2 and greater are reserved */
638+
ACPI_PCCT_TYPE_GENERIC_SUBSPACE = 0,
639+
ACPI_PCCT_TYPE_HW_REDUCED_SUBSPACE = 1,
640+
ACPI_PCCT_TYPE_HW_REDUCED_SUBSPACE_TYPE2 = 2, /* ACPI 6.1 */
641+
ACPI_PCCT_TYPE_RESERVED = 3 /* 3 and greater are reserved */
641642
};
642643

643644
/*
@@ -681,6 +682,30 @@ typedef struct acpi_pcct_hw_reduced
681682

682683
} ACPI_PCCT_HW_REDUCED;
683684

685+
686+
/* 2: HW-reduced Communications Subspace Type 2 (ACPI 6.1) */
687+
688+
typedef struct acpi_pcct_hw_reduced_type2
689+
{
690+
ACPI_SUBTABLE_HEADER Header;
691+
UINT32 DoorbellInterrupt;
692+
UINT8 Flags;
693+
UINT8 Reserved;
694+
UINT64 BaseAddress;
695+
UINT64 Length;
696+
ACPI_GENERIC_ADDRESS DoorbellRegister;
697+
UINT64 PreserveMask;
698+
UINT64 WriteMask;
699+
UINT32 Latency;
700+
UINT32 MaxAccessRate;
701+
UINT16 MinTurnaroundTime;
702+
ACPI_GENERIC_ADDRESS DoorbellAckRegister;
703+
UINT64 AckPreserveMask;
704+
UINT64 AckWriteMask;
705+
706+
} ACPI_PCCT_HW_REDUCED_TYPE2;
707+
708+
684709
/* Values for doorbell flags above */
685710

686711
#define ACPI_PCCT_INTERRUPT_POLARITY (1)

source/tools/acpisrc/astable.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -739,6 +739,7 @@ ACPI_TYPED_IDENTIFIER_TABLE AcpiIdentifiers[] = {
739739
{"ACPI_NFIT_DATA_REGION", SRC_TYPE_STRUCT},
740740
{"ACPI_NFIT_FLUSH_ADDRESS", SRC_TYPE_STRUCT},
741741
{"ACPI_PCCT_HW_REDUCED", SRC_TYPE_STRUCT},
742+
{"ACPI_PCCT_HW_REDUCED_TYPE2", SRC_TYPE_STRUCT},
742743
{"ACPI_PCCT_SHARED_MEMORY", SRC_TYPE_STRUCT},
743744
{"ACPI_PCCT_SUBSPACE", SRC_TYPE_STRUCT},
744745
{"ACPI_RSDP_COMMON", SRC_TYPE_STRUCT},

0 commit comments

Comments
 (0)