2020-01-12 16:53:32 +01:00
|
|
|
//----------------------------------------------------------------------------//
|
2020-09-27 17:33:48 +02:00
|
|
|
// OS on Kaleid //
|
2020-01-12 16:53:32 +01:00
|
|
|
// //
|
|
|
|
// Desc: Mapping and checking memory related functions //
|
|
|
|
// //
|
|
|
|
// //
|
2020-02-06 14:23:26 +01:00
|
|
|
// Copyright © 2018-2020 The OS/K Team //
|
2020-01-12 16:53:32 +01:00
|
|
|
// //
|
|
|
|
// This file is part of OS/K. //
|
|
|
|
// //
|
|
|
|
// OS/K is free software: you can redistribute it and/or modify //
|
|
|
|
// it under the terms of the GNU General Public License as published by //
|
|
|
|
// the Free Software Foundation, either version 3 of the License, or //
|
|
|
|
// any later version. //
|
|
|
|
// //
|
|
|
|
// OS/K is distributed in the hope that it will be useful, //
|
|
|
|
// but WITHOUT ANY WARRANTY//without even the implied warranty of //
|
|
|
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the //
|
|
|
|
// GNU General Public License for more details. //
|
|
|
|
// //
|
|
|
|
// You should have received a copy of the GNU General Public License //
|
|
|
|
// along with OS/K. If not, see <https://www.gnu.org/licenses/>. //
|
|
|
|
//----------------------------------------------------------------------------//
|
|
|
|
|
|
|
|
#ifndef _KERNEL_H
|
|
|
|
#include <kernel.h>
|
|
|
|
#endif
|
|
|
|
|
|
|
|
#ifndef _MM_MAP_H
|
|
|
|
#define _MM_MAP_H
|
|
|
|
|
|
|
|
//----------------------------------------------------------------------------//
|
|
|
|
|
|
|
|
#define MINIMUM_RAM_SIZE 16 // Mio, the minimum RAM size.
|
|
|
|
|
|
|
|
#define AVAILABLE_ZONE 1 // Fully usable RAM zone
|
|
|
|
#define RESERVED_ZONE 2 // Used by the firmware
|
|
|
|
#define ACPI_ZONE 3 // Used by ACPI but can be freed
|
|
|
|
#define NVS_ZONE 4 // Dunno
|
|
|
|
#define BADRAM_ZONE 5 // Invalid zone because material problem...
|
|
|
|
#define MAX_ENTRIES 2048 // Max number of memory map entries
|
|
|
|
|
|
|
|
//----------------------------------------------------------------------------//
|
|
|
|
|
|
|
|
// The entry structure of the map
|
|
|
|
struct MapEntry_t {
|
|
|
|
void *addr;
|
|
|
|
size_t length; // in bytes
|
|
|
|
uint type; // reserved or not
|
|
|
|
} __attribute__((__packed__));
|
|
|
|
|
|
|
|
// the map structure
|
|
|
|
struct MemoryMap_t {
|
|
|
|
size_t length;
|
|
|
|
size_t freeRamSize;
|
|
|
|
size_t nonfreeRamSize;
|
|
|
|
MapEntry_t entry[MAX_ENTRIES];
|
|
|
|
} __attribute__((__packed__));
|
|
|
|
|
|
|
|
//----------------------------------------------------------------------------//
|
|
|
|
|
|
|
|
//
|
|
|
|
// Initializes the memory map structure
|
|
|
|
//
|
|
|
|
void MmInitMemoryMap(void);
|
|
|
|
|
|
|
|
//
|
|
|
|
// Initializes the memory map structure
|
|
|
|
//
|
|
|
|
void MmPrintMemoryMap(void);
|
|
|
|
|
|
|
|
//
|
|
|
|
// Returns the size of the first available memory zone
|
|
|
|
// from the start address pointer
|
|
|
|
//
|
|
|
|
size_t MmGetAvailZoneSize(void *start);
|
|
|
|
|
2020-01-27 15:28:44 +01:00
|
|
|
//
|
|
|
|
// Returns 1 if busy
|
|
|
|
//
|
|
|
|
bool MmIsBusyZone(void *start);
|
|
|
|
|
2020-01-12 16:53:32 +01:00
|
|
|
//
|
|
|
|
// Returns the first available memory zone from the start address pointer
|
|
|
|
//
|
|
|
|
void *MmGetFirstAvailZone(void *start);
|
|
|
|
|
|
|
|
//----------------------------------------------------------------------------//
|
|
|
|
|
|
|
|
#endif
|