xref: /freebsd-12.1/sys/dev/xe/if_xevar.h (revision 718cf2cc)
1 /*-
2  * SPDX-License-Identifier: BSD-2-Clause-FreeBSD
3  *
4  * Copyright (c) 1998, 1999 Scott Mitchell
5  * All rights reserved.
6  *
7  * Redistribution and use in source and binary forms, with or without
8  * modification, are permitted provided that the following conditions
9  * are met:
10  * 1. Redistributions of source code must retain the above copyright
11  *    notice, this list of conditions and the following disclaimer.
12  * 2. Redistributions in binary form must reproduce the above copyright
13  *    notice, this list of conditions and the following disclaimer in the
14  *    documentation and/or other materials provided with the distribution.
15  *
16  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
17  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
18  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
19  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
20  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
21  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
22  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
23  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
24  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
25  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
26  * SUCH DAMAGE.
27  *
28  *	$Id: if_xe.c,v 1.20 1999/06/13 19:17:40 scott Exp $
29  * $FreeBSD$
30  */
31 #ifndef DEV_XE_IF_XEDEV_H
32 #define DEV_XE_IF_XEDEV_H
33 
34 /*
35  * One of these structures per allocated device
36  */
37 struct xe_softc {
38 	struct ifmedia	ifmedia;
39 	struct ifmib_iso_8802_3 mibdata;
40 	struct callout	media_timer;
41 	struct callout	wdog_timer;
42 	int		tx_timeout;
43 	struct mtx	lock;
44 	struct ifnet	*ifp;
45 	struct ifmedia	*ifm;
46 	u_char		enaddr[ETHER_ADDR_LEN];
47 	const char	*card_type;	/* Card model name */
48 	const char	*vendor;	/* Card manufacturer */
49 	device_t	dev;		/* Device */
50 	void		*intrhand;
51 	struct resource	*irq_res;
52 	int		irq_rid;
53 	struct resource	*port_res;
54 	int		port_rid;
55 	struct resource	*ce2_port_res;
56 	int		ce2_port_rid;
57 	int		srev;     	/* Silicon revision */
58 	int		tx_queued;	/* Transmit packets currently waiting */
59 	int		tx_tpr;		/* Last value of TPR reg on card */
60 	int		tx_timeouts;	/* Count of transmit timeouts */
61 	uint16_t	tx_min;		/* Smallest packet for no padding */
62 	uint16_t	tx_thres;	/* Threshold bytes for early transmit */
63 	int		autoneg_status;	/* Autonegotiation progress state */
64 	int		media;		/* Private media word */
65 	u_char		version;	/* Bonding Version register from card */
66 	u_char		modem;		/* 1 = Card has a modem */
67 	u_char		ce2;		/* 1 = Card has CE2 silicon */
68 	u_char		mohawk;      	/* 1 = Card has Mohawk (CE3) silicon */
69 	u_char		dingo;    	/* 1 = Card has Dingo (CEM56) silicon */
70 	u_char		phy_ok;		/* 1 = MII-compliant PHY found */
71 	u_char		gone;		/* 1 = Card bailed out */
72 };
73 
74 #define	XE_LOCK(sc)		mtx_lock(&(sc)->lock)
75 #define	XE_UNLOCK(sc)		mtx_unlock(&(sc)->lock)
76 #define	XE_ASSERT_LOCKED(sc)	mtx_assert(&(sc)->lock, MA_OWNED)
77 
78 /*
79  * For accessing card registers
80  */
81 #define	XE_INB(r)		bus_read_1(scp->port_res, (r))
82 #define	XE_INW(r)		bus_read_2(scp->port_res, (r))
83 #define	XE_OUTB(r, b)		bus_write_1(scp->port_res, (r), (b))
84 #define	XE_OUTW(r, w)		bus_write_2(scp->port_res, (r), (w))
85 #define	XE_SELECT_PAGE(p)	XE_OUTB(XE_PR, (p))
86 
87 int	xe_attach(device_t dev);
88 int	xe_activate(device_t dev);
89 void	xe_deactivate(device_t dev);
90 void	xe_stop(struct xe_softc *scp);
91 
92 #endif /* DEV_XE_IF_XEVAR_H */
93