ReactOS 0.4.16-dev-306-g647d351
sysbus.c
Go to the documentation of this file.
1/*
2 * PROJECT: ReactOS HAL
3 * LICENSE: GPL - See COPYING in the top level directory
4 * FILE: hal/halx86/legacy/bus/sysbus.c
5 * PURPOSE:
6 * PROGRAMMERS: Stefan Ginsberg (stefan.ginsberg@reactos.org)
7 */
8
9/* INCLUDES *******************************************************************/
10
11#include <hal.h>
12#define NDEBUG
13#include <debug.h>
14
15/* GLOBALS ********************************************************************/
16
17/* PRIVATE FUNCTIONS **********************************************************/
18
22 IN PBUS_HANDLER RootHandler,
26{
28
29 /* Check what kind of address space this is */
30 switch (*AddressSpace)
31 {
32 /* Memory address */
33 case 0:
34
35 /* Loop all prefetch memory */
36 for (Range = &BusHandler->BusAddresses->PrefetchMemory;
37 Range;
38 Range = Range->Next)
39 {
40 /* Check if it's in a valid range */
41 if ((BusAddress.QuadPart >= Range->Base) &&
42 (BusAddress.QuadPart <= Range->Limit))
43 {
44 /* Get out */
45 break;
46 }
47 }
48
49 /* Check if we haven't found anything yet */
50 if (!Range)
51 {
52 /* Loop all bus memory */
53 for (Range = &BusHandler->BusAddresses->Memory;
54 Range;
55 Range = Range->Next)
56 {
57 /* Check if it's in a valid range */
58 if ((BusAddress.QuadPart >= Range->Base) &&
59 (BusAddress.QuadPart <= Range->Limit))
60 {
61 /* Get out */
62 break;
63 }
64 }
65 }
66
67 /* Done */
68 break;
69
70 /* I/O Space */
71 case 1:
72
73 /* Loop all bus I/O memory */
74 for (Range = &BusHandler->BusAddresses->IO;
75 Range;
76 Range = Range->Next)
77 {
78 /* Check if it's in a valid range */
79 if ((BusAddress.QuadPart >= Range->Base) &&
80 (BusAddress.QuadPart <= Range->Limit))
81 {
82 /* Get out */
83 break;
84 }
85 }
86
87 /* Done */
88 break;
89 }
90
91 /* Check if we found a range */
92 if (Range)
93 {
94 /* Do the translation and return the kind of address space this is */
97 (*AddressSpace != Range->SystemAddressSpace))
98 {
99 /* Different than what the old HAL would do */
100 DPRINT1("Translation of %I64x is %I64x %s\n",
102 Range->SystemAddressSpace ? "In I/O Space" : "In RAM");
103 }
104 *AddressSpace = Range->SystemAddressSpace;
105 return TRUE;
106 }
107
108 /* Nothing found */
109 DPRINT1("Translation of %I64x failed!\n", BusAddress.QuadPart);
110 return FALSE;
111}
112
113ULONG
114NTAPI
116 IN PBUS_HANDLER RootHandler,
121{
123
124 /* Get the root vector */
127 Irql,
128 Affinity);
129
130 /* Check if the vector is owned by the HAL and fail if it is */
131 if (HalpIDTUsageFlags[Vector].Flags & IDT_REGISTERED) DPRINT1("Vector %lx is ALREADY IN USE!\n", Vector);
133}
134
135/* EOF */
unsigned char BOOLEAN
ULONG NTAPI HalpGetRootInterruptVector(_In_ ULONG BusInterruptLevel, _In_ ULONG BusInterruptVector, _Out_ PKIRQL OutIrql, _Out_ PKAFFINITY OutAffinity)
Definition: apic.c:400
#define DPRINT1
Definition: precomp.h:8
KAFFINITY * PKAFFINITY
Definition: basetsd.h:195
_Out_ PKIRQL Irql
Definition: csq.h:179
#define NULL
Definition: types.h:112
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117
KIRQL * PKIRQL
Definition: env_spec_w32.h:592
IDTUsageFlags HalpIDTUsageFlags[256]
Definition: usage.c:19
#define IDT_REGISTERED
Definition: halp.h:19
Definition: range.c:39
BOOLEAN NTAPI HalpTranslateSystemBusAddress(IN PBUS_HANDLER BusHandler, IN PBUS_HANDLER RootHandler, IN PHYSICAL_ADDRESS BusAddress, IN OUT PULONG AddressSpace, OUT PPHYSICAL_ADDRESS TranslatedAddress)
Definition: sysbus.c:21
ULONG NTAPI HalpGetSystemInterruptVector(IN PBUS_HANDLER BusHandler, IN PBUS_HANDLER RootHandler, IN ULONG BusInterruptLevel, IN ULONG BusInterruptVector, OUT PKIRQL Irql, OUT PKAFFINITY Affinity)
Definition: sysbus.c:115
uint32_t * PULONG
Definition: typedefs.h:59
#define NTAPI
Definition: typedefs.h:36
#define IN
Definition: typedefs.h:39
uint32_t ULONG
Definition: typedefs.h:59
#define OUT
Definition: typedefs.h:40
LONGLONG QuadPart
Definition: typedefs.h:114
_Must_inspect_result_ _In_ ULONG Flags
Definition: wsk.h:170
_In_ ULONG _In_ ULONG BusInterruptLevel
Definition: halfuncs.h:171
_In_ ULONG _In_ ULONG _In_ ULONG BusInterruptVector
Definition: halfuncs.h:172
_In_ ULONG _In_ ULONG _In_ ULONG _Out_ PKIRQL _Out_ PKAFFINITY Affinity
Definition: halfuncs.h:174
_In_ ULONG _In_ PHYSICAL_ADDRESS BusAddress
Definition: iofuncs.h:2273
_In_ ULONG _In_ PHYSICAL_ADDRESS _Inout_ PULONG _Out_ PPHYSICAL_ADDRESS TranslatedAddress
Definition: iofuncs.h:2275
_In_ ULONG _In_ PHYSICAL_ADDRESS _Inout_ PULONG AddressSpace
Definition: iofuncs.h:2274