Porting a Linux ethernet driver to FreeBSD
John Baldwin
jhb at freebsd.org
Wed Apr 11 22:29:40 UTC 2007
On Wednesday 11 April 2007 10:40, Alan Garfield wrote:
> On Wed, 2007-04-11 at 10:32 -0400, John Baldwin wrote:
>
> > I think de(4) is kind of simple if you ignore all the ifmedia handling stuff.
> > You basically need to alloc an ifnet, fill out if_init and if_start with routines
> > to bring up the interface and to drain the tx queue, and then pass it to
> > ether_ifattach(). When you get packets, you feed them to the stack by calling
> > ifp->if_input(). You will probably need to set if_mtu during attach to your
> > 256 byte MTU. And you should add an if_ioctl routine as well.
>
> Thanks John,
>
> I've been heavily looking at if_ed.c and if_de.c. I've got the basics
> worked out and the driver loading. But I'm struggling with getting the
> resources sorted out. I'd like to not hard-code the io ports and irq
> into the driver and instead get their details from the acpi bus, but I'm
> having trouble understanding how this is done.
>
> PnP, PCI and bus_* seem like magic to me!
Ok. If this is an ACPI device, you can get the resources at rids 0...N.
rid 0 of SYS_RES_MEMORY will be the first memory resource returned by
_CRS, rid 1 will be the second, etc.
Thus, for example, suppose you have a device with 3 resources: a memory
resource, an I/O port resource, and then another memory resource.
The first resource would be SYS_RES_MEMORY rid 0, the second resource
would be SYS_RES_IOPORT rid 0, and the last resource would be
SYS_RES_MEMORY rid 1.
--
John Baldwin
More information about the freebsd-hardware
mailing list