Subject: Re: hw addressing
To: Peter L. Peres <plp@actcom.co.il>
From: Frank van der Linden <fvdl@netbsd.org>
List: port-i386
Date: 01/19/2005 23:48:02
On Wed, Jan 19, 2005 at 10:46:05PM +0200, Peter L. Peres wrote:
> It does not work from a user application, it has to be done in kernel 
> space, even if the kernel security level is -1. I just went through this 
> recently.
Sure it does. Provided that you're root, of course, this works:
#include <sys/types.h>
#include <machine/sysarch.h>
#include <machine/pio.h>
#include <err.h>
#include <stdlib.h>
int
main(int argc, char **argv)
{
	int port;
	uint8_t val;
	if (argc != 2)
		errx(1, "usage: inb <port>");
	port = atoi(argv[1]);
	if (port < 0 || port > 0xffff)
		errx(1, "port out of range");
	if (i386_iopl(2) < 0)
		err(2, "i386_iopl(2)");
	val = inb(port);
	printf("inb(%04x) -> %02x\n", port, val);
	return 0;
}
====
gate# cc -o inb inb.c -li386
gate# ./inb 1016
inb(03f8) -> c7