| /* |
| * Copyright 2001-2008 Texas Instruments - http://www.ti.com/ |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| |
| /* |
| * ======== memry.h ======== |
| * DSP-BIOS Bridge driver support functions for TI OMAP processors. |
| * Purpose: |
| * Functional interface for the memory manager, exported by the DSP |
| * system API DLL. This interface is not publicly documented. |
| * |
| * Public Functions: |
| * MEMRY_Alloc |
| * MEMRY_BindMem |
| * MEMRY_Calloc |
| * MEMRY_Free |
| * MEMRY_FreeVM |
| * MEMRY_LinearAddress |
| * MEMRY_ReserveVM |
| * MEMRY_PageLock |
| * MEMRY_PageUnlock |
| * MEMRY_UnMapLinearAddress |
| * |
| *! Revision History: |
| *! ================ |
| *! 01-Sep-2001 ag: Added MEMRY_[UnMap]LinearAddress. |
| *! 11-Oct-2000 ag: Added MEMRY_Reserve[Free]VM() & MEMRY_BindMem(). |
| *! 12-Nov-1999 kc: Updated for WinCE. |
| *! |
| */ |
| |
| #ifndef MEMRY_ |
| #define MEMRY_ |
| |
| #ifdef __cplusplus |
| extern "C" { |
| #endif |
| |
| #include <dspapi.h> |
| |
| #include <memdefs.h> |
| |
| /* |
| * MEMRY_[GET]SET]VIRTUALSEGID is used by Node & Strm to access virtual |
| * address space in the correct client process context. The virtual to |
| * physical mapping is done in the client process context. |
| */ |
| #define MEMRY_SETVIRTUALSEGID MEM_SETVIRTUALSEGID |
| #define MEMRY_GETVIRTUALSEGID MEM_GETVIRTUALSEGID |
| #define MEMRY_MASKVIRTUALSEGID MEM_MASKVIRTUALSEGID |
| |
| #ifndef LINUX |
| |
| /* |
| * ======== MEMRY_Alloc ======== |
| * Purpose: |
| * Allocate memory from the paged or non-paged pools. |
| * Parameters: |
| * cBytes: Number of bytes to allocate. |
| * type: Type of memory to allocate; one of: |
| * - MEM_PAGED: Allocate from the pageable memory. |
| * - MEM_NONPAGED:Allocate from page locked memory. |
| * Returns: |
| * Pointer to a block of memory; or NULL if memory couldn't be |
| * allocated. |
| * Requires: |
| * Ensures: |
| * PVOID pointer returned is a valid memory location. |
| */ |
| extern PVOID MEMRY_Alloc(ULONG cBytes, MEM_POOLATTRS type); |
| |
| /* |
| * ======== MEMRY_BindBuf ======== |
| * Purpose: |
| * Bind a Physical address to a Virtual Address. |
| * In WinCE performs a VirtualCopy(). |
| * Parameters: |
| * pVA: Ptr to reserved memory allocated by MEMRY_ReserveVM(). |
| * pPA: Ptr to a physical memory location. |
| * ulBytes: Size of physical memory in bytes. |
| * Returns: |
| * TRUE if successful, else FALSE. |
| * Requires: |
| * pPA != NULL. |
| * Ensures: |
| */ |
| extern bool MEMRY_BindMem(PVOID pVA, PVOID pPA, ULONG ulBytes); |
| |
| /* |
| * ======== MEMRY_Calloc ======== |
| * Purpose: |
| * Allocate zero-initialized memory from the paged or non-paged pools. |
| * Parameters: |
| * cBytes: Number of bytes to allocate. |
| * type: Type of memory to allocate; one of: |
| * - MEM_PAGED: Allocate from the pageable memory. |
| * - MEM_NONPAGED: Allocate from page locked memory. |
| * Returns: |
| * Pointer to a contiguous block of zeroed memory; or NULL if memory |
| * couldn't be allocated. |
| * Requires: |
| * Ensures: |
| * PVOID pointer returned is a valid memory location. |
| */ |
| extern PVOID WINAPI MEMRY_Calloc(ULONG cBytes, MEM_POOLATTRS type); |
| |
| /* |
| * ======== MEMRY_Free ======== |
| * Purpose: |
| * Free the given block of system memory. |
| * Parameters: |
| * pMemBuf: Pointer to memory allocated by MEMRY_Alloc(). |
| * Returns: |
| * Requires: |
| * Ensures: |
| * pMemBuf is no longer a valid pointer to memory. |
| */ |
| extern VOID MEMRY_Free(IN PVOID pMemBuf); |
| |
| /* |
| * ======== MEMRY_FreeVM ======== |
| * Purpose: |
| * Free VM reserved by MEMRY_ReserveVM. |
| * Parameters: |
| * pVirtualAddr: Pointer to memory VM allocated by MEMRY_ReserveVM(). |
| * Returns: |
| * TRUE on success, else FALSE. |
| * Requires: |
| * pVirtualAddr != 0 |
| * Ensures: |
| * |
| */ |
| extern bool MEMRY_FreeVM(PVOID pVirtualAddr); |
| |
| /* |
| * ======== MEMRY_PageLock ======== |
| * Purpose: |
| * Calls kernel services to map the set of pages identified by a private |
| * process pointer and a byte count into the calling process's globally |
| * shared address space. |
| * Parameters |
| * lpBuffer: Pointer to a process-private data buffer. |
| * cSize: Size in bytes of the data buffer. |
| * Returns: |
| * A pointer to linear page locked memory, or |
| * NULL if failure locking memory. |
| * Requires: |
| * The size (cSize) must accurately reflect the size of the buffer to |
| * be locked, since the page count is derived from this number. |
| * Ensures: |
| * Memory locked by this service can be accessed at interrupt time, or |
| * from other memory contexts. |
| */ |
| extern DSPAPIDLL PVOID WINAPI MEMRY_PageLock(PVOID pBuffer, |
| ULONG cSize); |
| |
| #endif /* ifndef LINUX */ |
| |
| /* |
| * ======== MEMRY_LinearAddress ======== |
| * Purpose: |
| * Get the linear address corresponding to the given physical address. |
| * Parameters: |
| * pPhysAddr: Physical address to be mapped. |
| * cBytes: Number of bytes in physical range to map. |
| * Returns: |
| * The corresponding linear address, or NULL if unsuccessful. |
| * Requires: |
| * PhysAddr != 0 |
| * Ensures: |
| * Notes: |
| * If valid linear address is returned, be sure to call |
| * MEMRY_UnMapLinearAddress(). |
| */ |
| extern inline PVOID MEMRY_LinearAddress(PVOID pPhyAddr, ULONG cBytes) { |
| return pPhyAddr; |
| } |
| #ifndef LINUX |
| /* |
| * ======== MEMRY_PageUnlock ======== |
| * Purpose: |
| * Unlocks a buffer previously locked using MEMRY_PageLock(). |
| * Parameters: |
| * pBuffer: Pointer to locked memory (as returned by MEMRY_PageLock()). |
| * cSize: Size in bytes of the buffer. |
| * Returns: |
| * Returns DSP_SOK if unlock successful; else, returns DSP_EFAIL; |
| * Requires: |
| * pBuffer must be a pointer to a locked, shared data buffer previously |
| * locked with MEMRY_PageLock(). |
| * Ensures: |
| * Will unlock the pages of memory when the lock count drops to zero. |
| * MEMRY_PageLock() increments the lock count, and MEMRY_PageUnlock |
| * decrements the count. |
| */ extern DSPAPIDLL MEMRY_PageUnlock(PVOID pBuffer, ULONG cSize); |
| |
| /* |
| * ======== MEMRY_ReserveVM ======== |
| * Purpose: |
| * Reserve at least ulBytes (page size inc) virtual memory for this process. |
| * Parameters: |
| * ulBytes: Size in bytes of the minimum space to reserve. |
| * Returns: |
| * Returns NULL on failure, else valid VA of at least ulBytes size. |
| * Requires: |
| * Ensures: |
| */ |
| extern PVOID MEMRY_ReserveVM(ULONG cBytes); |
| |
| #endif /* ifndef LINUX */ |
| |
| /* |
| * ======== MEMRY_UnMapLinearAddress ======== |
| * Purpose: |
| * Unmap the linear address mapped in MEMRY_LinearAddress. |
| * Parameters: |
| * pBaseAddr: Ptr to mapped memory (as returned by MEMRY_LinearAddress()). |
| * Returns: |
| * Requires: |
| * - pBaseAddr is a valid linear address mapped in MEMRY_LinearAddress. |
| * Ensures: |
| * - pBaseAddr no longer points to a valid linear address. |
| */ |
| extern inline VOID MEMRY_UnMapLinearAddress(PVOID pBaseAddr) { |
| } |
| |
| #ifdef __cplusplus |
| } |
| #endif |
| |
| #endif /* MEMRY_ */ |