xref: /reactos/boot/freeldr/freeldr/include/machine.h (revision 10e7643c)
1 /*
2  *  FreeLoader
3  *
4  *  This program is free software; you can redistribute it and/or modify
5  *  it under the terms of the GNU General Public License as published by
6  *  the Free Software Foundation; either version 2 of the License, or
7  *  (at your option) any later version.
8  *
9  *  This program is distributed in the hope that it will be useful,
10  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
11  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12  *  GNU General Public License for more details.
13  *
14  *  You should have received a copy of the GNU General Public License along
15  *  with this program; if not, write to the Free Software Foundation, Inc.,
16  *  51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
17  */
18 
19 #pragma once
20 
21 #ifndef __DISK_H
22 #include "disk.h"
23 #endif
24 
25 #ifndef __MEMORY_H
26 #include "mm.h"
27 #endif
28 
29 #ifndef __FS_H
30 #include "fs.h"
31 #endif
32 
33 typedef enum tagVIDEODISPLAYMODE
34 {
35     VideoTextMode,
36     VideoGraphicsMode
37 } VIDEODISPLAYMODE, *PVIDEODISPLAYMODE;
38 
39 typedef struct tagMACHVTBL
40 {
41     VOID (*ConsPutChar)(int Ch);
42     BOOLEAN (*ConsKbHit)(VOID);
43     int (*ConsGetCh)(VOID);
44 
45     VOID (*VideoClearScreen)(UCHAR Attr);
46     VIDEODISPLAYMODE (*VideoSetDisplayMode)(char *DisplayMode, BOOLEAN Init);
47     VOID (*VideoGetDisplaySize)(PULONG Width, PULONG Height, PULONG Depth);
48     ULONG (*VideoGetBufferSize)(VOID);
49     VOID (*VideoGetFontsFromFirmware)(PULONG RomFontPointers);
50     VOID (*VideoSetTextCursorPosition)(UCHAR X, UCHAR Y);
51     VOID (*VideoHideShowTextCursor)(BOOLEAN Show);
52     VOID (*VideoPutChar)(int Ch, UCHAR Attr, unsigned X, unsigned Y);
53     VOID (*VideoCopyOffScreenBufferToVRAM)(PVOID Buffer);
54     BOOLEAN (*VideoIsPaletteFixed)(VOID);
55     VOID (*VideoSetPaletteColor)(UCHAR Color, UCHAR Red, UCHAR Green, UCHAR Blue);
56     VOID (*VideoGetPaletteColor)(UCHAR Color, UCHAR* Red, UCHAR* Green, UCHAR* Blue);
57     VOID (*VideoSync)(VOID);
58     VOID (*Beep)(VOID);
59     VOID (*PrepareForReactOS)(VOID);
60 
61     // NOTE: Not in the machine.c ...
62     FREELDR_MEMORY_DESCRIPTOR* (*GetMemoryDescriptor)(FREELDR_MEMORY_DESCRIPTOR* Current);
63     PFREELDR_MEMORY_DESCRIPTOR (*GetMemoryMap)(PULONG MaxMemoryMapSize);
64     VOID (*GetExtendedBIOSData)(PULONG ExtendedBIOSDataArea, PULONG ExtendedBIOSDataSize);
65 
66     UCHAR (*GetFloppyCount)(VOID);
67     BOOLEAN (*DiskReadLogicalSectors)(UCHAR DriveNumber, ULONGLONG SectorNumber, ULONG SectorCount, PVOID Buffer);
68     BOOLEAN (*DiskGetDriveGeometry)(UCHAR DriveNumber, PGEOMETRY DriveGeometry);
69     ULONG (*DiskGetCacheableBlockCount)(UCHAR DriveNumber);
70 
71     // NOTE: In the machine.c under the name of "ArcGetXXXTime"
72     TIMEINFO* (*GetTime)(VOID);
73     ULONG (*GetRelativeTime)(VOID);
74 
75     // NOTE: Not in the machine.c ...
76     BOOLEAN (*InitializeBootDevices)(VOID);
77     PCONFIGURATION_COMPONENT_DATA (*HwDetect)(_In_opt_ PCSTR Options);
78     VOID (*HwIdle)(VOID);
79 } MACHVTBL, *PMACHVTBL;
80 
81 extern MACHVTBL MachVtbl;
82 
83 /* NOTE: Implemented by each architecture */
84 VOID MachInit(const char *CmdLine);
85 
86 #define MachConsPutChar(Ch) \
87     MachVtbl.ConsPutChar(Ch)
88 #define MachConsKbHit()     \
89     MachVtbl.ConsKbHit()
90 #define MachConsGetCh()     \
91     MachVtbl.ConsGetCh()
92 #define MachVideoClearScreen(Attr)  \
93     MachVtbl.VideoClearScreen(Attr)
94 #define MachVideoSetDisplayMode(Mode, Init) \
95     MachVtbl.VideoSetDisplayMode((Mode), (Init))
96 #define MachVideoGetDisplaySize(W, H, D)    \
97     MachVtbl.VideoGetDisplaySize((W), (H), (D))
98 #define MachVideoGetBufferSize()    \
99     MachVtbl.VideoGetBufferSize()
100 #define MachVideoGetFontsFromFirmware(RomFontPointers) \
101     MachVtbl.VideoGetFontsFromFirmware((RomFontPointers))
102 #define MachVideoSetTextCursorPosition(X, Y)    \
103     MachVtbl.VideoSetTextCursorPosition((X), (Y))
104 #define MachVideoHideShowTextCursor(Show)   \
105     MachVtbl.VideoHideShowTextCursor(Show)
106 #define MachVideoPutChar(Ch, Attr, X, Y)    \
107     MachVtbl.VideoPutChar((Ch), (Attr), (X), (Y))
108 #define MachVideoCopyOffScreenBufferToVRAM(Buf) \
109     MachVtbl.VideoCopyOffScreenBufferToVRAM(Buf)
110 #define MachVideoIsPaletteFixed()   \
111     MachVtbl.VideoIsPaletteFixed()
112 #define MachVideoSetPaletteColor(Col, R, G, B)  \
113     MachVtbl.VideoSetPaletteColor((Col), (R), (G), (B))
114 #define MachVideoGetPaletteColor(Col, R, G, B)  \
115     MachVtbl.VideoGetPaletteColor((Col), (R), (G), (B))
116 #define MachVideoSync() \
117     MachVtbl.VideoSync()
118 #define MachBeep()  \
119     MachVtbl.Beep()
120 #define MachPrepareForReactOS() \
121     MachVtbl.PrepareForReactOS()
122 #define MachGetExtendedBIOSData(ExtendedBIOSDataArea, ExtendedBIOSDataSize) \
123     MachVtbl.GetExtendedBIOSData((ExtendedBIOSDataArea), (ExtendedBIOSDataSize))
124 #define MachGetFloppyCount() \
125     MachVtbl.GetFloppyCount()
126 #define MachDiskReadLogicalSectors(Drive, Start, Count, Buf)    \
127     MachVtbl.DiskReadLogicalSectors((Drive), (Start), (Count), (Buf))
128 #define MachDiskGetDriveGeometry(Drive, Geom)   \
129     MachVtbl.DiskGetDriveGeometry((Drive), (Geom))
130 #define MachDiskGetCacheableBlockCount(Drive)   \
131     MachVtbl.DiskGetCacheableBlockCount(Drive)
132 
133 #define MachInitializeBootDevices() \
134     MachVtbl.InitializeBootDevices()
135 
136 #define MachHwDetect(Options) \
137     MachVtbl.HwDetect(Options)
138 
139 #define MachHwIdle() \
140     MachVtbl.HwIdle()
141 
142 /* ARC FUNCTIONS **************************************************************/
143 
144 TIMEINFO* ArcGetTime(VOID);
145 ULONG ArcGetRelativeTime(VOID);
146 
147 /* EOF */
148