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 */ |