Tabella porta di debug Microsoft 2 (DBG2)

Questa specifica definisce il formato della tabella porta di debug 2 (DBG2), usata nel firmware della piattaforma per descrivere le porte di debug disponibili nel sistema. Queste informazioni si applicano ai sistemi operativi seguenti: Windows 8 e versioni successive.

I riferimenti e le risorse illustrati di seguito sono elencati alla fine di questo documento.

Nota sul brevetto: Microsoft sta rendendo disponibili determinati diritti di brevetto per le implementazioni di questa specifica in due opzioni:

  1. Microsoft Community Promise, disponibile all'indirizzo https://www.microsoft.com/openspecifications/en/us/programs/community-promise/default.aspx
  2. Open Web Foundation Final Specification Agreement versione 1.0 ("OWF 1.0") a partire dal 1° ottobre 2012, disponibile all'indirizzo http://www.openwebfoundation.org/legal/the-owf-1-0-agreements/owfa-1-0.

Cronologia documenti

Data Modifica
29 novembre 2011 Prima pubblicazione.
22 maggio 2012 Aggiornamenti alla tabella 3 per ogni piattaforma supportata per Windows 8.
10 agosto 2015 Avviso di brevetto aggiornato.
6 ottobre 2015 Aggiunta di nuovi sottotipi di debug seriale (ARM SBSA UART, Arm DCC)
10 dicembre 2015 Aggiunta di un nuovo sottotipo di debug seriale (BCM2835)
31 maggio 2017 Aggiunta di un nuovo sottotipo di debug seriale (i.MX6, Struttura indirizzi generica 16550 compatibile)
11 giugno 2020 Aggiunta di un nuovo sottotipo di debug seriale (SDM845v2)
1° settembre 2020 Documento convertito in sintassi markdown e modifiche di formattazione.
21 settembre 2020 Aggiunta di un nuovo sottotipo di debug seriale (IALPSS)
17 febbraio 2021 Documentare tutti i sottotipi di debug seriali noti
10 aprile 2023 Aggiunta di un nuovo sottotipo di debug seriale (RISC-V) e aggiunta di informazioni chiare sui sottotipi compatibili con 16550

Introduzione

Microsoft richiede una porta di debug in tutti i sistemi. Per descrivere le porte di debug disponibili in una piattaforma, Microsoft definisce una tabella specifica del sistema operativo (DBG2). Questa tabella specifica una o più porte indipendenti a scopo di debug. La presenza di una tabella di porta di debug indica che il sistema include una porta di debug. La tabella contiene informazioni sulla configurazione della porta di debug. La tabella si trova nella memoria di sistema con altre tabelle ACPI (Advanced Configuration and Power Interface) e deve essere fatto riferimento nella tabella descrizione del sistema radice ACPI (RSDT).

La tabella DBG2 sostituisce la tabella porta di debug ACPI (DBGP) nelle piattaforme le cui implementazioni delle porte di debug non possono essere descritte usando DBGP.

Tabella porta di debug 2 (DBG2)

Tabella 1. Formato della tabella della porta di debug 2

La tabella 1 definisce i campi in DBG2.

Campo Lunghezza byte Offset di byte Descrizione
Intestazione
Firma 4 0 'DBG2'. Firma per la tabella porta di debug 2.
Length 4 4 Lunghezza, in byte, dell'intera tabella porta di debug 2.
Revisione 1 8 Per questa versione della specifica, questo valore è 0.
Checksum 1 9 L'intera tabella deve sommare a zero.
OEM ID 6 10 ID OEM (Original Equipment Manufacturer).
ID tabella OEM 8 16 Per Debug Port Table 2, l'ID tabella è l'ID modello produttore.
Revisione OEM 4 24 Revisione OEM della tabella porta di debug 2 per l'ID tabella OEM fornito.
ID creatore 4 28 ID fornitore di utilità che ha creato la tabella.
Revisione creatore 4 32 Revisione dell'utilità che ha creato la tabella.
OffsetDbgDeviceInfo 4 36 Offset, in byte, dall'inizio di questa tabella alla prima voce Della struttura Informazioni sul dispositivo di debug.
NumberDbgDeviceInfo 4 40 Indica il numero di voci della struttura Informazioni sul dispositivo di debug.
Struttura delle informazioni sul dispositivo di debug[NumberDbgDeviceInfo] Variabile OffsetDbgDeviceInfo Elenco delle strutture Di informazioni sul dispositivo di debug per questa piattaforma. Il formato della struttura è definito nella sezione Debug Device Information structure (Struttura informazioni dispositivo di debug) più avanti in questo documento.

Struttura delle informazioni sul dispositivo di debug

Tabella 2. Eseguire il debug del formato della struttura delle informazioni sul dispositivo

