-/*
- * 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 **************************************************************/
-
-/* 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);
-}
-
-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;
-
- DbgPrint((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);
-
- DbgPrint((DPRINT_WINDOWS, "Device 0x%X class %d type %d, parent %p\n", Child,
- Child->ComponentEntry.Class, Child->ComponentEntry.Type, Child->Parent));
-
- // If the child has a sibling list, then search the sibling list
- // for an entry that matches the specified class, type, and key.
- 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);
-
- DbgPrint((DPRINT_WINDOWS, "Device 0x%X class %d type %d sib, parent %p\n", Sibling,
- Sibling->ComponentEntry.Class, Sibling->ComponentEntry.Type, Sibling->Parent));
-
- // If the sibling has a child tree, then search the child tree
- // for an entry that matches the specified class, type, and key.
- if (VaToPa(Sibling->Child) != NULL)
- ConvertConfigToVA(VaToPa(Sibling->Child));
-
- Sibling = VaToPa(Sibling->Sibling);
- }
-
- // Go to the next child
- Child = VaToPa(Child->Child);
- }
-}
+/*\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
+#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)\n", 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
+ if (Child->ComponentEntry.Identifier)\r
+ Child->ComponentEntry.Identifier = PaToVa(Child->ComponentEntry.Identifier);\r
+\r
+ DbgPrint((DPRINT_WINDOWS, "Device 0x%X class %d type %d id %p, parent %p\n", Child,\r
+ Child->ComponentEntry.Class, Child->ComponentEntry.Type, Child->ComponentEntry.Identifier, Child->Parent));\r
+\r
+ // Go through siblings list\r
+ Sibling = VaToPa(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
+ if (Sibling->ComponentEntry.Identifier)\r
+ Sibling->ComponentEntry.Identifier = PaToVa(Sibling->ComponentEntry.Identifier);\r
+\r
+ DbgPrint((DPRINT_WINDOWS, "Device 0x%X class %d type %d id %p, parent %p\n", Sibling,\r
+ Sibling->ComponentEntry.Class, Sibling->ComponentEntry.Type, Sibling->ComponentEntry.Identifier, Sibling->Parent));\r
+\r
+ // Recurse into the Child tree\r
+ if (VaToPa(Sibling->Child) != NULL)\r
+ ConvertConfigToVA(VaToPa(Sibling->Child));\r
+\r
+ Sibling = VaToPa(Sibling->Sibling);\r
+ }\r
+\r
+ // Go to the next child\r
+ Child = VaToPa(Child->Child);\r
+ }\r
+}\r