[DDK]: Merge 46183 from header-branch.
[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 #ifndef _MINIHAL_
67 VOID
68 NTAPI
69 HalpEnableInterruptHandler(IN UCHAR Flags,
70 IN ULONG BusVector,
71 IN ULONG SystemVector,
72 IN KIRQL Irql,
73 IN PVOID Handler,
74 IN KINTERRUPT_MODE Mode)
75 {
76 UCHAR Entry;
77
78 /* Convert the vector into the IDT entry */
79 Entry = HalVectorToIDTEntry(SystemVector);
80
81 /* Register the vector */
82 HalpRegisterVector(Flags, BusVector, SystemVector, Irql);
83
84 /* Connect the interrupt */
85 ((PKIPCR)KeGetPcr())->IDT[Entry].ExtendedOffset = (USHORT)(((ULONG_PTR)Handler >> 16) & 0xFFFF);
86 ((PKIPCR)KeGetPcr())->IDT[Entry].Offset = (USHORT)((ULONG_PTR)Handler);
87
88 /* Enable the interrupt */
89 HalEnableSystemInterrupt(SystemVector, Irql, Mode);
90 }
91 #endif
92
93 /*
94 * @unimplemented
95 */
96 VOID
97 NTAPI
98 HalReportResourceUsage(VOID)
99 {
100 INTERFACE_TYPE InterfaceType;
101 UNICODE_STRING HalString;
102
103 /* FIXME: Initialize DMA 64-bit support */
104
105 /* FIXME: Initialize MCA bus */
106
107 /* Initialize PCI bus. */
108 HalpInitializePciBus();
109
110 /* Initialize the stubs */
111 HalpInitializePciStubs();
112
113 /* What kind of bus is this? */
114 switch (HalpBusType)
115 {
116 /* ISA Machine */
117 case MACHINE_TYPE_ISA:
118 InterfaceType = Isa;
119 break;
120
121 /* EISA Machine */
122 case MACHINE_TYPE_EISA:
123 InterfaceType = Eisa;
124 break;
125
126 /* MCA Machine */
127 case MACHINE_TYPE_MCA:
128 InterfaceType = MicroChannel;
129 break;
130
131 /* Unknown */
132 default:
133 InterfaceType = Internal;
134 break;
135 }
136
137 /* Build HAL usage */
138 RtlInitUnicodeString(&HalString, L"PC Compatible Eisa/Isa HAL");
139 HalpReportResourceUsage(&HalString, InterfaceType);
140
141 /* FIXME: Setup PCI debugging and Hibernation */
142 }