gctINT gckDebugFileSystemTerminate ( void ) { gcsDebugFileSystemNode * next = gcvNULL ; gcsDebugFileSystemNode * temp = gcvNULL ; if ( gc_dbgfs.isInited ) { temp = gc_dbgfs.linkedlist ; while ( temp != gcvNULL ) { next = temp->next ; gckDebugFileSystemFreeNode ( temp ) ; kfree ( temp ) ; temp = next ; } gc_dbgfs.isInited = 0 ; } return 0 ; }
/******************************************************************************* ** ** gckGALDEVICE_Destroy ** ** Class destructor. ** ** INPUT: ** ** Nothing. ** ** OUTPUT: ** ** Nothing. ** ** RETURNS: ** ** Nothing. */ gceSTATUS gckGALDEVICE_Destroy( gckGALDEVICE Device) { gctINT i; gceSTATUS status = gcvSTATUS_OK; gckKERNEL kernel = gcvNULL; gcmkHEADER_ARG("Device=0x%x", Device); if (Device != gcvNULL) { /* Grab the first availiable kernel */ for (i = 0; i < gcdMAX_GPU_COUNT; i++) { if (Device->irqLines[i] != -1) { kernel = Device->kernels[i]; break; } } if (Device->internalPhysicalName != 0) { gcmRELEASE_NAME(Device->internalPhysicalName); Device->internalPhysicalName = 0; } if (Device->externalPhysicalName != 0) { gcmRELEASE_NAME(Device->externalPhysicalName); Device->externalPhysicalName = 0; } if (Device->contiguousPhysicalName != 0) { gcmRELEASE_NAME(Device->contiguousPhysicalName); Device->contiguousPhysicalName = 0; } for (i = 0; i < gcdMAX_GPU_COUNT; i++) { if (Device->kernels[i] != gcvNULL) { /* Destroy the gckKERNEL object. */ gcmkVERIFY_OK(gckKERNEL_Destroy(Device->kernels[i])); Device->kernels[i] = gcvNULL; } } { if (Device->internalLogical != gcvNULL) { /* Unmap the internal memory. */ iounmap(Device->internalLogical); Device->internalLogical = gcvNULL; } if (Device->internalVidMem != gcvNULL) { /* Destroy the internal heap. */ gcmkVERIFY_OK(gckVIDMEM_Destroy(Device->internalVidMem)); Device->internalVidMem = gcvNULL; } } { if (Device->externalLogical != gcvNULL) { /* Unmap the external memory. */ iounmap(Device->externalLogical); Device->externalLogical = gcvNULL; } if (Device->externalVidMem != gcvNULL) { /* destroy the external heap */ gcmkVERIFY_OK(gckVIDMEM_Destroy(Device->externalVidMem)); Device->externalVidMem = gcvNULL; } } { if (Device->contiguousBase != gcvNULL) { if (Device->contiguousMapped) { } else { gcmkONERROR(_FreeMemory( Device, Device->contiguousBase, Device->contiguousPhysical )); } Device->contiguousBase = gcvNULL; Device->contiguousPhysical = gcvNULL; } if (Device->requestedContiguousBase != 0) { release_mem_region(Device->requestedContiguousBase, Device->requestedContiguousSize); Device->requestedContiguousBase = 0; Device->requestedContiguousSize = 0; } if (Device->contiguousVidMem != gcvNULL) { /* Destroy the contiguous heap. */ gcmkVERIFY_OK(gckVIDMEM_Destroy(Device->contiguousVidMem)); Device->contiguousVidMem = gcvNULL; } } { if(gckDebugFileSystemIsEnabled()) { gckDebugFileSystemFreeNode(Device->dbgnode); kfree(Device->dbgnode); Device->dbgnode = gcvNULL; } } for (i = 0; i < gcdMAX_GPU_COUNT; i++) { if (Device->registerBases[i] != gcvNULL) { /* Unmap register memory. */ iounmap(Device->registerBases[i]); if (Device->requestedRegisterMemBases[i] != 0) { release_mem_region(Device->requestedRegisterMemBases[i], Device->requestedRegisterMemSizes[i]); } Device->registerBases[i] = gcvNULL; Device->requestedRegisterMemBases[i] = 0; Device->requestedRegisterMemSizes[i] = 0; } } /* Destroy the gckOS object. */ if (Device->os != gcvNULL) { gcmkVERIFY_OK(gckOS_Destroy(Device->os)); Device->os = gcvNULL; } /* Free the device. */ kfree(Device); } gcmkFOOTER_NO(); return gcvSTATUS_OK; OnError: gcmkFOOTER(); return status; }