summaryrefslogtreecommitdiffstats
path: root/sys/dev/ie/if_ievar.h
blob: 35fb836c5c41dc0687e2812fd99eeb4fad199952 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
/*-
 * $FreeBSD$
 */

enum ie_hardware {
	IE_NONE,
        IE_STARLAN10,
        IE_EN100,
        IE_SLFIBER,
        IE_3C507,
        IE_NI5210,
        IE_EE16,
        IE_UNKNOWN
};

/*
 * Ethernet status, per interface.
 */
struct ie_softc {
	struct	 ifnet *ifp;
	void	 (*ie_reset_586) (struct ie_softc *);
	void	 (*ie_chan_attn) (struct ie_softc *);
	enum	 ie_hardware hard_type;
	int	 hard_vers;
	u_char	 enaddr[6];

	device_t		dev;

	struct resource *	io_res;
	int			io_rid;
	bus_space_tag_t		io_bt;
	bus_space_handle_t	io_bh;

	struct resource	*	irq_res;
	int			irq_rid;
	void *			irq_ih;

	struct resource *	mem_res;
	int			mem_rid;
	bus_space_tag_t		mem_bt;
	bus_space_handle_t	mem_bh;

	u_int	 port;		/* i/o base address for this interface */
	caddr_t	 iomem;		/* memory size */
	caddr_t	 iomembot;	/* memory base address */
	unsigned iosize;
	int	 bus_use;	/* 0 means 16bit, 1 means 8 bit adapter */

	int	 want_mcsetup;
	int	 promisc;
	int	 nframes;
	int	 nrxbufs;
	int	 ntxbufs;
	volatile struct ie_int_sys_conf_ptr *iscp;
	volatile struct ie_sys_ctl_block *scb;
	volatile struct ie_recv_frame_desc **rframes;	/* nframes worth */
	volatile struct ie_recv_buf_desc **rbuffs;	/* nrxbufs worth */
	volatile u_char **cbuffs;			/* nrxbufs worth */
	int	 rfhead, rftail, rbhead, rbtail;

	volatile struct ie_xmit_cmd **xmit_cmds;	/* ntxbufs worth */
	volatile struct ie_xmit_buf **xmit_buffs;	/* ntxbufs worth */
	volatile u_char	 **xmit_cbuffs;			/* ntxbufs worth */
	int	 xmit_count;

	struct	 ie_en_addr mcast_addrs[MAXMCAST + 1];
	int	 mcast_count;

	u_short	 irq_encoded;	/* encoded interrupt on IEE16 */

	struct mtx	lock;
};
#define PORT(sc)	sc->port
#define MEM(sc)		sc->iomem

#define	IE_LOCK(sc)		mtx_lock(&(sc)->lock)
#define	IE_UNLOCK(sc)		mtx_unlock(&(sc)->lock)
#define	IE_ASSERT_LOCKED(sc)	mtx_assert(&(sc)->lock, MA_OWNED)

void            ie_intr			(void *);
int		ie_alloc_resources	(device_t);
void		ie_release_resources	(device_t);
int		ie_attach		(device_t);
int		ie_detach		(device_t);

void		el_reset_586		(struct ie_softc *);
void		el_chan_attn		(struct ie_softc *);

void		sl_reset_586		(struct ie_softc *);
void		sl_chan_attn		(struct ie_softc *);

void		ee16_reset_586		(struct ie_softc *);
void		ee16_chan_attn		(struct ie_softc *);
void		ee16_shutdown		(struct ie_softc *);

void		sl_read_ether		(struct ie_softc *, unsigned char *);
int		check_ie_present	(struct ie_softc *);

OpenPOWER on IntegriCloud