Main Page | Data Structures | Directories | File List | Data Fields | Globals | Related Pages

arch_cbm_driver.h

Go to the documentation of this file.
00001 /*
00002  *  This program is free software; you can redistribute it and/or
00003  *  modify it under the terms of the GNU General Public License
00004  *  as published by the Free Software Foundation; either version
00005  *  2 of the License, or (at your option) any later version.
00006  *
00007  *  Copyright 2005 Spiro Trikaliotis
00008  *
00009  */
00010 
00020 /* Include any configuration definitions */
00021 #include "config.h"
00022 
00025 #define DVRH_USE_PARPORT_ECP_ADDR 1
00026 
00027 #include <parallel.h>
00028 
00030 #define DBG_PROGNAME "CBM4WIN.SYS"
00031 
00032 #include "cbmioctl.h"
00033 #include "memtags.h"
00034 #include "util.h"
00035 #include "queue.h"
00036 #include "cbmlog.h"
00037 
00039 #define CBMDEVICENAME L"\\DosDevices\\opencbm"
00040 
00042 typedef
00043 struct _ARCH_DEVICE_EXTENSION {
00044 
00045     /* Windows book keeping: */
00046 
00048     PDEVICE_OBJECT Fdo;
00049 
00051     BOOLEAN IsNT4;
00052 
00058     ULONG HandleEcpEppMyself;
00059 
00065     UNICODE_STRING DeviceName;
00066 
00068     QUEUE IrpQueue;
00069 
00071     PFILE_OBJECT ParallelPortFileObject;
00072 
00074     PDEVICE_OBJECT ParallelPortFdo;
00075 
00077     PPARALLEL_PORT_INFORMATION PortInfo;
00078 
00080     PARALLEL_INTERRUPT_SERVICE_ROUTINE Pisr;
00081 
00083     PARALLEL_INTERRUPT_INFORMATION Pii;
00084 
00087     KEVENT EventWaitForListener;
00088 
00090     BOOLEAN ParallelPortIsLocked;
00091 
00093     BOOLEAN ParallelPortLock;
00094 
00096     BOOLEAN ParallelPortAllocated;
00097     
00099     BOOLEAN ParallelPortModeSet;
00100 
00102     BOOLEAN ParallelPortAllocatedInterrupt;
00103 
00107     BOOLEAN DoNotReleaseBus;
00108 
00110     HANDLE ThreadHandle;
00111 
00113     PKTHREAD Thread;
00114 
00116     BOOLEAN QuitThread;
00117 
00119     KIRQL IecBlockIrqPreviousIrql;
00120 
00122 #if DBG
00123     LONG IecBlockIrqUsageCount;
00124 #endif
00125 
00126 } ARCH_DEVICE_EXTENSION;
00127 
00128 extern VOID
00129 DriverUnload(IN PDRIVER_OBJECT DriverObject);
00130 
00131 extern NTSTATUS
00132 DriverCommonInit(IN PDRIVER_OBJECT Driverobject, IN PUNICODE_STRING RegistryPath);
00133 
00134 extern VOID
00135 DriverCommonUninit(VOID);
00136 
00137 extern NTSTATUS
00138 AddDeviceCommonInit(IN PDEVICE_OBJECT Fdo, IN PUNICODE_STRING DeviceName, IN PCWSTR ParallelPortName);
00139 
00140 extern NTSTATUS
00141 cbm_install(IN PDEVICE_EXTENSION Pdx, OUT PCBMT_I_INSTALL_OUT ReturnBuffer, IN OUT PULONG ReturnLength);
00142 
00143 extern NTSTATUS
00144 cbm_lock(IN PDEVICE_EXTENSION Pdx);
00145 
00146 extern NTSTATUS
00147 cbm_unlock(IN PDEVICE_EXTENSION Pdx);
00148 
00149 extern NTSTATUS
00150 cbm_lock_parport(IN PDEVICE_EXTENSION Pdx);
00151 
00152 extern NTSTATUS
00153 cbm_unlock_parport(IN PDEVICE_EXTENSION Pdx);
00154 
00155 #if DBG
00156 extern NTSTATUS
00157 cbm_dbg_readbuffer(IN PDEVICE_EXTENSION Pdx, OUT PCHAR ReturnBuffer, IN OUT PULONG ReturnLength);
00158 #endif // #if DBG
00159 
00160 extern VOID
00161 cbm_init_registry(IN PUNICODE_STRING RegistryPath, IN PDEVICE_EXTENSION Pdx);
00162 
00163 extern NTSTATUS
00164 cbm_startio(IN PDEVICE_OBJECT Fdo, IN PIRP Irp);
00165 
00166 extern NTSTATUS
00167 cbm_createopenclose(IN PDEVICE_OBJECT Fdo, IN PIRP Irp);
00168 
00169 extern NTSTATUS 
00170 cbm_readwrite(IN PDEVICE_OBJECT Fdo, IN PIRP Irp);
00171 
00172 extern NTSTATUS 
00173 cbm_execute_readwrite(IN PDEVICE_EXTENSION Pdx, IN PIRP Irp);
00174 
00175 extern NTSTATUS
00176 cbm_execute_createopen(IN PDEVICE_EXTENSION Pdx, IN PIRP Irp);
00177 
00178 extern NTSTATUS
00179 cbm_cleanup(IN PDEVICE_OBJECT Fdo, IN PIRP Irp);
00180 
00181 extern NTSTATUS
00182 cbm_execute_close(IN PDEVICE_EXTENSION Pdx, IN PIRP Irp);
00183 
00184 extern NTSTATUS 
00185 cbm_devicecontrol(IN PDEVICE_OBJECT Fdo, IN PIRP Irp);
00186 
00187 extern NTSTATUS
00188 cbm_execute_devicecontrol(IN PDEVICE_EXTENSION Pdx, IN PIRP Irp);
00189 
00190 extern BOOLEAN
00191 cbm_isr(IN PKINTERRUPT Interrupt, IN PVOID Pdx);
00192 
00193 extern VOID
00194 cbm_thread(IN PVOID Context);
00195 
00196 extern NTSTATUS
00197 cbm_start_thread(IN PDEVICE_EXTENSION Pdx);
00198 
00199 extern VOID
00200 cbm_stop_thread(IN PDEVICE_EXTENSION Pdx);
00201 
00202 #ifndef PENUMERATE_DEFINED
00203 
00204    typedef PVOID PENUMERATE;
00205 #endif
00206 
00207 extern NTSTATUS 
00208 ParPortEnumerateOpen(PENUMERATE *EnumStruct);
00209 
00210 extern NTSTATUS 
00211 ParPortEnumerate(PENUMERATE EnumStruct, PCWSTR *DriverName);
00212 
00213 extern VOID
00214 ParPortEnumerateClose(PENUMERATE EnumStruct);
00215 
00216 extern NTSTATUS
00217 ParPortInit(PUNICODE_STRING ParallelPortName, PDEVICE_EXTENSION Pdx);
00218 
00219 extern NTSTATUS
00220 ParPortDeinit(PDEVICE_EXTENSION Pdx);
00221 
00222 extern NTSTATUS
00223 ParPortAllocate(PDEVICE_EXTENSION Pdx);
00224 
00225 extern NTSTATUS
00226 ParPortFree(PDEVICE_EXTENSION Pdx);
00227 
00228 extern NTSTATUS
00229 ParPortSetMode(PDEVICE_EXTENSION Pdx);
00230 
00231 extern NTSTATUS
00232 ParPortUnsetMode(PDEVICE_EXTENSION Pdx);
00233 
00234 extern NTSTATUS
00235 ParPortSetModeWdm(PDEVICE_EXTENSION Pdx);
00236 
00237 extern NTSTATUS
00238 ParPortUnsetModeWdm(PDEVICE_EXTENSION Pdx);
00239 
00240 extern NTSTATUS
00241 ParPortAllocInterrupt(PDEVICE_EXTENSION Pdx, PKSERVICE_ROUTINE Isr);
00242 
00243 extern NTSTATUS
00244 ParPortFreeInterrupt(PDEVICE_EXTENSION Pdx);
00245 
00246 extern NTSTATUS
00247 ParPortAllowInterruptIoctl(PDEVICE_EXTENSION Pdx);
00248 
00249 extern NTSTATUS
00250 cbm_registry_open_for_read(OUT PHANDLE HandleKey, IN PUNICODE_STRING Path);
00251 
00252 extern NTSTATUS
00253 cbm_registry_open_hardwarekey(OUT PHANDLE HandleKey, OUT PDEVICE_OBJECT *Pdo,
00254                               IN PDEVICE_EXTENSION Pdx);
00255 
00256 extern NTSTATUS
00257 cbm_registry_close(IN HANDLE HandleKey);
00258 
00259 extern NTSTATUS
00260 cbm_registry_close_hardwarekey(IN HANDLE HandleKey, IN PDEVICE_OBJECT Pdo);
00261 
00262 extern NTSTATUS
00263 cbm_registry_read_ulong(IN HANDLE HandleKey, IN PCWSTR KeyName, OUT PULONG Value);
00264 
00265 extern NTSTATUS
00266 cbm_registry_write_ulong(IN HANDLE HandleKey, IN PCWSTR KeyName, IN ULONG Value);
00267 
00268 extern NTSTATUS
00269 CbmOpenDeviceRegistryKey(IN PDEVICE_OBJECT a, IN ULONG b, IN ACCESS_MASK c, OUT PHANDLE d);
00270 
00271 extern ULONG
00272 CbmGetCurrentProcessorNumber(VOID);
00273 
00274 extern ULONG
00275 CbmGetNumberProcessors(VOID);
00276 
00277 extern VOID
00278 CLI(VOID);
00279 
00280 extern VOID
00281 STI(VOID);

Generated on Sun Apr 30 18:45:42 2006 for opencbm by  doxygen 1.4.2