source: svn/newcon3bcm2_21bu/magnum/syslib/framework/7552/bsyslib_resource_pool.c

Last change on this file was 76, checked in by megakiss, 10 years ago

1W 대기전력을 만족시키기 위하여 POWEROFF시 튜너를 Standby 상태로 함

  • Property svn:executable set to *
File size: 2.9 KB
Line 
1/***************************************************************************
2*     Copyright (c) 2004-2008, Broadcom Corporation
3*     All Rights Reserved
4*     Confidential Property of Broadcom Corporation
5*
6*  THIS SOFTWARE MAY ONLY BE USED SUBJECT TO AN EXECUTED SOFTWARE LICENSE
7*  AGREEMENT  BETWEEN THE USER AND BROADCOM.  YOU HAVE NO RIGHT TO USE OR
8*  EXPLOIT THIS MATERIAL EXCEPT SUBJECT TO THE TERMS OF SUCH AN AGREEMENT.
9*
10* $brcm_Workfile: bsyslib_resource_pool.c $
11* $brcm_Revision: Hydra_Software_Devel/1 $
12* $brcm_Date: 3/24/08 3:09p $
13*
14* Revision History:
15*
16* $brcm_Log: /magnum/syslib/framework/noarch/bsyslib_resource_pool.c $
17*
18* Hydra_Software_Devel/1   3/24/08 3:09p bandrews
19* PR40865: Fixed
20*
21* Hydra_Software_Devel/1   1/10/08 5:21p bandrews
22* PR36149: Added resource pool
23***************************************************************************/
24
25#include "bstd.h"
26#include "bsyslib_list.h"
27#include "bsyslib_resource_pool.h"
28
29BDBG_MODULE(syslib_resource_pool);
30
31BSYSlib_ResourcePool * BSYSlib_ResourcePool_Create(void)
32{
33        BSYSlib_ResourcePool * psPool;
34
35        BDBG_ENTER(BSYSlib_ResourcePool_Create);
36
37        psPool = (BSYSlib_ResourcePool *)BKNI_Malloc(sizeof(BSYSlib_ResourcePool));
38
39        if (psPool)
40        {
41                psPool->hResources = BSYSlib_List_Create();
42                psPool->hFree = BSYSlib_List_Create();
43        }
44
45        BDBG_LEAVE(BSYSlib_ResourcePool_Create);
46        return psPool;
47}
48
49void BSYSlib_ResourcePool_Destroy(BSYSlib_ResourcePool * psPool)
50{
51        BDBG_ENTER(BSYSlib_ResourcePool_Destroy);
52
53        BDBG_ASSERT(psPool);
54
55        BSYSlib_List_Destroy(psPool->hResources);
56        BSYSlib_List_Destroy(psPool->hFree);
57
58        BKNI_Free(psPool);
59
60        BDBG_LEAVE(BSYSlib_ResourcePool_Destroy);
61}
62
63void BSYSlib_ResourcePool_Add(BSYSlib_ResourcePool * psPool, void * pvResource)
64{
65        BDBG_ENTER(BSYSlib_ResourcePool_Add);
66
67        BDBG_ASSERT(psPool);
68        BDBG_ASSERT(pvResource);
69
70        BSYSlib_List_AddElement(psPool->hResources, pvResource);
71        BSYSlib_List_AddElement(psPool->hFree, pvResource);
72
73        BDBG_LEAVE(BSYSlib_ResourcePool_Add);
74}
75
76void BSYSlib_ResourcePool_Remove(BSYSlib_ResourcePool * psPool, void * pvResource)
77{
78        BDBG_ENTER(BSYSlib_ResourcePool_Remove);
79
80        BDBG_ASSERT(psPool);
81        BDBG_ASSERT(pvResource);
82
83        BSYSlib_List_RemoveElement(psPool->hResources, pvResource);
84        BSYSlib_List_RemoveElement(psPool->hFree, pvResource);
85
86        BDBG_LEAVE(BSYSlib_ResourcePool_Remove);
87}
88
89void * BSYSlib_ResourcePool_Acquire(BSYSlib_ResourcePool * psPool)
90{
91        void * pvResource = NULL;
92       
93        BDBG_ENTER(BSYSlib_ResourcePool_Acquire);
94
95        BDBG_ASSERT(psPool);
96
97        if (!BSYSlib_List_IsEmpty(psPool->hFree))
98        {
99                pvResource = BSYSlib_List_GetByIndex(psPool->hFree, 0);
100                BSYSlib_List_RemoveElement(psPool->hFree, pvResource);
101        }
102
103        BDBG_LEAVE(BSYSlib_ResourcePool_Acquire);
104        return pvResource;
105}
106
107void BSYSlib_ResourcePool_Release(BSYSlib_ResourcePool * psPool, void * pvResource)
108{
109        BDBG_ENTER(BSYSlib_ResourcePool_Release);
110
111        BDBG_ASSERT(psPool);
112        BDBG_ASSERT(pvResource);
113
114        BSYSlib_List_AddElement(psPool->hFree, pvResource);
115
116        BDBG_LEAVE(BSYSlib_ResourcePool_Release);
117}
118
Note: See TracBrowser for help on using the repository browser.