00001
00002
00003
00004
00005
00006
00007
00008
00009 #pragma once
00010 #include <oska/trace.h>
00011 #include <oska/all.h>
00012
00013 #include <wdf.h>
00014
00015 #include <sdioemb/windows/sdio_api.h>
00016 #include <sdioemb/windows/uif.h>
00017
00018 typedef struct uif_device_context {
00019 struct sdioemb_wdf_interface interface;
00020 bool added;
00021 bool active;
00022 WDFQUEUE queue;
00023 os_thread_t request_thread;
00024 os_event_t request_event;
00025 os_spinlock_t interrupt_lock;
00026 bool interrupt_pending;
00027 WDFREQUEST wait_for_int_request;
00028 } UIF_DEVICE_CONTEXT, *PUIF_DEVICE_CONTEXT;
00029 WDF_DECLARE_CONTEXT_TYPE_WITH_NAME(UIF_DEVICE_CONTEXT, uif_get_device_context);
00030
00031 typedef struct uif_request_context {
00032 WDFMEMORY data;
00033 } UIF_REQUEST_CONTEXT, *PUIF_REQUEST_CONTEXT;
00034 WDF_DECLARE_CONTEXT_TYPE_WITH_NAME(UIF_REQUEST_CONTEXT, uif_get_request_context);
00035
00036 int uif_register(void);
00037 void uif_unregister(void);
00038 void uif_init_file_config(PWDFDEVICE_INIT device_init);
00039 NTSTATUS uif_create_interface(WDFDEVICE device);