Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Pro podporu různých komunikací specifických pro zařízení mezi zásobníkem ovladačů GPIO (General-Purpose I/O) ve Windows a firmwarem platformy microsoft definuje metodu Device-Specific (_DSM), kterou lze zahrnout do kontroleru GPIO v oboru názvů ACPI.
V současné době tato metoda definuje dvě funkce:
Index funkce 0: Standardní funkce dotazu, kterou musí poskytnout všechny _DSM metody.
Index funkce 1: Funkce ActiveBoth Polarity, která informuje sadu GPIO o všech pinech ActiveBoth na kontroleru, které nejsou uplatněné logiky nízké. Zásobník GPIO předpokládá, že piny ActiveBoth mají nízkou logiku, takže tato funkce umožňuje platformě přepsat tuto výchozí hodnotu pro konkrétní špendlíky.
Definice IDENTIFIKÁTORU GUID
Identifikátor GUID pro metodu _DSM kontroleru GPIO je definován takto:
{4F248F40-D5E2-499F-834C-27758EA1CD3F}
Funkce 0
Funkce 0 každého _DSM je funkce dotazu, která vrací sadu podporovaných indexů funkcí a je vždy povinná. Definice funkce 0 najdete v části 9.14.1 "_DSM (metoda specifická pro zařízení)" ve specifikaci ACPI 5.0.
Funkce 1
Parametry pro funkci 1 kontroleru GPIO _DSM metody jsou definovány takto:
Argumenty
Arg0: UUID pro _DSM kontroleru GPIO
// 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 revize
#define GPIO_CONTROLLER _DSM_REVISION_ID 0Arg2: index funkce pro funkci ActiveBoth asserted polarity:
#define GPIO_CONTROLLER_DSM_ACTIVE_BOTH_POLARITY_FUNCTION_INDEX 1Arg3: prázdný balíček (nepoužívá se)
Vrátit
Balíček celých čísel, z nichž každý je číslo kolíku relativního kontroleru na ovladači GPIO, který je:
Definováno jako přerušení ActiveBoth a
Jejíž stav asserted je není logika nízká (jinými slovy, je logika vysoká).
Pokud je například emulovaný pin kód ActiveBoth připojený k zařízení s tlačítkem, pin zadá asserted state (úroveň vstupu logiky na špendlíku), když uživatel stiskne tlačítko a zůstane v kontrolním stavu, zatímco uživatel drží tlačítko dolů. Když uživatel tlačítko uvolní, stav připnutí se změní na nesesazené (úroveň vstupu s nízkou logikou).
Příklad kódu ASL
Následující příklad kódu ASL identifikuje sadu pinů GPIO, které mají počáteční polaritu 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})
}
}