userland port io - how do we do it on PReP?

Geert Uytterhoeven geert at linux-m68k.org
Mon Mar 6 18:25:49 EST 2000


On Mon, 6 Mar 2000, David Monro wrote:
> Hope this isn't an FAQ.

Yes it is :-)

> I've struck a problem in the X server world - I can't seem to get port
> IO (ie inb()) to work.
>
> There are two problems - one is that there doesn't seem to be an
> equivalent to ioperm() or iopl() to enable access to the IO ports.
> Second is that for MBX and APUS machines the offset to the io port space
> appear to be constants, but for other systems we seem to have an
> external variables isa_io_base, isa_mem_base and pci_dram_offset. Does
> that really mean that programs which do port IO on these systems must
> declare and initialize these varibles before doing port IO? And that
> MBX, APUS and other systems need different binaries as a result? And
> that if /usr/include/linux/autoconfig.h doesn't match the target system
> bad things will happen?

That's all true, unfortunately.

> The following program doesn't work on my IBM 850:
>
> #include <stdio.h>
> #include <asm/io.h>
>
> unsigned long isa_io_base = PREP_ISA_IO_BASE;
>
> main()
> {
>         int x;
>
>         x = inb(0x3CC);
>
>         printf("x = 0x%02x\n");
> }
>
> It just dumps core.

It's even more complicated. You don't have to say

    unsigned long isa_io_base = PREP_ISA_IO_BASE;

only, you have to mmap the I/O port region at offset PREP_ISA_IO_BASE in
/dev/mem and store the resulting virtual addres in isa_io_base. After that
it'll work.

Gr{oetje,eeting}s,

						Geert

--
Geert Uytterhoeven -- Linux/{m68k~Amiga,PPC~CHRP} -- geert at linux-m68k.org

In personal conversations with technical people, I call myself a hacker. But
when I'm talking to journalists I just say "programmer" or something like that.
							    -- Linus Torvalds


** Sent via the linuxppc-dev mail list. See http://lists.linuxppc.org/





More information about the Linuxppc-dev mailing list