I have an ISA network card that can use a 4 KB memory-mapped address
space for communication. It's a PnP card and it can locate the base
address for this window anywhere within an (aligned) 24 bit address
space. My question is: where should it *actually* locate this address
space so that Linux reserves this spaces for the device, not system RAM?
Now I know that Linux maps bus address space into a high memory area,
and an ISA device driver must use ioremap to translate base addresses
into offsets into kernel memory. But I don't know how this memory is
reserved in the first place. How does the memory address translation
hardware become aware that a particular range of physical addresses is
assigned to an ISA device, not system RAM? How does Linux ensure that a
given range of addresses should be mapped to an IO device, not RAM?