xref: /openbsd-src/sys/dev/ic/bcmgenetvar.h (revision d3a0e4e9656053b607f5051246e620b4ad57b18f)
1*d3a0e4e9Skettenis /* $OpenBSD: bcmgenetvar.h,v 1.1 2020/04/14 21:02:39 kettenis Exp $ */
2*d3a0e4e9Skettenis /* $NetBSD: bcmgenetvar.h,v 1.1 2020/02/22 00:28:35 jmcneill Exp $ */
3*d3a0e4e9Skettenis 
4*d3a0e4e9Skettenis /*-
5*d3a0e4e9Skettenis  * Copyright (c) 2020 Jared McNeill <jmcneill@invisible.ca>
6*d3a0e4e9Skettenis  * All rights reserved.
7*d3a0e4e9Skettenis  *
8*d3a0e4e9Skettenis  * Redistribution and use in source and binary forms, with or without
9*d3a0e4e9Skettenis  * modification, are permitted provided that the following conditions
10*d3a0e4e9Skettenis  * are met:
11*d3a0e4e9Skettenis  * 1. Redistributions of source code must retain the above copyright
12*d3a0e4e9Skettenis  *    notice, this list of conditions and the following disclaimer.
13*d3a0e4e9Skettenis  * 2. Redistributions in binary form must reproduce the above copyright
14*d3a0e4e9Skettenis  *    notice, this list of conditions and the following disclaimer in the
15*d3a0e4e9Skettenis  *    documentation and/or other materials provided with the distribution.
16*d3a0e4e9Skettenis  *
17*d3a0e4e9Skettenis  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
18*d3a0e4e9Skettenis  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
19*d3a0e4e9Skettenis  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
20*d3a0e4e9Skettenis  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
21*d3a0e4e9Skettenis  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
22*d3a0e4e9Skettenis  * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
23*d3a0e4e9Skettenis  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
24*d3a0e4e9Skettenis  * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
25*d3a0e4e9Skettenis  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
26*d3a0e4e9Skettenis  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
27*d3a0e4e9Skettenis  * SUCH DAMAGE.
28*d3a0e4e9Skettenis  */
29*d3a0e4e9Skettenis 
30*d3a0e4e9Skettenis /*
31*d3a0e4e9Skettenis  * Broadcom GENETv5
32*d3a0e4e9Skettenis  */
33*d3a0e4e9Skettenis 
34*d3a0e4e9Skettenis #ifndef _BCMGENETVAR_H
35*d3a0e4e9Skettenis #define _BCMGENETVAR_H
36*d3a0e4e9Skettenis 
37*d3a0e4e9Skettenis #include <dev/ic/bcmgenetreg.h>
38*d3a0e4e9Skettenis 
39*d3a0e4e9Skettenis enum genet_phy_mode {
40*d3a0e4e9Skettenis 	GENET_PHY_MODE_RGMII,
41*d3a0e4e9Skettenis 	GENET_PHY_MODE_RGMII_ID,
42*d3a0e4e9Skettenis 	GENET_PHY_MODE_RGMII_TXID,
43*d3a0e4e9Skettenis 	GENET_PHY_MODE_RGMII_RXID,
44*d3a0e4e9Skettenis };
45*d3a0e4e9Skettenis 
46*d3a0e4e9Skettenis struct genet_bufmap {
47*d3a0e4e9Skettenis 	bus_dmamap_t		map;
48*d3a0e4e9Skettenis 	struct mbuf		*mbuf;
49*d3a0e4e9Skettenis };
50*d3a0e4e9Skettenis 
51*d3a0e4e9Skettenis struct genet_ring {
52*d3a0e4e9Skettenis 	bus_dma_tag_t		buf_tag;
53*d3a0e4e9Skettenis 	struct genet_bufmap	buf_map[GENET_DMA_DESC_COUNT];
54*d3a0e4e9Skettenis 	u_int			next, queued;
55*d3a0e4e9Skettenis 	uint32_t		cidx, pidx;
56*d3a0e4e9Skettenis };
57*d3a0e4e9Skettenis 
58*d3a0e4e9Skettenis struct genet_softc {
59*d3a0e4e9Skettenis 	struct device		sc_dev;
60*d3a0e4e9Skettenis 	bus_space_tag_t		sc_bst;
61*d3a0e4e9Skettenis 	bus_space_handle_t	sc_bsh;
62*d3a0e4e9Skettenis 	bus_dma_tag_t		sc_dmat;
63*d3a0e4e9Skettenis 	int			sc_phy_id;
64*d3a0e4e9Skettenis 	enum genet_phy_mode	sc_phy_mode;
65*d3a0e4e9Skettenis 
66*d3a0e4e9Skettenis 	void			*sc_ih;
67*d3a0e4e9Skettenis 
68*d3a0e4e9Skettenis 	struct arpcom		sc_ac;
69*d3a0e4e9Skettenis #define sc_lladdr	sc_ac.ac_enaddr
70*d3a0e4e9Skettenis 	struct mii_data		sc_mii;
71*d3a0e4e9Skettenis 	struct timeout		sc_stat_ch;
72*d3a0e4e9Skettenis 
73*d3a0e4e9Skettenis 	struct genet_ring	sc_tx;
74*d3a0e4e9Skettenis 	struct genet_ring	sc_rx;
75*d3a0e4e9Skettenis 	struct if_rxring	sc_rx_ring;
76*d3a0e4e9Skettenis 	struct timeout		sc_rxto;
77*d3a0e4e9Skettenis };
78*d3a0e4e9Skettenis 
79*d3a0e4e9Skettenis int	genet_attach(struct genet_softc *);
80*d3a0e4e9Skettenis int	genet_intr(void *);
81*d3a0e4e9Skettenis void	genet_lladdr_read(struct genet_softc *, uint8_t *);
82*d3a0e4e9Skettenis 
83*d3a0e4e9Skettenis #endif /* !_BCMGENETVAR_H */
84