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:
- Microsoft Community Promise, disponibile all'indirizzo
https://www.microsoft.com/openspecifications/en/us/programs/community-promise/default.aspx
- 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.