blob: dd92bf0fd9a5bdf28d52c33363820a8607f47efd [file] [log] [blame] [edit]
/**********************************************************************
*
* Copyright (C) Imagination Technologies Ltd. All rights reserved.
*
* This program is free software; you can redistribute it and/or modify it
* under the terms and conditions of the GNU General Public License,
* version 2, as published by the Free Software Foundation.
*
* This program is distributed in the hope it will be useful but, except
* as otherwise stated in writing, without any warranty; without even the
* implied warranty of merchantability or fitness for a particular purpose.
* See the GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along with
* this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA.
*
* The full GNU General Public License is included in this distribution in
* the file called "COPYING".
*
* Contact Information:
* Imagination Technologies Ltd. <[email protected]>
* Home Park Estate, Kings Langley, Herts, WD4 8LZ, UK
*
******************************************************************************/
#ifndef _MMU_H_
#define _MMU_H_
#include "sgxinfokm.h"
PVRSRV_ERROR
MMU_Initialise (PVRSRV_DEVICE_NODE *psDeviceNode, MMU_CONTEXT **ppsMMUContext, IMG_DEV_PHYADDR *psPDDevPAddr);
IMG_VOID
MMU_Finalise (MMU_CONTEXT *psMMUContext);
IMG_VOID
MMU_InsertHeap(MMU_CONTEXT *psMMUContext, MMU_HEAP *psMMUHeap);
MMU_HEAP *
MMU_Create (MMU_CONTEXT *psMMUContext,
DEV_ARENA_DESCRIPTOR *psDevArena,
RA_ARENA **ppsVMArena,
PDUMP_MMU_ATTRIB **ppsMMUAttrib);
IMG_VOID
MMU_Delete (MMU_HEAP *pMMUHeap);
IMG_BOOL
MMU_Alloc (MMU_HEAP *pMMUHeap,
IMG_SIZE_T uSize,
IMG_SIZE_T *pActualSize,
IMG_UINT32 uFlags,
IMG_UINT32 uDevVAddrAlignment,
IMG_DEV_VIRTADDR *pDevVAddr);
IMG_VOID
MMU_Free (MMU_HEAP *pMMUHeap,
IMG_DEV_VIRTADDR DevVAddr,
IMG_UINT32 ui32Size);
IMG_VOID
MMU_Enable (MMU_HEAP *pMMUHeap);
IMG_VOID
MMU_Disable (MMU_HEAP *pMMUHeap);
IMG_VOID
MMU_MapPages (MMU_HEAP *pMMUHeap,
IMG_DEV_VIRTADDR DevVAddr,
IMG_SYS_PHYADDR SysPAddr,
IMG_SIZE_T uSize,
IMG_UINT32 ui32MemFlags,
IMG_HANDLE hUniqueTag);
IMG_VOID
MMU_MapShadow (MMU_HEAP * pMMUHeap,
IMG_DEV_VIRTADDR MapBaseDevVAddr,
IMG_SIZE_T uByteSize,
IMG_CPU_VIRTADDR CpuVAddr,
IMG_HANDLE hOSMemHandle,
IMG_DEV_VIRTADDR * pDevVAddr,
IMG_UINT32 ui32MemFlags,
IMG_HANDLE hUniqueTag);
IMG_VOID
MMU_UnmapPages (MMU_HEAP *psMMUHeap,
IMG_DEV_VIRTADDR sDevVAddr,
IMG_UINT32 ui32PageCount,
IMG_HANDLE hUniqueTag);
IMG_VOID
MMU_MapScatter (MMU_HEAP *pMMUHeap,
IMG_DEV_VIRTADDR DevVAddr,
IMG_SYS_PHYADDR *psSysAddr,
IMG_SIZE_T uSize,
IMG_UINT32 ui32MemFlags,
IMG_HANDLE hUniqueTag);
IMG_DEV_PHYADDR
MMU_GetPhysPageAddr(MMU_HEAP *pMMUHeap, IMG_DEV_VIRTADDR sDevVPageAddr);
IMG_DEV_PHYADDR
MMU_GetPDDevPAddr(MMU_CONTEXT *pMMUContext);
#ifdef SUPPORT_SGX_MMU_BYPASS
IMG_VOID
EnableHostAccess (MMU_CONTEXT *psMMUContext);
IMG_VOID
DisableHostAccess (MMU_CONTEXT *psMMUContext);
#endif
IMG_VOID MMU_InvalidateDirectoryCache(PVRSRV_SGXDEV_INFO *psDevInfo);
PVRSRV_ERROR MMU_BIFResetPDAlloc(PVRSRV_SGXDEV_INFO *psDevInfo);
IMG_VOID MMU_BIFResetPDFree(PVRSRV_SGXDEV_INFO *psDevInfo);
#if defined(FIX_HW_BRN_22997) && defined(FIX_HW_BRN_23030) && defined(SGX_FEATURE_HOST_PORT)
PVRSRV_ERROR WorkaroundBRN22997Alloc(PVRSRV_DEVICE_NODE *psDeviceNode);
IMG_VOID WorkaroundBRN22997ReadHostPort(PVRSRV_SGXDEV_INFO *psDevInfo);
IMG_VOID WorkaroundBRN22997Free(PVRSRV_DEVICE_NODE *psDeviceNode);
#endif
#if defined(SUPPORT_EXTERNAL_SYSTEM_CACHE)
PVRSRV_ERROR MMU_MapExtSystemCacheRegs(PVRSRV_DEVICE_NODE *psDeviceNode);
PVRSRV_ERROR MMU_UnmapExtSystemCacheRegs(PVRSRV_DEVICE_NODE *psDeviceNode);
#endif
IMG_BOOL MMU_IsHeapShared(MMU_HEAP* pMMU_Heap);
#if defined(FIX_HW_BRN_31620)
IMG_VOID MMU_GetCacheFlushRange(MMU_CONTEXT *pMMUContext, IMG_UINT32 *pui32RangeMask);
IMG_VOID MMU_GetPDPhysAddr(MMU_CONTEXT *pMMUContext, IMG_DEV_PHYADDR *psDevPAddr);
#endif
IMG_VOID MMU_CheckFaultAddr(PVRSRV_SGXDEV_INFO *psDevInfo, IMG_UINT32 ui32PDDevPAddr, IMG_UINT32 ui32RegVal);
#if defined(PDUMP)
IMG_UINT32 MMU_GetPDumpContextID(IMG_HANDLE hDevMemContext);
#endif
#endif