Skip to content

Commit

Permalink
Update for SLIC ACPI table.
Browse files Browse the repository at this point in the history
Update to latest table definition, which contains major changes.
  • Loading branch information
acpibob committed Apr 6, 2015
1 parent 657dc22 commit c73195e
Show file tree
Hide file tree
Showing 10 changed files with 75 additions and 243 deletions.
34 changes: 15 additions & 19 deletions source/common/dmtable.c
Original file line number Diff line number Diff line change
Expand Up @@ -313,13 +313,6 @@ static const char *AcpiDmPmttSubnames[] =
"Unknown SubTable Type" /* Reserved */
};

static const char *AcpiDmSlicSubnames[] =
{
"Public Key Structure",
"Windows Marker Structure",
"Unknown SubTable Type" /* Reserved */
};

static const char *AcpiDmSratSubnames[] =
{
"Processor Local APIC/SAPIC Affinity",
Expand Down Expand Up @@ -797,7 +790,7 @@ AcpiDmDumpTable (
if ((CurrentOffset >= TableLength) ||
(SubtableLength && (Info->Offset >= SubtableLength)))
{
AcpiOsPrintf ("**** ACPI table terminates in the middle of a data structure!\n");
AcpiOsPrintf ("**** ACPI table terminates in the middle of a data structure! (dump table)\n");
return (AE_BAD_DATA);
}

Expand Down Expand Up @@ -842,7 +835,6 @@ AcpiDmDumpTable (
case ACPI_DMT_UINT32:
case ACPI_DMT_NAME4:
case ACPI_DMT_SIG:
case ACPI_DMT_SLIC:
case ACPI_DMT_LPIT:

ByteLength = 4;
Expand Down Expand Up @@ -887,6 +879,12 @@ AcpiDmDumpTable (
ByteLength = 128;
break;

case ACPI_DMT_BUFFER:
case ACPI_DMT_RAW_BUFFER:

ByteLength = SubtableLength;
break;

case ACPI_DMT_STRING:

ByteLength = ACPI_STRLEN (ACPI_CAST_PTR (char, Target)) + 1;
Expand Down Expand Up @@ -1306,17 +1304,15 @@ AcpiDmDumpTable (
AcpiOsPrintf (UINT8_FORMAT, *Target, AcpiDmPmttSubnames[Temp8]);
break;

case ACPI_DMT_SLIC:

/* SLIC subtable types */

Temp8 = *Target;
if (Temp8 > ACPI_SLIC_TYPE_RESERVED)
{
Temp8 = ACPI_SLIC_TYPE_RESERVED;
}
case ACPI_DMT_RAW_BUFFER:
/*
* Currently only used for SLIC table
*/
AcpiOsPrintf ("/* Proprietary data structure */ ");
AcpiDmDumpBuffer (Table, sizeof (ACPI_TABLE_HEADER),
ByteLength, sizeof (ACPI_TABLE_HEADER), "Licensing Data", TRUE);

AcpiOsPrintf (UINT32_FORMAT, *Target, AcpiDmSlicSubnames[Temp8]);
AcpiOsPrintf ("\n");
break;

case ACPI_DMT_SRAT:
Expand Down
100 changes: 22 additions & 78 deletions source/common/dmtbdump.c
Original file line number Diff line number Diff line change
Expand Up @@ -131,14 +131,6 @@ AcpiDmValidateFadtLength (
UINT32 Revision,
UINT32 Length);

static void
AcpiDmDumpBuffer (
void *Table,
UINT32 BufferOffset,
UINT32 Length,
UINT32 AbsoluteOffset,
char *Header);


/*******************************************************************************
*
Expand All @@ -150,6 +142,7 @@ AcpiDmDumpBuffer (
* AbsoluteOffset - Offset of buffer in the main ACPI table
* Header - Name of the buffer field (printed on the
* first line only.)
* MultiLine - TRUE if a large, multi-line buffer
*
* RETURN: None
*
Expand All @@ -158,13 +151,14 @@ AcpiDmDumpBuffer (
*
******************************************************************************/

static void
void
AcpiDmDumpBuffer (
void *Table,
UINT32 BufferOffset,
UINT32 Length,
UINT32 AbsoluteOffset,
char *Header)
char *Header,
BOOLEAN MultiLine)
{
UINT8 *Buffer;
UINT32 i;
Expand All @@ -182,10 +176,19 @@ AcpiDmDumpBuffer (
{
if (!(i % 16))
{
AcpiOsPrintf ("\n");
AcpiDmLineHeader (AbsoluteOffset,
((Length - i) > 16) ? 16 : (Length - i), Header);
Header = NULL;
if (MultiLine)
{
/* Insert a backslash - line continuation character */

AcpiOsPrintf ("\\\n ");
}
else
{
AcpiOsPrintf ("\n");
AcpiDmLineHeader (AbsoluteOffset,
((Length - i) > 16) ? 16 : (Length - i), Header);
Header = NULL;
}
}

AcpiOsPrintf ("%.02X ", *Buffer);
Expand Down Expand Up @@ -598,7 +601,7 @@ AcpiDmDumpAsf (
DataOffset++;
if (DataOffset > Table->Length)
{
AcpiOsPrintf ("**** ACPI table terminates in the middle of a data structure!\n");
AcpiOsPrintf ("**** ACPI table terminates in the middle of a data structure! (ASF! table)\n");
return;
}
}
Expand Down Expand Up @@ -764,7 +767,7 @@ AcpiDmDumpCsrt (
InfoLength = SubSubTable->Length - SubSubOffset;

AcpiDmDumpBuffer (SubSubTable, SubSubOffset, InfoLength,
Offset + SubOffset + SubSubOffset, "ResourceInfo");
Offset + SubOffset + SubSubOffset, "ResourceInfo", FALSE);
SubSubOffset += InfoLength;

/* Point to next sub-subtable */
Expand Down Expand Up @@ -884,7 +887,7 @@ AcpiDmDumpDbg2 (
if (SubTable->OemDataOffset)
{
AcpiDmDumpBuffer (SubTable, SubTable->OemDataOffset, SubTable->OemDataLength,
Offset + SubTable->OemDataOffset, "OEM Data");
Offset + SubTable->OemDataOffset, "OEM Data", FALSE);
}

/* Point to next subtable */
Expand Down Expand Up @@ -2607,67 +2610,8 @@ void
AcpiDmDumpSlic (
ACPI_TABLE_HEADER *Table)
{
ACPI_STATUS Status;
UINT32 Offset = sizeof (ACPI_TABLE_SLIC);
ACPI_SLIC_HEADER *SubTable;
ACPI_DMTABLE_INFO *InfoTable;


/* There is no main SLIC table, only subtables */

SubTable = ACPI_ADD_PTR (ACPI_SLIC_HEADER, Table, Offset);
while (Offset < Table->Length)
{
/* Common subtable header */

AcpiOsPrintf ("\n");
Status = AcpiDmDumpTable (Table->Length, Offset, SubTable,
SubTable->Length, AcpiDmTableInfoSlicHdr);
if (ACPI_FAILURE (Status))
{
return;
}

switch (SubTable->Type)
{
case ACPI_SLIC_TYPE_PUBLIC_KEY:

InfoTable = AcpiDmTableInfoSlic0;
break;

case ACPI_SLIC_TYPE_WINDOWS_MARKER:

InfoTable = AcpiDmTableInfoSlic1;
break;

default:

AcpiOsPrintf ("\n**** Unknown SLIC subtable type 0x%X\n", SubTable->Type);

/* Attempt to continue */

if (!SubTable->Length)
{
AcpiOsPrintf ("Invalid zero length subtable\n");
return;
}
goto NextSubTable;
}

AcpiOsPrintf ("\n");
Status = AcpiDmDumpTable (Table->Length, Offset, SubTable,
SubTable->Length, InfoTable);
if (ACPI_FAILURE (Status))
{
return;
}

NextSubTable:
/* Point to next subtable */

Offset += SubTable->Length;
SubTable = ACPI_ADD_PTR (ACPI_SLIC_HEADER, SubTable, SubTable->Length);
}
AcpiDmDumpTable (Table->Length, sizeof (ACPI_TABLE_HEADER), Table,
Table->Length - sizeof (*Table), AcpiDmTableInfoSlic);
}


Expand Down
42 changes: 7 additions & 35 deletions source/common/dmtbinfo.c
Original file line number Diff line number Diff line change
Expand Up @@ -272,9 +272,7 @@
#define ACPI_S3PTH_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_S3PT_HEADER,f)
#define ACPI_S3PT0_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_S3PT_RESUME,f)
#define ACPI_S3PT1_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_S3PT_SUSPEND,f)
#define ACPI_SLICH_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_SLIC_HEADER,f)
#define ACPI_SLIC0_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_SLIC_KEY,f)
#define ACPI_SLIC1_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_SLIC_MARKER,f)
#define ACPI_SLIC_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_SLIC,f)
#define ACPI_SRATH_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_SUBTABLE_HEADER,f)
#define ACPI_SRAT0_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_SRAT_CPU_AFFINITY,f)
#define ACPI_SRAT1_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_SRAT_MEM_AFFINITY,f)
Expand Down Expand Up @@ -2115,42 +2113,16 @@ ACPI_DMTABLE_INFO AcpiDmTableInfoSbst[] =

/*******************************************************************************
*
* SLIC - Software Licensing Description Table. There is no common table, just
* the standard ACPI header and then subtables.
* SLIC - Software Licensing Description Table. This table contains the standard
* ACPI header followed by proprietary data structures
*
******************************************************************************/

/* Common Subtable header (one per Subtable) */

ACPI_DMTABLE_INFO AcpiDmTableInfoSlicHdr[] =
{
{ACPI_DMT_SLIC, ACPI_SLICH_OFFSET (Type), "Subtable Type", 0},
{ACPI_DMT_UINT32, ACPI_SLICH_OFFSET (Length), "Length", DT_LENGTH},
ACPI_DMT_TERMINATOR
};

ACPI_DMTABLE_INFO AcpiDmTableInfoSlic0[] =
{
{ACPI_DMT_UINT8, ACPI_SLIC0_OFFSET (KeyType), "Key Type", 0},
{ACPI_DMT_UINT8, ACPI_SLIC0_OFFSET (Version), "Version", 0},
{ACPI_DMT_UINT16, ACPI_SLIC0_OFFSET (Reserved), "Reserved", 0},
{ACPI_DMT_UINT32, ACPI_SLIC0_OFFSET (Algorithm), "Algorithm", 0},
{ACPI_DMT_NAME4, ACPI_SLIC0_OFFSET (Magic), "Magic", 0},
{ACPI_DMT_UINT32, ACPI_SLIC0_OFFSET (BitLength), "BitLength", 0},
{ACPI_DMT_UINT32, ACPI_SLIC0_OFFSET (Exponent), "Exponent", 0},
{ACPI_DMT_BUF128, ACPI_SLIC0_OFFSET (Modulus[0]), "Modulus", 0},
ACPI_DMT_TERMINATOR
};
/* Single subtable, a proprietary format, so treat it as a buffer */

ACPI_DMTABLE_INFO AcpiDmTableInfoSlic1[] =
ACPI_DMTABLE_INFO AcpiDmTableInfoSlic[] =
{
{ACPI_DMT_UINT32, ACPI_SLIC1_OFFSET (Version), "Version", 0},
{ACPI_DMT_NAME6, ACPI_SLIC1_OFFSET (OemId[0]), "Oem ID", 0},
{ACPI_DMT_NAME8, ACPI_SLIC1_OFFSET (OemTableId[0]), "Oem Table ID", 0},
{ACPI_DMT_NAME8, ACPI_SLIC1_OFFSET (WindowsFlag[0]), "Windows Flag", 0},
{ACPI_DMT_UINT32, ACPI_SLIC1_OFFSET (SlicVersion), "SLIC Version", 0},
{ACPI_DMT_BUF16, ACPI_SLIC1_OFFSET (Reserved[0]), "Reserved", 0},
{ACPI_DMT_BUF128, ACPI_SLIC1_OFFSET (Signature[0]), "Signature", 0},
{ACPI_DMT_RAW_BUFFER, 0, "Software Licensing Structure", 0},
ACPI_DMT_TERMINATOR
};

Expand All @@ -2163,7 +2135,7 @@ ACPI_DMTABLE_INFO AcpiDmTableInfoSlic1[] =

ACPI_DMTABLE_INFO AcpiDmTableInfoSlit[] =
{
{ACPI_DMT_UINT64, ACPI_SLIT_OFFSET (LocalityCount), "Localities", 0},
{ACPI_DMT_UINT64, ACPI_SLIT_OFFSET (LocalityCount), "Localities", 0},
ACPI_DMT_TERMINATOR
};

Expand Down
19 changes: 10 additions & 9 deletions source/compiler/dtcompiler.h
Original file line number Diff line number Diff line change
Expand Up @@ -157,15 +157,16 @@
*/
typedef struct dt_field
{
char *Name; /* Field name (from name : value) */
char *Value; /* Field value (from name : value) */
struct dt_field *Next; /* Next field */
struct dt_field *NextLabel; /* If field is a label, next label */
UINT32 Line; /* Line number for this field */
UINT32 ByteOffset; /* Offset in source file for field */
UINT32 NameColumn; /* Start column for field name */
UINT32 Column; /* Start column for field value */
UINT32 TableOffset;/* Binary offset within ACPI table */
char *Name; /* Field name (from name : value) */
char *Value; /* Field value (from name : value) */
UINT32 StringLength;/* Length of Value */
struct dt_field *Next; /* Next field */
struct dt_field *NextLabel; /* If field is a label, next label */
UINT32 Line; /* Line number for this field */
UINT32 ByteOffset; /* Offset in source file for field */
UINT32 NameColumn; /* Start column for field name */
UINT32 Column; /* Start column for field value */
UINT32 TableOffset; /* Binary offset within ACPI table */
UINT8 Flags;

} DT_FIELD;
Expand Down
6 changes: 4 additions & 2 deletions source/compiler/dtio.c
Original file line number Diff line number Diff line change
Expand Up @@ -447,6 +447,7 @@ DtParseLine (
Field->ByteOffset = Offset;
Field->NameColumn = NameColumn;
Field->Column = Column;
Field->StringLength = Length;

DtLinkField (Field);
}
Expand Down Expand Up @@ -486,6 +487,7 @@ DtGetNextLine (
int c;


ACPI_MEMSET (Gbl_CurrentLineBuffer, 0, Gbl_LineBufferSize);
for (i = 0; ;)
{
/*
Expand Down Expand Up @@ -1011,11 +1013,11 @@ DtDumpFieldList (

DbgPrint (ASL_DEBUG_OUTPUT, "\nField List:\n"
"LineNo ByteOff NameCol Column TableOff "
"Flags %32s : %s\n\n", "Name", "Value");
"Flags %32s : %s\n\n", "Name", "Value");
while (Field)
{
DbgPrint (ASL_DEBUG_OUTPUT,
"%.08X %.08X %.08X %.08X %.08X %.08X %32s : %s\n",
"%.08X %.08X %.08X %.08X %.08X %2.2X %32s : %s\n",
Field->Line, Field->ByteOffset, Field->NameColumn,
Field->Column, Field->TableOffset, Field->Flags,
Field->Name, Field->Value);
Expand Down

0 comments on commit c73195e

Please sign in to comment.