Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 16 Feb 1999 15:26:04 -0700
From:      Wes Peters <wes@softweyr.com>
To:        Donn Miller <dmm125@bellatlantic.net>
Cc:        hackers@FreeBSD.ORG
Subject:   Re: Systems programming for FreeBSD
Message-ID:  <36C9F07C.7F2C9367@softweyr.com>
References:  <36C8C170.4AA85CA@bellatlantic.net>

next in thread | previous in thread | raw e-mail | index | archive | help
Donn Miller wrote:
> 
> I'm looking for some info on how to use functions like inb() and outb()
> to do systems-level programming on FreeBSD.
> 
> 1.)  I need to know the FreeBSD equiv. of the Linux function ioperm().
> I would think you just use open() on /dev/pio or /dev/io with the
> appropriate permissions.

"man io" tells us:

IO(4)        FreeBSD Kernel Interfaces Manual (i386 Architecture)        IO(4)

NAME
     io - I/O privilege file

DESCRIPTION
     The special file /dev/io is a controlled security hole that allows a pro-
     cess to gain I/O privileges (which are normally reserved for kernel-
     internal code). Any process that holds a file descriptor on /dev/io open
     will get its IOPL bits in the flag register set, thus allowing it to per-
     form direct I/O operations.  This can be useful in order to write user-
     land programs that handle some hardware directly.

     The entire access control is handled by the file access permissions of
     /dev/io, so care should be taken in granting rights for this device.
     Note that even read/only access will grant the full I/O privileges.

FILES
     /dev/io

SEE ALSO
     mem(4)

HISTORY
     The io file appeared in FreeBSD 1.0.

> 
> 2.)  what include files do I need to use to use inb() and outb()?  In
> Linux it's <asm/io.h>

machine/cpufunc.h

> Is using ports my only/best option for doing systems-level programming
> for writing drivers for video cards, or should I use assembly?

Ports are your only choice when doing port-mapped I/O.  Using assembler
will make your driver run faster, IF you are a good assembly programmer.
If not, you'll probably be better off writing C.

If you want to write a driver for a video card, start with one of the
existing drivers for a similar device.

> There's a Linux howto on systems programming, maybe FreeBSD is similar
> in that respect. so I can just use the Linux howto for FreeBSD.  What
> are ports anyway, is it like you're writing to a special part of memory?

No, I/O ports are a separate address space from memory.  I strongly 
suggest a good book on x86 architecture, but don't have any idea
what one might be.  Mine is ages old and probably isn't published
anymore.

Suggestions, hackers?

-- 
             Where am I, and what am I doing in this handbasket?

Wes Peters                                                     +1.801.915.2061
Softweyr LLC                                                  wes@softweyr.com


To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-hackers" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?36C9F07C.7F2C9367>