delorie.com/archives/browse.cgi | search |
X-Authentication-Warning: | delorie.com: mail set sender to djgpp-bounces using -f |
From: | shwonder AT gmail DOT com |
Newsgroups: | comp.os.msdos.djgpp |
Subject: | How to unmap memory, mapped by __djgpp_map_physical_memory |
Date: | Thu, 21 Jun 2007 06:40:24 -0700 |
Organization: | http://groups.google.com |
Lines: | 70 |
Message-ID: | <1182433224.712755.39270@n2g2000hse.googlegroups.com> |
NNTP-Posting-Host: | 192.198.152.98 |
Mime-Version: | 1.0 |
X-Trace: | posting.google.com 1182433224 16871 127.0.0.1 (21 Jun 2007 13:40:24 GMT) |
X-Complaints-To: | groups-abuse AT google DOT com |
NNTP-Posting-Date: | Thu, 21 Jun 2007 13:40:24 +0000 (UTC) |
User-Agent: | G2/1.0 |
X-HTTP-UserAgent: | Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 1.1.4322; .NET CLR 2.0.50727),gzip(gfe),gzip(gfe) |
X-HTTP-Via: | 1.1 hafwpr02.iil.intel.com:911 (squid/2.6.STABLE12) |
Complaints-To: | groups-abuse AT google DOT com |
Injection-Info: | n2g2000hse.googlegroups.com; posting-host=192.198.152.98; |
posting-account=oSbL2g0AAABEFAo8-nlGVXciDOlWy6Xt | |
To: | djgpp AT delorie DOT com |
DJ-Gateway: | from newsgroup comp.os.msdos.djgpp |
Reply-To: | djgpp AT delorie DOT com |
Hi, All I map device memory into virtual address space using __djgpp_map_physical_memory(). Is there a way to unmap it back. For example: void* AllocateDeviceMemory(unsigned long physicalAddress, unsigned long size) { /* disable interrupts */ bool bInterrupts = disable(); /* align size to page boundary */ (size += 0x0FFF) &= ~0x0FFF; /* allocate page aligned buffer in a heap */ void* virtualAddress = valloc(size); /* Has valloc succeed? */ if (!virtualAddress) return NULL; /* map virtual buffer to physical memory */ if (__djgpp_map_physical_memory(virtualAddress, size, physicalAddress) == 0) { __dpmi_meminfo info; info.address = (unsigned)virtualAddress + __djgpp_base_address; info.size = size; /* lock region */ if (__dpmi_lock_linear_region(&info) == 0) { /* restore interrupts flag */ if (bInterrupts) enable(); return virtualAddress; } } /* free allocated buffer */ /* NOTE, virtual memory still remains mapped to device address !!!!! */ /* HOW CAN WE AVOID THIS ??? */ free(virtualAddress); /* restore interrupts flag */ if (bInterrupts) enable(); return NULL; } void FreeDeviceMemory(void* virtualAddress) { __dpmi_meminfo info; info.address = (unsigned)virtualAddress + __djgpp_base_address; info.size = size; /* unlock region */ __dpmi_unlock_linear_region(&info); /* free allocated buffer */ /* NOTE, virtual memory still remains mapped to device address !!!!! */ /* HOW CAN WE AVOID THIS ??? */ free(virtualAddress); } How can we restore page mappings, for mapped pages (see FreeDeviceMemory() for example) ? Thanks.
webmaster | delorie software privacy |
Copyright © 2019 by DJ Delorie | Updated Jul 2019 |