[bus] Initial test for mini IRP handling
[people/sha0/winvblock.git] / src / bus.h
1 /**
2  * Copyright (C) 2009, Shao Miller <shao.miller@yrdsb.edu.on.ca>.
3  * Copyright 2006-2008, V.
4  * For WinAoE contact information, see http://winaoe.org/
5  *
6  * This file is part of WinVBlock, derived from WinAoE.
7  *
8  * WinVBlock is free software: you can redistribute it and/or modify
9  * it under the terms of the GNU General Public License as published by
10  * the Free Software Foundation, either version 3 of the License, or
11  * (at your option) any later version.
12  *
13  * WinVBlock is distributed in the hope that it will be useful,
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16  * GNU General Public License for more details.
17  *
18  * You should have received a copy of the GNU General Public License
19  * along with WinVBlock.  If not, see <http://www.gnu.org/licenses/>.
20  */
21 #ifndef _BUS_H
22 #  define _BUS_H
23
24 /**
25  * @file
26  *
27  * Bus specifics
28  *
29  */
30
31 winvblock__def_struct ( bus__type )
32 {
33   PDEVICE_OBJECT LowerDeviceObject;
34   PDEVICE_OBJECT PhysicalDeviceObject;
35   ULONG Children;
36   winvblock__uint8_ptr first_child_ptr;
37   KSPIN_LOCK SpinLock;
38 };
39
40 extern NTSTATUS Bus_Start (
41   void
42  );
43
44 extern VOID Bus_Stop (
45   void
46  );
47
48 extern NTSTATUS STDCALL Bus_AddDevice (
49   IN PDRIVER_OBJECT DriverObject,
50   IN PDEVICE_OBJECT PhysicalDeviceObject
51  );
52
53 extern irp__handler_decl (
54   Bus_DispatchPnP
55  );
56
57 extern irp__handler_decl (
58   Bus_DispatchDeviceControl
59  );
60
61 extern irp__handler_decl (
62   Bus_DispatchSystemControl
63  );
64
65 extern VOID STDCALL Bus_AddTarget (
66   IN winvblock__uint8_ptr ClientMac,
67   IN winvblock__uint8_ptr ServerMac,
68   winvblock__uint16 Major,
69   winvblock__uint8 Minor,
70   LONGLONG LBASize
71  );
72
73 extern VOID Bus_CleanupTargetList (
74   void
75  );
76
77 extern NTSTATUS STDCALL Bus_GetDeviceCapabilities (
78   IN PDEVICE_OBJECT DeviceObject,
79   IN PDEVICE_CAPABILITIES DeviceCapabilities
80  );
81
82 /* An unfortunate forward declaration.  Definition resolved in disk.h */
83 struct _disk__type;
84
85 extern winvblock__bool STDCALL Bus_AddChild (
86   IN PDEVICE_OBJECT BusDeviceObject,
87   IN struct _disk__type Disk,
88   IN winvblock__bool Boot
89  );
90
91 extern bus__type_ptr STDCALL get_bus_ptr (
92   driver__dev_ext_ptr dev_ext_ptr
93  );
94 extern disk__type_ptr STDCALL get_disk_ptr (
95   driver__dev_ext_ptr dev_ext_ptr
96  );
97
98 extern PDEVICE_OBJECT bus__fdo;
99
100 #endif                          /* _BUS_H */