OpenCores
URL https://opencores.org/ocsvn/or1k/or1k/trunk

Subversion Repositories or1k

[/] [or1k/] [trunk/] [ecos-2.0/] [packages/] [services/] [memalloc/] [common/] [v2_0/] [include/] [mempoolt.hxx] - Blame information for rev 1765

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 1254 phoenix
#ifndef CYGONCE_KERNEL_MEMPOOLT_HXX
2
#define CYGONCE_KERNEL_MEMPOOLT_HXX
3
 
4
//==========================================================================
5
//
6
//      mempoolt.hxx
7
//
8
//      Mempoolt (Memory pool template) class declarations
9
//
10
//==========================================================================
11
//####ECOSGPLCOPYRIGHTBEGIN####
12
// -------------------------------------------
13
// This file is part of eCos, the Embedded Configurable Operating System.
14
// Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc.
15
//
16
// eCos is free software; you can redistribute it and/or modify it under
17
// the terms of the GNU General Public License as published by the Free
18
// Software Foundation; either version 2 or (at your option) any later version.
19
//
20
// eCos is distributed in the hope that it will be useful, but WITHOUT ANY
21
// WARRANTY; without even the implied warranty of MERCHANTABILITY or
22
// FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
23
// for more details.
24
//
25
// You should have received a copy of the GNU General Public License along
26
// with eCos; if not, write to the Free Software Foundation, Inc.,
27
// 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
28
//
29
// As a special exception, if other files instantiate templates or use macros
30
// or inline functions from this file, or you compile this file and link it
31
// with other works to produce a work based on this file, this file does not
32
// by itself cause the resulting work to be covered by the GNU General Public
33
// License. However the source code for this file must still be made available
34
// in accordance with section (3) of the GNU General Public License.
35
//
36
// This exception does not invalidate any other reasons why a work based on
37
// this file might be covered by the GNU General Public License.
38
//
39
// Alternative licenses for eCos may be arranged by contacting Red Hat, Inc.
40
// at http://sources.redhat.com/ecos/ecos-license/
41
// -------------------------------------------
42
//####ECOSGPLCOPYRIGHTEND####
43
//==========================================================================
44
//#####DESCRIPTIONBEGIN####
45
//
46
// Author(s):   hmt
47
// Contributors:        hmt
48
// Date:        1998-02-10
49
// Purpose:     Define Mempoolt class interface
50
 
51
// Description: The class defined here provides the APIs for thread-safe,
52
//              kernel-savvy memory managers; make a class with the
53
//              underlying allocator as the template parameter.
54
// Usage:       #include 
55
//
56
//
57
//####DESCRIPTIONEND####
58
//
59
//==========================================================================
60
 
61
#include 
62
#include          // assertion macros
63
#include 
64
 
65
template 
66
class Cyg_Mempoolt
67
{
68
private:
69
    T pool;                             // underlying memory manager
70
    Cyg_ThreadQueue queue;              // queue of waiting threads
71
 
72
public:
73
 
74
    CYGDBG_DEFINE_CHECK_THIS
75
 
76
    Cyg_Mempoolt(
77
        cyg_uint8 *base,
78
        cyg_int32 size,
79
        CYG_ADDRWORD arg_thru );        // Constructor
80
    ~Cyg_Mempoolt();                    // Destructor
81
 
82
    // get some memory; wait if none available; return NULL if failed
83
    // due to interrupt
84
    cyg_uint8 *alloc( cyg_int32 size );
85
 
86
#ifdef CYGFUN_KERNEL_THREADS_TIMER
87
    // get some memory with a timeout; return NULL if failed
88
    // due to interrupt or timeout
89
    cyg_uint8 *alloc( cyg_int32 size, cyg_tick_count abs_timeout );
90
#endif
91
 
92
    // get some memory, return NULL if none available
93
    cyg_uint8 *try_alloc( cyg_int32 size );
94
 
95
    // free the memory back to the pool
96
    cyg_bool free( cyg_uint8 *p, cyg_int32 size );
97
 
98
    // if applicable: return -1 if not fixed size
99
    cyg_int32 get_blocksize();
100
 
101
    // is anyone waiting for memory?
102
    cyg_bool waiting() { return ! queue.empty(); }
103
 
104
    // these two are obvious and generic
105
    cyg_int32 get_totalmem();
106
    cyg_int32 get_freemem();
107
 
108
    // get information about the construction parameters for external
109
    // freeing after the destruction of the holding object.
110
    void get_arena(
111
        cyg_uint8 * &base,
112
        cyg_int32 &size,
113
        CYG_ADDRWORD &arg_thru );
114
 
115
    // Return the size of the memory allocation (previously returned
116
    // by alloc() or try_alloc() ) at ptr. Returns -1 if not found
117
    cyg_int32
118
    get_allocation_size( cyg_uint8 * /* ptr */ );
119
};
120
 
121
// -------------------------------------------------------------------------
122
#endif // ifndef CYGONCE_KERNEL_MEMPOOLT_HXX
123
// EOF mempoolt.hxx

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.