Date: Sat, 06 Dec 1997 14:09:40 +1030 From: Mike Smith <mike@smith.net.au> To: "Glenn Dicus" <gdicus@nomadix.com> Cc: "Mobile FreeBSD" <mobile@freebsd.org> Subject: Re: outb in pcic_probe Message-ID: <199712060339.OAA01451@word.smith.net.au> In-Reply-To: Your message of "Fri, 05 Dec 1997 14:28:47 -0800." <199712052226.OAA18721@mail.nomadix.com>
next in thread | previous in thread | raw e-mail | index | archive | help
> Looking over the sourc code for outb I have noticed that there are several
> definitions for outb, all of which are hard to understand.
They are less hard to understand if you some familiarity with the Intel
instruction set, or a reference thereto. There is only one definition
of outb() however, and it does what you expect; writes a value to a
port.
> In pcic_probe
> there are two successive outb() calls to the same configuration port
>
> outb(sp->index, 0x0E);
> outb(sp->index, 0x37);
>
> Then
>
> setb(sp, 0x3A, 0x40);
>
> Does anyone know what this code is doing to the registers? If so, which
> definition of outb(), setb() are being implemented? I am using FreeBSD
> 2.2.2-RELEASE.
The first two calls are obvious; the second is defined in pcic and even
has a *comment* attached to the definition.
/*
* Set bit(s) of a register
*/
static inline void
setb(struct pcic_slot *sp, int reg, unsigned char mask)
{
sp->putb(sp, reg, sp->getb(sp, reg) | mask);
}
mike
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199712060339.OAA01451>
