|
Packit |
857059 |
/* BEGIN_ICS_COPYRIGHT6 ****************************************
|
|
Packit |
857059 |
|
|
Packit |
857059 |
Copyright (c) 2015, Intel Corporation
|
|
Packit |
857059 |
|
|
Packit |
857059 |
Redistribution and use in source and binary forms, with or without
|
|
Packit |
857059 |
modification, are permitted provided that the following conditions are met:
|
|
Packit |
857059 |
|
|
Packit |
857059 |
* Redistributions of source code must retain the above copyright notice,
|
|
Packit |
857059 |
this list of conditions and the following disclaimer.
|
|
Packit |
857059 |
* Redistributions in binary form must reproduce the above copyright
|
|
Packit |
857059 |
notice, this list of conditions and the following disclaimer in the
|
|
Packit |
857059 |
documentation and/or other materials provided with the distribution.
|
|
Packit |
857059 |
* Neither the name of Intel Corporation nor the names of its contributors
|
|
Packit |
857059 |
may be used to endorse or promote products derived from this software
|
|
Packit |
857059 |
without specific prior written permission.
|
|
Packit |
857059 |
|
|
Packit |
857059 |
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
|
Packit |
857059 |
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
Packit |
857059 |
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
|
Packit |
857059 |
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
|
|
Packit |
857059 |
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
Packit |
857059 |
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
|
Packit |
857059 |
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
|
Packit |
857059 |
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
|
Packit |
857059 |
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
Packit |
857059 |
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
Packit |
857059 |
|
|
Packit |
857059 |
** END_ICS_COPYRIGHT6 ****************************************/
|
|
Packit |
857059 |
|
|
Packit |
857059 |
#include "iobjmgr.h"
|
|
Packit |
857059 |
#include "imemory.h"
|
|
Packit |
857059 |
|
|
Packit |
857059 |
|
|
Packit |
857059 |
#define OBJ_MGR_TAG MAKE_MEM_TAG( i, o, b, j )
|
|
Packit |
857059 |
|
|
Packit |
857059 |
void
|
|
Packit |
857059 |
ObjMgrInitState(
|
|
Packit |
857059 |
IN OBJECT_MGR* const pObjMgr )
|
|
Packit |
857059 |
{
|
|
Packit |
857059 |
QListInitState( &pObjMgr->m_ObjList );
|
|
Packit |
857059 |
pObjMgr->m_Initialized = FALSE;
|
|
Packit |
857059 |
}
|
|
Packit |
857059 |
|
|
Packit |
857059 |
|
|
Packit |
857059 |
boolean
|
|
Packit |
857059 |
ObjMgrInit(
|
|
Packit |
857059 |
IN OBJECT_MGR* const pObjMgr,
|
|
Packit |
857059 |
IN const boolean ObjectsPageable )
|
|
Packit |
857059 |
{
|
|
Packit |
857059 |
ASSERT( pObjMgr );
|
|
Packit |
857059 |
|
|
Packit |
857059 |
pObjMgr->m_Initialized = FALSE;
|
|
Packit |
857059 |
pObjMgr->ObjectsPageable = ObjectsPageable;
|
|
Packit |
857059 |
pObjMgr->m_Initialized =
|
|
Packit |
857059 |
QListInit( &pObjMgr->m_ObjList );
|
|
Packit |
857059 |
return pObjMgr->m_Initialized;
|
|
Packit |
857059 |
}
|
|
Packit |
857059 |
|
|
Packit |
857059 |
|
|
Packit |
857059 |
void
|
|
Packit |
857059 |
ObjMgrDestroy(
|
|
Packit |
857059 |
IN OBJECT_MGR* const pObjMgr )
|
|
Packit |
857059 |
{
|
|
Packit |
857059 |
LIST_ITEM *pListItem;
|
|
Packit |
857059 |
ASSERT( pObjMgr );
|
|
Packit |
857059 |
|
|
Packit |
857059 |
if( !pObjMgr->m_Initialized )
|
|
Packit |
857059 |
return;
|
|
Packit |
857059 |
|
|
Packit |
857059 |
// Deallocate all objects.
|
|
Packit |
857059 |
while( NULL != (pListItem = QListRemoveHead( &pObjMgr->m_ObjList )) )
|
|
Packit |
857059 |
MemoryDeallocate( pListItem );
|
|
Packit |
857059 |
|
|
Packit |
857059 |
QListDestroy( &pObjMgr->m_ObjList );
|
|
Packit |
857059 |
pObjMgr->m_Initialized = FALSE;
|
|
Packit |
857059 |
}
|
|
Packit |
857059 |
|
|
Packit |
857059 |
|
|
Packit |
857059 |
// Allocate an object and add it to the object manager's list.
|
|
Packit |
857059 |
void*
|
|
Packit |
857059 |
ObjMgrAllocate(
|
|
Packit |
857059 |
IN OBJECT_MGR* const pObjMgr,
|
|
Packit |
857059 |
IN const uint32 Bytes )
|
|
Packit |
857059 |
{
|
|
Packit |
857059 |
LIST_ITEM *pListItem;
|
|
Packit |
857059 |
ASSERT( pObjMgr && Bytes && pObjMgr->m_Initialized );
|
|
Packit |
857059 |
|
|
Packit |
857059 |
// Allocate the object, with a list item at the head.
|
|
Packit |
857059 |
pListItem = (LIST_ITEM*)MemoryAllocateAndClear( Bytes + sizeof( LIST_ITEM ),
|
|
Packit |
857059 |
pObjMgr->ObjectsPageable, OBJ_MGR_TAG );
|
|
Packit |
857059 |
|
|
Packit |
857059 |
if( !pListItem )
|
|
Packit |
857059 |
return NULL;
|
|
Packit |
857059 |
|
|
Packit |
857059 |
// Insert the item into the object manager's list.
|
|
Packit |
857059 |
pListItem->pObject = (char*)pListItem + sizeof( LIST_ITEM );
|
|
Packit |
857059 |
QListInsertHead( &pObjMgr->m_ObjList, pListItem );
|
|
Packit |
857059 |
return pListItem->pObject;
|
|
Packit |
857059 |
}
|
|
Packit |
857059 |
|
|
Packit |
857059 |
|
|
Packit |
857059 |
// Destroy an object maintained by the object manager.
|
|
Packit |
857059 |
void
|
|
Packit |
857059 |
ObjMgrDeallocate(
|
|
Packit |
857059 |
IN OBJECT_MGR* const pObjMgr,
|
|
Packit |
857059 |
IN void* const pObject )
|
|
Packit |
857059 |
{
|
|
Packit |
857059 |
LIST_ITEM *pListItem;
|
|
Packit |
857059 |
ASSERT( pObjMgr && pObject && pObjMgr->m_Initialized );
|
|
Packit |
857059 |
|
|
Packit |
857059 |
// Remove the object from the list.
|
|
Packit |
857059 |
pListItem = (LIST_ITEM*)((char*)pObject - sizeof( LIST_ITEM ));
|
|
Packit |
857059 |
ASSERT( pListItem->pObject == pObject );
|
|
Packit |
857059 |
QListRemoveItem( &pObjMgr->m_ObjList, pListItem );
|
|
Packit |
857059 |
|
|
Packit |
857059 |
// Deallocate the object.
|
|
Packit |
857059 |
MemoryDeallocate( pListItem );
|
|
Packit |
857059 |
}
|