On 29/11/21 9:29 pm, Sebastian Huber wrote: > The BSPs provide memory for the workspace initialization via > _Memory_Get(). Most BSPs provide exactly one memory area. Only two > BSPs provide more than one memory area (arm/altera-cyclone-v and > bsps/powerpc/mpc55xxevb). Only if more than one memory area is > provided, there is a need to use _Heap_Extend(). Provide two > implementations to initialize the workspace handler and let the BSP > select one of the implementations based on the number of provided memory > areas. This gets rid of a dependency on _Heap_Extend(). It also avoids > dead code sections for most BSPs. > --- > bsps/shared/start/wkspaceinitmany.c | 46 +++++++ > bsps/shared/start/wkspaceinitone.c | 46 +++++++ > cpukit/include/rtems/score/wkspace.h | 12 +- > cpukit/include/rtems/score/wkspaceinitmany.h | 129 ++++++++++++++++++ > cpukit/include/rtems/score/wkspaceinitone.h | 113 +++++++++++++++ > cpukit/score/src/wkspace.c | 85 +----------- > .../altera-cyclone-v/bspalteracyclonev.yml | 1 + > spec/build/bsps/i386/pc386/obj.yml | 1 + > spec/build/bsps/objmem.yml | 1 + > spec/build/bsps/powerpc/mpc55xxevb/obj.yml | 1 + > spec/build/bsps/powerpc/objmem.yml | 1 + > spec/build/bsps/powerpc/tqm8xx/obj.yml | 1 + > spec/build/bsps/sparc/objmem.yml | 1 + > 13 files changed, 347 insertions(+), 91 deletions(-) > create mode 100644 bsps/shared/start/wkspaceinitmany.c > create mode 100644 bsps/shared/start/wkspaceinitone.c > create mode 100644 cpukit/include/rtems/score/wkspaceinitmany.h > create mode 100644 cpukit/include/rtems/score/wkspaceinitone.h > > diff --git a/bsps/shared/start/wkspaceinitmany.c > b/bsps/shared/start/wkspaceinitmany.c > new file mode 100644 > index 0000000000..30335d63c9 > --- /dev/null > +++ b/bsps/shared/start/wkspaceinitmany.c > @@ -0,0 +1,46 @@ > +/* SPDX-License-Identifier: BSD-2-Clause */ > + > +/** > + * @file > + * > + * @ingroup RTEMSScoreWorkspace > + * > + * @brief This source file contains the _Workspace_Handler_initialization() > + * implementation which supports more than one memory area. > + */ > + > +/* > + * Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de) > + * > + * Redistribution and use in source and binary forms, with or without > + * modification, are permitted provided that the following conditions > + * are met: > + * 1. Redistributions of source code must retain the above copyright > + * notice, this list of conditions and the following disclaimer. > + * 2. Redistributions in binary form must reproduce the above copyright > + * notice, this list of conditions and the following disclaimer in the > + * documentation and/or other materials provided with the distribution. > + * > + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS > IS" > + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE > + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE > + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE > + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR > + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF > + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS > + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN > + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) > + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE > + * POSSIBILITY OF SUCH DAMAGE. > + */ > + > +#ifdef HAVE_CONFIG_H > +#include "config.h" > +#endif > + > +#include <rtems/score/wkspaceinitmany.h> > + > +void _Workspace_Handler_initialization( void ) > +{ > + _Workspace_Initialize_for_many_areas();
_Workspace_Initialize_for_multiple_areas() ? And then also for _Malloc_Initialize_for_many_areas() ? > diff --git a/cpukit/include/rtems/score/wkspaceinitmany.h > b/cpukit/include/rtems/score/wkspaceinitmany.h > new file mode 100644 > index 0000000000..0277c6ee1e > --- /dev/null > +++ b/cpukit/include/rtems/score/wkspaceinitmany.h > @@ -0,0 +1,129 @@ > +/* SPDX-License-Identifier: BSD-2-Clause */ > + > +/** > + * @file > + * > + * @ingroup RTEMSScoreWorkspace > + * > + * @brief This header file provides the implementation of > + * _Workspace_Initialize_for_many_areas(). > + */ > + > +/* > + * Copyright (C) 2012, 2020 embedded brains GmbH > (http://www.embedded-brains.de) > + * > + * Redistribution and use in source and binary forms, with or without > + * modification, are permitted provided that the following conditions > + * are met: > + * 1. Redistributions of source code must retain the above copyright > + * notice, this list of conditions and the following disclaimer. > + * 2. Redistributions in binary form must reproduce the above copyright > + * notice, this list of conditions and the following disclaimer in the > + * documentation and/or other materials provided with the distribution. > + * > + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS > IS" > + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE > + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE > + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE > + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR > + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF > + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS > + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN > + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) > + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE > + * POSSIBILITY OF SUCH DAMAGE. > + */ > + > +#ifndef _RTEMS_SCORE_WKSPACEINITMANY_H > +#define _RTEMS_SCORE_WKSPACEINITMANY_H > + > +#include <rtems/score/wkspace.h> > +#include <rtems/score/heapimpl.h> > +#include <rtems/score/interr.h> > +#include <rtems/score/memory.h> > +#include <rtems/config.h> > + > +#ifdef __cplusplus > +extern "C" { > +#endif > + > +/** > + * @ingroup RTEMSScoreWorkspace > + * > + * @brief Initializes the RTEMS Workspace with support for exactly one memory > + * area. This looks wrong given ... > + * > + * This implementation should be used by BSPs which provide more than one > + * memory area via _Memory_Get() to implement > + * _Workspace_Handler_initialization(). > + */ > +RTEMS_INLINE_ROUTINE void _Workspace_Initialize_for_many_areas( void ) Chris _______________________________________________ devel mailing list devel@rtems.org http://lists.rtems.org/mailman/listinfo/devel