ReactOS 0.4.17-dev-470-gf9e3448
osl.c
Go to the documentation of this file.
1/*******************************************************************************
2* *
3* ACPI Component Architecture Operating System Layer (OSL) for ReactOS *
4* *
5*******************************************************************************/
6
7#include "precomp.h"
8
9#include <arc/arc.h>
11#include <pseh/pseh2.h>
12
13#define NDEBUG
14#include <debug.h>
15
16#define TAG_ACPI_LOADER_RSDP_TABLE 'RpcA'
17
23/* TODO: Replace these local declarations with <ndk/kefuncs.h> once the
24 * acpi.sys build context can consume the required NDK dependencies cleanly.
25 */
27extern NTSYSAPI
34 _In_opt_ PULONG ComponentKey,
36
38
39static
44{
46 UCHAR Sum;
47
48 Sum = 0;
49 for (Index = 0; Index < Length; ++Index)
50 Sum = (UCHAR)(Sum + Buffer[Index]);
51
52 return (UCHAR)(0 - Sum);
53}
54
55static
58{
59 PCONFIGURATION_COMPONENT_DATA ComponentEntry = NULL;
62
64 return NULL;
65
69 NULL,
70 &Next);
71 while (ComponentEntry)
72 {
73 if ((ComponentEntry->ComponentEntry.Identifier != NULL) &&
74 !_stricmp(ComponentEntry->ComponentEntry.Identifier, "ACPI BIOS"))
75 {
76 break;
77 }
78
79 Next = ComponentEntry;
83 NULL,
84 &Next);
85 }
86
87 if (!ComponentEntry)
88 return NULL;
89
90 ResourceList = ComponentEntry->ConfigurationData;
91 if (!ResourceList ||
93 FIELD_OFFSET(CM_PARTIAL_RESOURCE_LIST, PartialDescriptors[1]) +
95 (ResourceList->Count < 1) ||
96 (ResourceList->PartialDescriptors[0].Type != CmResourceTypeDeviceSpecific))
97 {
98 DPRINT1("Loader ACPI BIOS node is missing valid device-specific data\n");
99 return NULL;
100 }
101
103}
104
105static
106ACPI_PHYSICAL_ADDRESS
108{
109 PACPI_BIOS_MULTI_NODE NodeData;
110 ACPI_TABLE_HEADER *RootTable;
112
113 if (AcpiLoaderRsdp != NULL)
114 {
116 return (ACPI_PHYSICAL_ADDRESS)PhysicalAddress.QuadPart;
117 }
118
119 NodeData = AcpiGetLoaderAcpiBiosNode();
120 if (!NodeData || (NodeData->RsdtAddress.QuadPart == 0))
121 goto Failure;
122
123 RootTable = MmMapIoSpace(NodeData->RsdtAddress, sizeof(*RootTable), MmNonCached);
124 if (!RootTable)
125 {
126 DPRINT1("Unable to map loader ACPI root table at 0x%I64x\n",
127 NodeData->RsdtAddress.QuadPart);
128 goto Failure;
129 }
130
132 sizeof(*AcpiLoaderRsdp),
134 if (!AcpiLoaderRsdp)
135 {
136 DPRINT1("Unable to allocate synthetic RSDP for loader ACPI tables\n");
137 goto Failure;
138 }
139
142 sizeof(AcpiLoaderRsdp->Signature));
144
146 {
148 AcpiLoaderRsdp->Length = sizeof(*AcpiLoaderRsdp);
150 }
152 {
153 if (NodeData->RsdtAddress.QuadPart > MAXULONG)
154 {
155 DPRINT1("Loader RSDT address does not fit in 32 bits: 0x%I64x\n",
156 NodeData->RsdtAddress.QuadPart);
157 goto Failure;
158 }
159
162 }
163 else
164 {
165 DPRINT1("Loader ACPI root table has unexpected signature '%.4s'\n",
166 RootTable->Signature);
167 goto Failure;
168 }
169
172 if (AcpiLoaderRsdp->Revision >= 2)
173 {
176 sizeof(*AcpiLoaderRsdp));
177 }
178
179 MmUnmapIoSpace(RootTable, sizeof(*RootTable));
181 return (ACPI_PHYSICAL_ADDRESS)PhysicalAddress.QuadPart;
182
183Failure:
184 if (AcpiLoaderRsdp)
185 {
188 }
189 if (RootTable)
190 MmUnmapIoSpace(RootTable, sizeof(*RootTable));
191 return 0;
192}
193
196{
197 DPRINT("AcpiOsInitialize called\n");
198
199#ifndef NDEBUG
200 /* Verboseness level of the acpica core */
201 AcpiDbgLevel = 0x00FFFFFF;
202 AcpiDbgLayer = 0xFFFFFFFF;
203#endif
204
206
207 return AE_OK;
208}
209
212{
213 DPRINT("AcpiOsTerminate() called\n");
214
215 /* Release the synthetic RSDP built from the loader-provided ACPI tables.
216 * ACPICA has already torn down its table mappings (AcpiUtSubsystemShutdown)
217 * by the time it calls us, so nothing references this buffer anymore. */
218 if (AcpiLoaderRsdp != NULL)
219 {
222 }
223
224 return AE_OK;
225}
226
227ACPI_PHYSICAL_ADDRESS
229 void)
230{
231 ACPI_PHYSICAL_ADDRESS pa = 0;
233
234 DPRINT("AcpiOsGetRootPointer\n");
235
236 if (AcpiLoaderRsdp != NULL)
237 {
239 return (ACPI_PHYSICAL_ADDRESS)PhysicalAddress.QuadPart;
240 }
241
243 return pa;
244}
245
248 const ACPI_PREDEFINED_NAMES *PredefinedObject,
249 ACPI_STRING *NewValue)
250{
251 if (!PredefinedObject || !NewValue)
252 {
253 DPRINT1("Invalid parameter\n");
254 return AE_BAD_PARAMETER;
255 }
256
257 /* No override */
258 *NewValue = NULL;
259
260 return AE_OK;
261}
262
265 ACPI_TABLE_HEADER *ExistingTable,
266 ACPI_TABLE_HEADER **NewTable)
267{
268 if (!ExistingTable || !NewTable)
269 {
270 DPRINT1("Invalid parameter\n");
271 return AE_BAD_PARAMETER;
272 }
273
274 /* No override */
275 *NewTable = NULL;
276
277 return AE_OK;
278}
279
282 ACPI_TABLE_HEADER *ExistingTable,
283 ACPI_PHYSICAL_ADDRESS *NewAddress,
284 UINT32 *NewTableLength)
285{
286 if (!ExistingTable || !NewAddress || !NewTableLength)
287 {
288 DPRINT1("Invalid parameter\n");
289 return AE_BAD_PARAMETER;
290 }
291
292 /* No override */
293 *NewAddress = 0;
294 *NewTableLength = 0;
295
296 return AE_OK;
297}
298
299void *
301 ACPI_PHYSICAL_ADDRESS phys,
302 ACPI_SIZE length)
303{
305 PVOID Ptr;
306
307 DPRINT("AcpiOsMapMemory(phys 0x%p size 0x%X)\n", phys, length);
308
309 Address.QuadPart = (ULONGLONG)phys;
311 if (!Ptr)
312 {
313 DPRINT1("Mapping failed\n");
314 }
315
316 return Ptr;
317}
318
319void
321 void *virt,
322 ACPI_SIZE length)
323{
324 DPRINT("AcpiOsMapMemory(phys 0x%p size 0x%X)\n", virt, length);
325
326 ASSERT(virt);
327
328 MmUnmapIoSpace(virt, length);
329}
330
333 void *LogicalAddress,
334 ACPI_PHYSICAL_ADDRESS *PhysicalAddress)
335{
336 PHYSICAL_ADDRESS PhysAddr;
337
338 if (!LogicalAddress || !PhysicalAddress)
339 {
340 DPRINT1("Bad parameter\n");
341 return AE_BAD_PARAMETER;
342 }
343
344 PhysAddr = MmGetPhysicalAddress(LogicalAddress);
345
346 *PhysicalAddress = (ACPI_PHYSICAL_ADDRESS)PhysAddr.QuadPart;
347
348 return AE_OK;
349}
350
351void *
353{
354 DPRINT("AcpiOsAllocate size %d\n",size);
355 return ExAllocatePoolWithTag(NonPagedPool, size, 'ipcA');
356}
357
358void
360{
361 if (!ptr)
362 DPRINT1("Attempt to free null pointer!!!\n");
363 ExFreePoolWithTag(ptr, 'ipcA');
364}
365
368 void *Memory,
369 ACPI_SIZE Length)
370{
371 BOOLEAN Ret = FALSE;
372
374 {
375 ProbeForRead(Memory, Length, sizeof(UCHAR));
376 Ret = TRUE;
377 }
379 {
380 Ret = FALSE;
381 }
382 _SEH2_END;
383
384 return Ret;
385}
386
389 void *Memory,
390 ACPI_SIZE Length)
391{
392 BOOLEAN Ret = FALSE;
393
395 {
396 ProbeForWrite(Memory, Length, sizeof(UCHAR));
397 Ret = TRUE;
398 }
400 {
401 Ret = FALSE;
402 }
403 _SEH2_END;
404
405 return Ret;
406}
407
410{
411 /* Thread ID must be non-zero */
412 return (ULONG_PTR)PsGetCurrentThreadId() + 1;
413}
414
419 void *Context)
420{
421 HANDLE ThreadHandle;
424
425 DPRINT("AcpiOsExecute\n");
426
428 NULL,
430 NULL,
431 NULL);
432
433 Status = PsCreateSystemThread(&ThreadHandle,
436 NULL,
437 NULL,
439 Context);
440 if (!NT_SUCCESS(Status))
441 return AE_ERROR;
442
443 ZwClose(ThreadHandle);
444
445 return AE_OK;
446}
447
448void
449AcpiOsSleep (UINT64 milliseconds)
450{
451 DPRINT("AcpiOsSleep %d\n", milliseconds);
452 KeStallExecutionProcessor(milliseconds*1000);
453}
454
455void
456AcpiOsStall (UINT32 microseconds)
457{
458 DPRINT("AcpiOsStall %d\n",microseconds);
459 KeStallExecutionProcessor(microseconds);
460}
461
464 ACPI_MUTEX *OutHandle)
465{
467
468 if (!OutHandle)
469 {
470 DPRINT1("Bad parameter\n");
471 return AE_BAD_PARAMETER;
472 }
473
475 if (!Mutex) return AE_NO_MEMORY;
476
478
479 *OutHandle = (ACPI_MUTEX)Mutex;
480
481 return AE_OK;
482}
483
484void
487{
488 if (!Handle)
489 {
490 DPRINT1("Bad parameter\n");
491 return;
492 }
493
494 ExFreePoolWithTag(Handle, 'LpcA');
495}
496
501{
502 if (!Handle)
503 {
504 DPRINT1("Bad parameter\n");
505 return AE_BAD_PARAMETER;
506 }
507
508 /* Check what the caller wants us to do */
510 {
511 /* Try to acquire without waiting */
513 return AE_TIME;
514 }
515 else
516 {
517 /* Block until we get it */
519 }
520
521 return AE_OK;
522}
523
524void
527{
528 if (!Handle)
529 {
530 DPRINT1("Bad parameter\n");
531 return;
532 }
533
535}
536
537typedef struct _ACPI_SEM {
542
545 UINT32 MaxUnits,
546 UINT32 InitialUnits,
547 ACPI_SEMAPHORE *OutHandle)
548{
549 PACPI_SEM Sem;
550
551 if (!OutHandle)
552 {
553 DPRINT1("Bad parameter\n");
554 return AE_BAD_PARAMETER;
555 }
556
557 Sem = ExAllocatePoolWithTag(NonPagedPool, sizeof(ACPI_SEM), 'LpcA');
558 if (!Sem) return AE_NO_MEMORY;
559
560 Sem->CurrentUnits = InitialUnits;
563
564 *OutHandle = (ACPI_SEMAPHORE)Sem;
565
566 return AE_OK;
567}
568
572{
573 if (!Handle)
574 {
575 DPRINT1("Bad parameter\n");
576 return AE_BAD_PARAMETER;
577 }
578
579 ExFreePoolWithTag(Handle, 'LpcA');
580
581 return AE_OK;
582}
583
587 UINT32 Units,
589{
590 PACPI_SEM Sem = Handle;
592
593 if (!Handle)
594 {
595 DPRINT1("Bad parameter\n");
596 return AE_BAD_PARAMETER;
597 }
598
600
601 /* Make sure we can wait if we have fewer units than we need */
602 if ((Timeout == ACPI_DO_NOT_WAIT) && (Sem->CurrentUnits < Units))
603 {
604 /* We can't so we must bail now */
606 return AE_TIME;
607 }
608
609 /* Time to block until we get enough units */
610 while (Sem->CurrentUnits < Units)
611 {
614 Executive,
616 FALSE,
617 NULL);
619 }
620
621 Sem->CurrentUnits -= Units;
622
623 if (Sem->CurrentUnits != 0) KeSetEvent(&Sem->Event, IO_NO_INCREMENT, FALSE);
624
626
627 return AE_OK;
628}
629
633 UINT32 Units)
634{
635 PACPI_SEM Sem = Handle;
637
638 if (!Handle)
639 {
640 DPRINT1("Bad parameter\n");
641 return AE_BAD_PARAMETER;
642 }
643
645
646 Sem->CurrentUnits += Units;
648
650
651 return AE_OK;
652}
653
656 ACPI_SPINLOCK *OutHandle)
657{
659
660 if (!OutHandle)
661 {
662 DPRINT1("Bad parameter\n");
663 return AE_BAD_PARAMETER;
664 }
665
667 if (!SpinLock) return AE_NO_MEMORY;
668
670
671 *OutHandle = (ACPI_SPINLOCK)SpinLock;
672
673 return AE_OK;
674}
675
676void
679{
680 if (!Handle)
681 {
682 DPRINT1("Bad parameter\n");
683 return;
684 }
685
686 ExFreePoolWithTag(Handle, 'LpcA');
687}
688
692{
694
696 {
698 }
699 else
700 {
702 }
703
704 return (ACPI_CPU_FLAGS)OldIrql;
705}
706
707void
711{
713
714 if (OldIrql >= DISPATCH_LEVEL)
715 {
717 }
718 else
719 {
721 }
722}
723
728{
730
731 Status = (*AcpiIrqHandler)(AcpiIrqContext);
732
734 return TRUE;
735 else
736 return FALSE;
737}
738
739UINT32
741 UINT32 InterruptNumber,
743 void *Context)
744{
746 KIRQL DIrql;
749
751 {
752 DPRINT1("Reregister interrupt attempt failed\n");
753 return AE_ALREADY_EXISTS;
754 }
755
756 if (!ServiceRoutine)
757 {
758 DPRINT1("Bad parameter\n");
759 return AE_BAD_PARAMETER;
760 }
761
762 DPRINT("AcpiOsInstallInterruptHandler()\n");
764 Internal,
765 0,
766 InterruptNumber,
767 InterruptNumber,
768 &DIrql,
769 &Affinity);
770
771 AcpiIrqNumber = InterruptNumber;
775
779 NULL,
780 NULL,
781 Vector,
782 DIrql,
783 DIrql,
785 TRUE,
786 Affinity,
787 FALSE);
788
789 if (!NT_SUCCESS(Status))
790 {
791 DPRINT("Could not connect to interrupt %d\n", Vector);
792 return AE_ERROR;
793 }
794 return AE_OK;
795}
796
799 UINT32 InterruptNumber,
801{
802 DPRINT("AcpiOsRemoveInterruptHandler()\n");
803
804 if (!ServiceRoutine)
805 {
806 DPRINT1("Bad parameter\n");
807 return AE_BAD_PARAMETER;
808 }
809
811 {
815 }
816 else
817 {
818 DPRINT1("Trying to remove non-existing interrupt handler\n");
819 return AE_NOT_EXIST;
820 }
821
822 return AE_OK;
823}
824
827 ACPI_PHYSICAL_ADDRESS Address,
828 UINT64 *Value,
830{
831 DPRINT("AcpiOsReadMemory %p\n", Address);
832 switch (Width)
833 {
834 case 8:
836 break;
837
838 case 16:
840 break;
841
842 case 32:
844 break;
845
846 case 64:
848 break;
849
850 default:
851 DPRINT1("AcpiOsReadMemory got bad width: %d\n",Width);
852 return (AE_BAD_PARAMETER);
853 break;
854 }
855 return (AE_OK);
856}
857
860 ACPI_PHYSICAL_ADDRESS Address,
863{
864 DPRINT("AcpiOsWriteMemory %p\n", Address);
865 switch (Width)
866 {
867 case 8:
869 break;
870
871 case 16:
873 break;
874
875 case 32:
877 break;
878
879 case 64:
881 break;
882
883 default:
884 DPRINT1("AcpiOsWriteMemory got bad width: %d\n",Width);
885 return (AE_BAD_PARAMETER);
886 break;
887 }
888
889 return (AE_OK);
890}
891
894 ACPI_IO_ADDRESS Address,
895 UINT32 *Value,
897{
898 DPRINT("AcpiOsReadPort %p, width %d\n",Address,Width);
899
900 switch (Width)
901 {
902 case 8:
904 break;
905
906 case 16:
908 break;
909
910 case 32:
912 break;
913
914 default:
915 DPRINT1("AcpiOsReadPort got bad width: %d\n",Width);
916 return (AE_BAD_PARAMETER);
917 break;
918 }
919 return (AE_OK);
920}
921
924 ACPI_IO_ADDRESS Address,
927{
928 DPRINT("AcpiOsWritePort %p, width %d\n",Address,Width);
929 switch (Width)
930 {
931 case 8:
933 break;
934
935 case 16:
937 break;
938
939 case 32:
941 break;
942
943 default:
944 DPRINT1("AcpiOsWritePort got bad width: %d\n",Width);
945 return (AE_BAD_PARAMETER);
946 break;
947 }
948 return (AE_OK);
949}
950
953{
956
957 /* Detect device presence by reading the PCI configuration space */
958
960 BusNumber,
962 &PciConfig,
963 0,
964 sizeof(PciConfig));
965 if (ReadLength == 0)
966 {
967 DPRINT("PCI device is not present\n");
968 return FALSE;
969 }
970
971 ASSERT(ReadLength >= 2);
972
973 if (PciConfig.VendorID == PCI_INVALID_VENDORID)
974 {
975 DPRINT("Invalid vendor ID in PCI configuration space\n");
976 return FALSE;
977 }
978
979 DPRINT("PCI device is present\n");
980
981 return TRUE;
982}
983
986 ACPI_PCI_ID *PciId,
987 UINT32 Reg,
988 UINT64 *Value,
990{
992
993 slot.u.AsULONG = 0;
994 slot.u.bits.DeviceNumber = PciId->Device;
995 slot.u.bits.FunctionNumber = PciId->Function;
996
997 DPRINT("AcpiOsReadPciConfiguration, slot=0x%X, func=0x%X\n", slot.u.AsULONG, Reg);
998
999 if (!OslIsPciDevicePresent(PciId->Bus, slot.u.AsULONG))
1000 return AE_NOT_FOUND;
1001
1002 /* Width is in BITS */
1004 PciId->Bus,
1005 slot.u.AsULONG,
1006 Value,
1007 Reg,
1008 (Width >> 3));
1009
1010 return AE_OK;
1011}
1012
1015 ACPI_PCI_ID *PciId,
1016 UINT32 Reg,
1017 UINT64 Value,
1018 UINT32 Width)
1019{
1020 ULONG buf = Value;
1022
1023 slot.u.AsULONG = 0;
1024 slot.u.bits.DeviceNumber = PciId->Device;
1025 slot.u.bits.FunctionNumber = PciId->Function;
1026
1027 DPRINT("AcpiOsWritePciConfiguration, slot=0x%x\n", slot.u.AsULONG);
1028 if (!OslIsPciDevicePresent(PciId->Bus, slot.u.AsULONG))
1029 return AE_NOT_FOUND;
1030
1031 /* Width is in BITS */
1033 PciId->Bus,
1034 slot.u.AsULONG,
1035 &buf,
1036 Reg,
1037 (Width >> 3));
1038
1039 return AE_OK;
1040}
1041
1044 const char *Fmt,
1045 ...)
1046{
1047 va_list Args;
1048 va_start (Args, Fmt);
1049
1050 AcpiOsVprintf (Fmt, Args);
1051
1052 va_end (Args);
1053 return;
1054}
1055
1056void
1058 const char *Fmt,
1059 va_list Args)
1060{
1061#ifndef NDEBUG
1063#endif
1064 return;
1065}
1066
1067void
1069 void *Destination)
1070{
1071 /* No-op */
1072 DPRINT1("Output redirection not supported\n");
1073}
1074
1075UINT64
1077 void)
1078{
1079 LARGE_INTEGER CurrentTime;
1080
1081 KeQuerySystemTime(&CurrentTime);
1082 return CurrentTime.QuadPart;
1083}
1084
1085void
1087{
1088 /*
1089 * Wait for all asynchronous events to complete.
1090 * This implementation does nothing.
1091 */
1092 return;
1093}
1094
1098 void *Info)
1099{
1100 ACPI_SIGNAL_FATAL_INFO *FatalInfo = Info;
1101
1102 switch (Function)
1103 {
1104 case ACPI_SIGNAL_FATAL:
1105 if (Info)
1106 DPRINT1 ("AcpiOsBreakpoint: %d %d %d ****\n", FatalInfo->Type, FatalInfo->Code, FatalInfo->Argument);
1107 else
1108 DPRINT1 ("AcpiOsBreakpoint ****\n");
1109 break;
1111 if (Info)
1112 DPRINT1 ("AcpiOsBreakpoint: %s ****\n", Info);
1113 else
1114 DPRINT1 ("AcpiOsBreakpoint ****\n");
1115 break;
1116 }
1117
1118 ASSERT(FALSE);
1119
1120 return (AE_OK);
1121}
1122
1125 UINT8 SleepState,
1126 UINT32 RegaValue,
1127 UINT32 RegbValue)
1128{
1129 DPRINT1("Entering sleep state S%u.\n", SleepState);
1130 return AE_OK;
1131}
1132
1135 char *Buffer,
1138{
1139 DPRINT1("File reading not supported\n");
1140 return AE_ERROR;
1141}
ULONG ReadLength
Type
Definition: Type.h:7
char ** Args
Definition: acdebug.h:353
#define VOID
Definition: acefi.h:82
#define ACPI_INTERNAL_VAR_XFACE
Definition: acenv.h:338
#define AE_ERROR
Definition: acexcep.h:109
#define AE_BAD_PARAMETER
Definition: acexcep.h:151
#define AE_ALREADY_EXISTS
Definition: acexcep.h:115
#define AE_NOT_FOUND
Definition: acexcep.h:113
#define AE_NO_MEMORY
Definition: acexcep.h:112
#define AE_NOT_EXIST
Definition: acexcep.h:114
#define AE_TIME
Definition: acexcep.h:125
#define AE_OK
Definition: acexcep.h:97
#define ACPI_SIGNAL_BREAKPOINT
Definition: acpiosxf.h:74
#define ACPI_SIGNAL_FATAL
Definition: acpiosxf.h:73
ACPI_EXECUTE_TYPE
Definition: acpiosxf.h:56
#define ACPI_SIG_RSDP
Definition: actbl.h:72
#define ACPI_SIG_XSDT
Definition: actbl.h:74
#define ACPI_SIG_RSDT
Definition: actbl.h:73
unsigned short UINT16
Definition: actypes.h:129
unsigned char BOOLEAN
Definition: actypes.h:127
#define AcpiOsDeleteMutex(Handle)
Definition: actypes.h:275
#define ACPI_MUTEX
Definition: actypes.h:273
#define ACPI_SEMAPHORE
Definition: actypes.h:287
UINT32(ACPI_SYSTEM_XFACE * ACPI_OSD_HANDLER)(void *Context)
Definition: actypes.h:1122
void(ACPI_SYSTEM_XFACE * ACPI_OSD_EXEC_CALLBACK)(void *Context)
Definition: actypes.h:1126
#define AcpiOsAcquireMutex(Handle, Time)
Definition: actypes.h:276
#define ACPI_CPU_FLAGS
Definition: actypes.h:252
char * ACPI_STRING
Definition: actypes.h:462
#define ACPI_INTERRUPT_HANDLED
Definition: actypes.h:1264
UINT32 ACPI_STATUS
Definition: actypes.h:460
#define AcpiOsReleaseMutex(Handle)
Definition: actypes.h:277
#define ACPI_DO_NOT_WAIT
Definition: actypes.h:502
#define ACPI_SPINLOCK
Definition: actypes.h:283
unsigned char UINT8
Definition: actypes.h:128
COMPILER_DEPENDENT_UINT64 UINT64
Definition: actypes.h:131
#define ACPI_THREAD_ID
Definition: actypes.h:144
#define AcpiOsCreateMutex(OutHandle)
Definition: actypes.h:274
#define ACPI_NAMESEG_SIZE
Definition: actypes.h:415
NTSYSAPI ULONG NTAPI vDbgPrintEx(_In_ ULONG ComponentId, _In_ ULONG Level, _In_z_ PCCH Format, _In_ va_list ap)
#define DPFLTR_ERROR_LEVEL
Definition: main.cpp:32
LONG NTSTATUS
Definition: precomp.h:26
#define DPRINT1
Definition: precomp.h:8
#define NTSYSAPI
Definition: ntoskrnl.h:12
#define _stricmp
Definition: cat.c:22
_In_ CDROM_SCAN_FOR_SPECIAL_INFO _In_ PCDROM_SCAN_FOR_SPECIAL_HANDLER Function
Definition: cdrom.h:1156
Definition: bufpool.h:45
Definition: Mutex.h:16
IN PUNICODE_STRING IN POBJECT_ATTRIBUTES ObjectAttributes
Definition: conport.c:36
#define NULL
Definition: types.h:112
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117
#define NT_SUCCESS(StatCode)
Definition: apphelp.c:33
ULONG_PTR KAFFINITY
Definition: compat.h:85
#define va_end(v)
Definition: stdarg.h:28
#define va_start(v, l)
Definition: stdarg.h:26
char * va_list
Definition: vadefs.h:50
#define ACPI_RSDP_CHECKSUM_LENGTH
Definition: acconfig.h:210
NTHALAPI ULONG NTAPI HalGetInterruptVector(INTERFACE_TYPE, ULONG, ULONG, ULONG, PKIRQL, PKAFFINITY)
#define ExAllocatePoolWithTag(hernya, size, tag)
Definition: env_spec_w32.h:350
UCHAR KIRQL
Definition: env_spec_w32.h:591
ULONG KSPIN_LOCK
Definition: env_spec_w32.h:72
#define KeWaitForSingleObject(pEvt, foo, a, b, c)
Definition: env_spec_w32.h:478
KSPIN_LOCK * PKSPIN_LOCK
Definition: env_spec_w32.h:73
#define KeInitializeEvent(pEvt, foo, foo2)
Definition: env_spec_w32.h:477
#define KeReleaseSpinLock(sl, irql)
Definition: env_spec_w32.h:627
#define KeSetEvent(pEvt, foo, foo2)
Definition: env_spec_w32.h:476
#define KeAcquireSpinLock(sl, irql)
Definition: env_spec_w32.h:609
#define KeQuerySystemTime(t)
Definition: env_spec_w32.h:570
#define KeGetCurrentIrql()
Definition: env_spec_w32.h:706
#define NonPagedPool
Definition: env_spec_w32.h:307
#define DISPATCH_LEVEL
Definition: env_spec_w32.h:696
#define KeInitializeSpinLock(sl)
Definition: env_spec_w32.h:604
VOID NTAPI ProbeForRead(IN CONST VOID *Address, IN SIZE_T Length, IN ULONG Alignment)
Definition: exintrin.c:102
VOID NTAPI ProbeForWrite(IN PVOID Address, IN SIZE_T Length, IN ULONG Alignment)
Definition: exintrin.c:143
PsGetCurrentThreadId
Definition: CrNtStubs.h:8
_Must_inspect_result_ _In_ PFSRTL_PER_STREAM_CONTEXT Ptr
Definition: fsrtlfuncs.h:898
ULONG Handle
Definition: gdb_input.c:15
Status
Definition: gdiplustypes.h:24
GLsizeiptr size
Definition: glext.h:5919
GLenum GLuint GLenum GLsizei const GLchar * buf
Definition: glext.h:7751
GLuint GLsizei GLsizei * length
Definition: glext.h:6040
ULONG NTAPI HalSetBusDataByOffset(IN BUS_DATA_TYPE BusDataType, IN ULONG BusNumber, IN ULONG SlotNumber, IN PVOID Buffer, IN ULONG Offset, IN ULONG Length)
Definition: bus.c:123
ULONG NTAPI HalGetBusDataByOffset(IN BUS_DATA_TYPE BusDataType, IN ULONG BusNumber, IN ULONG SlotNumber, IN PVOID Buffer, IN ULONG Offset, IN ULONG Length)
Definition: bus.c:73
VOID FASTCALL ExAcquireFastMutex(IN PFAST_MUTEX FastMutex)
Definition: fmutex.c:23
VOID FASTCALL ExReleaseFastMutex(IN PFAST_MUTEX FastMutex)
Definition: fmutex.c:31
BOOLEAN FASTCALL ExTryToAcquireFastMutex(IN PFAST_MUTEX FastMutex)
Definition: fmutex.c:39
VOID NTAPI WRITE_PORT_USHORT(IN PUSHORT Port, IN USHORT Value)
Definition: portio.c:115
ULONG NTAPI READ_PORT_ULONG(IN PULONG Port)
Definition: portio.c:70
VOID NTAPI WRITE_PORT_ULONG(IN PULONG Port, IN ULONG Value)
Definition: portio.c:123
USHORT NTAPI READ_PORT_USHORT(IN PUSHORT Port)
Definition: portio.c:63
#define EXCEPTION_EXECUTE_HANDLER
Definition: excpt.h:90
VOID NTAPI MmUnmapIoSpace(IN PVOID BaseAddress, IN SIZE_T NumberOfBytes)
Definition: iosup.c:193
PVOID NTAPI MmMapIoSpace(IN PHYSICAL_ADDRESS PhysicalAddress, IN SIZE_T NumberOfBytes, IN MEMORY_CACHING_TYPE CacheType)
Definition: iosup.c:47
#define RtlEqualMemory(dst, src, len)
Definition: kdvm.h:18
#define ASSERT(a)
Definition: mode.c:44
#define ExFreePoolWithTag(_P, _T)
Definition: module.h:1109
static PVOID ptr
Definition: dispmode.c:27
static PVOID ExAllocatePoolZero(ULONG PoolType, SIZE_T NumberOfBytes, ULONG Tag)
Definition: precomp.h:45
#define KeStallExecutionProcessor(MicroSeconds)
Definition: precomp.h:27
#define InitializeObjectAttributes(p, n, a, r, s)
Definition: reg.c:115
static int ** pa
Definition: server.c:145
#define KernelMode
Definition: asm.h:38
NTSYSAPI NTSTATUS NTAPI ZwClose(_In_ HANDLE Handle)
_In_ PUNICODE_STRING _Inout_ PUNICODE_STRING Destination
Definition: rtlfuncs.h:3051
#define _In_reads_bytes_(s)
Definition: no_sal2.h:170
#define _Inout_
Definition: no_sal2.h:162
#define _In_
Definition: no_sal2.h:158
#define _In_opt_
Definition: no_sal2.h:212
#define THREAD_ALL_ACCESS
Definition: nt_native.h:1342
__GNU_EXTENSION typedef unsigned __int64 * PULONGLONG
Definition: ntbasedef.h:395
_In_ ULONG _In_ ULONG _In_ ULONG Length
Definition: ntddpcm.h:102
@ SynchronizationEvent
VOID NTAPI IoDisconnectInterrupt(PKINTERRUPT InterruptObject)
Definition: irq.c:142
NTSTATUS NTAPI IoConnectInterrupt(OUT PKINTERRUPT *InterruptObject, IN PKSERVICE_ROUTINE ServiceRoutine, IN PVOID ServiceContext, IN PKSPIN_LOCK SpinLock, IN ULONG Vector, IN KIRQL Irql, IN KIRQL SynchronizeIrql, IN KINTERRUPT_MODE InterruptMode, IN BOOLEAN ShareVector, IN KAFFINITY ProcessorEnableMask, IN BOOLEAN FloatingSave)
Definition: irq.c:23
PHYSICAL_ADDRESS NTAPI MmGetPhysicalAddress(IN PVOID Address)
Definition: stubs.c:685
NTSTATUS NTAPI PsCreateSystemThread(OUT PHANDLE ThreadHandle, IN ACCESS_MASK DesiredAccess, IN POBJECT_ATTRIBUTES ObjectAttributes, IN HANDLE ProcessHandle, IN PCLIENT_ID ClientId, IN PKSTART_ROUTINE StartRoutine, IN PVOID StartContext)
Definition: thread.c:602
void AcpiOsStall(UINT32 microseconds)
Definition: osl.c:456
ACPI_STATUS AcpiOsInitialize(void)
Definition: osl.c:195
void AcpiOsRedirectOutput(void *Destination)
Definition: osl.c:1068
ACPI_STATUS AcpiOsGetPhysicalAddress(void *LogicalAddress, ACPI_PHYSICAL_ADDRESS *PhysicalAddress)
Definition: osl.c:332
void AcpiOsSleep(UINT64 milliseconds)
Definition: osl.c:449
BOOLEAN AcpiOsWritable(void *Memory, ACPI_SIZE Length)
Definition: osl.c:388
void * AcpiOsMapMemory(ACPI_PHYSICAL_ADDRESS phys, ACPI_SIZE length)
Definition: osl.c:300
ACPI_STATUS AcpiOsCreateLock(ACPI_SPINLOCK *OutHandle)
Definition: osl.c:655
ACPI_STATUS AcpiOsSignalSemaphore(ACPI_SEMAPHORE Handle, UINT32 Units)
Definition: osl.c:631
static ACPI_OSD_HANDLER AcpiIrqHandler
Definition: osl.c:20
ACPI_STATUS AcpiOsTableOverride(ACPI_TABLE_HEADER *ExistingTable, ACPI_TABLE_HEADER **NewTable)
Definition: osl.c:264
NTSYSAPI PCONFIGURATION_COMPONENT_DATA NTAPI KeFindConfigurationNextEntry(_In_ PCONFIGURATION_COMPONENT_DATA Child, _In_ CONFIGURATION_CLASS Class, _In_ CONFIGURATION_TYPE Type, _In_opt_ PULONG ComponentKey, _Inout_ PCONFIGURATION_COMPONENT_DATA *NextLink)
Definition: config.c:21
NTSYSAPI PLOADER_PARAMETER_BLOCK KeLoaderBlock
Definition: krnlinit.c:28
ACPI_STATUS AcpiOsSignal(UINT32 Function, void *Info)
Definition: osl.c:1096
ACPI_THREAD_ID AcpiOsGetThreadId(void)
Definition: osl.c:409
ACPI_STATUS AcpiOsCreateSemaphore(UINT32 MaxUnits, UINT32 InitialUnits, ACPI_SEMAPHORE *OutHandle)
Definition: osl.c:544
UINT32 AcpiOsInstallInterruptHandler(UINT32 InterruptNumber, ACPI_OSD_HANDLER ServiceRoutine, void *Context)
Definition: osl.c:740
static ACPI_TABLE_RSDP * AcpiLoaderRsdp
Definition: osl.c:37
static PVOID AcpiIrqContext
Definition: osl.c:21
ACPI_STATUS AcpiOsWaitSemaphore(ACPI_SEMAPHORE Handle, UINT32 Units, UINT16 Timeout)
Definition: osl.c:585
ACPI_STATUS AcpiOsWritePciConfiguration(ACPI_PCI_ID *PciId, UINT32 Reg, UINT64 Value, UINT32 Width)
Definition: osl.c:1014
void AcpiOsVprintf(const char *Fmt, va_list Args)
Definition: osl.c:1057
ACPI_STATUS AcpiOsReadMemory(ACPI_PHYSICAL_ADDRESS Address, UINT64 *Value, UINT32 Width)
Definition: osl.c:826
ACPI_STATUS AcpiOsReadPciConfiguration(ACPI_PCI_ID *PciId, UINT32 Reg, UINT64 *Value, UINT32 Width)
Definition: osl.c:985
struct _ACPI_SEM ACPI_SEM
static BOOLEAN AcpiInterruptHandlerRegistered
Definition: osl.c:19
BOOLEAN AcpiOsReadable(void *Memory, ACPI_SIZE Length)
Definition: osl.c:367
ACPI_STATUS AcpiOsReadPort(ACPI_IO_ADDRESS Address, UINT32 *Value, UINT32 Width)
Definition: osl.c:893
ACPI_STATUS AcpiOsWritePort(ACPI_IO_ADDRESS Address, UINT32 Value, UINT32 Width)
Definition: osl.c:923
void AcpiOsFree(void *ptr)
Definition: osl.c:359
ACPI_STATUS AcpiOsEnterSleep(UINT8 SleepState, UINT32 RegaValue, UINT32 RegbValue)
Definition: osl.c:1124
ACPI_STATUS AcpiOsRemoveInterruptHandler(UINT32 InterruptNumber, ACPI_OSD_HANDLER ServiceRoutine)
Definition: osl.c:798
UINT64 AcpiOsGetTimer(void)
Definition: osl.c:1076
ACPI_STATUS AcpiOsTerminate(void)
Definition: osl.c:211
#define TAG_ACPI_LOADER_RSDP_TABLE
Definition: osl.c:16
void AcpiOsUnmapMemory(void *virt, ACPI_SIZE length)
Definition: osl.c:320
ACPI_STATUS AcpiOsPhysicalTableOverride(ACPI_TABLE_HEADER *ExistingTable, ACPI_PHYSICAL_ADDRESS *NewAddress, UINT32 *NewTableLength)
Definition: osl.c:281
BOOLEAN OslIsPciDevicePresent(ULONG BusNumber, ULONG SlotNumber)
Definition: osl.c:952
BOOLEAN NTAPI OslIsrStub(PKINTERRUPT Interrupt, PVOID ServiceContext)
Definition: osl.c:725
ACPI_STATUS AcpiOsPredefinedOverride(const ACPI_PREDEFINED_NAMES *PredefinedObject, ACPI_STRING *NewValue)
Definition: osl.c:247
ACPI_STATUS AcpiOsWriteMemory(ACPI_PHYSICAL_ADDRESS Address, UINT64 Value, UINT32 Width)
Definition: osl.c:859
static PACPI_BIOS_MULTI_NODE AcpiGetLoaderAcpiBiosNode(VOID)
Definition: osl.c:57
ACPI_STATUS AcpiOsDeleteSemaphore(ACPI_SEMAPHORE Handle)
Definition: osl.c:570
ACPI_PHYSICAL_ADDRESS AcpiOsGetRootPointer(void)
Definition: osl.c:228
void AcpiOsReleaseLock(ACPI_SPINLOCK Handle, ACPI_CPU_FLAGS Flags)
Definition: osl.c:708
ACPI_CPU_FLAGS AcpiOsAcquireLock(ACPI_SPINLOCK Handle)
Definition: osl.c:690
static ULONG AcpiIrqNumber
Definition: osl.c:22
void ACPI_INTERNAL_VAR_XFACE AcpiOsPrintf(const char *Fmt,...)
Definition: osl.c:1043
ACPI_STATUS AcpiOsGetLine(char *Buffer, UINT32 BufferLength, UINT32 *BytesRead)
Definition: osl.c:1134
void * AcpiOsAllocate(ACPI_SIZE size)
Definition: osl.c:352
static ACPI_PHYSICAL_ADDRESS AcpiBuildLoaderRootPointer(VOID)
Definition: osl.c:107
struct _ACPI_SEM * PACPI_SEM
ACPI_STATUS AcpiOsExecute(ACPI_EXECUTE_TYPE Type, ACPI_OSD_EXEC_CALLBACK Function, void *Context)
Definition: osl.c:416
static UCHAR AcpiChecksumBuffer(_In_reads_bytes_(Length) const UCHAR *Buffer, _In_ ULONG Length)
Definition: osl.c:41
static PKINTERRUPT AcpiInterrupt
Definition: osl.c:18
void AcpiOsDeleteLock(ACPI_SPINLOCK Handle)
Definition: osl.c:677
void AcpiOsWaitEventsComplete(void)
Definition: osl.c:1086
#define READ_PORT_UCHAR(p)
Definition: pc98vid.h:22
#define WRITE_PORT_UCHAR(p, d)
Definition: pc98vid.h:21
_In_ ULONG BusNumber
Definition: pciidex.h:65
_In_ ULONG _In_ PCI_SLOT_NUMBER _In_ PPCI_COMMON_HEADER PciConfig
Definition: pciidex.h:67
static WCHAR Address[46]
Definition: ping.c:68
static ULONG Timeout
Definition: ping.c:61
#define OBJ_KERNEL_HANDLE
Definition: winternl.h:231
#define _SEH2_EXCEPT(...)
Definition: pseh2_64.h:104
#define _SEH2_END
Definition: pseh2_64.h:194
#define _SEH2_TRY
Definition: pseh2_64.h:93
#define CmResourceTypeDeviceSpecific
Definition: restypes.h:108
@ Internal
Definition: restypes.h:121
@ LevelSensitive
Definition: miniport.h:80
@ PCIConfiguration
Definition: miniport.h:93
@ AdapterClass
Definition: arc.h:102
enum _CONFIGURATION_CLASS CONFIGURATION_CLASS
@ MultiFunctionAdapter
Definition: arc.h:125
enum _CONFIGURATION_TYPE CONFIGURATION_TYPE
#define KeAcquireSpinLockAtDpcLevel(SpinLock)
Definition: ke.h:125
#define KeReleaseSpinLockFromDpcLevel(SpinLock)
Definition: ke.h:135
STDMETHOD() Next(THIS_ ULONG celt, IAssociationElement *pElement, ULONG *pceltFetched) PURE
#define DPRINT
Definition: sndvol32.h:73
_In_ PVOID Context
Definition: storport.h:2269
PHYSICAL_ADDRESS RsdtAddress
Definition: acpi.h:21
Definition: osl.c:537
KEVENT Event
Definition: osl.c:539
UINT32 CurrentUnits
Definition: osl.c:538
KSPIN_LOCK Lock
Definition: osl.c:540
CONFIGURATION_COMPONENT ComponentEntry
Definition: arc.h:287
ULONG ConfigurationDataLength
Definition: arc.h:167
PCONFIGURATION_COMPONENT_DATA ConfigurationRoot
Definition: arc.h:840
Definition: vfat.h:185
UINT16 Device
Definition: actypes.h:1353
UINT16 Function
Definition: actypes.h:1354
UINT16 Bus
Definition: actypes.h:1352
char Signature[ACPI_NAMESEG_SIZE]
Definition: actbl.h:108
UINT8 ExtendedChecksum
Definition: actbl.h:158
UINT32 Length
Definition: actbl.h:156
UINT8 Revision
Definition: actbl.h:154
UINT64 XsdtPhysicalAddress
Definition: actbl.h:157
char OemId[ACPI_OEM_ID_SIZE]
Definition: actbl.h:153
UINT32 RsdtPhysicalAddress
Definition: actbl.h:155
UINT8 Checksum
Definition: actbl.h:152
char Signature[8]
Definition: actbl.h:151
ACPI_STATUS ACPI_INIT_FUNCTION AcpiFindRootPointer(ACPI_PHYSICAL_ADDRESS *TableAddress)
Definition: tbxfroot.c:160
#define MAXULONG
Definition: typedefs.h:251
int32_t INT32
Definition: typedefs.h:58
uint32_t * PULONG
Definition: typedefs.h:59
unsigned char UCHAR
Definition: typedefs.h:53
#define FIELD_OFFSET(t, f)
Definition: typedefs.h:255
#define NTAPI
Definition: typedefs.h:36
uint64_t ULONGLONG
Definition: typedefs.h:67
uint16_t * PUSHORT
Definition: typedefs.h:56
#define RtlCopyMemory(Destination, Source, Length)
Definition: typedefs.h:263
uint32_t ULONG_PTR
Definition: typedefs.h:65
uint32_t UINT32
Definition: typedefs.h:59
unsigned char * PUCHAR
Definition: typedefs.h:53
uint32_t ULONG
Definition: typedefs.h:59
LONGLONG QuadPart
Definition: typedefs.h:114
ULONG LowPart
Definition: typedefs.h:106
_In_ HFONT _Out_ PUINT _Out_ PUINT Width
Definition: font.h:89
struct _slot slot
Definition: vfat.h:196
_Must_inspect_result_ _In_ WDFCHILDLIST _In_ PWDF_CHILD_LIST_ITERATOR _Out_ WDFDEVICE _Inout_opt_ PWDF_CHILD_RETRIEVE_INFO Info
Definition: wdfchildlist.h:690
_In_ WDFCOLLECTION _In_ ULONG Index
_Must_inspect_result_ _In_ WDFDEVICE _In_ DEVICE_REGISTRY_PROPERTY _In_ ULONG BufferLength
Definition: wdfdevice.h:3777
_Must_inspect_result_ _In_ WDFDEVICE _In_ WDFDEVICE Child
Definition: wdffdo.h:536
_Must_inspect_result_ _In_ WDFDEVICE _In_ PWDF_INTERRUPT_CONFIG _In_opt_ PWDF_OBJECT_ATTRIBUTES _Out_ WDFINTERRUPT * Interrupt
Definition: wdfinterrupt.h:379
_Must_inspect_result_ _In_ WDFIOTARGET _In_opt_ WDFREQUEST _In_opt_ PWDF_MEMORY_DESCRIPTOR _In_opt_ PLONGLONG _In_opt_ PWDF_REQUEST_SEND_OPTIONS _Out_opt_ PULONG_PTR BytesRead
Definition: wdfiotarget.h:870
_Must_inspect_result_ _In_opt_ PWDF_OBJECT_ATTRIBUTES _In_ _Strict_type_match_ POOL_TYPE _In_opt_ ULONG _In_ _Out_ WDFMEMORY * Memory
Definition: wdfmemory.h:169
_Must_inspect_result_ _In_ WDFKEY _In_ PCUNICODE_STRING _Out_opt_ PUSHORT _Inout_opt_ PUNICODE_STRING Value
Definition: wdfregistry.h:413
_Must_inspect_result_ _In_ WDFIORESREQLIST _In_opt_ PWDF_OBJECT_ATTRIBUTES _Out_ WDFIORESLIST * ResourceList
Definition: wdfresource.h:309
_In_ WDFIORESREQLIST _In_ ULONG SlotNumber
Definition: wdfresource.h:68
_Must_inspect_result_ _In_opt_ PWDF_OBJECT_ATTRIBUTES _Out_ WDFSPINLOCK * SpinLock
Definition: wdfsync.h:228
_Must_inspect_result_ _In_ ULONG Flags
Definition: wsk.h:170
FORCEINLINE VOID ExInitializeFastMutex(_Out_ PFAST_MUTEX FastMutex)
Definition: exfuncs.h:274
* PFAST_MUTEX
Definition: extypes.h:17
FAST_MUTEX
Definition: extypes.h:17
_In_ ULONG _In_ ULONG _In_ ULONG _Out_ PKIRQL _Out_ PKAFFINITY Affinity
Definition: halfuncs.h:174
_In_ PKSERVICE_ROUTINE ServiceRoutine
Definition: iofuncs.h:800
_In_ PKSERVICE_ROUTINE _In_opt_ PVOID ServiceContext
Definition: iofuncs.h:801
#define PCI_INVALID_VENDORID
Definition: iotypes.h:3603
_Must_inspect_result_ typedef _In_ PHYSICAL_ADDRESS PhysicalAddress
Definition: iotypes.h:1098
#define IO_NO_INCREMENT
Definition: iotypes.h:598
_Requires_lock_held_ Interrupt _Releases_lock_ Interrupt _In_ _IRQL_restores_ KIRQL OldIrql
Definition: kefuncs.h:778
KSTART_ROUTINE * PKSTART_ROUTINE
Definition: ketypes.h:567
@ Executive
Definition: ketypes.h:467
@ MmNonCached
Definition: mmtypes.h:129