-/*\r
- * PROJECT: EFI Windows Loader\r
- * LICENSE: GPL - See COPYING in the top level directory\r
- * FILE: freeldr/winldr/conversion.c\r
- * PURPOSE: Physical <-> Virtual addressing mode conversions\r
- * PROGRAMMERS: Aleksey Bragin (aleksey@reactos.org)\r
- */\r
-\r
-/* INCLUDES ***************************************************************/\r
-\r
-#include <freeldr.h>\r
-\r
-//#include <ndk/ldrtypes.h>\r
-\r
-#define NDEBUG\r
-#include <debug.h>\r
-\r
-/* FUNCTIONS **************************************************************/\r
-\r
-/* Arch-specific addresses translation implementation */\r
-PVOID\r
-VaToPa(PVOID Va)\r
-{\r
- return (PVOID)((ULONG_PTR)Va & ~KSEG0_BASE);\r
-}\r
-\r
-PVOID\r
-PaToVa(PVOID Pa)\r
-{\r
- return (PVOID)((ULONG_PTR)Pa | KSEG0_BASE);\r
-}\r
-\r
-VOID\r
-List_PaToVa(LIST_ENTRY *ListEntry)\r
-{\r
- LIST_ENTRY *ListHead = ListEntry;\r
- LIST_ENTRY *Next = ListEntry->Flink;\r
- LIST_ENTRY *NextPA;\r
-\r
- //Print(L"\n\nList_Entry: %X, First Next: %X\n", ListEntry, Next);\r
- //\r
- // Walk through the whole list\r
- //\r
- if (Next != NULL)\r
- {\r
- while (Next != PaToVa(ListHead))\r
- {\r
- NextPA = VaToPa(Next);\r
- //Print(L"Current: %X, Flink: %X, Blink: %X\n", Next, NextPA->Flink, NextPA->Blink);\r
-\r
- NextPA->Flink = PaToVa((PVOID)NextPA->Flink);\r
- NextPA->Blink = PaToVa((PVOID)NextPA->Blink);\r
-\r
- //Print(L"After converting Flink: %X, Blink: %X\n", NextPA->Flink, NextPA->Blink);\r
-\r
- Next = NextPA->Flink;\r
- }\r
-\r
- //\r
- // Finally convert first Flink/Blink\r
- //\r
- ListEntry->Flink = PaToVa((PVOID)ListEntry->Flink);\r
- if (ListEntry->Blink)\r
- ListEntry->Blink = PaToVa((PVOID)ListEntry->Blink);\r
- }\r
-}\r
-\r
-// This function converts only Child->Child, and calls itself for each Sibling\r
-VOID\r
-ConvertConfigToVA(PCONFIGURATION_COMPONENT_DATA Start)\r
-{\r
- PCONFIGURATION_COMPONENT_DATA Child;\r
- PCONFIGURATION_COMPONENT_DATA Sibling;\r
-\r
- DbgPrint((DPRINT_WINDOWS, "ConvertConfigToVA(Start 0x%X)", Start));\r
- Child = Start;\r
-\r
- while (Child != NULL)\r
- {\r
- if (Child->ConfigurationData)\r
- Child->ConfigurationData = PaToVa(Child->ConfigurationData);\r
-\r
- if (Child->Child)\r
- Child->Child = PaToVa(Child->Child);\r
-\r
- if (Child->Parent)\r
- Child->Parent = PaToVa(Child->Parent);\r
-\r
- if (Child->Sibling)\r
- Child->Sibling = PaToVa(Child->Sibling);\r
-\r
- DbgPrint((DPRINT_WINDOWS, "Device 0x%X class %d", Child, Child->ComponentEntry.Class));\r
-\r
- // If the child has a sibling list, then search the sibling list\r
- // for an entry that matches the specified class, type, and key.\r
- Sibling = Child->Sibling;\r
- while (Sibling != NULL)\r
- {\r
- if (Sibling->ConfigurationData)\r
- Sibling->ConfigurationData = PaToVa(Sibling->ConfigurationData);\r
-\r
- if (Sibling->Child)\r
- Sibling->Child = PaToVa(Sibling->Child);\r
-\r
- if (Sibling->Parent)\r
- Sibling->Parent = PaToVa(Sibling->Parent);\r
-\r
- if (Sibling->Sibling)\r
- Sibling->Sibling = PaToVa(Sibling->Sibling);\r
-\r
- DbgPrint((DPRINT_WINDOWS, "Device 0x%X class %d", Sibling, Sibling->ComponentEntry.Class));\r
-\r
- // If the sibling has a child tree, then search the child tree\r
- // for an entry that matches the specified class, type, and key.\r
- if (VaToPa(Sibling->Child) != NULL)\r
- ConvertConfigToVA(VaToPa(Sibling->Child));\r
-\r
- Sibling = VaToPa(Sibling->Sibling);\r
- }\r
-\r
- Child = VaToPa(Child->Child);\r
- }\r
-}\r
+/*
+ * PROJECT: EFI Windows Loader
+ * LICENSE: GPL - See COPYING in the top level directory
+ * FILE: freeldr/winldr/conversion.c
+ * PURPOSE: Physical <-> Virtual addressing mode conversions
+ * PROGRAMMERS: Aleksey Bragin (aleksey@reactos.org)
+ */
+
+/* INCLUDES ***************************************************************/
+
+#include <freeldr.h>
+
+//#include <ndk/ldrtypes.h>
+#include <debug.h>
+
+/* FUNCTIONS **************************************************************/
+
+#ifndef _ZOOM2_
+/* Arch-specific addresses translation implementation */
+PVOID
+VaToPa(PVOID Va)
+{
+ return (PVOID)((ULONG_PTR)Va & ~KSEG0_BASE);
+}
+
+PVOID
+PaToVa(PVOID Pa)
+{
+ return (PVOID)((ULONG_PTR)Pa | KSEG0_BASE);
+}
+#else
+PVOID
+VaToPa(PVOID Va)
+{
+ return Va;
+}
+
+PVOID
+PaToVa(PVOID Pa)
+{
+ return Pa;
+}
+#endif
+
+VOID
+List_PaToVa(LIST_ENTRY *ListEntry)
+{
+ LIST_ENTRY *ListHead = ListEntry;
+ LIST_ENTRY *Next = ListEntry->Flink;
+ LIST_ENTRY *NextPA;
+
+ //Print(L"\n\nList_Entry: %X, First Next: %X\n", ListEntry, Next);
+ //
+ // Walk through the whole list
+ //
+ if (Next != NULL)
+ {
+ while (Next != PaToVa(ListHead))
+ {
+ NextPA = VaToPa(Next);
+ //Print(L"Current: %X, Flink: %X, Blink: %X\n", Next, NextPA->Flink, NextPA->Blink);
+
+ NextPA->Flink = PaToVa((PVOID)NextPA->Flink);
+ NextPA->Blink = PaToVa((PVOID)NextPA->Blink);
+
+ //Print(L"After converting Flink: %X, Blink: %X\n", NextPA->Flink, NextPA->Blink);
+
+ Next = NextPA->Flink;
+ }
+
+ //
+ // Finally convert first Flink/Blink
+ //
+ ListEntry->Flink = PaToVa((PVOID)ListEntry->Flink);
+ if (ListEntry->Blink)
+ ListEntry->Blink = PaToVa((PVOID)ListEntry->Blink);
+ }
+}
+
+// This function converts only Child->Child, and calls itself for each Sibling
+VOID
+ConvertConfigToVA(PCONFIGURATION_COMPONENT_DATA Start)
+{
+ PCONFIGURATION_COMPONENT_DATA Child;
+ PCONFIGURATION_COMPONENT_DATA Sibling;
+
+ DPRINTM(DPRINT_WINDOWS, "ConvertConfigToVA(Start 0x%X)\n", Start);
+ Child = Start;
+
+ while (Child != NULL)
+ {
+ if (Child->ConfigurationData)
+ Child->ConfigurationData = PaToVa(Child->ConfigurationData);
+
+ if (Child->Child)
+ Child->Child = PaToVa(Child->Child);
+
+ if (Child->Parent)
+ Child->Parent = PaToVa(Child->Parent);
+
+ if (Child->Sibling)
+ Child->Sibling = PaToVa(Child->Sibling);
+
+ if (Child->ComponentEntry.Identifier)
+ Child->ComponentEntry.Identifier = PaToVa(Child->ComponentEntry.Identifier);
+
+ DPRINTM(DPRINT_WINDOWS, "Device 0x%X class %d type %d id '%s', parent %p\n", Child,
+ Child->ComponentEntry.Class, Child->ComponentEntry.Type, VaToPa(Child->ComponentEntry.Identifier), Child->Parent);
+
+ // Go through siblings list
+ Sibling = VaToPa(Child->Sibling);
+ while (Sibling != NULL)
+ {
+ if (Sibling->ConfigurationData)
+ Sibling->ConfigurationData = PaToVa(Sibling->ConfigurationData);
+
+ if (Sibling->Child)
+ Sibling->Child = PaToVa(Sibling->Child);
+
+ if (Sibling->Parent)
+ Sibling->Parent = PaToVa(Sibling->Parent);
+
+ if (Sibling->Sibling)
+ Sibling->Sibling = PaToVa(Sibling->Sibling);
+
+ if (Sibling->ComponentEntry.Identifier)
+ Sibling->ComponentEntry.Identifier = PaToVa(Sibling->ComponentEntry.Identifier);
+
+ DPRINTM(DPRINT_WINDOWS, "Device 0x%X class %d type %d id '%s', parent %p\n", Sibling,
+ Sibling->ComponentEntry.Class, Sibling->ComponentEntry.Type, VaToPa(Sibling->ComponentEntry.Identifier), Sibling->Parent);
+
+ // Recurse into the Child tree
+ if (VaToPa(Sibling->Child) != NULL)
+ ConvertConfigToVA(VaToPa(Sibling->Child));
+
+ Sibling = VaToPa(Sibling->Sibling);
+ }
+
+ // Go to the next child
+ Child = VaToPa(Child->Child);
+ }
+}