Microsoft Debug Port Table 2 (DBG2)

Essa especificação define o formato da DBG2 (Tabela de Porta de Depuração 2), usada no firmware da plataforma para descrever as portas de depuração disponíveis no sistema. Essas informações se aplicam aos seguintes sistemas operacionais: Windows 8 e mais recentes.

As referências e os recursos discutidos aqui são listados no final deste artigo.

Aviso de Patente: a Microsoft está disponibilizando certos direitos de patente para implementações dessa especificação em duas opções:

  1. Promessa da Comunidade da Microsoft, disponível em https://www.microsoft.com/openspecifications/en/us/programs/community-promise/default.aspx
  2. O Open Web Foundation Final Specification Agreement versão 1.0 ("OWF 1.0") a partir de 1º de outubro de 2012, disponível em http://www.openwebfoundation.org/legal/the-owf-1-0-agreements/owfa-1-0.

Histórico de Documentos

Data Alterar
29 de novembro de 2011 Primeira publicação.
22 de maio de 2012 Atualizações à Tabela 3 por plataformas finais com suporte para Windows 8.
10 de agosto de 2015 Aviso de patente atualizado.
6 de outubro de 2015 Adicionados novos subtipos de depuração serial (Arm SBSA UART, Arm DCC)
10 de dezembro de 2015 Adicionado novo subtipo de depuração serial (BCM2835)
31 de maio de 2017 Adicionado novo subtipo de depuração serial (i.MX6, estrutura de endereço genérico compatível com 16550)
11 de junho de 2020 Adicionado novo subtipo de depuração serial (SDM845v2)
1 de setembro de 2020 Documento convertido em sintaxe markdown e alterações de formatação.
21 de setembro de 2020 Adicionado novo subtipo de depuração serial (IALPSS)
17 de fevereiro de 2021 Documentar todos os subtipos de depuração serial conhecidos
10 de abril de 2023 Adicionado novo subtipo de depuração serial (RISC-V) e adicionado informações de esclarecimento sobre subtipos compatíveis com 16550

Introdução

A Microsoft requer uma porta de depuração em todos os sistemas. Para descrever as portas de depuração disponíveis em uma plataforma, a Microsoft define uma tabela específica do sistema operacional (DBG2). Esta tabela especifica uma ou mais portas independentes para fins de depuração. A presença de uma tabela de porta de depuração indica que o sistema inclui uma porta de depuração. A tabela contém informações sobre a configuração da porta de depuração. A tabela está localizada na memória do sistema com outras tabelas ACPI (Advanced Configuration and Power Interface) e deve ser referenciada na Tabela de Descrição do Sistema Raiz do ACPI (RSDT).

A tabela DBG2 substitui a Tabela de Porta de Depuração do ACPI (DBGP) em plataformas cujas implementações de porta de depuração não podem ser descritas usando DBGP.

Tabela de porta de depuração 2 (DBG2)

Tabela 1. Formato da Tabela de Porta de Depuração 2

A Tabela 1 define os campos no DBG2.

Campo Comprimento do byte Deslocamento de bytes Descrição
Cabeçalho
Assinatura 4 0 'DBG2'. Assinatura para a Tabela 2 da Porta de Depuração.
Comprimento 4 4 Comprimento, em bytes, de toda a Tabela de Porta de Depuração 2.
Revisão 1 8 Para esta versão da especificação, esse valor é 0.
Checksum (soma de verificação) 1 9 A tabela inteira deve somar a zero.
OEM ID 6 10 ID original do fabricante do equipamento (OEM).
ID da Tabela OEM 8 16 Para a Tabela de Porta de Depuração 2, a ID da tabela é a ID do modelo do fabricante.
Revisão do OEM 4 24 Revisão OEM da Tabela 2 da Porta de Depuração para a ID da Tabela OEM fornecida.
ID do Criador 4 28 ID do fornecedor do utilitário que criou a tabela.
Revisão do Criador 4 32 Revisão do utilitário que criou a tabela.
OffsetDbgDeviceInfo 4 36 Deslocamento, em bytes, desde o início desta tabela até a primeira entrada de estrutura de Informações do Dispositivo de Depuração.
NumberDbgDeviceInfo 4 40 Indica o número de entradas de estrutura de Informações do Dispositivo de Depuração.
Depurar estrutura de informações do dispositivo[NumberDbgDeviceInfo] Variável OffsetDbgDeviceInfo Uma lista de estruturas de Informações do Dispositivo de Depuração para essa plataforma. O formato da estrutura é definido na seção Estrutura de Informações do Dispositivo de Depuração, posteriormente neste documento.

Estrutura de informações do dispositivo de depuração

Tabela 2. Formato da estrutura Depurar Informações do Dispositivo

