/* * This file is part of the UCB release of Plan 9. It is subject to the license * terms in the LICENSE file found in the top-level directory of this * distribution and at http://akaros.cs.berkeley.edu/files/Plan9License. No * part of the UCB release of Plan 9, including this file, may be copied, * modified, propagated, or distributed except according to the terms contained * in the LICENSE file. */ enum { MaxEther = 48, Ntypes = 8, }; typedef struct Ether Ether; struct Ether { ISAConf ISAConf; /* hardware info */ int ctlrno; int tbdf; /* type+busno+devno+funcno */ uint8_t ea[Eaddrlen]; void (*attach)(Ether*); /* filled in by reset routine */ void (*detach)(Ether*); void (*transmit)(Ether*); void (*interrupt)(Ureg*, void*); int32_t (*ifstat)(Ether*, void*, int32_t, uint32_t); int32_t (*ctl)(Ether*, void*, int32_t); /* custom ctl messages */ void (*power)(Ether*, int); /* power on/off */ void (*shutdown)(Ether*); /* shutdown hardware before reboot */ void *ctlr; Queue* oq; Netif Netif; }; extern Block* etheriq(Ether*, Block*, int); extern void addethercard(char*, int(*)(Ether*)); extern uint32_t ethercrc(unsigned char*, int); extern int parseether(unsigned char*, char*); #define NEXT(x, l) (((x)+1)%(l)) #define PREV(x, l) (((x) == 0) ? (l)-1: (x)-1)