ReactOS 0.4.15-dev-7924-g5949c20
xipdisp.c
Go to the documentation of this file.
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
20XIPDispatch(IN ULONG DispatchCode,
23{
26}
27
28CODE_SEG("INIT")
32{
33 PLIST_ENTRY NextEntry;
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,
44 ListEntry);
45 if (Descriptor->MemoryType == LoaderXIPRom) return Descriptor;
46 }
47
48 /* Nothing found if we got here */
49 return NULL;
50}
51
52CODE_SEG("INIT")
53VOID
56{
57 PCHAR CommandLine, XipBoot, XipRom, XipMegs, XipVerbose, XipRam;
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 */
#define CODE_SEG(...)
char * strstr(char *String1, char *String2)
Definition: utclib.c:653
LONG NTSTATUS
Definition: precomp.h:26
#define DPRINT1
Definition: precomp.h:8
#define UNIMPLEMENTED
Definition: debug.h:115
Definition: bufpool.h:45
#define NULL
Definition: types.h:112
#define DbgPrint
Definition: hal.h:12
#define STATUS_NOT_IMPLEMENTED
Definition: ntstatus.h:239
@ LoaderXIPRom
Definition: arc.h:199
#define DPRINT
Definition: sndvol32.h:71
Definition: typedefs.h:120
struct _LIST_ENTRY * Flink
Definition: typedefs.h:121
#define NTAPI
Definition: typedefs.h:36
uint32_t ULONG_PTR
Definition: typedefs.h:65
#define IN
Definition: typedefs.h:39
#define CONTAINING_RECORD(address, type, field)
Definition: typedefs.h:260
uint32_t ULONG
Definition: typedefs.h:59
#define OUT
Definition: typedefs.h:40
char * PCHAR
Definition: typedefs.h:51
_In_ WDFMEMORY _Out_opt_ size_t * BufferSize
Definition: wdfmemory.h:254
_Must_inspect_result_ _In_ WDFIORESLIST _In_ PIO_RESOURCE_DESCRIPTOR Descriptor
Definition: wdfresource.h:342
NTSTATUS NTAPI XIPDispatch(IN ULONG DispatchCode, OUT PVOID Buffer, IN ULONG BufferSize)
Definition: xipdisp.c:20
VOID NTAPI XIPInit(IN PLOADER_PARAMETER_BLOCK LoaderBlock)
Definition: xipdisp.c:55
PMEMORY_ALLOCATION_DESCRIPTOR NTAPI XIPpFindMemoryDescriptor(IN PLOADER_PARAMETER_BLOCK LoaderBlock)
Definition: xipdisp.c:31