VirtualBox

Changeset 50482 in vbox for trunk/src/VBox/GuestHost


Ignore:
Timestamp:
Feb 17, 2014 3:23:05 PM (11 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
92323
Message:

Build HGSMI memory allocator (unused)

Location:
trunk/src/VBox/GuestHost/HGSMI
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/GuestHost/HGSMI/HGSMICommon.cpp

    r44528 r50482  
    55
    66/*
    7  * Copyright (C) 2006-2012 Oracle Corporation
     7 * Copyright (C) 2006-2014 Oracle Corporation
    88 *
    99 * This file is part of VirtualBox Open Source Edition (OSE), as
     
    189189}
    190190
    191 void HGSMIHeapSetupUnitialized (HGSMIHEAP *pHeap)
    192 {
    193     pHeap->u.hPtr = NIL_RTHEAPSIMPLE;
    194     pHeap->cRefs = 0;
    195     pHeap->area.cbArea = 0;
    196     pHeap->area.offBase = HGSMIOFFSET_VOID;
    197     pHeap->area.offLast = HGSMIOFFSET_VOID;
    198     pHeap->area.pu8Base = 0;
    199     pHeap->fOffsetBased = false;
    200 }
    201 
    202 bool HGSMIHeapIsItialized (HGSMIHEAP *pHeap)
    203 {
    204     return pHeap->u.hPtr != NIL_RTHEAPSIMPLE;
     191void HGSMIHeapSetupUninitialized(HGSMIHEAP *pHeap)
     192{
     193    RT_ZERO(*pHeap);
     194    pHeap->u32HeapType = HGSMI_HEAP_TYPE_NULL;
    205195}
    206196
    207197int HGSMIHeapRelocate (HGSMIHEAP *pHeap,
     198                       uint32_t u32HeapType,
    208199                       void *pvBase,
    209200                       uint32_t offHeapHandle,
     
    211202                       HGSMISIZE cbArea,
    212203                       HGSMIOFFSET offBase,
    213                        bool fOffsetBased
    214                        )
     204                       const HGSMIENV *pEnv)
    215205{
    216206    if (   !pHeap
     
    224214    if (RT_SUCCESS (rc))
    225215    {
    226         if (fOffsetBased)
     216        if (u32HeapType == HGSMI_HEAP_TYPE_MA)
     217        {
     218            /* @todo rc = HGSMIMAInit(&pHeap->u.ma, &pHeap->area, NULL, 0, 0, pEnv); */
     219            rc = VERR_NOT_IMPLEMENTED;
     220        }
     221        else if (u32HeapType == HGSMI_HEAP_TYPE_OFFSET)
     222        {
    227223            pHeap->u.hOff = (RTHEAPOFFSET)((uint8_t *)pvBase + offHeapHandle);
    228         else
     224        }
     225        else if (u32HeapType == HGSMI_HEAP_TYPE_POINTER)
    229226        {
    230227            pHeap->u.hPtr = (RTHEAPSIMPLE)((uint8_t *)pvBase + offHeapHandle);
    231228            rc = RTHeapSimpleRelocate (pHeap->u.hPtr, offDelta); AssertRC(rc);
    232229        }
    233         if (RT_SUCCESS (rc))
     230        else
     231        {
     232            rc = VERR_NOT_SUPPORTED;
     233        }
     234
     235        if (RT_SUCCESS(rc))
    234236        {
    235237            pHeap->cRefs = 0;
    236             pHeap->fOffsetBased = fOffsetBased;
     238            pHeap->u32HeapType = u32HeapType;
    237239        }
    238240        else
     
    246248
    247249int HGSMIHeapSetup (HGSMIHEAP *pHeap,
     250                    uint32_t u32HeapType,
    248251                    void *pvBase,
    249252                    HGSMISIZE cbArea,
    250253                    HGSMIOFFSET offBase,
    251                     bool fOffsetBased)
     254                    const HGSMIENV *pEnv)
    252255{
    253256    if (   !pHeap
     
    261264    if (RT_SUCCESS (rc))
    262265    {
    263         if (!fOffsetBased)
     266        if (u32HeapType == HGSMI_HEAP_TYPE_MA)
     267        {
     268            rc = HGSMIMAInit(&pHeap->u.ma, &pHeap->area, NULL, 0, 0, pEnv);
     269        }
     270        else if (u32HeapType == HGSMI_HEAP_TYPE_POINTER)
     271        {
    264272            rc = RTHeapSimpleInit (&pHeap->u.hPtr, pvBase, cbArea);
     273        }
     274        else if (u32HeapType == HGSMI_HEAP_TYPE_OFFSET)
     275        {
     276            rc = RTHeapOffsetInit (&pHeap->u.hOff, pvBase, cbArea);
     277        }
    265278        else
    266             rc = RTHeapOffsetInit (&pHeap->u.hOff, pvBase, cbArea);
     279        {
     280            rc = VERR_NOT_SUPPORTED;
     281        }
    267282
    268283        if (RT_SUCCESS (rc))
    269284        {
    270285            pHeap->cRefs = 0;
    271             pHeap->fOffsetBased = fOffsetBased;
     286            pHeap->u32HeapType = u32HeapType;
    272287        }
    273288        else
     
    284299    if (pHeap)
    285300    {
     301        if (pHeap->u32HeapType == HGSMI_HEAP_TYPE_MA)
     302        {
     303            HGSMIMAUninit(&pHeap->u.ma);
     304        }
    286305        Assert(!pHeap->cRefs);
    287         pHeap->u.hPtr = NIL_RTHEAPSIMPLE;
    288         HGSMIAreaClear (&pHeap->area);
    289         pHeap->cRefs = 0;
     306        HGSMIHeapSetupUninitialized(pHeap);
    290307    }
    291308}
     
    296313                      uint16_t u16ChannelInfo)
    297314{
    298     if (pHeap->u.hPtr == NIL_RTHEAPSIMPLE)
    299     {
    300         return NULL;
    301     }
    302 
    303     size_t cbAlloc = HGSMIBufferRequiredSize (cbData);
     315    HGSMISIZE cbAlloc = HGSMIBufferRequiredSize (cbData);
    304316
    305317    HGSMIBUFFERHEADER *pHeader = (HGSMIBUFFERHEADER *)HGSMIHeapBufferAlloc (pHeap, cbAlloc);
     
    326338{
    327339    if (   pvData
    328         && pHeap->u.hPtr != NIL_RTHEAPSIMPLE)
     340        && pHeap->u32HeapType != HGSMI_HEAP_TYPE_NULL)
    329341    {
    330342        HGSMIBUFFERHEADER *pHeader = HGSMIBufferHeaderFromData (pvData);
     
    336348void* HGSMIHeapBufferAlloc (HGSMIHEAP *pHeap, HGSMISIZE cbBuffer)
    337349{
    338     void* pvBuf;
    339     if (!pHeap->fOffsetBased)
     350    void* pvBuf = NULL;
     351    if (pHeap->u32HeapType == HGSMI_HEAP_TYPE_MA)
     352    {
     353        pvBuf = HGSMIMAAlloc(&pHeap->u.ma, cbBuffer);
     354    }
     355    else if (pHeap->u32HeapType == HGSMI_HEAP_TYPE_POINTER)
     356    {
    340357        pvBuf = RTHeapSimpleAlloc (pHeap->u.hPtr, cbBuffer, 0);
    341     else
     358    }
     359    else if (pHeap->u32HeapType == HGSMI_HEAP_TYPE_OFFSET)
     360    {
    342361        pvBuf = RTHeapOffsetAlloc (pHeap->u.hOff, cbBuffer, 0);
    343 
    344     if (!pvBuf)
    345         return NULL;
    346 
    347     ++pHeap->cRefs;
     362    }
     363
     364    if (pvBuf)
     365    {
     366        ++pHeap->cRefs;
     367    }
     368
    348369    return pvBuf;
    349370}
    350371
    351372void HGSMIHeapBufferFree(HGSMIHEAP *pHeap,
    352                     void *pvBuf)
    353 {
    354     if (!pHeap->fOffsetBased)
     373                         void *pvBuf)
     374{
     375    if (pHeap->u32HeapType == HGSMI_HEAP_TYPE_MA)
     376    {
     377        HGSMIMAFree(&pHeap->u.ma, pvBuf);
     378    }
     379    else if (pHeap->u32HeapType == HGSMI_HEAP_TYPE_POINTER)
     380    {
    355381        RTHeapSimpleFree (pHeap->u.hPtr, pvBuf);
    356     else
     382    }
     383    else if (pHeap->u32HeapType == HGSMI_HEAP_TYPE_OFFSET)
     384    {
    357385        RTHeapOffsetFree (pHeap->u.hOff, pvBuf);
     386    }
    358387
    359388    --pHeap->cRefs;
     
    377406    }
    378407
    379     const HGSMIBUFFERHEADER *pHeader = HGSMIOffsetToPointer (pArea, offBuffer);
     408    const HGSMIBUFFERHEADER *pHeader = (HGSMIBUFFERHEADER *)HGSMIOffsetToPointer (pArea, offBuffer);
    380409
    381410    /* Quick check of the data size, it should be less than the maximum
  • trunk/src/VBox/GuestHost/HGSMI/Makefile.kmk

    r41477 r50482  
    3030HGSMIGuestR0Lib_DEFS         =
    3131HGSMIGuestR0Lib_SOURCES      = \
    32         HGSMICommon.cpp
     32        HGSMICommon.cpp \
     33        HGSMIMemAlloc.cpp
    3334endif
    3435
     
    4041HGSMIHostR3Lib_DEFS          =
    4142HGSMIHostR3Lib_SOURCES       = \
    42         HGSMICommon.cpp
     43        HGSMICommon.cpp \
     44        HGSMIMemAlloc.cpp
    4345
    4446include $(FILE_KBUILD_SUB_FOOTER)
Note: See TracChangeset for help on using the changeset viewer.

© 2025 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette