Bagikan melalui


GPIO_CLIENT_PRE_PROCESS_CONTROLLER_INTERRUPT fungsi panggilan balik (gpioclx.h)

Fungsi panggilan balik peristiwa CLIENT_PreProcessControllerInterrupt melakukan pra-pemrosesan gangguan I/O (GPIO) tujuan umum yang harus segera dilakukan jika ISR dijadwalkan untuk berjalan di lain waktu.

Sintaks

GPIO_CLIENT_PRE_PROCESS_CONTROLLER_INTERRUPT GpioClientPreProcessControllerInterrupt;

NTSTATUS GpioClientPreProcessControllerInterrupt(
  [in] PVOID Context,
  [in] BANK_ID BankId,
       ULONG64 EnabledMask
)
{...}

Parameter

[in] Context

Penunjuk ke konteks perangkat driver pengontrol GPIO.

[in] BankId

Bank yang berisi pin GPIO yang mengganggu. Jika N adalah jumlah bank dalam pengontrol GPIO, BankId adalah bilangan bulat dalam rentang 0 hingga N–1. Ekstensi kerangka kerja GPIO sebelumnya memperoleh jumlah bank dalam pengontrol dari fungsi panggilan balik peristiwa CLIENT_QueryControllerBasicInformation . Untuk informasi selengkapnya, lihat Keterangan di CLIENT_CONTROLLER_BASIC_INFORMATION.

EnabledMask

Nilai kembali

Fungsi CLIENT_PreProcessControllerInterrupt mengembalikan STATUS_SUCCESS jika panggilan berhasil. Jika tidak, kode kesalahan akan menampilkan kode kesalahan yang sesuai.

Keterangan

Fungsi panggilan balik ini bersifat opsional. Driver pengontrol GPIO mengimplementasikan fungsi ini hanya jika melakukan sebagian besar penanganan gangguannya pada PASSIVE_LEVEL, tetapi harus melakukan beberapa pemrosesan awal gangguan di DIRQL.

Biasanya, driver pengontrol GPIO dapat mengakses pengontrol GPIO yang dipetakan memori di DIRQL, tetapi dapat mengakses pengontrol GPIO yang terhubung secara serial hanya pada PASSIVE_LEVEL. Namun, beberapa pengontrol GPIO yang terhubung secara serial mungkin kehilangan data status interupsi jika mereka menunda pengambilan bit status interupsi sampai IRQL turun ke PASSIVE_LEVEL. Ketika IRQL kemudian turun ke PASSIVE_LEVEL, ekstensi kerangka kerja GPIO (GpioClx) dapat memanggil fungsi panggilan balik CLIENT_QueryActiveInterrupts driver untuk mengambil konten pendaftaran.

Driver pengontrol GPIO menunjukkan apakah harus menangani gangguan pada PASSIVE_LEVEL dalam informasi perangkat yang diteruskannya ke GpioClx selama panggilan balik CLIENT_QueryControllerBasicInformation . Jika pengontrol GPIO dipetakan memori, sehingga driver dapat mengakses register pengontrol di DIRQL, driver mengatur bit bendera MemoryMappedController di anggota Flags dari struktur CLIENT_CONTROLLER_BASIC_INFORMATION yang diteruskan driver ke GpioClx. Jika tidak, driver mengatur MemoryMappedController = 0 untuk menunjukkan bahwa driver harus menangani gangguan pada PASSIVE_LEVEL. Untuk informasi selengkapnya, lihat ISR Tingkat Pasif.

Untuk mendaftarkan fungsi panggilan balik CLIENT_PreProcessControllerInterrupt driver Anda, panggil metode GPIO_CLX_RegisterClient . Metode ini menerima, sebagai parameter input, penunjuk ke struktur GPIO_CLIENT_REGISTRATION_PACKET yang berisi penunjuk fungsi CLIENT_PreProcessControllerInterrupt .

Contoh

Untuk menentukan fungsi panggilan balik CLIENT_PreProcessControllerInterrupt , Anda harus terlebih dahulu memberikan deklarasi fungsi yang mengidentifikasi jenis fungsi panggilan balik yang Anda tentukan. Windows menyediakan sekumpulan tipe fungsi panggilan balik untuk pengandar. Mendeklarasikan fungsi menggunakan jenis fungsi panggilan balik membantu Analisis Kode untuk Driver, Pemverifikasi Driver Statis (SDV), dan alat verifikasi lainnya menemukan kesalahan, dan itu adalah persyaratan untuk menulis driver untuk sistem operasi Windows.

Misalnya, untuk menentukan fungsi panggilan balik CLIENT_PreProcessControllerInterrupt yang diberi nama MyEvtGpioPreProcessInterrupt, gunakan jenis fungsi GPIO_CLIENT_PRE_PROCESS_CONTROLLER_INTERRUPT, seperti yang ditunjukkan dalam contoh kode ini:

GPIO_CLIENT_PRE_PROCESS_CONTROLLER_INTERRUPT MyEvtGpioPreProcessInterrupt;

Kemudian, terapkan fungsi panggilan balik Anda sebagai berikut:

_Use_decl_annotations_
NTSTATUS
  MyEvtGpioPreProcessInterrupt(
    PVOID Context
    )
{ ... }

Jenis fungsi GPIO_CLIENT_PRE_PROCESS_CONTROLLER_INTERRUPT ditentukan dalam file header Gpioclx.h. Untuk mengidentifikasi kesalahan secara lebih akurat saat Anda menjalankan alat analisis kode, pastikan untuk menambahkan anotasi Use_decl_annotations ke definisi fungsi Anda. Anotasi Use_decl_annotations memastikan bahwa anotasi yang diterapkan ke jenis fungsi GPIO_CLIENT_PRE_PROCESS_CONTROLLER_INTERRUPT dalam file header digunakan. Untuk informasi selengkapnya tentang persyaratan untuk deklarasi fungsi, lihat Mendeklarasikan Fungsi dengan Menggunakan Jenis Peran Fungsi untuk Driver KMDF. Untuk informasi selengkapnya tentang Use_decl_annotations, lihat Perilaku Fungsi Anotasi.

Persyaratan

Persyaratan Nilai
Klien minimum yang didukung Didukung dimulai dengan Windows 8.
Target Platform Desktop
Header gpioclx.h
IRQL Dipanggil di DIRQL.

Lihat juga

GPIO_CLIENT_REGISTRATION_PACKET

GPIO_CLX_RegisterClient