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)
9 /* INCLUDES *******************************************************************/
15 /* GLOBALS ********************************************************************/
17 BOOLEAN HalpNMIDumpFlag
;
18 PUCHAR KdComPortInUse
;
19 PADDRESS_USAGE HalpAddressUsageList
;
20 IDTUsageFlags HalpIDTUsageFlags
[MAXIMUM_IDTVECTOR
];
21 IDTUsage HalpIDTUsage
[MAXIMUM_IDTVECTOR
];
23 ADDRESS_USAGE HalpDefaultIoSpace
=
25 NULL
, CmResourceTypePort
, IDT_INTERNAL
,
27 {0x2000, 0xC000}, /* PIC?? */
28 {0xC000, 0x1000}, /* DMA 2 */
29 {0x8000, 0x1000}, /* DMA 1 */
30 {0x2000, 0x200}, /* PIC 1 */
31 {0xA000, 0x200}, /* PIC 2 */
32 {0x4000, 0x400}, /* PIT 1 */
33 {0x4800, 0x400}, /* PIT 2 */
34 {0x9200, 0x100}, /* ????? */
35 {0x7000, 0x200}, /* CMOS */
36 {0xF000, 0x1000}, /* ????? */
37 {0xCF800, 0x800}, /* PCI 0 */
42 /* FUNCTIONS ******************************************************************/
46 HalpReportResourceUsage(IN PUNICODE_STRING HalName
,
47 IN INTERFACE_TYPE InterfaceType
)
49 DbgPrint("%wZ has been initialized\n", HalName
);
54 HalpRegisterVector(IN UCHAR Flags
,
56 IN ULONG SystemVector
,
59 /* Save the vector flags */
60 HalpIDTUsageFlags
[SystemVector
].Flags
= Flags
;
62 /* Save the vector data */
63 HalpIDTUsage
[SystemVector
].Irql
= Irql
;
64 HalpIDTUsage
[SystemVector
].BusReleativeVector
= BusVector
;
70 HalpEnableInterruptHandler(IN UCHAR Flags
,
72 IN ULONG SystemVector
,
75 IN KINTERRUPT_MODE Mode
)
79 /* Convert the vector into the IDT entry */
80 Entry
= HalVectorToIDTEntry(SystemVector
);
82 /* Register the vector */
83 HalpRegisterVector(Flags
, BusVector
, SystemVector
, Irql
);
85 /* Connect the interrupt */
86 ((PKIPCR
)KeGetPcr())->IDT
[Entry
].ExtendedOffset
= (USHORT
)(((ULONG_PTR
)Handler
>> 16) & 0xFFFF);
87 ((PKIPCR
)KeGetPcr())->IDT
[Entry
].Offset
= (USHORT
)((ULONG_PTR
)Handler
);
89 /* Enable the interrupt */
90 HalEnableSystemInterrupt(SystemVector
, Irql
, Mode
);
95 HalpGetNMICrashFlag(VOID
)
97 UNICODE_STRING ValueName
;
98 UNICODE_STRING KeyName
= RTL_CONSTANT_STRING(L
"\\Registry\\Machine\\System\\CurrentControlSet\\Control\\CrashControl");
99 OBJECT_ATTRIBUTES ObjectAttributes
;
103 KEY_VALUE_PARTIAL_INFORMATION KeyValueInformation
;
108 /* Initialize attributes */
109 InitializeObjectAttributes(&ObjectAttributes
,
111 OBJ_CASE_INSENSITIVE
,
116 Status
= ZwOpenKey(&Handle
, KEY_READ
, &ObjectAttributes
);
117 if (NT_SUCCESS(Status
))
119 /* Query key value */
120 RtlInitUnicodeString(&ValueName
, L
"NMICrashDump");
121 Status
= ZwQueryValueKey(Handle
,
123 KeyValuePartialInformation
,
124 &KeyValueInformation
,
125 sizeof(KeyValueInformation
),
127 if (NT_SUCCESS(Status
))
129 /* Check for valid data */
130 if (ResultLength
== sizeof(KEY_VALUE_PARTIAL_INFORMATION
))
133 HalpNMIDumpFlag
= KeyValueInformation
.Data
[0];