Campo Comprimento do byte Deslocamento de bytes Descrição
Revisão 1 0 Revisão da estrutura Depurar Informações do Dispositivo. Para esta versão da especificação, isso deve ser 0.
Comprimento 2 1 Comprimento, em bytes, dessa estrutura, incluindo NamespaceString e OEMData.
NumberofGenericAddressRegisters 1 3 Número de registros de endereço genéricos em uso.
NamespaceStringLength 2 4 Comprimento, em bytes, de NamespaceString, incluindo caracteres NUL.
NamespaceStringOffset 2 6 Deslocamento, em bytes, desde o início dessa estrutura até o campo NamespaceString[]. Esse valor deve ser válido porque essa cadeia de caracteres deve estar presente.
OemDataLength 2 8 Comprimento, em bytes, do bloco de dados OEM.
OemDataOffset 2 10 Deslocamento, em bytes, para o campo OemData[] desde o início dessa estrutura. Esse valor será 0 se nenhum dado OEM estiver presente.
Tipo de Porta 2 12 Tipo de porta de depuração para este dispositivo de depuração. Cada um desses valores terá um valor de subtipo correspondente, conforme mostrado na Tabela 3.
Subtipo de porta 2 14 Subtipo de porta de depuração para este dispositivo de depuração. Consulte Tabela 3.
Reservado 2 16 Reservado, deve ser 0.
BaseAddressRegisterOffset 2 18 Deslocamento, em bytes, desde o início dessa estrutura até o campo BaseaddressRegister[].
AddressSizeOffset 2 20 Deslocamento, em bytes, desde o início dessa estrutura até o campo AddressSize[].
BaseAddressRegister[] (NumberofGenericAddressRegisters) * 12 BaseAddressRegisterOffset Matriz de endereços genéricos.
AddressSize[] (NumberofGenericAddressRegisters) * 4 AddressSizeOffset Matriz de tamanhos de endereço correspondentes a cada endereço genérico acima.
NamespaceString[] NamespaceStringLength NamespaceStringOffset Cadeia de caracteres ASCII terminada por NUL para identificar exclusivamente esse dispositivo. Essa cadeia de caracteres consiste em uma referência totalmente qualificada ao objeto que representa esse dispositivo no namespace ACPI. Se nenhum dispositivo de namespace existir, NamespaceString[] deverá conter apenas um único '.' Caractere (período ASCII).
OemData[] OemDataLength OemDataOffset Dados opcionais específicos do OEM de comprimento variável.

Tabela 3. Depurar tipos de porta e subtipos

Porta Tipo Subtype Descrição
Reservado 0x0000 – 0x7FFF e 0xFFFF Tudo Reservado (Não Usar)
Serial 0x8000 0x0000 Totalmente compatível com 16550
0x0001 Subconjunto 16550 compatível com a Revisão 1 do DBGP
0x0002 MAX311xE SPI UART
0x0003 Arm PL011 UART
0x0004 MSM8x60 (por exemplo, 8960)
0x0005 Nvidia 16550
0x0006 TI OMAP
0x0007 Reservado (Não Usar)
0x0008 APM88xxxx
0x0009 MSM8974
0x000A SAM5250
0x000B Intel USIF
0x000C i.MX 6
0x000D (preterido) Arm SBSA (somente 2.x) UART genérico com suporte apenas a acessos de 32 bits
0x000E Arm SBSA Generic UART
0x000F Arm DCC
0x0010 BCM2835
0x0011 SDM845 com taxa de relógio de 1,8432 MHz
0x0012 16550 compatível com parâmetros definidos na Estrutura de Endereço Genérico
0x0013 SDM845 com taxa de relógio de 7,372 MHz
0x0014 Intel LPSS
0x0015 Console do SBI do RISC-V (qualquer mecanismo de SBI com suporte)
0x0016 – 0xFFFF Reservado (para uso futuro)
1394 0x8001 0x0000 Interface do controlador de host padrão IEEE1394
0x0001 – 0xFFFF Reservado (para uso futuro)
USB 0x8002 0x0000 Controlador compatível com XHCI com interface de depuração
0x0001 Controlador compatível com EHCI com interface de depuração
0x0002 – 0x0006 Reservado (Não Usar)
0x0007 – 0xFFFF Reservado (para uso futuro)
Net 0x8003 NNNN NNNN deve ser uma ID de fornecedor atribuída por PCI válida
0x8004 Tudo Reservado (Não Usar)
Reservado 0x8005 – 0xFFFE Tudo Reservado (para uso futuro)

Observação nos campos da Estrutura de Endereço Genérico

  • A Estrutura de Endereço Genérico em BaseAddressRegister[0] é usada para especificar a largura do bit de registro e o tamanho de acesso usados por alguns subtipos serial.

  • Os campos ID de Espaço de Endereço e Deslocamento de Bit de Registro devem ser 0.

  • O campo Registrar Largura do Bit contém o passo de registro e deve ser uma potência de 2 que seja pelo menos tão grande quanto o tamanho do acesso. Em plataformas de 32 bits, esse valor não pode exceder 32. Em plataformas de 64 bits, esse valor não pode exceder 64.

  • O campo Tamanho do Acesso é usado para determinar se os acessos byte, WORD, DWORD ou QWORD devem ser usados. Os acessos QWORD só são válidos em arquiteturas de 64 bits.

Observação sobre UARTs baseados em 16550

Há três subtipos de interface que podem ser usados para UARTs baseados em 16550. As diferenças entre eles são sutis, mas importantes.

  • O subtipo de interface 0x0 refere-se a uma porta serial que usa E/S de porta "herdada", conforme visto em plataformas baseadas em x86. Esse tipo deve ser evitado em plataformas que usam E/S mapeada pela memória, como ARM ou RISC-V.

  • O subtipo de interface 0x1 dá suporte a UARTs mapeados em memória, mas apenas os que podem ser descritos na tabela ACPI do DBGP. As implementações do sistema operacional podem tratar isso como equivalente a uma porta de depuração fornecida pelo DBGP e respeitar apenas o campo Endereço Base da Estrutura de Endereço Genérico.

  • O subtipo de interface 0x12 é a opção mais flexível e é recomendado ao executar sistemas operacionais compatíveis em novas plataformas. Esse subtipo dá suporte a todas as portas serial que podem ser descritas pelos subtipos 0x0 e 0x1, bem como as novas, como aquelas que exigem tamanhos de acesso não tradicionais e larguras de bits na Estrutura de Endereço Genérica.

Recursos

Especificação de ACPI