[NTOS:MM] Quick fix: use SIZE_T instead of ULONG, because ULONG is 32-bit and on...
[reactos.git] / ntoskrnl / ex / xipdisp.c
1 /*
2 * PROJECT: ReactOS Kernel
3 * LICENSE: GPL - See COPYING in the top level directory
4 * FILE: ntoskrnl/ex/xipdisp.c
5 * PURPOSE: eXecute In Place (XIP) Support.
6 * PROGRAMMERS: Alex Ionescu (alex.ionescu@reactos.org)
7 */
8
9 /* INCLUDES ******************************************************************/
10
11 #include <ntoskrnl.h>
12 #include <debug.h>
13
14 /* GLOBALS *******************************************************************/
15
16 /* FUNCTIONS *****************************************************************/
17
18 NTSTATUS
19 NTAPI
20 XIPDispatch(IN ULONG DispatchCode,
21 OUT PVOID Buffer,
22 IN ULONG BufferSize)
23 {
24 UNIMPLEMENTED;
25 return STATUS_NOT_IMPLEMENTED;
26 }
27
28 PMEMORY_ALLOCATION_DESCRIPTOR
29 NTAPI
30 INIT_FUNCTION
31 XIPpFindMemoryDescriptor(IN PLOADER_PARAMETER_BLOCK LoaderBlock)
32 {
33 PLIST_ENTRY NextEntry;
34 PMEMORY_ALLOCATION_DESCRIPTOR Descriptor = NULL;
35
36 /* Loop the memory descriptors */
37 for (NextEntry = LoaderBlock->MemoryDescriptorListHead.Flink;
38 NextEntry != &LoaderBlock->MemoryDescriptorListHead;
39 NextEntry = NextEntry->Flink)
40 {
41 /* Get the current descriptor and check if it's the XIP ROM */
42 Descriptor = CONTAINING_RECORD(NextEntry,
43 MEMORY_ALLOCATION_DESCRIPTOR,
44 ListEntry);
45 if (Descriptor->MemoryType == LoaderXIPRom) return Descriptor;
46 }
47
48 /* Nothing found if we got here */
49 return NULL;
50 }
51
52 VOID
53 NTAPI
54 INIT_FUNCTION
55 XIPInit(IN PLOADER_PARAMETER_BLOCK LoaderBlock)
56 {
57 PCHAR CommandLine, XipBoot, XipRom, XipMegs, XipVerbose, XipRam;
58 PMEMORY_ALLOCATION_DESCRIPTOR XipDescriptor;
59
60 /* Get the command line */
61 CommandLine = LoaderBlock->LoadOptions;
62 if (!CommandLine) return;
63
64 /* Get XIP settings */
65 XipBoot = strstr(CommandLine, "XIPBOOT");
66 XipRam = strstr(CommandLine, "XIPRAM=");
67 XipRom = strstr(CommandLine, "XIPROM=");
68 XipMegs = strstr(CommandLine, "XIPMEGS=");
69 XipVerbose = strstr(CommandLine, "XIPVERBOSE");
70
71 /* Check if this is a verbose boot */
72 if (XipVerbose)
73 {
74 /* Print out our header */
75 DbgPrint("\n\nXIP: debug timestamp at line %d in %s: <<<%s %s>>>\n\n",
76 __LINE__,
77 __FILE__,
78 __DATE__,
79 __TIME__);
80 }
81
82 /* Find the XIP memory descriptor */
83 XipDescriptor = XIPpFindMemoryDescriptor(LoaderBlock);
84 if (!XipDescriptor) return;
85
86 //
87 // Make sure this is really XIP, and not RAM Disk -- also validate XIP
88 // Basically, either this is a ROM boot or a RAM boot, but not both nor none
89 //
90 if (!((ULONG_PTR)XipRom ^ (ULONG_PTR)XipRam)) return;
91
92 /* FIXME: TODO */
93 DPRINT1("ReactOS does not yet support eXecute In Place boot technology\n");
94 DPRINT("%s MB requested (XIP = %s)\n", XipMegs, XipBoot);
95 }
96
97 /* EOF */