source: rtems/cpukit/rtems/src/regionextend.c @ f6c7c57d

4.115
Last change on this file since f6c7c57d was f6c7c57d, checked in by Sebastian Huber <sebastian.huber@…>, on 07/23/13 at 12:38:19

rtems: Create region implementation header

Move implementation specific parts of region.h and region.inl into new
header file regionimpl.h. The region.h contains now only the
application visible API.

  • Property mode set to 100644
File size: 1.8 KB
Line 
1/**
2 *  @file
3 *
4 *  @brief RTEMS Extend Region
5 *  @ingroup ClassicRegion
6 */
7
8/*
9 *  COPYRIGHT (c) 1989-2009.
10 *  On-Line Applications Research Corporation (OAR).
11 *
12 *  The license and distribution terms for this file may be
13 *  found in the file LICENSE in this distribution or at
14 *  http://www.rtems.com/license/LICENSE.
15 */
16
17#if HAVE_CONFIG_H
18#include "config.h"
19#endif
20
21#include <rtems/system.h>
22#include <rtems/rtems/status.h>
23#include <rtems/rtems/support.h>
24#include <rtems/score/object.h>
25#include <rtems/rtems/options.h>
26#include <rtems/rtems/regionimpl.h>
27#include <rtems/score/states.h>
28#include <rtems/score/thread.h>
29#include <rtems/score/apimutex.h>
30
31rtems_status_code rtems_region_extend(
32  rtems_id   id,
33  void      *starting_address,
34  uintptr_t  length
35)
36{
37  uintptr_t           amount_extended;
38  Objects_Locations   location;
39  rtems_status_code   return_status;
40  Region_Control     *the_region;
41
42  if ( !starting_address )
43    return RTEMS_INVALID_ADDRESS;
44
45  _RTEMS_Lock_allocator();                      /* to prevent deletion */
46
47    the_region = _Region_Get( id, &location );
48    switch ( location ) {
49
50      case OBJECTS_LOCAL:
51
52        amount_extended = _Heap_Extend(
53          &the_region->Memory,
54          starting_address,
55          length,
56          0
57        );
58
59        if ( amount_extended > 0 ) {
60          the_region->length                += amount_extended;
61          the_region->maximum_segment_size  += amount_extended;
62          return_status = RTEMS_SUCCESSFUL;
63        } else {
64          return_status = RTEMS_INVALID_ADDRESS;
65        }
66        break;
67
68#if defined(RTEMS_MULTIPROCESSING)
69      case OBJECTS_REMOTE:        /* this error cannot be returned */
70        break;
71#endif
72
73      case OBJECTS_ERROR:
74      default:
75        return_status = RTEMS_INVALID_ID;
76        break;
77    }
78
79  _RTEMS_Unlock_allocator();
80  return return_status;
81}
Note: See TracBrowser for help on using the repository browser.