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.
Sterowniki kontrolera GPIO mogą wywoływać GPIO_CLX_AcquireInterruptLock i GPIO_CLX_ReleaseInterruptLock metody uzyskiwania i zwalniania blokad przerwania, które są implementowane wewnętrznie przez rozszerzenie struktury GPIO (GpioClx). Kod sterownika uruchamiany w środowisku IRQL = PASSIVE_LEVEL może wywołać te metody w celu synchronizacji z procedurą usługi przerwania (ISR) w GpioClx. GpioClx dedykuje oddzielną blokadę przerwania do każdej grupy wyprowadzeń w ramach kontrolera GPIO.
Jeśli rejestry sprzętowe kontrolera GPIO są mapowane na pamięć, ISR w GpioClx wywołuje niektóre funkcje wywołania zwrotnego zdarzeń zaimplementowane przez sterownik w DIRQL; GpioClx wywołuje pozostałe funkcje wywołania zwrotnego w PASSIVE_LEVEL. Funkcja wywołania zwrotnego na poziomie pasywnym, która uzyskuje dostęp do banku rejestrów, może wymagać użycia blokady przerwania, aby zsynchronizować funkcje wywołania zwrotnego uruchamiane w diRQL i które uzyskują dostęp do tych samych rejestrów.
Na przykład funkcje CLIENT_EnableInterrupt na poziomie pasywnym i CLIENT_DisableInterrupt wywołania zwrotnego modyfikują ustawienia sprzętowe wpływające na działanie innych procedur wywołania zwrotnego związanych z przerwaniami uruchamianych w diRQL. Funkcje CLIENT_EnableInterrupt i CLIENT_DisableInterrupt zwykle używają blokad przerwań bankowych w celu zsynchronizowania dostępu do rejestru.
GpioClx automatycznie organizuje w kolejności wywołania zwrotne związane z przerwaniami i wejściem/wyjściem, które występują w DIRQL. GpioClx uzyskuje blokadę przerwań dla banku docelowego przed wywołaniem funkcji wywołania zwrotnego w DIRQL i zwalnia blokadę po powrocie funkcji. Jest to błąd dla funkcji wywołania zwrotnego, która jest wywoływana w DIRQL, aby spróbować ponownie uzyskać blokadę przerwania bankowego, wywołując GPIO_CLX_AcquireInterruptLock.
Podobnie gpioClx automatycznie serializuje wywołania zwrotne, które występują w PASSIVE_LEVEL. GpioClx wewnętrznie implementuje blokadę oczekiwania na bank. GpioClx uzyskuje blokadę oczekiwania dla banku docelowego przed wywołaniem funkcji wywołania zwrotnego w PASSIVE_LEVEL i zwalnia blokadę po powrocie funkcji. W przypadku kontrolera GPIO mapowanego pamięci GpioClx zarządza blokadami oczekiwania banku w imieniu kierowcy, ale nie umożliwia kierowcy jawnego uzyskania i zwolnienia blokad.
Jednak w przypadku kontrolera GPIO niezmapowanego w pamięci GPIO_CLX_AcquireInterruptLock i GPIO_CLX_ReleaseInterruptLock pozyskują i zwalniają blokadę oczekiwania zamiast blokady przerwania. GpioClx implementuje oddzielną blokadę oczekiwania dla każdego banku wyprowadzeń w kontrolerze GPIO. Ponieważ rejestry nie są mapowane na pamięć, wszystkie funkcje zwrotne związane z przerwaniami i I/O są wywoływane w PASSIVE_LEVEL, aby mogły używać żądań I/O do uzyskania dostępu do rejestrów za pośrednictwem magistrali szeregowej, takiej jak I²C. GpioClx uzyskuje blokadę oczekiwania dla banku docelowego przed wywołaniem jednej z funkcji zwrotnych i zwalnia blokadę po zakończeniu działania funkcji.
Jest błędem, jeśli funkcja wywołania zwrotnego dla kontrolera nieodwzorowanego w pamięci próbuje ponownie uzyskać blokadę oczekiwania banku, wywołując GPIO_CLX_AcquireInterruptLock. Jednak kod sterownika na poziomie pasywnym poza funkcjami wywołania zwrotnego może wywoływać metody GPIO_CLX_XxxInterruptLock w celu synchronizacji z funkcjami wywołania zwrotnego. Ponieważ GpioClx wywołuje wszystkie funkcje zwrotne związane z przerwaniami i wejściem/wyjściem na poziomie PASSIVE_LEVEL, blokady oczekiwania banku skutecznie zastępują blokady przerwań bankowych dla kontrolerów nieodwzorowanych w pamięci.
Inną opcją dla kontrolera bez mapowania pamięci jest to, aby sterownik kontrolera zaimplementował zestaw blokad oczekiwania. Te blokady oczekiwania mogą umożliwić procedurom wywołania zwrotnego wykonywanie bardziej precyzyjnego blokowania i odblokowywania udostępnionych zasobów, niż jest to możliwe z blokadami oczekiwania zaimplementowanymi przez GpioClx.
Podczas wywołania procedury zwrotnej CLIENT_QueryControllerBasicInformation, sterownik kontrolera GPIO zgłasza do GpioClx, czy rejestry kontrolera są mapowane na pamięć. Aby uzyskać więcej informacji, zobacz opis flagi MemoryMappedController w CLIENT_CONTROLLER_BASIC_INFORMATION.
Aby uzyskać więcej informacji na temat blokad przerwań i blokad oczekiwania, zobacz Using Framework Locks (Korzystanie z blokad struktury).
Poniższe tabele zawierają bardziej szczegółowe informacje o tym, które funkcje wywołania zwrotnego są wywoływane w diRQL zamiast w PASSIVE_LEVEL, jeśli rejestry są mapowane na pamięć. Uwagi, które następują po tabelach, wyjaśniają, kiedy funkcje wywołania zwrotnego na poziomie pasywnym powinny stosować blokady przerwań.
- Funkcje wywołania zwrotnego związane z przerywaniem
- Funkcje wywołania zwrotnego związane z I/O
- Inicjalizacja GPIO i funkcje wywołania zwrotnego związane z ustawieniami
- Funkcje wywołania zwrotnego związane z zarządzaniem energią GPIO
- Inne funkcje wywołania zwrotnego
Funkcje wywołania zwrotnego związane z przerwaniami
Aby obsługiwać piny GPIO skonfigurowane jako wejścia przerwań, sterownik kontrolera GPIO implementuje zestaw funkcji wywołania zwrotnego zdarzeń w celu zarządzania żądaniami przerwań za pośrednictwem tych pinów. W poniższej tabeli środkowa kolumna wskazuje środowisko IRQL, w którym są wywoływane funkcje, jeśli rejestry sprzętowe kontrolera GPIO są mapowane na pamięć. Kolumna po prawej stronie wskazuje środowisko IRQL, w którym są wywoływane funkcje, jeśli rejestry nie są mapowane na pamięć i muszą być dostępne za pośrednictwem magistrali szeregowej.
| Funkcja zwrotna | IRQL, jeśli pamięć jest mapowana (MemoryMappedController = 1) | IRQL, jeśli dostępna seryjnie (MemoryMappedController = 0) |
|---|---|---|
Poziom Pasywny (Patrz uwaga 1).) |
Poziom Pasywny (Patrz uwaga 2.) |
|
DIRQL (Patrz uwaga 3).) |
Poziom Pasywny (Patrz uwaga 4).) |
|
DIRQL (Patrz uwaga 5).) |
DIRQL (Patrz uwaga 6). |
Notatki
GpioClx nie uzyskuje blokady przerwania bankowego przed wywołaniem tej funkcji wywołania zwrotnego. Funkcja wywołania zwrotnego może, w razie potrzeby, uzyskać blokadę przerwań bankowych w celu zsynchronizowania dostępu do rejestrów współdzielonych z funkcjami wywołania zwrotnego działającymi na poziomie DIRQL.
GpioClx serializuje wywołanie tej funkcji wywołania zwrotnego z innymi funkcjami powiązanymi z przerwaniami i wywołaniami zwrotnymi powiązanymi z we/wy, które są wywoływane w PASSIVE_LEVEL. W związku z tym funkcja wywołania zwrotnego nie powinna próbować uzyskać blokady oczekiwania banku.
GpioClx uzyskuje blokadę przerwań banku przed wywołaniem tej funkcji zwrotnej i zwalnia ją po zakończeniu działania funkcji. W związku z tym funkcja wywołania zwrotnego nie powinna próbować uzyskać blokady przerwania bankowego.
GpioClx serializuje wywołanie tej funkcji wywołania zwrotnego z innymi funkcjami powiązanymi z przerwaniami i wywołaniami zwrotnymi powiązanymi z we/wy, które są wywoływane w PASSIVE_LEVEL. Zatem funkcja wywołania zwrotnego nie powinna próbować uzyskać blokady oczekiwania banku.
GpioClx uzyskuje blokadę przerwań banku przed wywołaniem tego callbacku i zwalnia blokadę po powrocie funkcji. W związku z tym funkcja wywołania zwrotnego nie powinna próbować uzyskać blokady przerwania bankowego.
GpioClx nie uzyskuje blokady przerwania bankowego przed wywołaniem tej funkcji zwrotnej. Sterownik kontrolera GPIO jest odpowiedzialny za zapewnienie synchronizacji, która może być wymagana.
Funkcje wywołania zwrotnego związane z we/wy
Aby obsługiwać wyprowadzenia GPIO, które są skonfigurowane jako wyprowadzenia wejścia/wyjścia danych, sterownik kontrolera GPIO implementuje zestaw funkcji wywołania zwrotnego zdarzeń do zarządzania operacjami wejścia/wyjścia za pośrednictwem tych pinów. W poniższej tabeli środkowa kolumna wskazuje środowisko IRQL, w którym są wywoływane funkcje, jeśli rejestry sprzętowe kontrolera GPIO są mapowane na pamięć. Kolumna po prawej stronie wskazuje środowisko IRQL, w którym są wywoływane funkcje, jeśli rejestry nie są mapowane na pamięć i muszą być dostępne za pośrednictwem magistrali szeregowej.
| Funkcja zwrotna | IRQL, jeśli pamięć jest mapowana (MemoryMappedController = 1) | IRQL: jeśli dostęp szeregowy (MemoryMappedController = 0) |
|---|---|---|
Poziom Pasywny (Patrz uwaga 1).) |
Poziom Pasywny (Patrz uwaga 2.) |
|
DIRQL (Patrz uwaga 3).) |
Poziom Pasywny (Patrz uwaga 4).) |
Notatki
GpioClx nie uzyskuje blokady przerwania bankowego przed wywołaniem tej funkcji wywołania zwrotnego. Funkcja wywołania zwrotnego może w razie potrzeby uzyskać blokadę przerwań w celu zsynchronizowania dostępu do rejestrów, które są współużytkowane z funkcjami wywołania zwrotnego uruchamianymi w diRQL.
GpioClx serializuje wywołanie tej funkcji wywołania zwrotnego z innymi funkcjami powiązanymi z przerwaniami i wywołaniami zwrotnymi powiązanymi z we/wy, które są wywoływane w PASSIVE_LEVEL. W związku z tym funkcja wywołania zwrotnego nie powinna próbować uzyskać blokady oczekiwania banku.
GpioClx uzyskuje blokadę przerwań banku przed wywołaniem tej funkcji wywołania zwrotnego i zwalnia blokadę po powrocie funkcji. W związku z tym funkcja wywołania zwrotnego nie powinna próbować uzyskać blokady przerwania bankowego.
GpioClx serializuje wywołanie tej funkcji zwrotnej z innymi funkcjami związanymi z przerwaniami oraz funkcjami zwrotnymi powiązanymi z wejściem/wyjściem, które są wywoływane na poziomie PASSIVE_LEVEL. W związku z tym funkcja wywołania zwrotnego nie powinna próbować uzyskać blokady oczekiwania banku.
Inicjalizacja i konfiguracja interfejsu GPIO oraz związane z nimi funkcje zwrotne
Aby skonfigurować kontroler GPIO do wykonywania operacji wejścia/wyjścia oraz obsługi przerwań, sterownik kontrolera GPIO implementuje zestaw funkcji wywołania zwrotnego zdarzeń w celu zainicjowania kontrolera. W poniższej tabeli środkowa kolumna wskazuje środowisko IRQL, w którym są wywoływane funkcje, jeśli rejestry sprzętowe kontrolera GPIO są mapowane na pamięć. Kolumna po prawej stronie wskazuje środowisko IRQL, w którym są wywoływane funkcje, jeśli rejestry nie są mapowane na pamięć i muszą być dostępne za pośrednictwem magistrali szeregowej.
| Funkcja zwrotna | IRQL, jeśli pamięć mapowana (MemoryMappedController = 1) | IRQL przy dostępie szeregowym (MemoryMappedController = 0) |
|---|---|---|
Poziom Pasywny (Patrz uwaga 1).) |
Poziom Pasywny (Patrz uwaga 2.) |
Notatki
Gdy GpioClx wywołuje dowolne z tych funkcji wywołania zwrotnego, blokady przerwań bankowych nie są dostępne. W związku z tym te funkcje wywołania zwrotnego nie powinny próbować uzyskiwać blokady przerwania bankowego.
Blokady oczekiwania banku GpioClx nie są dostępne po wywołaniu tych funkcji wywołania zwrotnego. W związku z tym kierowca nie powinien próbować uzyskać blokady oczekiwania banku, aby zsynchronizować te funkcje wywołania zwrotnego.
Funkcje wywołania zwrotnego GPIO związane z zarządzaniem energią
Aby umożliwić kontrolerowi GPIO zmianę stanów zasilania urządzenia, sterownik kontrolera GPIO implementuje zestaw funkcji wywołania zwrotnego zdarzeń w celu zapisania i przywrócenia ustawień sprzętu podczas tych zmian. W poniższej tabeli środkowa kolumna wskazuje środowisko IRQL, w którym są wywoływane funkcje, jeśli rejestry sprzętowe kontrolera GPIO są mapowane na pamięć. Kolumna po prawej stronie wskazuje środowisko IRQL, w którym są wywoływane funkcje, jeśli rejestry nie są mapowane na pamięć i muszą być dostępne za pośrednictwem magistrali szeregowej.
| Funkcja zwrotna | IRQL w przypadku pamięci mapowanej (MemoryMappedController = 1) | IRQL, jeśli dostęp szeregowy (MemoryMappedController = 0) |
|---|---|---|
DIRQL lub HIGH_LEVEL (Zobacz uwagi). |
Niewspierane. |
Notatki
- W przypadku regularnych przejść stanów F: funkcje zapisywania i przywracania są wywoływane, gdy blokada przerwania banku jest utrzymywana przez GpioClx na poziomie DIRQL. W związku z tym żadna z funkcji wywołania zwrotnego nie powinna próbować uzyskać blokady przerwania bankowego.
- W przypadku krytycznych przejść stanu F: wywołania zwrotne zapisywania/przywracania są uruchamiane, gdy wtyczka aparatu zasilania (PEP) jest używana do zapisania i odtworzenia stanu GPIO. Funkcje wywołania zwrotnego zapisu/przywracania są wywoływane na poziomie "HIGH_LEVEL" w kontekście ostatniego procesora, który przechodzi w stan bezczynności, co następuje późno w sekwencji przejścia platformy w stan głębokiej bezczynności. W związku z tym żadna z funkcji wywołania zwrotnego nie powinna próbować uzyskać blokady przerwania bankowego.
Aby uzyskać więcej informacji na temat stanów F, zobacz Component-Level Zarządzanie energią. Aby uzyskać więcej informacji na temat PEP, zobacz PoFxPowerControl.
Inne funkcje wywołania zwrotnego
Aby umożliwić kontrolerowi GPIO obsługę operacji specyficznych dla kontrolera, sterownik kontrolera GPIO implementuje funkcję wywołania zwrotnego zdarzeń CLIENT_ControllerSpecificFunction . W poniższej tabeli środkowa kolumna wskazuje środowisko IRQL, w którym wywoływana jest funkcja, jeśli rejestry sprzętowe kontrolera GPIO są mapowane na pamięć. Kolumna po prawej stronie wskazuje środowisko IRQL, w którym wywoływana jest funkcja, jeśli rejestry nie są mapowane na pamięć i muszą być dostępne za pośrednictwem magistrali szeregowej.
| Funkcja zwrotna | IRQL, jeśli pamięć jest mapowana (MemoryMappedController = 1) | IRQL przy dostępie seryjnym (MemoryMappedController = 0) |
|---|---|---|
Poziom Pasywny (Patrz uwaga 1).) |
Poziom Pasywny (Patrz uwaga 2.) |
Notatki
GpioClx nie uzyskuje blokady przerwania bankowego przed wywołaniem tej funkcji wywołania zwrotnego. Funkcja wywołania zwrotnego może uzyskać blokadę przerwania bankowego, w razie potrzeby, w celu zsynchronizowania dostępu do rejestrów, które są współużytkowane z funkcjami wywołania zwrotnego uruchamianymi w DIRQL.
GpioClx serializuje wywołanie tej funkcji zwrotnej z innymi funkcjami związanymi z przerwaniami i powiązanymi z operacjami wejścia/wyjścia, które są wywoływane na poziomie PASSIVE_LEVEL. W związku z tym funkcja zwrotna nie powinna próbować przejąć blokady oczekiwania banku.