source: rtems/cpukit/score/src/objectinitializeinformation.c @ 1c2d178

5
Last change on this file since 1c2d178 was 1c2d178, checked in by Sebastian Huber <sebastian.huber@…>, on 11/25/18 at 19:15:26

score: Remove Objects_Information::maximum

This information is already present in Objects_Information::maximum_id.
Add and use _Objects_Get_maximum_index().

Update #3621.

  • Property mode set to 100644
File size: 2.6 KB
Line 
1/**
2 * @file
3 *
4 * @brief Initialize Object Information
5 * @ingroup ScoreObject
6 */
7
8/*
9 *  COPYRIGHT (c) 1989-2011.
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.org/license/LICENSE.
15 */
16
17#if HAVE_CONFIG_H
18#include "config.h"
19#endif
20
21#include <rtems/score/objectimpl.h>
22#include <rtems/score/chainimpl.h>
23#include <rtems/score/interr.h>
24#include <rtems/score/sysstate.h>
25#include <rtems/score/wkspace.h>
26
27void _Objects_Do_initialize_information(
28  Objects_Information *information,
29  Objects_APIs         the_api,
30  uint16_t             the_class,
31  uint32_t             maximum,
32  uint16_t             object_size,
33  uint16_t             maximum_name_length
34#if defined(RTEMS_MULTIPROCESSING)
35  ,
36  Objects_Thread_queue_Extract_callout extract
37#endif
38)
39{
40  Objects_Maximum maximum_per_allocation;
41
42  information->the_api     = the_api;
43  information->the_class   = the_class;
44  information->object_size = object_size;
45
46  /*
47   *  Register this Object Class in the Object Information Table.
48   */
49  _Objects_Information_table[ the_api ][ the_class ] = information;
50
51  /*
52   *  Are we operating in limited or unlimited (e.g. auto-extend) mode.
53   */
54  information->auto_extend = _Objects_Is_unlimited( maximum );
55  maximum_per_allocation = _Objects_Maximum_per_allocation( maximum );
56
57  /*
58   *  Unlimited and maximum of zero is illogical.
59   */
60  if ( information->auto_extend && maximum_per_allocation == 0) {
61    _Internal_error( INTERNAL_ERROR_UNLIMITED_AND_MAXIMUM_IS_0 );
62  }
63
64  /*
65   *  The allocation unit is the maximum value
66   */
67  information->objects_per_block = maximum_per_allocation;
68
69  /*
70   *  Calculate the maximum name length
71   *
72   *  NOTE: Either 4 bytes for Classic API names or an arbitrary
73   *        number for POSIX names which are strings that may be
74   *        an odd number of bytes.
75   */
76
77  information->name_length = maximum_name_length;
78
79  _Chain_Initialize_empty( &information->Inactive );
80
81  /*
82   *  Initialize objects .. if there are any
83   */
84  if ( maximum_per_allocation ) {
85    /*
86     *  Always have the maximum size available so the current performance
87     *  figures are create are met.  If the user moves past the maximum
88     *  number then a performance hit is taken.
89     */
90    _Objects_Extend_information( information );
91  }
92
93  /*
94   *  Take care of multiprocessing
95   */
96  #if defined(RTEMS_MULTIPROCESSING)
97    information->extract = extract;
98    _RBTree_Initialize_empty( &information->Global_by_id );
99    _RBTree_Initialize_empty( &information->Global_by_name );
100  #endif
101}
Note: See TracBrowser for help on using the repository browser.