source: trunk/kernel/mm/kmem.h

Last change on this file was 683, checked in by alain, 6 years ago

All modifications required to support the <tcp_chat> application
including error recovery in case of packet loss.A

File size: 4.0 KB
Line 
1/*
2 * kmem.h - unified kernel memory allocator definition
3 *
4 * Authors Alain Greiner (2016,2017,2018,2019,2020)
5 *
6 * Copyright (c) UPMC Sorbonne Universites
7 *
8 * This file is part of ALMOS-MKH.
9 *
10 * ALMOS-MKH is free software; you can redistribute it and/or modify it
11 * under the terms of the GNU General Public License as published by
12 * the Free Software Foundation; version 2.0 of the License.
13 *
14 * ALMOS-MKH is distributed in the hope that it will be useful, but
15 * WITHOUT ANY WARRANTY; without even the implied warranty of
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
17 * General Public License for more details.
18 *
19 * You should have received a copy of the GNU General Public License
20 * along with ALMOS; if not, write to the Free Software Foundation,
21 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
22 */
23
24#ifndef _KMEM_H_
25#define _KMEM_H_
26
27#include <hal_kernel_types.h>
28#include <kcm.h>
29
30/*************************************************************************************
31 * This defines the generic Allocation Flags that can be associated to
32 * a Kernel Memory Request.
33 ************************************************************************************/
34
35#define AF_NONE 0x0000 // no attributes
36#define AF_KERNEL 0x0001 // for kernel use ???
37#define AF_ZERO 0x0002 // data buffer must be reset to 0
38
39/*************************************************************************************
40 * These two functions allocate physical memory in a local or remote cluster
41 * as specified by the <cxy>, <order> and <flags> arguments, and return a local
42 * pointer on the allocated buffer. The buffer size (in bytes) is a power of 2,
43 * equal to (1 << order) bytes. It can be initialized to zero if requested.
44 * Depending on the <order> value, it uses two specialised allocators:
45 * - When order is larger or equal to CONFIG_PPM_PAGE_ORDER, the PPM (Physical Pages
46 * Manager) allocates 2**(order - PPM_PAGE_ORDER) contiguous small physical pages.
47 * This allocator implements the buddy algorithm.
48 * - When order is smaller than CONFIG_PPM_PAGE_ORDER, the KCM (Kernel Cache Manager)
49 * allocates an aligned block of 2**order bytes from specialised KCM[ORDER] caches
50 * (one KCM cache per block size).
51 *************************************************************************************
52 * @ cxy : [in] target cluster identifier for a remote access).
53 * @ order : [in] ln( block size in bytes).
54 * @ flags : [in] allocation flags defined above.
55 * @ return local pointer on allocated buffer if success / return NULL if no memory.
56 ************************************************************************************/
57void * kmem_alloc( uint32_t order,
58 uint32_t flags );
59
60void * kmem_remote_alloc( cxy_t cxy,
61 uint32_t order,
62 uint32_t flags );
63
64/*************************************************************************************
65 * These two functions release a previously allocated physical memory block,
66 * as specified by the <cxy>, <order> and <ptr> arguments.
67 * - When order is larger or equal to CONFIG_PPM_PAGE_ORDER, the PPM (Physical Pages
68 * Manager) releases 2**(order - PPM_PAGE_ORDER) contiguous small physical pages.
69 * This allocator implements the buddy algorithm.
70 * - When order is smaller than CONFIG_PPM_PAGE_ORDER, the KCM (Kernel Cache Manager)
71 * release release the block of 2**order bytes to the specialised KCM[order] cache.
72 *************************************************************************************
73 * @ cxy : [in] target cluster identifier for a remote access.
74 * @ ptr : [in] local pointer to released block.
75 * @ order : [in] ln( block size in bytes ).
76 ************************************************************************************/
77void kmem_free( void * ptr,
78 uint32_t order );
79
80void kmem_remote_free( cxy_t cxy,
81 void * ptr,
82 uint32_t order );
83
84
85#endif /* _KMEM_H_ */
Note: See TracBrowser for help on using the repository browser.