Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Um eine Vielzahl von gerätespezifischen Kommunikationen zwischen dem allgemeinen I/O-Treiberstapel in Windows und der Plattformfirmware zu unterstützen, definiert Microsoft eine Device-Specific-Methode (_DSM), die unter einem GPIO-Controller im ACPI-Namespace enthalten sein kann.
Derzeit definiert diese Methode zwei Funktionen:
Funktionsindex 0: Die Standardabfragefunktion, die alle _DSM Methoden bereitstellen müssen.
Funktionsindex 1: Die ActiveBoth Polarity Function, die den GPIO-Stapel über alle ActiveBoth-Pins auf dem Controller informiert, die keine bestätigte Logik niedrig sind. Der GPIO-Stapel geht davon aus, dass ActiveBoth-Pins logik niedrig sind, sodass diese Funktion die Plattform ermöglicht, diese Standardeinstellung für bestimmte Pins außer Kraft zu setzen.
GUID-Definition
Die GUID für den GPIO-Controller _DSM Methode ist definiert als:
{4F248F40-D5E2-499F-834C-27758EA1CD3F}
Funktion 0
Funktion 0 jedes _DSM ist eine Abfragefunktion, die den Satz unterstützter Funktionsindizes zurückgibt und immer erforderlich ist. Die Definition von Funktion 0 finden Sie unter Abschnitt 9.14.1, "_DSM (Gerätespezifische Methode)", in der ACPI 5.0-Spezifikation.
Funktion 1
Die Parameter für Funktion 1 des GPIO-Controllers _DSM Methode sind wie folgt definiert:
Argumente
Arg0: UUID für GPIO-Controller-_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: Revisions-ID
#define GPIO_CONTROLLER _DSM_REVISION_ID 0Arg2: Funktionsindex für ActiveBoth bestätigt polarität:
#define GPIO_CONTROLLER_DSM_ACTIVE_BOTH_POLARITY_FUNCTION_INDEX 1Arg3: Paket leer (nicht verwendet)
Rückgabe
Ein Paket von ganzzahligen Zahlen, von denen jede die controllerrelative Pinnummer eines Pins auf dem GPIO-Controller ist, der lautet:
Definiert als ActiveBoth-Interrupt und
Der bestätigte Zustand ist nicht Logik niedrig (mit anderen Worten, ist Logik hoch).
Wenn z. B. ein emulierter ActiveBoth-Pin mit einem Pushbutton-Gerät verbunden ist, wechselt der Pin in den bestätigten Zustand (logik-hohe Eingabestufe beim Anheften), wenn der Benutzer die Schaltfläche drückt, und bleibt im bestätigten Zustand, während der Benutzer die Schaltfläche gedrückt hält. Wenn der Benutzer die Schaltfläche loslässt, ändert sich der Pin-Zustand in nicht angefügten (logikarme Eingabestufe).
ASL-Codebeispiel
Im folgenden ASL-Codebeispiel wird eine Reihe von GPIO-Pins identifiziert, die die anfängliche Polarität von ActiveHigh aufweisen.
//
// _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})
}
}