xref: /freebsd/sys/dev/dpaa/dpaa_eth.h (revision fd8d34ce272ba40f3e0218198ba542a29c390a4a)
1*fd8d34ceSJustin Hibbits /*-
2*fd8d34ceSJustin Hibbits  * Copyright (c) 2012 Semihalf.
3*fd8d34ceSJustin Hibbits  * All rights reserved.
4*fd8d34ceSJustin Hibbits  *
5*fd8d34ceSJustin Hibbits  * Redistribution and use in source and binary forms, with or without
6*fd8d34ceSJustin Hibbits  * modification, are permitted provided that the following conditions
7*fd8d34ceSJustin Hibbits  * are met:
8*fd8d34ceSJustin Hibbits  * 1. Redistributions of source code must retain the above copyright
9*fd8d34ceSJustin Hibbits  *    notice, this list of conditions and the following disclaimer.
10*fd8d34ceSJustin Hibbits  * 2. Redistributions in binary form must reproduce the above copyright
11*fd8d34ceSJustin Hibbits  *    notice, this list of conditions and the following disclaimer in the
12*fd8d34ceSJustin Hibbits  *    documentation and/or other materials provided with the distribution.
13*fd8d34ceSJustin Hibbits  *
14*fd8d34ceSJustin Hibbits  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
15*fd8d34ceSJustin Hibbits  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
16*fd8d34ceSJustin Hibbits  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
17*fd8d34ceSJustin Hibbits  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
18*fd8d34ceSJustin Hibbits  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
19*fd8d34ceSJustin Hibbits  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
20*fd8d34ceSJustin Hibbits  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
21*fd8d34ceSJustin Hibbits  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
22*fd8d34ceSJustin Hibbits  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
23*fd8d34ceSJustin Hibbits  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
24*fd8d34ceSJustin Hibbits  * SUCH DAMAGE.
25*fd8d34ceSJustin Hibbits  */
26*fd8d34ceSJustin Hibbits 
27*fd8d34ceSJustin Hibbits #ifndef DPAA_ETH_H_
28*fd8d34ceSJustin Hibbits #define DPAA_ETH_H_
29*fd8d34ceSJustin Hibbits 
30*fd8d34ceSJustin Hibbits struct dpaa_eth_softc {
31*fd8d34ceSJustin Hibbits 	/* XXX MII bus requires that struct ifnet is first!!! */
32*fd8d34ceSJustin Hibbits 	if_t				sc_ifnet;
33*fd8d34ceSJustin Hibbits 
34*fd8d34ceSJustin Hibbits 	device_t			sc_dev;
35*fd8d34ceSJustin Hibbits 	struct resource			*sc_mem;
36*fd8d34ceSJustin Hibbits 	struct mtx			sc_lock;
37*fd8d34ceSJustin Hibbits 
38*fd8d34ceSJustin Hibbits 	int				sc_mac_enet_mode;
39*fd8d34ceSJustin Hibbits 
40*fd8d34ceSJustin Hibbits 	/* RX Pool */
41*fd8d34ceSJustin Hibbits 	struct bman_pool		*sc_rx_pool;
42*fd8d34ceSJustin Hibbits 	uint8_t				sc_rx_bpid;
43*fd8d34ceSJustin Hibbits 	uma_zone_t			sc_rx_zone;
44*fd8d34ceSJustin Hibbits 	char				sc_rx_zname[64];
45*fd8d34ceSJustin Hibbits 
46*fd8d34ceSJustin Hibbits 	/* RX Frame Queue */
47*fd8d34ceSJustin Hibbits 	struct qman_fq			*sc_rx_fq;
48*fd8d34ceSJustin Hibbits 	uint32_t			sc_rx_fqid;
49*fd8d34ceSJustin Hibbits 
50*fd8d34ceSJustin Hibbits 	/* TX Frame Queue */
51*fd8d34ceSJustin Hibbits 	struct qman_fq			*sc_tx_fq;
52*fd8d34ceSJustin Hibbits 	bool				sc_tx_fq_full;
53*fd8d34ceSJustin Hibbits 	struct qman_fq			*sc_tx_conf_fq;
54*fd8d34ceSJustin Hibbits 	uint32_t			sc_tx_conf_fqid;
55*fd8d34ceSJustin Hibbits 
56*fd8d34ceSJustin Hibbits 	/* Methods */
57*fd8d34ceSJustin Hibbits 	int				(*sc_port_rx_init)
58*fd8d34ceSJustin Hibbits 	    (struct dpaa_eth_softc *sc, int unit);
59*fd8d34ceSJustin Hibbits 	int				(*sc_port_tx_init)
60*fd8d34ceSJustin Hibbits 	    (struct dpaa_eth_softc *sc, int unit);
61*fd8d34ceSJustin Hibbits 	void				(*sc_start_locked)
62*fd8d34ceSJustin Hibbits 	    (struct dpaa_eth_softc *sc);
63*fd8d34ceSJustin Hibbits 
64*fd8d34ceSJustin Hibbits 	/* dTSEC data */
65*fd8d34ceSJustin Hibbits 	uint8_t				sc_eth_id; /* Ethernet ID within its frame manager */
66*fd8d34ceSJustin Hibbits 	uintptr_t			sc_mac_mem_offset;
67*fd8d34ceSJustin Hibbits 	int				sc_mac_mdio_irq;
68*fd8d34ceSJustin Hibbits 	uint8_t				sc_mac_addr[6];
69*fd8d34ceSJustin Hibbits 	int				sc_port_rx_hw_id;
70*fd8d34ceSJustin Hibbits 	int				sc_port_tx_hw_id;
71*fd8d34ceSJustin Hibbits 	uint32_t			sc_port_tx_qman_chan;
72*fd8d34ceSJustin Hibbits 	int				sc_phy_addr;
73*fd8d34ceSJustin Hibbits 	bool				sc_hidden;
74*fd8d34ceSJustin Hibbits 	device_t			sc_mdio;
75*fd8d34ceSJustin Hibbits 	int				sc_rev_major;
76*fd8d34ceSJustin Hibbits 	int				sc_rev_minor;
77*fd8d34ceSJustin Hibbits 
78*fd8d34ceSJustin Hibbits 	device_t			sc_rx_port;
79*fd8d34ceSJustin Hibbits 	device_t			sc_tx_port;
80*fd8d34ceSJustin Hibbits 
81*fd8d34ceSJustin Hibbits 	int				sc_rx_channel;
82*fd8d34ceSJustin Hibbits 
83*fd8d34ceSJustin Hibbits 	/* MII data */
84*fd8d34ceSJustin Hibbits 	struct mii_data			*sc_mii;
85*fd8d34ceSJustin Hibbits 	device_t			sc_mii_dev;
86*fd8d34ceSJustin Hibbits 	struct mtx			sc_mii_lock;
87*fd8d34ceSJustin Hibbits 
88*fd8d34ceSJustin Hibbits 	struct callout			sc_tick_callout;
89*fd8d34ceSJustin Hibbits 
90*fd8d34ceSJustin Hibbits 	/* Frame Info Zone */
91*fd8d34ceSJustin Hibbits 	uma_zone_t			sc_fi_zone;
92*fd8d34ceSJustin Hibbits 	char				sc_fi_zname[64];
93*fd8d34ceSJustin Hibbits };
94*fd8d34ceSJustin Hibbits 
95*fd8d34ceSJustin Hibbits /**
96*fd8d34ceSJustin Hibbits  * @group dTSEC Regular Mode API.
97*fd8d34ceSJustin Hibbits  * @{
98*fd8d34ceSJustin Hibbits  */
99*fd8d34ceSJustin Hibbits int	dpaa_eth_fm_port_rx_init(struct dpaa_eth_softc *sc);
100*fd8d34ceSJustin Hibbits int	dpaa_eth_fm_port_tx_init(struct dpaa_eth_softc *sc);
101*fd8d34ceSJustin Hibbits 
102*fd8d34ceSJustin Hibbits void	dpaa_eth_if_start_locked(struct dpaa_eth_softc *sc);
103*fd8d34ceSJustin Hibbits 
104*fd8d34ceSJustin Hibbits int	dpaa_eth_pool_rx_init(struct dpaa_eth_softc *sc);
105*fd8d34ceSJustin Hibbits void	dpaa_eth_pool_rx_free(struct dpaa_eth_softc *sc);
106*fd8d34ceSJustin Hibbits 
107*fd8d34ceSJustin Hibbits int	dpaa_eth_fi_pool_init(struct dpaa_eth_softc *sc);
108*fd8d34ceSJustin Hibbits void	dpaa_eth_fi_pool_free(struct dpaa_eth_softc *sc);
109*fd8d34ceSJustin Hibbits 
110*fd8d34ceSJustin Hibbits int	dpaa_eth_fq_rx_init(struct dpaa_eth_softc *sc);
111*fd8d34ceSJustin Hibbits int	dpaa_eth_fq_tx_init(struct dpaa_eth_softc *sc);
112*fd8d34ceSJustin Hibbits void	dpaa_eth_fq_rx_free(struct dpaa_eth_softc *sc);
113*fd8d34ceSJustin Hibbits void	dpaa_eth_fq_tx_free(struct dpaa_eth_softc *sc);
114*fd8d34ceSJustin Hibbits /** @} */
115*fd8d34ceSJustin Hibbits 
116*fd8d34ceSJustin Hibbits #endif /* DPAA_ETH_H_ */
117