Back to home page

LXR

 
 

    


File indexing completed on 2025-05-11 08:24:21

0001 /* SPDX-License-Identifier: BSD-2-Clause */
0002 
0003 /**
0004  * @file
0005  *
0006  * @ingroup RTEMSTestFrameworkImpl
0007  *
0008  * @brief This source file contains the implementation of
0009  *   T_memory_allocate(), T_memory_deallocate(), and T_memory_action().
0010  */
0011 
0012 /*
0013  * Copyright (C) 2020 embedded brains GmbH & Co. KG
0014  *
0015  * Redistribution and use in source and binary forms, with or without
0016  * modification, are permitted provided that the following conditions
0017  * are met:
0018  * 1. Redistributions of source code must retain the above copyright
0019  *    notice, this list of conditions and the following disclaimer.
0020  * 2. Redistributions in binary form must reproduce the above copyright
0021  *    notice, this list of conditions and the following disclaimer in the
0022  *    documentation and/or other materials provided with the distribution.
0023  *
0024  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
0025  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
0026  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
0027  * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
0028  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
0029  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
0030  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
0031  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
0032  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
0033  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
0034  * POSSIBILITY OF SUCH DAMAGE.
0035  */
0036 
0037 #include <rtems/test.h>
0038 
0039 #include <rtems/score/memory.h>
0040 #include <rtems/sysinit.h>
0041 
0042 static Memory_Area T_memory_areas[1];
0043 
0044 static Memory_Information T_memory_information =
0045     MEMORY_INFORMATION_INITIALIZER(T_memory_areas);
0046 
0047 static void
0048 T_memory_initialize(void)
0049 {
0050     const Memory_Information *mem;
0051     Memory_Area *area;
0052     void *begin;
0053     uintptr_t size;
0054 
0055     mem = _Memory_Get();
0056     area = _Memory_Get_area(mem, 0);
0057     begin = _Memory_Get_free_begin(area);
0058     size = _Memory_Get_free_size(area) / 2;
0059     _Memory_Consume(area, size);
0060     _Memory_Initialize_by_size(&T_memory_areas[0], begin, size);
0061 }
0062 
0063 RTEMS_SYSINIT_ITEM(T_memory_initialize, RTEMS_SYSINIT_WORKSPACE,
0064     RTEMS_SYSINIT_ORDER_FIRST);
0065 
0066 void *
0067 T_memory_allocate(size_t size)
0068 {
0069     return _Memory_Allocate(&T_memory_information, size,
0070         CPU_HEAP_ALIGNMENT);
0071 }
0072 
0073 void
0074 T_memory_deallocate(void *ptr)
0075 {
0076     (void)ptr;
0077 }
0078 
0079 void
0080 T_memory_action(T_event event, const char *name)
0081 {
0082     Memory_Area *area;
0083 
0084     (void)name;
0085 
0086     switch (event) {
0087     case T_EVENT_CASE_BEGIN:
0088         area = &T_memory_areas[0];
0089         _Memory_Set_free_begin(area,
0090             RTEMS_DECONST(void *, _Memory_Get_begin(area)));
0091         break;
0092     default:
0093         break;
0094     };
0095 }