Campo Lunghezza byte Offset di byte Descrizione
Revisione 1 0 Revisione della struttura Debug Device Information (Informazioni sul dispositivo di debug). Per questa versione della specifica, deve essere 0.
Length 2 1 Lunghezza, in byte, di questa struttura, inclusi NamespaceString e OEMData.
NumberofGenericAddressRegisters 1 3 Numero di registri di indirizzi generici in uso.
NamespaceStringLength 2 4 Lunghezza, in byte, di NamespaceString, inclusi i caratteri NUL.
NamespaceStringOffset 2 6 Offset, in byte, dall'inizio di questa struttura al campo NamespaceString[]. Questo valore deve essere valido perché questa stringa deve essere presente.
OemDataLength 2 8 Lunghezza, in byte, del blocco di dati OEM.
OemDataOffset 2 10 Offset, in byte, al campo OemData[] dall'inizio di questa struttura. Questo valore sarà 0 se non sono presenti dati OEM.
Tipo di porta 2 12 Eseguire il debug del tipo di porta per questo dispositivo di debug. Ognuno di questi valori avrà un valore di sottotipo corrispondente, come illustrato nella tabella 3.
Sottotipo porta 2 14 Sottotipo di porta di debug per questo dispositivo di debug. Vedere la tabella 3.
Riservato 2 16 Riservato, deve essere 0.
BaseAddressRegisterOffset 2 18 Offset, in byte, dall'inizio di questa struttura al campo BaseaddressRegister[].
AddressSizeOffset 2 20 Offset, in byte, dall'inizio di questa struttura al campo AddressSize[].
BaseAddressRegister[] (NumberofGenericAddressRegisters) * 12 BaseAddressRegisterOffset Matrice di indirizzi generici.
AddressSize[] (NumberofGenericAddressRegisters) * 4 AddressSizeOffset Matrice di dimensioni degli indirizzi corrispondenti a ogni indirizzo generico precedente.
NamespaceString[] NamespaceStringLength NamespaceStringOffset Stringa ASCII con terminazione NUL per identificare in modo univoco questo dispositivo. Questa stringa è costituita da un riferimento completo all'oggetto che rappresenta questo dispositivo nello spazio dei nomi ACPI. Se non esiste alcun dispositivo dello spazio dei nomi, NamespaceString[] deve contenere solo un singolo '.' (punto ASCII).
OemData[] OemDataLength OemDataOffset Dati specifici dell'OEM a lunghezza variabile facoltativi.

Tabella 3. Eseguire il debug di tipi di porta e sottotipi

Porta Tipo Subtype Descrizione
Riservato 0x0000 : 0x7FFF e 0xFFFF Tutti Riservato (non usare)
Serial 0x8000 0x0000 Completamente compatibile con la versione 16550
0x0001 Subset 16550 compatibile con DBGP Revisione 1
0x0002 MAX311xE SPI UART
0x0003 Arm PL011 UART
0x0004 MSM8x60 (ad esempio 8960)
0x0005 Nvidia 16550
0x0006 TI OMAP
0x0007 Riservato (non usato)
0x0008 APM88xxxx
0x0009 MSM8974
0x000A SAM5250
0x000B Intel USIF
0x000C i.MX 6
0x000D (deprecato) ARM SBSA (solo 2.x) Generic UART che supporta solo gli accessi a 32 bit
0x000E Arm SBSA Generic UART
0x000F Arm DCC
0x0010 BCM2835
0x0011 SDM845 con frequenza di clock pari a 1,8432 MHz
0x0012 16550 compatibile con i parametri definiti in Struttura di indirizzi generici
0x0013 SDM845 con frequenza di clock di 7,372 MHz
0x0014 Intel LPSS
0x0015 Console SBI DI RISC-V (qualsiasi meccanismo SBI supportato)
0x0016 - 0xFFFF Riservato (per uso futuro)
1394 0x8001 0x0000 Interfaccia del controller host standard IEEE1394
0x0001 - 0xFFFF Riservato (per uso futuro)
USB 0x8002 0x0000 Controller conforme A XHCI con interfaccia di debug
0x0001 Controller conforme a EHCI con interfaccia di debug
0x0002 - 0x0006 Riservato (non usato)
0x0007 – 0xFFFF Riservato (per uso futuro)
Net 0x8003 NNNN NNNN deve essere un ID fornitore assegnato a PCI valido
0x8004 Tutti Riservato (non usato)
Riservato 0x8005 - 0xFFFE Tutti Riservato (per uso futuro)

Nota sui campi della struttura di indirizzi generici

  • La struttura di indirizzi generica in BaseAddressRegister[0] viene usata per specificare la larghezza e le dimensioni di accesso del registro usate da alcuni sottotipi seriali.

  • I campi ID spazio indirizzi e Offset bit di registrazione devono essere 0.

  • Il campo Register Bit Width contiene lo stride di registro e deve essere una potenza di 2 che è almeno di grandi dimensioni dell'accesso. Nelle piattaforme a 32 bit questo valore non può superare 32. Nelle piattaforme a 64 bit questo valore non può superare 64.

  • Il campo Dimensioni di accesso viene usato per determinare se usare gli accessi byte, WORD, DWORD o QWORD. Gli accessi QWORD sono validi solo nelle architetture a 64 bit.

Nota sulle UART basate su 16550

Esistono tre sottotipi di interfaccia che possono essere usati per 16550 UART basati su 1650. Le differenze tra di esse sono sottili ma importanti.

  • Il sottotipo di interfaccia 0x0 fa riferimento a una porta seriale che usa l'I/O "legacy" come illustrato nelle piattaforme basate su x86. Questo tipo deve essere evitato nelle piattaforme che usano I/O mappati alla memoria, ad esempio ARM o RISC-V.

  • Il sottotipo di interfaccia 0x1 supporta le unità UART mappate alla memoria, ma solo quelle che sono descrivono nella tabella ACPI DBGP. Le implementazioni del sistema operativo possono trattarlo come equivalente a una porta di debug fornita da DBGP e onorare solo il campo Indirizzo di base della struttura di indirizzi generici.

  • Il sottotipo di interfaccia 0x12 è la scelta più flessibile e è consigliabile quando si eseguono sistemi operativi compatibili su nuove piattaforme. Questo sottotipo supporta tutte le porte seriali che possono essere descritte dai sottotipi 0x0 e 0x1, oltre a quelli nuovi, come quelli che richiedono dimensioni di accesso non tradizionali e larghezze di bit nella struttura di indirizzi generici.

Risorse

Specifica ACPI