- Refactor stubbed HAL resource report slightly.
[reactos.git] / reactos / hal / halx86 / generic / usage.c
1 /*
2 * PROJECT: ReactOS HAL
3 * LICENSE: GPL - See COPYING in the top level directory
4 * FILE: hal/halx86/generic/usage.c
5 * PURPOSE: HAL Resource Report Routines
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 PUCHAR KdComPortInUse;
18 PADDRESS_USAGE HalpAddressUsageList;
19 IDTUsageFlags HalpIDTUsageFlags[MAXIMUM_IDTVECTOR];
20 IDTUsage HalpIDTUsage[MAXIMUM_IDTVECTOR];
21
22 ADDRESS_USAGE HalpDefaultIoSpace =
23 {
24 NULL, CmResourceTypePort, IDT_INTERNAL,
25 {
26 {0x2000, 0xC000}, /* PIC?? */
27 {0xC000, 0x1000}, /* DMA 2 */
28 {0x8000, 0x1000}, /* DMA 1 */
29 {0x2000, 0x200}, /* PIC 1 */
30 {0xA000, 0x200}, /* PIC 2 */
31 {0x4000, 0x400}, /* PIT 1 */
32 {0x4800, 0x400}, /* PIT 2 */
33 {0x9200, 0x100}, /* ????? */
34 {0x7000, 0x200}, /* CMOS */
35 {0xF000, 0x1000}, /* ????? */
36 {0xCF800, 0x800}, /* PCI 0 */
37 {0,0},
38 }
39 };
40
41 /* FUNCTIONS ******************************************************************/
42
43 VOID
44 NTAPI
45 HalpReportResourceUsage(IN PUNICODE_STRING HalName,
46 IN INTERFACE_TYPE InterfaceType)
47 {
48 DbgPrint("%wZ has been initialized\n", HalName);
49 }
50
51 VOID
52 NTAPI
53 HalpRegisterVector(IN UCHAR Flags,
54 IN ULONG BusVector,
55 IN ULONG SystemVector,
56 IN KIRQL Irql)
57 {
58 /* Save the vector flags */
59 HalpIDTUsageFlags[SystemVector].Flags = Flags;
60
61 /* Save the vector data */
62 HalpIDTUsage[SystemVector].Irql = Irql;
63 HalpIDTUsage[SystemVector].BusReleativeVector = BusVector;
64 }
65
66 VOID
67 NTAPI
68 HalpEnableInterruptHandler(IN UCHAR Flags,
69 IN ULONG BusVector,
70 IN ULONG SystemVector,
71 IN KIRQL Irql,
72 IN PVOID Handler,
73 IN KINTERRUPT_MODE Mode)
74 {
75 UCHAR Entry;
76
77 /* Convert the vector into the IDT entry */
78 Entry = HalVectorToIDTEntry(SystemVector);
79
80 /* Register the vector */
81 HalpRegisterVector(Flags, BusVector, SystemVector, Irql);
82
83 /* Connect the interrupt */
84 ((PKIPCR)KeGetPcr())->IDT[Entry].ExtendedOffset = (USHORT)(((ULONG_PTR)Handler >> 16) & 0xFFFF);
85 ((PKIPCR)KeGetPcr())->IDT[Entry].Offset = (USHORT)((ULONG_PTR)Handler);
86
87 /* Enable the interrupt */
88 HalEnableSystemInterrupt(SystemVector, Irql, Mode);
89 }
90
91 /*
92 * @unimplemented
93 */
94 VOID
95 NTAPI
96 HalReportResourceUsage(VOID)
97 {
98 INTERFACE_TYPE InterfaceType;
99 UNICODE_STRING HalString;
100
101 /* FIXME: Initialize DMA 64-bit support */
102
103 /* FIXME: Initialize MCA bus */
104
105 /* Initialize PCI bus. */
106 HalpInitializePciBus();
107
108 /* Initialize the stubs */
109 HalpInitializePciStubs();
110
111 /* What kind of bus is this? */
112 switch (HalpBusType)
113 {
114 /* ISA Machine */
115 case MACHINE_TYPE_ISA:
116 InterfaceType = Isa;
117 break;
118
119 /* EISA Machine */
120 case MACHINE_TYPE_EISA:
121 InterfaceType = Eisa;
122 break;
123
124 /* MCA Machine */
125 case MACHINE_TYPE_MCA:
126 InterfaceType = MicroChannel;
127 break;
128
129 /* Unknown */
130 default:
131 InterfaceType = Internal;
132 break;
133 }
134
135 /* Build HAL usage */
136 RtlInitUnicodeString(&HalString, L"PC Compatible Eisa/Isa HAL");
137 HalpReportResourceUsage(&HalString, InterfaceType);
138
139 /* FIXME: Setup PCI debugging and Hibernation */
140 }