home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
OS/2 Shareware BBS: 10 Tools
/
10-Tools.zip
/
lxapi32.zip
/
Lib32
/
lxmemory.cpp
< prev
next >
Wrap
C/C++ Source or Header
|
2002-04-26
|
5KB
|
237 lines
/* $Id: lxmemory.cpp,v 1.2 2002/04/26 23:09:24 smilcke Exp $ */
/*
* memory.cpp
* Autor: Stefan Milcke
* Erstellt am: 26.10.2001
* Letzte Aenderung am: 25.04.2002
*
*/
extern "C" {
#define INCL_NOPMAPI
#define INCL_DOSERRORS // for ERROR_INVALID_FUNCTION
#include <os2.h>
}
#include <devhelp.h>
#include <ldefos2.h>
#include <string.h>
#ifdef KEE
#include <kee.h>
#endif
#include "lxmalloc.hpp"
#pragma off (unreferenced)
#define PAGE_SIZE 4096
extern "C" {
//-------------------------------- virt_to_phys --------------------------------
unsigned long virt_to_phys(void * address)
{
#ifdef KEE
KEEVMPageList pagelist;
ULONG nrpages;
if(KernLinToPageList(address, PAGE_SIZE, &pagelist, &nrpages)) {
DebugInt3();
return 0;
}
return pagelist.addr;
#else
LINEAR addr = (LINEAR)address;
PAGELIST pagelist;
if(DevLinToPageList(addr, PAGE_SIZE, (PAGELIST near *)__StackToFlat((ULONG)&pagelist))) {
DebugInt3();
return 0;
}
return pagelist.physaddr;
#endif
}
//-------------------------------- phys_to_virt --------------------------------
void * phys_to_virt(unsigned long address)
{
DebugInt3();
return 0;
}
//------------------------------ __get_free_pages ------------------------------
void *__get_free_pages(int gfp_mask, unsigned long order)
{
ULONG addr;
order = (1 << order); //TODO: Is this correct???
#ifdef KEE
SHORT sel;
if(KernVMAlloc(order*PAGE_SIZE, VMDHA_FIXED|VMDHA_CONTIG,
(PVOID*)&addr, (PVOID*)-1, &sel)) {
#else
if(DevVMAlloc(VMDHA_FIXED|VMDHA_CONTIG, order*PAGE_SIZE, (LINEAR)-1, __StackToFlat((ULONG)&addr))) {
#endif
DebugInt3();
return 0;
}
//// dprintf(("__get_free_pages %d returned %x", order*PAGE_SIZE, addr));
return (void *)addr;
}
//--------------------------------- free_pages ---------------------------------
int free_pages(unsigned long addr, unsigned long order)
{
#ifdef KEE
KernVMFree((PVOID)addr);
#else
DevVMFree((LINEAR)addr);
#endif
//// dprintf(("free_pages %x", addr));
return 0;
}
//-------------------------------- alloc_pages ---------------------------------
struct page * alloc_pages(int gfp_mask, unsigned long order)
{
DebugInt3();
return 0;
}
//------------------------------ remap_page_range ------------------------------
int remap_page_range(unsigned long from, unsigned long to, unsigned long size, unsigned long prot)
{
DebugInt3();
return 0;
}
//-------------------------------- is_access_ok --------------------------------
int is_access_ok(int type, void *addr, unsigned long size)
{
return 1;
}
//-------------------------------- __copy_user ---------------------------------
void __copy_user(void *to, const void *from, unsigned long n)
{
if(to == NULL || from == NULL) {
DebugInt3();
return;
}
if(n == 0) return;
#ifdef KEE
memcpy(to, from, n);
#else
_fmemcpy(to, from, n);
#endif
}
//-------------------------------- copy_to_user --------------------------------
unsigned long copy_to_user(void *to, const void *from, unsigned long n)
{
if(to == NULL || from == NULL) {
DebugInt3();
return 0;
}
if(n == 0) return 0;
#ifdef KEE
memcpy(to, from, n);
#else
_fmemcpy(to, from, n);
#endif
return 0;
}
//---------------------------- __copy_user_zeroing -----------------------------
void __copy_user_zeroing(void *to, const void *from, unsigned long n)
{
if(to == NULL || from == NULL) {
DebugInt3();
return;
}
if(n == 0) return;
copy_to_user(to, from, n);
}
//------------------------------- copy_from_user -------------------------------
unsigned long copy_from_user(void *to, const void *from, unsigned long n)
{
if(to == NULL || from == NULL) {
DebugInt3();
return 0;
}
if(n == 0) return 0;
#ifdef KEE
memcpy(to, from, n);
#else
_fmemcpy(to, from, n);
#endif
return 0;
}
//---------------------------------- get_user ----------------------------------
int get_user(int size, void *dest, void *src)
{
if(size == 0) return 0;
if(dest == NULL || src == NULL) {
DebugInt3();
return 0;
}
#ifdef KEE
memcpy(dest, src, size);
#else
_fmemcpy(dest, src, size);
#endif
return 0;
}
//---------------------------------- put_user ----------------------------------
int put_user(int x, void *ptr)
{
if(ptr == NULL) {
DebugInt3();
return 0;
}
*(int *)ptr = x;
return 0;
}
//--------------------------------- __put_user ---------------------------------
#if 0
int __put_user(int size, int x, void *ptr)
{
#ifdef KEE
memcpy(ptr,
#else
_fmemcpy(ptr,
#endif
return 0;
}
#endif
//---------------------------------- kmalloc -----------------------------------
void *kmalloc(int size, int flags)
{
return malloc(size);
}
//----------------------------------- kfree ------------------------------------
void kfree(const void *ptr)
{
free((void *)(ULONG)ptr);
}
//---------------------------------- kfree_s -----------------------------------
void kfree_s(const void *ptr,int size)
{
kfree(ptr);
}
//---------------------------------- vmalloc -----------------------------------
void *vmalloc(unsigned long size)
{
return kmalloc(size,0);
}
}