173b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin/* 273b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Copyright 2001-2008 Texas Instruments - http://www.ti.com/ 373b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * 473b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Licensed under the Apache License, Version 2.0 (the "License"); 573b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * you may not use this file except in compliance with the License. 673b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * You may obtain a copy of the License at 773b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * 873b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * http://www.apache.org/licenses/LICENSE-2.0 973b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * 1073b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Unless required by applicable law or agreed to in writing, software 1173b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * distributed under the License is distributed on an "AS IS" BASIS, 1273b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1373b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * See the License for the specific language governing permissions and 1473b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * limitations under the License. 1573b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin */ 1673b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin 1773b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin/* 1873b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * ======== memry.h ======== 1973b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * DSP-BIOS Bridge driver support functions for TI OMAP processors. 2073b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Purpose: 2173b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Functional interface for the memory manager, exported by the DSP 2273b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * system API DLL. This interface is not publicly documented. 2373b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * 2473b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Public Functions: 2573b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * MEMRY_Alloc 2673b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * MEMRY_BindMem 2773b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * MEMRY_Calloc 2873b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * MEMRY_Free 2973b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * MEMRY_FreeVM 3073b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * MEMRY_LinearAddress 3173b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * MEMRY_ReserveVM 3273b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * MEMRY_PageLock 3373b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * MEMRY_PageUnlock 3473b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * MEMRY_UnMapLinearAddress 3573b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * 3673b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin *! Revision History: 3773b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin *! ================ 3873b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin *! 01-Sep-2001 ag: Added MEMRY_[UnMap]LinearAddress. 3973b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin *! 11-Oct-2000 ag: Added MEMRY_Reserve[Free]VM() & MEMRY_BindMem(). 4073b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin *! 12-Nov-1999 kc: Updated for WinCE. 4173b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin *! 4273b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin */ 4373b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin 4473b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin#ifndef MEMRY_ 4573b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin#define MEMRY_ 4673b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin 4773b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin#ifdef __cplusplus 4873b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavinextern "C" { 4973b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin#endif 5073b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin 5173b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin#include <dspapi.h> 5273b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin 5373b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin#include <memdefs.h> 5473b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin 5573b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin/* 5673b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * MEMRY_[GET]SET]VIRTUALSEGID is used by Node & Strm to access virtual 5773b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * address space in the correct client process context. The virtual to 5873b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * physical mapping is done in the client process context. 5973b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin */ 6073b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin#define MEMRY_SETVIRTUALSEGID MEM_SETVIRTUALSEGID 6173b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin#define MEMRY_GETVIRTUALSEGID MEM_GETVIRTUALSEGID 6273b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin#define MEMRY_MASKVIRTUALSEGID MEM_MASKVIRTUALSEGID 6373b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin 6473b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin#ifndef LINUX 6573b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin 6673b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin/* 6773b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * ======== MEMRY_Alloc ======== 6873b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Purpose: 6973b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Allocate memory from the paged or non-paged pools. 7073b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Parameters: 7173b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * cBytes: Number of bytes to allocate. 7273b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * type: Type of memory to allocate; one of: 7373b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * - MEM_PAGED: Allocate from the pageable memory. 7473b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * - MEM_NONPAGED:Allocate from page locked memory. 7573b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Returns: 7673b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Pointer to a block of memory; or NULL if memory couldn't be 7773b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * allocated. 7873b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Requires: 7973b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Ensures: 8073b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * PVOID pointer returned is a valid memory location. 8173b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin */ 8273b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin extern PVOID MEMRY_Alloc(ULONG cBytes, MEM_POOLATTRS type); 8373b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin 8473b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin/* 8573b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * ======== MEMRY_BindBuf ======== 8673b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Purpose: 8773b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Bind a Physical address to a Virtual Address. 8873b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * In WinCE performs a VirtualCopy(). 8973b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Parameters: 9073b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * pVA: Ptr to reserved memory allocated by MEMRY_ReserveVM(). 9173b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * pPA: Ptr to a physical memory location. 9273b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * ulBytes: Size of physical memory in bytes. 9373b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Returns: 9473b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * TRUE if successful, else FALSE. 9573b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Requires: 9673b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * pPA != NULL. 9773b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Ensures: 9873b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin */ 9973b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin extern bool MEMRY_BindMem(PVOID pVA, PVOID pPA, ULONG ulBytes); 10073b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin 10173b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin/* 10273b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * ======== MEMRY_Calloc ======== 10373b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Purpose: 10473b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Allocate zero-initialized memory from the paged or non-paged pools. 10573b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Parameters: 10673b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * cBytes: Number of bytes to allocate. 10773b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * type: Type of memory to allocate; one of: 10873b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * - MEM_PAGED: Allocate from the pageable memory. 10973b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * - MEM_NONPAGED: Allocate from page locked memory. 11073b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Returns: 11173b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Pointer to a contiguous block of zeroed memory; or NULL if memory 11273b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * couldn't be allocated. 11373b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Requires: 11473b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Ensures: 11573b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * PVOID pointer returned is a valid memory location. 11673b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin */ 11773b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin extern PVOID WINAPI MEMRY_Calloc(ULONG cBytes, MEM_POOLATTRS type); 11873b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin 11973b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin/* 12073b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * ======== MEMRY_Free ======== 12173b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Purpose: 12273b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Free the given block of system memory. 12373b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Parameters: 12473b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * pMemBuf: Pointer to memory allocated by MEMRY_Alloc(). 12573b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Returns: 12673b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Requires: 12773b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Ensures: 12873b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * pMemBuf is no longer a valid pointer to memory. 12973b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin */ 13073b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin extern VOID MEMRY_Free(IN PVOID pMemBuf); 13173b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin 13273b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin/* 13373b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * ======== MEMRY_FreeVM ======== 13473b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Purpose: 13573b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Free VM reserved by MEMRY_ReserveVM. 13673b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Parameters: 13773b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * pVirtualAddr: Pointer to memory VM allocated by MEMRY_ReserveVM(). 13873b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Returns: 13973b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * TRUE on success, else FALSE. 14073b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Requires: 14173b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * pVirtualAddr != 0 14273b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Ensures: 14373b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * 14473b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin */ 14573b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin extern bool MEMRY_FreeVM(PVOID pVirtualAddr); 14673b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin 14773b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin/* 14873b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * ======== MEMRY_PageLock ======== 14973b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Purpose: 15073b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Calls kernel services to map the set of pages identified by a private 15173b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * process pointer and a byte count into the calling process's globally 15273b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * shared address space. 15373b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Parameters 15473b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * lpBuffer: Pointer to a process-private data buffer. 15573b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * cSize: Size in bytes of the data buffer. 15673b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Returns: 15773b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * A pointer to linear page locked memory, or 15873b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * NULL if failure locking memory. 15973b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Requires: 16073b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * The size (cSize) must accurately reflect the size of the buffer to 16173b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * be locked, since the page count is derived from this number. 16273b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Ensures: 16373b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Memory locked by this service can be accessed at interrupt time, or 16473b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * from other memory contexts. 16573b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin */ 16673b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin extern DSPAPIDLL PVOID WINAPI MEMRY_PageLock(PVOID pBuffer, 16773b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin ULONG cSize); 16873b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin 16973b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin#endif /* ifndef LINUX */ 17073b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin 17173b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin/* 17273b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * ======== MEMRY_LinearAddress ======== 17373b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Purpose: 17473b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Get the linear address corresponding to the given physical address. 17573b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Parameters: 17673b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * pPhysAddr: Physical address to be mapped. 17773b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * cBytes: Number of bytes in physical range to map. 17873b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Returns: 17973b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * The corresponding linear address, or NULL if unsuccessful. 18073b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Requires: 18173b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * PhysAddr != 0 18273b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Ensures: 18373b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Notes: 18473b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * If valid linear address is returned, be sure to call 18573b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * MEMRY_UnMapLinearAddress(). 18673b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin */ 18773b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin extern inline PVOID MEMRY_LinearAddress(PVOID pPhyAddr, ULONG cBytes) { 18873b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin return pPhyAddr; 18973b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin } 19073b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin#ifndef LINUX 19173b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin/* 19273b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * ======== MEMRY_PageUnlock ======== 19373b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Purpose: 19473b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Unlocks a buffer previously locked using MEMRY_PageLock(). 19573b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Parameters: 19673b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * pBuffer: Pointer to locked memory (as returned by MEMRY_PageLock()). 19773b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * cSize: Size in bytes of the buffer. 19873b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Returns: 19973b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Returns DSP_SOK if unlock successful; else, returns DSP_EFAIL; 20073b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Requires: 20173b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * pBuffer must be a pointer to a locked, shared data buffer previously 20273b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * locked with MEMRY_PageLock(). 20373b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Ensures: 20473b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Will unlock the pages of memory when the lock count drops to zero. 20573b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * MEMRY_PageLock() increments the lock count, and MEMRY_PageUnlock 20673b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * decrements the count. 20773b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin */ extern DSPAPIDLL MEMRY_PageUnlock(PVOID pBuffer, ULONG cSize); 20873b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin 20973b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin/* 21073b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * ======== MEMRY_ReserveVM ======== 21173b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Purpose: 21273b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Reserve at least ulBytes (page size inc) virtual memory for this process. 21373b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Parameters: 21473b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * ulBytes: Size in bytes of the minimum space to reserve. 21573b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Returns: 21673b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Returns NULL on failure, else valid VA of at least ulBytes size. 21773b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Requires: 21873b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Ensures: 21973b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin */ 22073b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin extern PVOID MEMRY_ReserveVM(ULONG cBytes); 22173b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin 22273b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin#endif /* ifndef LINUX */ 22373b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin 22473b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin/* 22573b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * ======== MEMRY_UnMapLinearAddress ======== 22673b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Purpose: 22773b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Unmap the linear address mapped in MEMRY_LinearAddress. 22873b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Parameters: 22973b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * pBaseAddr: Ptr to mapped memory (as returned by MEMRY_LinearAddress()). 23073b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Returns: 23173b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Requires: 23273b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * - pBaseAddr is a valid linear address mapped in MEMRY_LinearAddress. 23373b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Ensures: 23473b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * - pBaseAddr no longer points to a valid linear address. 23573b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin */ 23673b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin extern inline VOID MEMRY_UnMapLinearAddress(PVOID pBaseAddr) { 23773b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin } 23873b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin 23973b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin#ifdef __cplusplus 24073b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin} 24173b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin#endif 24273b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin 24373b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin#endif /* MEMRY_ */ 244