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