ReactOS  0.4.15-dev-3303-g1ade494
busemul.c
Go to the documentation of this file.
1 /*
2  * PROJECT: ReactOS HAL
3  * LICENSE: BSD - See COPYING.ARM in the top level directory
4  * FILE: hal/halx86/acpi/busemul.c
5  * PURPOSE: ACPI HAL Bus Handler Emulation Code
6  * PROGRAMMERS: ReactOS Portable Systems Group
7  */
8 
9 /* INCLUDES *******************************************************************/
10 
11 #include <hal.h>
12 #define NDEBUG
13 #include <debug.h>
14 
15 /* GLOBALS ********************************************************************/
16 
17 /* PRIVATE FUNCTIONS **********************************************************/
18 
19 CODE_SEG("INIT")
20 VOID
21 NTAPI
23 {
24  /* Register PCI Device Functions */
27 
28  /* Register memory functions */
29 #ifndef _MINIHAL_
30 #if (NTDDI_VERSION >= NTDDI_VISTA)
33 #else
36 #endif
37 #endif
38 
39  /* Register ACPI stub */
41 }
42 
44 NTAPI
53 {
54  BUS_HANDLER BusHandler;
55  PAGED_CODE();
56 
57  /* Only PCI is supported */
58  if (BusType != PCIBus) return STATUS_NOT_IMPLEMENTED;
59 
60  /* Setup fake PCI Bus handler */
61  RtlCopyMemory(&BusHandler, &HalpFakePciBusHandler, sizeof(BUS_HANDLER));
62  BusHandler.BusNumber = BusNumber;
63 
64  /* Call the PCI function */
65  return HalpAssignPCISlotResources(&BusHandler,
66  &BusHandler,
71  SlotNumber,
73 }
74 
75 BOOLEAN
76 NTAPI
82 {
83  /* Translation is easy */
85  return TRUE;
86 }
87 
88 BOOLEAN
89 NTAPI
94  IN BOOLEAN NextBus)
95 {
96  /* Make sure we have a context */
97  if (!Context) return FALSE;
98 
99  /* If we have data in the context, then this shouldn't be a new lookup */
100  if ((*Context != 0) && (NextBus != FALSE)) return FALSE;
101 
102  /* Return bus data */
104 
105  /* Set context value and return success */
106  *Context = 1;
107  return TRUE;
108 }
109 
110 /* PUBLIC FUNCTIONS **********************************************************/
111 
112 /*
113  * @implemented
114  */
115 NTSTATUS
116 NTAPI
118 {
119  /* Deprecated, return success */
120  return STATUS_SUCCESS;
121 }
122 
123 /*
124  * @implemented
125  */
126 NTSTATUS
127 NTAPI
136 {
137  /* Check the bus type */
138  if (BusType != PCIBus)
139  {
140  /* Call our internal handler */
143  DriverObject,
144  DeviceObject,
145  BusType,
146  BusNumber,
147  SlotNumber,
149  }
150  else
151  {
152  /* Call the PCI registered function */
155  DriverObject,
156  DeviceObject,
157  PCIBus,
158  BusNumber,
159  SlotNumber,
161  }
162 }
163 
164 /*
165  * @implemented
166  */
167 ULONG
168 NTAPI
172  IN PVOID Buffer,
173  IN ULONG Length)
174 {
175  /* Call the extended function */
176  return HalGetBusDataByOffset(BusDataType,
177  BusNumber,
178  SlotNumber,
179  Buffer,
180  0,
181  Length);
182 }
183 
184 /*
185  * @implemented
186  */
187 ULONG
188 NTAPI
192  IN PVOID Buffer,
193  IN ULONG Offset,
194  IN ULONG Length)
195 {
196  BUS_HANDLER BusHandler;
197 
198  /* Look as the bus type */
199  if (BusDataType == Cmos)
200  {
201  /* Call CMOS Function */
203  }
204  else if (BusDataType == EisaConfiguration)
205  {
206  /* FIXME: TODO */
207  ASSERT(FALSE);
208  }
209  else if ((BusDataType == PCIConfiguration) &&
212  {
213  /* Setup fake PCI Bus handler */
214  RtlCopyMemory(&BusHandler, &HalpFakePciBusHandler, sizeof(BUS_HANDLER));
215  BusHandler.BusNumber = BusNumber;
216 
217  /* Call PCI function */
218  return HalpGetPCIData(&BusHandler,
219  &BusHandler,
220  SlotNumber,
221  Buffer,
222  Offset,
223  Length);
224  }
225 
226  /* Invalid bus */
227  return 0;
228 }
229 
230 /*
231  * @implemented
232  */
233 ULONG
234 NTAPI
239  OUT PKIRQL Irql,
241 {
242  /* Call the system bus translator */
245  Irql,
246  Affinity);
247 }
248 
249 /*
250  * @implemented
251  */
252 ULONG
253 NTAPI
257  IN PVOID Buffer,
258  IN ULONG Length)
259 {
260  /* Call the extended function */
261  return HalSetBusDataByOffset(BusDataType,
262  BusNumber,
263  SlotNumber,
264  Buffer,
265  0,
266  Length);
267 }
268 
269 /*
270  * @implemented
271  */
272 ULONG
273 NTAPI
277  IN PVOID Buffer,
278  IN ULONG Offset,
279  IN ULONG Length)
280 {
281  BUS_HANDLER BusHandler;
282 
283  /* Look as the bus type */
284  if (BusDataType == Cmos)
285  {
286  /* Call CMOS Function */
288  }
289  else if ((BusDataType == PCIConfiguration) && (HalpPCIConfigInitialized))
290  {
291  /* Setup fake PCI Bus handler */
292  RtlCopyMemory(&BusHandler, &HalpFakePciBusHandler, sizeof(BUS_HANDLER));
293  BusHandler.BusNumber = BusNumber;
294 
295  /* Call PCI function */
296  return HalpSetPCIData(&BusHandler,
297  &BusHandler,
298  SlotNumber,
299  Buffer,
300  Offset,
301  Length);
302  }
303 
304  /* Invalid bus */
305  return 0;
306 }
307 
308 /*
309  * @implemented
310  */
311 BOOLEAN
312 NTAPI
318 {
319  /* Look as the bus type */
320  if (InterfaceType == PCIBus)
321  {
322  /* Call the PCI registered function */
324  BusNumber,
325  BusAddress,
326  AddressSpace,
328  }
329  else
330  {
331  /* Translation is easy */
333  return TRUE;
334  }
335 }
336 
337 /* EOF */
PVOID NTAPI HalpMapPhysicalMemory64Vista(IN PHYSICAL_ADDRESS PhysicalAddress, IN PFN_COUNT PageCount, IN BOOLEAN FlushCurrentTLB)
Definition: memory.c:156
_In_ WDFIORESREQLIST _In_ ULONG SlotNumber
Definition: wdfresource.h:65
_In_ ULONG _In_ ULONG BusInterruptLevel
Definition: halfuncs.h:170
#define IN
Definition: typedefs.h:39
#define HalPciTranslateBusAddress
Definition: halfuncs.h:41
BOOLEAN NTAPI HalTranslateBusAddress(IN INTERFACE_TYPE InterfaceType, IN ULONG BusNumber, IN PHYSICAL_ADDRESS BusAddress, IN OUT PULONG AddressSpace, OUT PPHYSICAL_ADDRESS TranslatedAddress)
Definition: busemul.c:313
_In_ ULONG _In_ PHYSICAL_ADDRESS BusAddress
Definition: iofuncs.h:2272
_In_ ULONG _In_ ULONG _In_ ULONG Length
Definition: ntddpcm.h:101
enum _INTERFACE_TYPE INTERFACE_TYPE
NTSTATUS NTAPI HalpReleasePciDeviceForDebugging(IN OUT PDEBUG_DEVICE_DESCRIPTOR PciDevice)
Definition: pcibus.c:624
ULONG HalpMinPciBus
Definition: pcibus.c:23
#define KdUnmapVirtualAddress
Definition: halfuncs.h:53
_Inout_opt_ PDEVICE_OBJECT _Inout_opt_ PDEVICE_OBJECT _Inout_opt_ PDEVICE_OBJECT _Inout_opt_ PCM_RESOURCE_LIST * AllocatedResources
Definition: ndis.h:4640
_In_opt_ PUNICODE_STRING _In_ PDRIVER_OBJECT _In_ PDEVICE_OBJECT _In_ INTERFACE_TYPE BusType
Definition: halfuncs.h:156
#define TRUE
Definition: types.h:120
PVOID NTAPI HalpMapPhysicalMemory64(IN PHYSICAL_ADDRESS PhysicalAddress, IN PFN_COUNT PageCount)
Definition: memory.c:140
enum _BUS_DATA_TYPE BUS_DATA_TYPE
_In_ ULONG _In_ PHYSICAL_ADDRESS _Inout_ PULONG AddressSpace
Definition: iofuncs.h:2272
LONG NTSTATUS
Definition: precomp.h:26
_Must_inspect_result_ _In_ PDRIVER_OBJECT _In_ PCUNICODE_STRING RegistryPath
Definition: wdfdriver.h:213
ULONG NTAPI HalpGetCmosData(_In_ ULONG BusNumber, _In_ ULONG SlotNumber, _Out_writes_bytes_(Length) PVOID Buffer, _In_ ULONG Length)
Definition: cmos.c:49
_In_ ULONG _In_ ULONG _In_ ULONG BusInterruptVector
Definition: halfuncs.h:170
_In_ ULONG _In_ PHYSICAL_ADDRESS _Inout_ PULONG _Out_ PPHYSICAL_ADDRESS TranslatedAddress
Definition: iofuncs.h:2272
_Out_ PKIRQL Irql
Definition: csq.h:179
_In_opt_ PUNICODE_STRING DriverClassName
Definition: halfuncs.h:156
ULONG NTAPI HalSetBusDataByOffset(IN BUS_DATA_TYPE BusDataType, IN ULONG BusNumber, IN ULONG SlotNumber, IN PVOID Buffer, IN ULONG Offset, IN ULONG Length)
Definition: busemul.c:274
_In_ PDEVICE_OBJECT DeviceObject
Definition: wdfdevice.h:2055
return STATUS_NOT_IMPLEMENTED
VOID NTAPI HalpCheckPowerButton(VOID)
Definition: misc.c:146
NTSTATUS(* NTAPI)(IN PFILE_FULL_EA_INFORMATION EaBuffer, IN ULONG EaLength, OUT PULONG ErrorOffset)
Definition: IoEaTest.cpp:117
#define FALSE
Definition: types.h:117
VOID NTAPI HalpUnmapVirtualAddressVista(IN PVOID VirtualAddress, IN PFN_COUNT PageCount, IN BOOLEAN FlushCurrentTLB)
Definition: memory.c:227
BOOLEAN NTAPI HalpFindBusAddressTranslation(IN PHYSICAL_ADDRESS BusAddress, IN OUT PULONG AddressSpace, OUT PPHYSICAL_ADDRESS TranslatedAddress, IN OUT PULONG_PTR Context, IN BOOLEAN NextBus)
Definition: busemul.c:90
ULONG NTAPI HalGetBusDataByOffset(IN BUS_DATA_TYPE BusDataType, IN ULONG BusNumber, IN ULONG SlotNumber, IN PVOID Buffer, IN ULONG Offset, IN ULONG Length)
Definition: busemul.c:189
NTSTATUS NTAPI HalpAssignPCISlotResources(IN PBUS_HANDLER BusHandler, IN PBUS_HANDLER RootHandler, IN PUNICODE_STRING RegistryPath, IN PUNICODE_STRING DriverClassName OPTIONAL, IN PDRIVER_OBJECT DriverObject, IN PDEVICE_OBJECT DeviceObject OPTIONAL, IN ULONG Slot, IN OUT PCM_RESOURCE_LIST *pAllocatedResources)
Definition: pcibus.c:710
KAFFINITY * PKAFFINITY
Definition: basetsd.h:197
unsigned char BOOLEAN
ULONG NTAPI HalSetBusData(IN BUS_DATA_TYPE BusDataType, IN ULONG BusNumber, IN ULONG SlotNumber, IN PVOID Buffer, IN ULONG Length)
Definition: busemul.c:254
BUS_HANDLER HalpFakePciBusHandler
Definition: pcibus.c:96
Definition: bufpool.h:45
_In_opt_ PUNICODE_STRING _In_ PDRIVER_OBJECT _In_ PDEVICE_OBJECT _In_ INTERFACE_TYPE _In_ ULONG BusNumber
Definition: halfuncs.h:156
BOOLEAN NTAPI HalpTranslateBusAddress(IN INTERFACE_TYPE InterfaceType, IN ULONG BusNumber, IN PHYSICAL_ADDRESS BusAddress, IN OUT PULONG AddressSpace, OUT PPHYSICAL_ADDRESS TranslatedAddress)
Definition: busemul.c:77
_Must_inspect_result_ _In_ PDRIVER_OBJECT DriverObject
Definition: wdfdriver.h:213
NTSTATUS NTAPI HalpSetupPciDeviceForDebugging(IN PVOID LoaderBlock, IN OUT PDEBUG_DEVICE_DESCRIPTOR PciDevice)
Definition: pcibus.c:614
NTSTATUS NTAPI HalAdjustResourceList(IN OUT PIO_RESOURCE_REQUIREMENTS_LIST *pRequirementsList)
Definition: busemul.c:117
ULONG NTAPI HalGetInterruptVector(IN INTERFACE_TYPE InterfaceType, IN ULONG BusNumber, IN ULONG BusInterruptLevel, IN ULONG BusInterruptVector, OUT PKIRQL Irql, OUT PKAFFINITY Affinity)
Definition: busemul.c:235
ULONG BusNumber
Definition: haltypes.h:226
Definition: miniport.h:89
#define ASSERT(a)
Definition: mode.c:44
BOOLEAN HalpPCIConfigInitialized
Definition: pcibus.c:22
_In_ ULONG _In_ ULONG _In_ ULONG _Out_ PKIRQL _Out_ PKAFFINITY Affinity
Definition: halfuncs.h:170
VOID NTAPI HalpRegisterKdSupportFunctions(VOID)
Definition: busemul.c:22
ULONG NTAPI HalpGetPCIData(IN PBUS_HANDLER BusHandler, IN PBUS_HANDLER RootBusHandler, IN ULONG SlotNumber, IN PVOID Buffer, IN ULONG Offset, IN ULONG Length)
Definition: pcibus.c:369
#define KdMapPhysicalMemory64
Definition: halfuncs.h:52
KIRQL * PKIRQL
Definition: env_spec_w32.h:592
#define KdSetupPciDeviceForDebugging
Definition: halfuncs.h:47
NTSTATUS NTAPI HalpAssignSlotResources(IN PUNICODE_STRING RegistryPath, IN PUNICODE_STRING DriverClassName, IN PDRIVER_OBJECT DriverObject, IN PDEVICE_OBJECT DeviceObject, IN INTERFACE_TYPE BusType, IN ULONG BusNumber, IN ULONG SlotNumber, IN OUT PCM_RESOURCE_LIST *AllocatedResources)
Definition: busemul.c:45
_In_ ULONG _In_ ULONG Offset
Definition: ntddpcm.h:101
VOID NTAPI HalpUnmapVirtualAddress(IN PVOID VirtualAddress, IN PFN_COUNT PageCount)
Definition: memory.c:148
NTSTATUS NTAPI HalAssignSlotResources(IN PUNICODE_STRING RegistryPath, IN PUNICODE_STRING DriverClassName, IN PDRIVER_OBJECT DriverObject, IN PDEVICE_OBJECT DeviceObject, IN INTERFACE_TYPE BusType, IN ULONG BusNumber, IN ULONG SlotNumber, IN OUT PCM_RESOURCE_LIST *AllocatedResources)
Definition: busemul.c:128
unsigned int * PULONG
Definition: retypes.h:1
ULONG NTAPI HalpSetCmosData(IN ULONG BusNumber, IN ULONG SlotNumber, IN PVOID Buffer, IN ULONG Length)
Definition: cmos.c:104
ULONG NTAPI HalpSetPCIData(IN PBUS_HANDLER BusHandler, IN PBUS_HANDLER RootBusHandler, IN ULONG SlotNumber, IN PVOID Buffer, IN ULONG Offset, IN ULONG Length)
Definition: pcibus.c:453
ULONG NTAPI HalpGetRootInterruptVector(_In_ ULONG BusInterruptLevel, _In_ ULONG BusInterruptVector, _Out_ PKIRQL OutIrql, _Out_ PKAFFINITY OutAffinity)
Definition: apic.c:365
#define KdCheckPowerButton
Definition: halfuncs.h:50
#define OUT
Definition: typedefs.h:40
#define KdReleasePciDeviceforDebugging
Definition: halfuncs.h:48
unsigned int ULONG
Definition: retypes.h:1
#define HalPciAssignSlotResources
Definition: halfuncs.h:42
uint32_t * PULONG_PTR
Definition: typedefs.h:65
#define RtlCopyMemory(Destination, Source, Length)
Definition: typedefs.h:263
#define STATUS_SUCCESS
Definition: shellext.h:65
ULONG HalpMaxPciBus
Definition: pcibus.c:23
static CODE_SEG("PAGE")
Definition: isapnp.c:1482
_Must_inspect_result_ _In_ WDFDEVICE _In_ LPCGUID InterfaceType
Definition: wdffdo.h:461
LONGLONG QuadPart
Definition: typedefs.h:114
ULONG NTAPI HalGetBusData(IN BUS_DATA_TYPE BusDataType, IN ULONG BusNumber, IN ULONG SlotNumber, IN PVOID Buffer, IN ULONG Length)
Definition: busemul.c:169
#define PAGED_CODE()