Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Per supportare un'ampia gamma di comunicazioni specifiche della classe di dispositivo tra lo stack di driver di I/O per utilizzo generico (GPIO) in Windows e il firmware della piattaforma, Microsoft definisce un metodo Device-Specific (_DSM) che può essere incluso in un controller GPIO nello spazio dei nomi ACPI.
Attualmente, questo metodo definisce due funzioni:
Indice funzione 0: funzione query standard necessaria per fornire tutti i metodi di _DSM.
Indice funzione 1: funzione ActiveBoth Polarity, che informa lo stack GPIO di tutti i pin ActiveBoth nel controller che non sono asserzioni logiche basse. Lo stack GPIO presuppone che i pin ActiveBoth siano asserzioni logiche basse, quindi questa funzione consente alla piattaforma di eseguire l'override di tale impostazione predefinita per pin specifici.
Definizione GUID
Il GUID per il metodo di _DSM controller GPIO è definito come:
{4F248F40-D5E2-499F-834C-27758EA1CD3F}
Funzione 0
La funzione 0 di ogni _DSM è una funzione di query che restituisce il set di indici di funzione supportati ed è sempre obbligatoria. Per la definizione della funzione 0, vedere la sezione 9.14.1 , "_DSM (metodo specifico del dispositivo)", nella specifica ACPI 5.0.
Funzione 1
I parametri per la funzione 1 del controller GPIO _DSM metodo sono definiti come segue:
Argomenti
Arg0: UUID per il controller 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 revisione
#define GPIO_CONTROLLER _DSM_REVISION_ID 0
Arg2: indice della funzione per la polarità asserta di ActiveBoth:
#define GPIO_CONTROLLER_DSM_ACTIVE_BOTH_POLARITY_FUNCTION_INDEX 1
Arg3: pacchetto vuoto (non usato)
Ritorno
Pacchetto di numeri interi, ognuno dei quali è il numero di pin relativo al controller di un pin nel controller GPIO, ovvero:
Definito come interrupt ActiveBoth e
Il cui stato asserto è non logica bassa ( in altre parole, è logica elevata).
Ad esempio, se un pin ActiveBoth emulato è connesso a un dispositivo pushbutton, il pin entra nel asseriti stato (livello di input ad alto livello di logica al pin) quando l'utente preme il pulsante e rimane nello stato asserito mentre l'utente tiene premuto il pulsante. Quando l'utente rilascia il pulsante, lo stato del segnaposto cambia in non inseriti (livello di input a basso livello di logica).
Esempio di codice ASL
Nell'esempio di codice ASL seguente viene identificato un set di pin GPIO con polarità iniziale di 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})
}
}