Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 11 Apr 2007 10:32:02 -0400
From:      John Baldwin <jhb@freebsd.org>
To:        freebsd-hardware@freebsd.org
Cc:        Alan Garfield <alan@fromorbit.com>
Subject:   Re: Porting a Linux ethernet driver to FreeBSD
Message-ID:  <200704111032.02374.jhb@freebsd.org>
In-Reply-To: <1175864703.4058.20.camel@hiro.auspc.com.au>
References:  <1175864703.4058.20.camel@hiro.auspc.com.au>

next in thread | previous in thread | raw e-mail | index | archive | help
On Friday 06 April 2007 09:05, Alan Garfield wrote:
> Hello all!
> 
> I'm posting here because I cannot find enough information elsewhere.
> 
> I've got a Sun Fire V20z (re-badged NewISys E2100) which has a little
> dedicated Service Processor on board running Linux. The "SP" can
> communicate via IPMI and also by Ethernet via two small fifo buffer in
> the PRS via the LPC.
> 
> I have the GPL source for the so-called 'jnet' device which is basically
> a small Ethernet-looking driver that wraps around these 256 byte PRS
> buffers and a single interrupt. 
> 
> -- FROM THE GPL DRIVER COMMENTS
>  
> Jnet is a ethernet adapter driver.  As such, it provides what appears
> to be a typical ethernet adapter interface which the platform can use
> to send/receive IP traffic to the SP.  The actual physical medium is
> the PRS, which resides on the LPC bus, and provides two 256 byte fifo's
> along with an interrupt and a status register.
> 
> When an interrupt is received, the status register can be read, which
> will indicate either a Data Available (DAV), or a Data Acknowledge
> (DAK). We can then choose to read or write data to the fifo, and thus
> facilitate communication between the SP and Platform.
> 
> Because the fifo's provided by the PRS are only 256 bytes, our packet
> size is limited.  As a result, the only feature we can't support is
> DHCP, since a DHCP packet is 313 bytes.
> 
> --
> 
> I'd like to port this driver to FreeBSD but I cannot find any decent
> examples of a basic Ethernet driver. Most have miibus which I don't need
> because there is no PHY, the loopback is clone-able and seems to simple
> and most of the others are all so different from each other I cannot
> really tell where to start. 
> 
> Can someone point me in the direction of an example or the relevant man
> pages I should be reading.
> 
> The device driver for Linux seems quite simple and clearly defined, but
> I cannot find a similar driver that I can hack apart.
> 
> Any help would be gratefully appreciated.

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.

-- 
John Baldwin



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200704111032.02374.jhb>