Not
Åtkomst till denna sida kräver auktorisation. Du kan prova att logga in eller byta katalog.
Åtkomst till denna sida kräver auktorisation. Du kan prova att byta katalog.
För att stödja en mängd olika enhetsklassspecifika kommunikationer mellan gpio-drivrutinsstacken (general-purpose I/O) i Windows och plattformens inbyggda programvara definierar Microsoft en Device-Specific-metod (_DSM) som kan ingå under en GPIO-styrenhet i ACPI-namnområdet.
För närvarande definierar den här metoden två funktioner:
Function Index 0: Standard Query Function som alla _DSM metoder måste tillhandahålla.
Function Index 1: The ActiveBoth Polarity Function, som informerar GPIO-stacken om eventuella ActiveBoth-stift på styrenheten som inte är hävdad logik låg. GPIO-stacken förutsätter att ActiveBoth-stiften har låg logik, så den här funktionen gör att plattformen kan åsidosätta den standardinställningen för specifika stift.
GUID-definition
GUID för GPIO-kontrollanten _DSM-metoden definieras som:
{4F248F40-D5E2-499F-834C-27758EA1CD3F}
Funktion 0
Funktion 0 i varje _DSM är en frågefunktion som returnerar uppsättningen funktionsindex som stöds och som alltid krävs. Definitionen av Funktion 0 finns i avsnitt 9.14.1, "_DSM (enhetsspecifik metod)", i ACPI 5.0-specifikationen.
Funktion 1
Parametrarna för funktion 1 i GPIO-kontrollanten _DSM-metoden definieras på följande sätt:
Argumenten
Arg0: UUID för GPIO-styrenhet _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: Function index for ActiveBoth asserted polarity:
#define GPIO_CONTROLLER_DSM_ACTIVE_BOTH_POLARITY_FUNCTION_INDEX 1Arg3: Paketet är tomt (används inte)
Återvända
Ett paket med heltal, som var och en är det kontrollant-relativa pin-numret för en pin-kod på GPIO-styrenheten som är:
Definieras som ett ActiveBoth-avbrott och
Vars påstådda tillstånd är inte logik låg (med andra ord är logik hög).
Om till exempel en emulerad ActiveBoth-stift är ansluten till en pushbutton-enhet, anger stiftet bekräftat tillstånd (logik-hög indatanivå vid stift) när användaren trycker på knappen och förblir i det bekräftade tillståndet medan användaren håller knappen nere. När användaren släpper knappen ändras pin-tillståndet till ej bekräftad (logiklåg indatanivå).
ASL-kodexempel
Följande ASL-kodexempel identifierar en uppsättning GPIO-stift som har inledande polaritet för 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})
}
}