1*58a2b000SEvgeniy Ivanov /* $NetBSD: netif.h,v 1.7 2009/01/17 14:00:36 tsutsui Exp $ */ 2*58a2b000SEvgeniy Ivanov 3*58a2b000SEvgeniy Ivanov #ifndef __SYS_LIBNETBOOT_NETIF_H 4*58a2b000SEvgeniy Ivanov #define __SYS_LIBNETBOOT_NETIF_H 5*58a2b000SEvgeniy Ivanov 6*58a2b000SEvgeniy Ivanov #include "iodesc.h" 7*58a2b000SEvgeniy Ivanov 8*58a2b000SEvgeniy Ivanov struct netif; /* forward */ 9*58a2b000SEvgeniy Ivanov 10*58a2b000SEvgeniy Ivanov struct netif_driver { 11*58a2b000SEvgeniy Ivanov char *netif_bname; 12*58a2b000SEvgeniy Ivanov int (*netif_match)(struct netif *, void *); 13*58a2b000SEvgeniy Ivanov int (*netif_probe)(struct netif *, void *); 14*58a2b000SEvgeniy Ivanov void (*netif_init)(struct iodesc *, void *); 15*58a2b000SEvgeniy Ivanov int (*netif_get)(struct iodesc *, void *, size_t, saseconds_t); 16*58a2b000SEvgeniy Ivanov int (*netif_put)(struct iodesc *, void *, size_t); 17*58a2b000SEvgeniy Ivanov void (*netif_end)(struct netif *); 18*58a2b000SEvgeniy Ivanov struct netif_dif *netif_ifs; 19*58a2b000SEvgeniy Ivanov int netif_nifs; 20*58a2b000SEvgeniy Ivanov }; 21*58a2b000SEvgeniy Ivanov 22*58a2b000SEvgeniy Ivanov struct netif_dif { 23*58a2b000SEvgeniy Ivanov int dif_unit; 24*58a2b000SEvgeniy Ivanov int dif_nsel; 25*58a2b000SEvgeniy Ivanov struct netif_stats *dif_stats; 26*58a2b000SEvgeniy Ivanov void *dif_private; 27*58a2b000SEvgeniy Ivanov /* the following fields are used internally by the netif layer */ 28*58a2b000SEvgeniy Ivanov u_long dif_used; 29*58a2b000SEvgeniy Ivanov }; 30*58a2b000SEvgeniy Ivanov 31*58a2b000SEvgeniy Ivanov struct netif_stats { 32*58a2b000SEvgeniy Ivanov int collisions; 33*58a2b000SEvgeniy Ivanov int collision_error; 34*58a2b000SEvgeniy Ivanov int missed; 35*58a2b000SEvgeniy Ivanov int sent; 36*58a2b000SEvgeniy Ivanov int received; 37*58a2b000SEvgeniy Ivanov int deferred; 38*58a2b000SEvgeniy Ivanov int overflow; 39*58a2b000SEvgeniy Ivanov }; 40*58a2b000SEvgeniy Ivanov 41*58a2b000SEvgeniy Ivanov struct netif { 42*58a2b000SEvgeniy Ivanov struct netif_driver *nif_driver; 43*58a2b000SEvgeniy Ivanov int nif_unit; 44*58a2b000SEvgeniy Ivanov int nif_sel; 45*58a2b000SEvgeniy Ivanov void *nif_devdata; 46*58a2b000SEvgeniy Ivanov }; 47*58a2b000SEvgeniy Ivanov 48*58a2b000SEvgeniy Ivanov extern struct netif_driver *netif_drivers[]; /* machdep */ 49*58a2b000SEvgeniy Ivanov extern int n_netif_drivers; 50*58a2b000SEvgeniy Ivanov 51*58a2b000SEvgeniy Ivanov extern int netif_debug; 52*58a2b000SEvgeniy Ivanov 53*58a2b000SEvgeniy Ivanov void netif_init(void); 54*58a2b000SEvgeniy Ivanov struct netif *netif_select(void *); 55*58a2b000SEvgeniy Ivanov int netif_probe(struct netif *, void *); 56*58a2b000SEvgeniy Ivanov void netif_attach(struct netif *, struct iodesc *, void *); 57*58a2b000SEvgeniy Ivanov void netif_detach(struct netif *); 58*58a2b000SEvgeniy Ivanov 59*58a2b000SEvgeniy Ivanov int netif_open(void *); 60*58a2b000SEvgeniy Ivanov int netif_close(int); 61*58a2b000SEvgeniy Ivanov 62*58a2b000SEvgeniy Ivanov #endif /* __SYS_LIBNETBOOT_NETIF_H */ 63