Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Aby zapewnić obsługę różnych komunikacji specyficznej dla klasy urządzeń między stosem sterowników we/wy ogólnego przeznaczenia (GPIO) w systemie Windows i oprogramowaniem układowym platformy, firma Microsoft definiuje metodę Device-Specific (_DSM), która może być uwzględniona w kontrolerze GPIO w przestrzeni nazw ACPI.
Obecnie ta metoda definiuje dwie funkcje:
Indeks funkcji 0: Standardowa funkcja kwerendy wymagana do zapewnienia wszystkich metod _DSM.
Indeks funkcji 1: Funkcja Polaryczności ActiveBoth, która informuje stos GPIO o żadnych pinach ActiveBoth na kontrolerze, które nie są asertywne logiki niskie. Stos GPIO zakłada, że piny ActiveBoth są asertywne niskie logiki, więc ta funkcja umożliwia platformie zastąpienie tego domyślnego dla określonych wyprowadzeń.
Definicja identyfikatora GUID
Identyfikator GUID dla kontrolera GPIO _DSM metody jest definiowany jako:
{4F248F40-D5E2-499F-834C-27758EA1CD3F}
Funkcja 0
Funkcja 0 każdego _DSM jest funkcją zapytania, która zwraca zestaw obsługiwanych indeksów funkcji i jest zawsze wymagana. Aby uzyskać definicję funkcji 0, zobacz sekcję 9.14.1, "_DSM (metoda specyficzna dla urządzenia)", w specyfikacji ACPI 5.0.
Funkcja 1
Parametry funkcji 1 kontrolera GPIO _DSM metody są definiowane w następujący sposób:
Argumenty (w programowaniu)
Arg0: identyfikator UUID dla kontrolera 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: identyfikator poprawki
#define GPIO_CONTROLLER _DSM_REVISION_ID 0Arg2: indeks funkcji dla polarności asercji ActiveBoth:
#define GPIO_CONTROLLER_DSM_ACTIVE_BOTH_POLARITY_FUNCTION_INDEX 1Arg3: pakiet pusty (nieużytkowane)
Wrócić
Pakiet liczb całkowitych, z których każdy jest względnym numerem pin kontrolera numeru PIN na kontrolerze GPIO, który jest:
Zdefiniowano jako przerwanie ActiveBoth i
Którego stan asertywne nie jest logiki niski (innymi słowy, jest logika wysoka).
Jeśli na przykład emulowana pinezka ActiveBoth jest podłączona do urządzenia pushbutton, numer PIN wprowadza asertywnego stanu (poziom danych wejściowych o wysokim poziomie logiki na przypięciu), gdy użytkownik naciska przycisk i pozostaje w stanie asertywne, gdy użytkownik trzyma przycisk w dół. Gdy użytkownik zwolni przycisk, stan pinezki zmieni się na bez obsługi (poziom danych wejściowych niskiego poziomu logiki).
Przykład kodu ASL
Poniższy przykład kodu ASL identyfikuje zestaw wyprowadzeń GPIO, które mają początkową polaryzację 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})
}
}