source: rtems/cpukit/rtems/src/workspacegreedy.c @ 255fe43

Last change on this file since 255fe43 was 255fe43, checked in by Joel Sherrill <joel@…>, on 03/01/22 at 20:40:44

cpukit/: Scripted embedded brains header file clean up

Updates #4625.

  • Property mode set to 100644
File size: 2.8 KB
Line 
1/* SPDX-License-Identifier: BSD-2-Clause */
2
3/**
4 * @file
5 *
6 * @ingroup RTEMSImplClassic
7 *
8 * @brief This source file contains the implementation of
9 *   rtems_workspace_greedy_allocate(),
10 *   rtems_workspace_greedy_allocate_all_except_largest(), and
11 *   rtems_workspace_greedy_free().
12 */
13
14/*
15 * Copyright (c) 2012 embedded brains GmbH.  All rights reserved.
16 *
17 * Redistribution and use in source and binary forms, with or without
18 * modification, are permitted provided that the following conditions
19 * are met:
20 * 1. Redistributions of source code must retain the above copyright
21 *    notice, this list of conditions and the following disclaimer.
22 * 2. Redistributions in binary form must reproduce the above copyright
23 *    notice, this list of conditions and the following disclaimer in the
24 *    documentation and/or other materials provided with the distribution.
25 *
26 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
27 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
28 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
29 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
30 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
31 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
32 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
33 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
34 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
35 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
36 * POSSIBILITY OF SUCH DAMAGE.
37 */
38
39#ifdef HAVE_CONFIG_H
40#include "config.h"
41#endif
42
43#include <rtems/rtems/support.h>
44#include <rtems/score/apimutex.h>
45#include <rtems/score/heapimpl.h>
46#include <rtems/score/threaddispatch.h>
47#include <rtems/score/wkspace.h>
48#include <rtems/malloc.h>
49
50#define SBRK_ALLOC_SIZE (128 * 1024UL * 1024UL)
51
52void *rtems_workspace_greedy_allocate(
53  const uintptr_t *block_sizes,
54  size_t block_count
55)
56{
57  Heap_Control *heap = &_Workspace_Area;
58  void *opaque;
59
60  rtems_heap_sbrk_greedy_allocate( heap, SBRK_ALLOC_SIZE );
61
62  _RTEMS_Lock_allocator();
63  opaque = _Heap_Greedy_allocate( heap, block_sizes, block_count );
64  _RTEMS_Unlock_allocator();
65
66  return opaque;
67}
68
69void *rtems_workspace_greedy_allocate_all_except_largest(
70  uintptr_t *allocatable_size
71)
72{
73  Heap_Control *heap = &_Workspace_Area;
74  void *opaque;
75
76  rtems_heap_sbrk_greedy_allocate( heap, SBRK_ALLOC_SIZE );
77
78  _RTEMS_Lock_allocator();
79  opaque = _Heap_Greedy_allocate_all_except_largest(
80    heap,
81    allocatable_size
82  );
83  _RTEMS_Unlock_allocator();
84
85  return opaque;
86}
87
88void rtems_workspace_greedy_free( void *opaque )
89{
90  _RTEMS_Lock_allocator();
91  _Heap_Greedy_free( &_Workspace_Area, opaque );
92  _RTEMS_Unlock_allocator();
93}
Note: See TracBrowser for help on using the repository browser.