Project

General

Profile

Statistics
| Revision:

root / lab4 / .minix-src / include / lcom / liblm.h @ 14

History | View | Annotate | Download (2.07 KB)

1 13 up20180614
#pragma once
2
3
/** @defgroup liblm liblm
4
 * @{
5
 *
6
 * Functions related to low memory (first 1 MB of physical memory), required for BIOS
7
 */
8
9
#include <stdbool.h>
10
11
#include <minix/syslib.h>
12
13
#define PB2BASE(x) (((x) >> 4) & 0x0F000) // phys_bytes to segment base
14
#define PB2OFF(x) ((x) & (0x0FFFF))       // phys_bytes to segment offset
15
16
/** @name Memory Map Struct*/
17
/**@{
18
 *
19
 * Struct that keeps info regarding the mapping of physical memory to virtual memory
20
 */
21
typedef struct {
22
  phys_bytes phys; /**< @brief physical address */
23
  void *virt;      /**< @brief virtual address */
24
  size_t size;     /**< @brief size of mapped memory region */
25
} mmap_t;
26
27
/** @} end of Memory Map Struct */
28
29
/**
30
 * @brief Initializes the low memory area, the region up to the 1 MByte physical address, by mapping it on the process' physical memory address
31
 *
32
 * @param enable_logging set whether log messages should be printed or not
33
 *
34
 * @return virtual address on which the first 1 MB was mapped, NULL upon failure
35
 */
36
void *lm_init(bool enable_logging);
37
38
/**
39
 * @brief Allocates a memory block in low memory area with the specified size
40
 *
41
 * Allocates a memory block in the region up to the 1 MByte physical address with the input size,
42
 *  and initializes the input mmap_t struct with the mapping information.
43
 *
44
 * @param size size of the memory block to allocate
45
 * @param map pointer to mmap_t data structure, which represents the memory map
46
 * @return the virtual address of the memory block on success, NULL otherwise
47
 */
48
void *lm_alloc(size_t size, mmap_t *map);
49
50
/**
51
 * @brief Frees a memory block in the low memory area, previously allocated using lm_alloc()
52
 *
53
 * Frees a memory block in the region up to the 1 MByte physical address, previously
54
 *  allocated using lm_alloc(). Takes as input the address of the mmap_t structure that
55
 *  was passed to lm_alloc(), and that must have not been modified since.
56
 *
57
 * @param map pointer to mmap_t data structure of the block being freed
58
 * @return a boolean indicating whether memory deallocation succeeded
59
 */
60
bool lm_free(const mmap_t *map);
61
62
/** @} end of liblm */