xref: /freebsd-src/sys/dev/dwc/if_dwcvar.h (revision 4b7975ecdc3631beac717d4addc71006cdc665c5)
15df53927SLuiz Otavio O Souza /*-
25df53927SLuiz Otavio O Souza  * Copyright (c) 2014 Ruslan Bukin <br@bsdpad.com>
35df53927SLuiz Otavio O Souza  *
45df53927SLuiz Otavio O Souza  * This software was developed by SRI International and the University of
55df53927SLuiz Otavio O Souza  * Cambridge Computer Laboratory under DARPA/AFRL contract (FA8750-10-C-0237)
65df53927SLuiz Otavio O Souza  * ("CTSRD"), as part of the DARPA CRASH research programme.
75df53927SLuiz Otavio O Souza  *
85df53927SLuiz Otavio O Souza  * Redistribution and use in source and binary forms, with or without
95df53927SLuiz Otavio O Souza  * modification, are permitted provided that the following conditions
105df53927SLuiz Otavio O Souza  * are met:
115df53927SLuiz Otavio O Souza  * 1. Redistributions of source code must retain the above copyright
125df53927SLuiz Otavio O Souza  *    notice, this list of conditions and the following disclaimer.
135df53927SLuiz Otavio O Souza  * 2. Redistributions in binary form must reproduce the above copyright
145df53927SLuiz Otavio O Souza  *    notice, this list of conditions and the following disclaimer in the
155df53927SLuiz Otavio O Souza  *    documentation and/or other materials provided with the distribution.
165df53927SLuiz Otavio O Souza  *
175df53927SLuiz Otavio O Souza  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
185df53927SLuiz Otavio O Souza  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
195df53927SLuiz Otavio O Souza  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
205df53927SLuiz Otavio O Souza  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
215df53927SLuiz Otavio O Souza  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
225df53927SLuiz Otavio O Souza  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
235df53927SLuiz Otavio O Souza  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
245df53927SLuiz Otavio O Souza  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
255df53927SLuiz Otavio O Souza  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
265df53927SLuiz Otavio O Souza  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
275df53927SLuiz Otavio O Souza  * SUCH DAMAGE.
285df53927SLuiz Otavio O Souza  */
295df53927SLuiz Otavio O Souza 
305df53927SLuiz Otavio O Souza /*
315df53927SLuiz Otavio O Souza  * Ethernet media access controller (EMAC)
325df53927SLuiz Otavio O Souza  * Chapter 17, Altera Cyclone V Device Handbook (CV-5V2 2014.07.22)
335df53927SLuiz Otavio O Souza  *
345df53927SLuiz Otavio O Souza  * EMAC is an instance of the Synopsys DesignWare 3504-0
355df53927SLuiz Otavio O Souza  * Universal 10/100/1000 Ethernet MAC (DWC_gmac).
365df53927SLuiz Otavio O Souza  */
375df53927SLuiz Otavio O Souza 
385df53927SLuiz Otavio O Souza #ifndef	__IF_DWCVAR_H__
395df53927SLuiz Otavio O Souza #define	__IF_DWCVAR_H__
405df53927SLuiz Otavio O Souza 
415df53927SLuiz Otavio O Souza /*
425df53927SLuiz Otavio O Souza  * Driver data and defines.
435df53927SLuiz Otavio O Souza  */
445df53927SLuiz Otavio O Souza #define	RX_DESC_COUNT	1024
455df53927SLuiz Otavio O Souza #define	RX_DESC_SIZE	(sizeof(struct dwc_hwdesc) * RX_DESC_COUNT)
465df53927SLuiz Otavio O Souza #define	TX_DESC_COUNT	1024
47e5232621SOleksandr Tymoshenko #define	TX_MAP_COUNT	TX_DESC_COUNT
485df53927SLuiz Otavio O Souza #define	TX_DESC_SIZE	(sizeof(struct dwc_hwdesc) * TX_DESC_COUNT)
49e5232621SOleksandr Tymoshenko #define	TX_MAP_MAX_SEGS	32
505df53927SLuiz Otavio O Souza 
51cef444d0SEmmanuel Vadot #define	DMA_DEFAULT_PBL	8
52cef444d0SEmmanuel Vadot 
535df53927SLuiz Otavio O Souza struct dwc_bufmap {
545df53927SLuiz Otavio O Souza 	bus_dmamap_t		map;
555df53927SLuiz Otavio O Souza 	struct mbuf		*mbuf;
56e5232621SOleksandr Tymoshenko 	/* Only used for TX descirptors */
57e5232621SOleksandr Tymoshenko 	int			last_desc_idx;
585df53927SLuiz Otavio O Souza };
595df53927SLuiz Otavio O Souza 
605df53927SLuiz Otavio O Souza struct dwc_softc {
615df53927SLuiz Otavio O Souza 	struct resource		*res[2];
625df53927SLuiz Otavio O Souza 	device_t		dev;
63f114aaddSEmmanuel Vadot 	phandle_t		node;
645df53927SLuiz Otavio O Souza 	int			mii_clk;
655df53927SLuiz Otavio O Souza 	device_t		miibus;
665df53927SLuiz Otavio O Souza 	struct mii_data *	mii_softc;
67068f2c0eSJustin Hibbits 	if_t			ifp;
685df53927SLuiz Otavio O Souza 	int			if_flags;
695df53927SLuiz Otavio O Souza 	struct mtx		mtx;
705df53927SLuiz Otavio O Souza 	void *			intr_cookie;
715df53927SLuiz Otavio O Souza 	struct callout		dwc_callout;
722fd90327SJohn Baldwin 	bool			link_is_up;
732fd90327SJohn Baldwin 	bool			is_attached;
742fd90327SJohn Baldwin 	bool			is_detaching;
755df53927SLuiz Otavio O Souza 	int			tx_watchdog_count;
765df53927SLuiz Otavio O Souza 	int			stats_harvest_count;
77824cfb47SOleksandr Tymoshenko 	int			phy_mode;
785df53927SLuiz Otavio O Souza 
7950059a60SEmmanuel Vadot 	/* clocks and reset */
8050059a60SEmmanuel Vadot 	clk_t			clk_stmmaceth;
8150059a60SEmmanuel Vadot 	clk_t			clk_pclk;
8250059a60SEmmanuel Vadot 	hwreset_t		rst_stmmaceth;
8350059a60SEmmanuel Vadot 	hwreset_t		rst_ahb;
8450059a60SEmmanuel Vadot 
855d88a52bSEmmanuel Vadot 	/* DMA config */
865d88a52bSEmmanuel Vadot 	uint32_t		txpbl;	/* TX Burst lenght */
875d88a52bSEmmanuel Vadot 	uint32_t		rxpbl;	/* RX Burst lenght */
885d88a52bSEmmanuel Vadot 	bool			nopblx8;
895d88a52bSEmmanuel Vadot 	bool			fixed_burst;
905d88a52bSEmmanuel Vadot 	bool			mixed_burst;
915d88a52bSEmmanuel Vadot 	bool			aal;
92*4b7975ecSEmmanuel Vadot 	bool			dma_ext_desc;
935d88a52bSEmmanuel Vadot 
945df53927SLuiz Otavio O Souza 	/* RX */
955df53927SLuiz Otavio O Souza 	bus_dma_tag_t		rxdesc_tag;
965df53927SLuiz Otavio O Souza 	bus_dmamap_t		rxdesc_map;
975df53927SLuiz Otavio O Souza 	struct dwc_hwdesc	*rxdesc_ring;
985df53927SLuiz Otavio O Souza 	bus_addr_t		rxdesc_ring_paddr;
995df53927SLuiz Otavio O Souza 	bus_dma_tag_t		rxbuf_tag;
1005df53927SLuiz Otavio O Souza 	struct dwc_bufmap	rxbuf_map[RX_DESC_COUNT];
1015df53927SLuiz Otavio O Souza 	uint32_t		rx_idx;
1025df53927SLuiz Otavio O Souza 
1035df53927SLuiz Otavio O Souza 	/* TX */
1045df53927SLuiz Otavio O Souza 	bus_dma_tag_t		txdesc_tag;
1055df53927SLuiz Otavio O Souza 	bus_dmamap_t		txdesc_map;
1065df53927SLuiz Otavio O Souza 	struct dwc_hwdesc	*txdesc_ring;
1075df53927SLuiz Otavio O Souza 	bus_addr_t		txdesc_ring_paddr;
1085df53927SLuiz Otavio O Souza 	bus_dma_tag_t		txbuf_tag;
109e7502187SJared McNeill 	struct dwc_bufmap	txbuf_map[TX_DESC_COUNT];
110e5232621SOleksandr Tymoshenko 	uint32_t		tx_desc_head;
111e5232621SOleksandr Tymoshenko 	uint32_t		tx_desc_tail;
112e5232621SOleksandr Tymoshenko 	uint32_t		tx_map_head;
113e5232621SOleksandr Tymoshenko 	uint32_t		tx_map_tail;
114e5232621SOleksandr Tymoshenko 	int			tx_desccount;
115e5232621SOleksandr Tymoshenko 	int			tx_mapcount;
1165df53927SLuiz Otavio O Souza };
1175df53927SLuiz Otavio O Souza 
118972adf0fSEmmanuel Vadot #define	READ4(_sc, _reg) \
119972adf0fSEmmanuel Vadot 	bus_read_4((_sc)->res[0], _reg)
120972adf0fSEmmanuel Vadot #define	WRITE4(_sc, _reg, _val) \
121972adf0fSEmmanuel Vadot 	bus_write_4((_sc)->res[0], _reg, _val)
122972adf0fSEmmanuel Vadot 
123972adf0fSEmmanuel Vadot #define	DWC_LOCK(sc)			mtx_lock(&(sc)->mtx)
124972adf0fSEmmanuel Vadot #define	DWC_UNLOCK(sc)			mtx_unlock(&(sc)->mtx)
125972adf0fSEmmanuel Vadot #define	DWC_ASSERT_LOCKED(sc)		mtx_assert(&(sc)->mtx, MA_OWNED)
126972adf0fSEmmanuel Vadot #define	DWC_ASSERT_UNLOCKED(sc)		mtx_assert(&(sc)->mtx, MA_NOTOWNED)
127972adf0fSEmmanuel Vadot 
1285df53927SLuiz Otavio O Souza #endif	/* __IF_DWCVAR_H__ */
129