delorie.com/archives/browse.cgi   search  
Mail Archives: djgpp/1997/11/07/22:47:06

Newsgroups: comp.os.msdos.djgpp
From: Peter Berdeklis <peter AT atmosp DOT physics DOT utoronto DOT ca>
Subject: Re: DMA transfer
Message-ID: <Pine.SGI.3.91.971107102709.19257A-100000@atmosp.physics.utoronto.ca>
NNTP-Posting-Host: chinook.physics.utoronto.ca
Sender: news AT info DOT physics DOT utoronto DOT ca (System Administrator)
Mime-Version: 1.0
Organization: University of Toronto - Dept. of Physics
In-Reply-To: <199711040117.KAA11803@asd.tnes.nec.co.jp>
Date: Fri, 7 Nov 1997 15:34:17 GMT
References: <199711040117 DOT KAA11803 AT asd DOT tnes DOT nec DOT co DOT jp>
Lines: 22
To: djgpp AT delorie DOT com
DJ-Gateway: from newsgroup comp.os.msdos.djgpp

On Tue, 4 Nov 1997 satoh AT asd DOT tnes DOT nec DOT co DOT jp wrote:
> I'm writing a NIC board driver using gcc compiler (DJGPP V2).
> I allocate memory on PC's memory using malloc() function and
> I have to set the physical address to register of the board.
> ( This board performs PCI bus master device.)
> But malloc() function returns virtual memory address, and I
> have no idea to translate malloc'ed virtual memory address into
> physical address.
> 
> Does anyone know how to allocate DMAable large memory on PC 
> and translate the virtual memory address into physiacal address.

You have to allocate memory below 1 MB, unless you're doing 16 bit DMA in 
which case 16 MB is the upper limit.  To allocate memory below 1 MB call  
__dpmi_allocate_dos_memory.  This will return the start of the real mode 
segment of the allocated memory, which converts easily into a physical 
address.

---------------
Peter Berdeklis
Dept. of Physics, Univ. of Toronto

- Raw text -


  webmaster     delorie software   privacy  
  Copyright © 2019   by DJ Delorie     Updated Jul 2019