FreeBSD kernel IICBUS device code
if_ic.c File Reference
#include <sys/cdefs.h>
#include <sys/param.h>
#include <sys/systm.h>
#include <sys/mbuf.h>
#include <sys/socket.h>
#include <sys/filio.h>
#include <sys/sockio.h>
#include <sys/kernel.h>
#include <sys/lock.h>
#include <sys/module.h>
#include <sys/mutex.h>
#include <sys/bus.h>
#include <sys/time.h>
#include <sys/malloc.h>
#include <net/if.h>
#include <net/if_var.h>
#include <net/if_types.h>
#include <net/netisr.h>
#include <net/route.h>
#include <netinet/in.h>
#include <netinet/in_systm.h>
#include <netinet/in_var.h>
#include <netinet/ip.h>
#include <netinet/if_ether.h>
#include <net/bpf.h>
#include <dev/iicbus/iiconf.h>
#include <dev/iicbus/iicbus.h>
#include "iicbus_if.h"
Include dependency graph for if_ic.c:

Go to the source code of this file.

Data Structures

struct  ic_softc
 

Macros

#define PCF_MASTER_ADDRESS   0xaa
 
#define ICHDRLEN   sizeof(u_int32_t)
 
#define ICMTU   1500 /* default mtu */
 
#define IC_SENDING   0x0001
 
#define IC_OBUF_BUSY   0x0002
 
#define IC_IFBUF_BUSY   0x0004
 
#define IC_BUFFERS_BUSY   (IC_OBUF_BUSY | IC_IFBUF_BUSY)
 
#define IC_BUFFER_WAITER   0x0004
 

Functions

 __FBSDID ("$FreeBSD$")
 
static int icprobe (device_t)
 
static int icattach (device_t)
 
static int icioctl (struct ifnet *, u_long, caddr_t)
 
static int icoutput (struct ifnet *, struct mbuf *, const struct sockaddr *, struct route *)
 
static int icintr (device_t, int, char *)
 
static void ic_alloc_buffers (struct ic_softc *sc, int mtu)
 
 DRIVER_MODULE (ic, iicbus, ic_driver, ic_devclass, 0, 0)
 
 MODULE_DEPEND (ic, iicbus, IICBUS_MINVER, IICBUS_PREFVER, IICBUS_MAXVER)
 
 MODULE_VERSION (ic, 1)
 

Variables

static devclass_t ic_devclass
 
static device_method_t ic_methods []
 
static driver_t ic_driver
 

Macro Definition Documentation

◆ IC_BUFFER_WAITER

#define IC_BUFFER_WAITER   0x0004

Definition at line 97 of file if_ic.c.

◆ IC_BUFFERS_BUSY

#define IC_BUFFERS_BUSY   (IC_OBUF_BUSY | IC_IFBUF_BUSY)

Definition at line 96 of file if_ic.c.

◆ IC_IFBUF_BUSY

#define IC_IFBUF_BUSY   0x0004

Definition at line 95 of file if_ic.c.

◆ IC_OBUF_BUSY

#define IC_OBUF_BUSY   0x0002

Definition at line 94 of file if_ic.c.

◆ IC_SENDING

#define IC_SENDING   0x0001

Definition at line 93 of file if_ic.c.

◆ ICHDRLEN

#define ICHDRLEN   sizeof(u_int32_t)

Definition at line 71 of file if_ic.c.

◆ ICMTU

#define ICMTU   1500 /* default mtu */

Definition at line 72 of file if_ic.c.

◆ PCF_MASTER_ADDRESS

#define PCF_MASTER_ADDRESS   0xaa

Definition at line 69 of file if_ic.c.

Function Documentation

◆ __FBSDID()

__FBSDID ( "$FreeBSD$"  )

◆ DRIVER_MODULE()

DRIVER_MODULE ( ic  ,
iicbus  ,
ic_driver  ,
ic_devclass  ,
,
 
)

◆ ic_alloc_buffers()

static void ic_alloc_buffers ( struct ic_softc sc,
int  mtu 
)
static

Definition at line 128 of file if_ic.c.

References IC_BUFFER_WAITER, IC_BUFFERS_BUSY, ic_softc::ic_flags, ic_softc::ic_ifbuf, ic_softc::ic_ifp, ic_softc::ic_lock, ic_softc::ic_obuf, and ICHDRLEN.

Referenced by icattach(), and icioctl().

Here is the caller graph for this function:

◆ icattach()

static int icattach ( device_t  dev)
static

Definition at line 163 of file if_ic.c.

References dev, ic_softc::ic_addr, ic_alloc_buffers(), ic_softc::ic_dev, ic_softc::ic_ifp, ic_softc::ic_lock, ICHDRLEN, icioctl(), ICMTU, icoutput(), and PCF_MASTER_ADDRESS.

Here is the call graph for this function:

◆ icintr()

◆ icioctl()

static int icioctl ( struct ifnet *  ifp,
u_long  cmd,
caddr_t  data 
)
static

Definition at line 199 of file if_ic.c.

References data, ic_alloc_buffers(), ic_softc::ic_dev, ic_softc::ic_ifp, ic_softc::ic_lock, IIC_FASTEST, IIC_INTR, IIC_WAIT, iicbus_release_bus(), iicbus_request_bus(), and iicbus_reset.

Referenced by icattach().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ icoutput()

static int icoutput ( struct ifnet *  ifp,
struct mbuf *  m,
const struct sockaddr *  dst,
struct route *  ro 
)
static

Definition at line 360 of file if_ic.c.

References ic_softc::ic_addr, IC_BUFFER_WAITER, IC_BUFFERS_BUSY, ic_softc::ic_dev, ic_softc::ic_flags, ic_softc::ic_ifp, ic_softc::ic_lock, ic_softc::ic_obuf, IC_OBUF_BUSY, IC_SENDING, ICHDRLEN, iicbus_block_write(), and len.

Referenced by icattach().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ icprobe()

static int icprobe ( device_t  dev)
static

Definition at line 154 of file if_ic.c.

◆ MODULE_DEPEND()

MODULE_DEPEND ( ic  ,
iicbus  ,
IICBUS_MINVER  ,
IICBUS_PREFVER  ,
IICBUS_MAXVER   
)

◆ MODULE_VERSION()

MODULE_VERSION ( ic  ,
 
)

Variable Documentation

◆ ic_devclass

devclass_t ic_devclass
static

Definition at line 99 of file if_ic.c.

◆ ic_driver

driver_t ic_driver
static
Initial value:
= {
"ic",
sizeof(struct ic_softc),
}
static device_method_t ic_methods[]
Definition: if_ic.c:110
Definition: if_ic.c:74

Definition at line 121 of file if_ic.c.

◆ ic_methods

device_method_t ic_methods[]
static
Initial value:
= {
DEVMETHOD(device_probe, icprobe),
DEVMETHOD(device_attach, icattach),
DEVMETHOD(iicbus_intr, icintr),
{ 0, 0 }
}
static int icintr(device_t, int, char *)
Definition: if_ic.c:275
static int icprobe(device_t)
Definition: if_ic.c:154
static int icattach(device_t)
Definition: if_ic.c:163
void iicbus_intr(device_t bus, int event, char *buf)
Definition: iiconf.c:97

Definition at line 110 of file if_ic.c.