On Fri, Jan 16, 2004 at 01:02:33PM +0530, Suresh. R wrote:
> This might be a very basic question, but I am very new to this field.
> So please help me.
>
> I am writing a linux device driver for UPD63335 audio codec. Its
> controlled through the MQ1132 co-processor. The VR4131 is the processor.
> The memory of MQ1132 is mapped to the processor memory in Kseg1 (0xA000
> 0000 onwards) which the manual says is TLB Unmapped region. Now my
> question is is it necessary to map this region before using it in Linux.
> Actually I have WinCE code for my reference. In that code the programmer
> is mapping the region using Virtual Cpoy and Virtual Alloc. Is it
> necessary to do that or Can I directly address the memory locatoin.
Generally a driver under Linux maps a device in it's initialization
routine with a bit of code like
#define FOO_BASE 0x12340000UL /* physical address */
#define FOO_SIZE 0x00001000UL
...
struct foo_regs *base;
base = ioremap(0x1234, FOO_SIZE);
if (!base) {
/* Failed, game over */
harakiri();
...
}
/* Success, make it blink ... */
foo->blinkenlight = 42;
...
/* Done, unmap before exiting.
unmap(base);
...
This removes all knowledge about how a particular architecture handles
mappings from the driver and therefore is generally the prefered way in
Linux.
Linux/MIPS optimize the case where an unmapped area can be used, so no
runtime overhead at all.
Ralf
|