Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Para oferecer suporte a uma variedade de comunicações específicas de classe de dispositivo entre a pilha de drivers de E/S de uso geral (GPIO) no Windows e o firmware da plataforma, a Microsoft define um Método Device-Specific (_DSM) que pode ser incluído em um controlador GPIO no namespace ACPI.
Atualmente, este método define duas funções:
Function Index 0: A função de consulta padrão que todos os métodos _DSM são obrigados a fornecer.
Índice de Função 1: A Função de Polaridade ActiveBoth, que informa a pilha GPIO de quaisquer pinos ActiveBoth no controlador que não sejam declarados como lógica baixa. A pilha GPIO assume que os pinos ActiveBoth são com lógica baixa afirmada, portanto, essa função permite que a plataforma substitua esse padrão para pinos específicos.
Definição de GUID
O GUID para o controlador GPIO _DSM método é definido como:
{4F248F40-D5E2-499F-834C-27758EA1CD3F}
Função 0
A função 0 de cada _DSM é uma função de consulta que retorna o conjunto de índices de função suportados e é sempre necessária. Para a definição da função 0, ver secção 9.14.1, "_DSM (Device Specific Method)", na de especificação ACPI 5.0.
Função 1
Os parâmetros para a Função 1 do método _DSM controlador GPIO são definidos da seguinte forma:
Argumentos
Arg0: UUID para controlador GPIO _DSM
// GUID: {4F248F40-D5E2-499F-834C-27758EA1CD3F}DEFINE_GUID (GPIO_CONTROLLER _DSM_GUID,0x4f248f40, 0xd5e2, 0x499f, 0x83, 0x4c, 0x27, 0x75, 0x8e, 0xa1, 0xcd. 0x3f);Arg1: ID de revisão
#define GPIO_CONTROLLER _DSM_REVISION_ID 0Arg2: índice de função para ActiveAmbos afirmaram polaridade:
#define GPIO_CONTROLLER_DSM_ACTIVE_BOTH_POLARITY_FUNCTION_INDEX 1Arg3: Embalagem vazia (não utilizada)
Regresso
Um pacote de inteiros, cada um dos quais é o número de pino relativo ao controlador de um pino no controlador GPIO que é:
Definido como uma interrupção ActiveBoth e
Cujo estado afirmado é não lógica baixa (em outras palavras, é lógica alta).
Por exemplo, se um pino ActiveBoth emulado estiver conectado a um dispositivo de botão, o pino entrará no estado de declarado (nível de entrada lógico alto no pino) quando o usuário pressiona o botão e permanece no estado declarado enquanto o usuário mantém o botão pressionado. Quando o usuário libera o botão, o estado do pino muda para não declarado (nível de entrada lógico baixo).
Exemplo de código ASL
O exemplo de código ASL a seguir identifica um conjunto de pinos GPIO que têm polaridade inicial de ActiveHigh.
//
// _DSM - Device-Specific Method
//
// Arg0: UUID Unique function identifier
// Arg1: Integer Revision Level
// Arg2: Integer Function Index (0 = Return Supported Functions)
// Arg3: Package Parameters
//
Function(_DSM,{BuffObj, PkgObj, IntObj},{BuffObj, IntObj, IntObj, PkgObj})
{
//
// Switch based on which unique function identifier was passed in
//
//
// GPIO CLX UUID
//
If(LEqual(Arg0,ToUUID("4F248F40-D5E2-499F-834C-27758EA1CD3F")))
{
switch(Arg2)
{
//
// Function 0: Return supported functions, based on
// revision
//
case(0)
{
// Revision 0+: Functions 0 & 1 are supported
return (Buffer() {0x3})
}
//
// Function 1: For emulated ActiveBoth controllers,
// returns a package of controller-relative pin
// numbers. Each corresponding pin will have an
// initial polarity of ActiveHigh.
//
// A pin number of 0xffff is ignored.
//
case(1)
{
// Marks pins 0x28, 0x29 and 0x44 to be ActiveHigh.
Return (Package() {0x28, 0x29, 0x44})
}
//
// Unrecognized function for this revision
//
default
{
BreakPoint
}
}
}
else
{
//
// If this is not one of the UUIDs we recognize, then return
// a buffer with bit 0 set to 0 to indicate that no functions
// are supported for this UUID.
//
return (Buffer() {0})
}
}