xref: /freebsd/sys/dev/tsec/if_tsec.h (revision 321e12c82e6adf74a8154721bd4b37f50a1fbaa7)
167196661SRafal Jaworowski /*-
2321e12c8SRafal Jaworowski  * Copyright (C) 2006-2007 Semihalf, Piotr Kruszynski <ppk@semihalf.com>
367196661SRafal Jaworowski  * All rights reserved.
467196661SRafal Jaworowski  *
567196661SRafal Jaworowski  * Redistribution and use in source and binary forms, with or without
667196661SRafal Jaworowski  * modification, are permitted provided that the following conditions
767196661SRafal Jaworowski  * are met:
867196661SRafal Jaworowski  * 1. Redistributions of source code must retain the above copyright
967196661SRafal Jaworowski  *    notice, this list of conditions and the following disclaimer.
1067196661SRafal Jaworowski  * 2. Redistributions in binary form must reproduce the above copyright
1167196661SRafal Jaworowski  *    notice, this list of conditions and the following disclaimer in the
1267196661SRafal Jaworowski  *    documentation and/or other materials provided with the distribution.
1367196661SRafal Jaworowski  *
1467196661SRafal Jaworowski  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
1567196661SRafal Jaworowski  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
1667196661SRafal Jaworowski  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN
1767196661SRafal Jaworowski  * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
1867196661SRafal Jaworowski  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
1967196661SRafal Jaworowski  * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
2067196661SRafal Jaworowski  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
2167196661SRafal Jaworowski  * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
2267196661SRafal Jaworowski  * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
2367196661SRafal Jaworowski  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
2467196661SRafal Jaworowski  *
2567196661SRafal Jaworowski  * $FreeBSD$
2667196661SRafal Jaworowski  */
2767196661SRafal Jaworowski 
28321e12c8SRafal Jaworowski #ifndef _IF_TSEC_H
29321e12c8SRafal Jaworowski #define _IF_TSEC_H
30321e12c8SRafal Jaworowski 
3167196661SRafal Jaworowski #define TSEC_RX_NUM_DESC	256
3267196661SRafal Jaworowski #define TSEC_TX_NUM_DESC	256
3367196661SRafal Jaworowski 
3467196661SRafal Jaworowski struct tsec_softc {
3567196661SRafal Jaworowski 	/* XXX MII bus requires that struct ifnet is first!!! */
3667196661SRafal Jaworowski 	struct ifnet	*tsec_ifp;
3767196661SRafal Jaworowski 
3867196661SRafal Jaworowski 	struct mtx	transmit_lock;	/* transmitter lock */
3967196661SRafal Jaworowski 	struct mtx	receive_lock;	/* receiver lock */
4067196661SRafal Jaworowski 
4167196661SRafal Jaworowski 	device_t	dev;
4267196661SRafal Jaworowski 	device_t	tsec_miibus;
4367196661SRafal Jaworowski 	struct mii_data	*tsec_mii;	/* MII media control */
4467196661SRafal Jaworowski 	int		tsec_link;
4567196661SRafal Jaworowski 
4667196661SRafal Jaworowski 	bus_dma_tag_t	tsec_tx_dtag;	/* TX descriptors tag */
4767196661SRafal Jaworowski 	bus_dmamap_t	tsec_tx_dmap;	/* TX descriptors map */
4867196661SRafal Jaworowski 	struct tsec_desc *tsec_tx_vaddr;/* vadress of TX descriptors */
4967196661SRafal Jaworowski 	uint32_t	tsec_tx_raddr;	/* real adress of TX descriptors */
5067196661SRafal Jaworowski 
5167196661SRafal Jaworowski 	bus_dma_tag_t	tsec_rx_dtag;	/* RX descriptors tag */
5267196661SRafal Jaworowski 	bus_dmamap_t	tsec_rx_dmap;	/* RX descriptors map */
5367196661SRafal Jaworowski 	struct tsec_desc *tsec_rx_vaddr; /* vadress of RX descriptors */
5467196661SRafal Jaworowski 	uint32_t	tsec_rx_raddr;	/* real adress of RX descriptors */
5567196661SRafal Jaworowski 
5667196661SRafal Jaworowski 	bus_dma_tag_t	tsec_tx_mtag;	/* TX mbufs tag */
5767196661SRafal Jaworowski 	bus_dma_tag_t	tsec_rx_mtag;	/* TX mbufs tag */
5867196661SRafal Jaworowski 
5967196661SRafal Jaworowski 	struct rx_data_type {
6067196661SRafal Jaworowski 		bus_dmamap_t	map;	/* mbuf map */
6167196661SRafal Jaworowski 		struct mbuf	*mbuf;
6267196661SRafal Jaworowski 		uint32_t	paddr;	/* DMA addres of buffer */
6367196661SRafal Jaworowski 	} rx_data[TSEC_RX_NUM_DESC];
6467196661SRafal Jaworowski 
6567196661SRafal Jaworowski 	uint32_t	tx_cur_desc_cnt;
6667196661SRafal Jaworowski 	uint32_t	tx_dirty_desc_cnt;
6767196661SRafal Jaworowski 	uint32_t	rx_cur_desc_cnt;
6867196661SRafal Jaworowski 
6967196661SRafal Jaworowski 	struct resource	*sc_rres;	/* register resource */
7067196661SRafal Jaworowski 	int		sc_rrid;	/* register rid */
7167196661SRafal Jaworowski 	struct {
7267196661SRafal Jaworowski 		bus_space_tag_t bst;
7367196661SRafal Jaworowski 		bus_space_handle_t bsh;
7467196661SRafal Jaworowski 	} sc_bas;
7567196661SRafal Jaworowski 
7667196661SRafal Jaworowski 	struct resource *sc_transmit_ires;
7767196661SRafal Jaworowski 	void		*sc_transmit_ihand;
7867196661SRafal Jaworowski 	int		sc_transmit_irid;
7967196661SRafal Jaworowski 	struct resource *sc_receive_ires;
8067196661SRafal Jaworowski 	void		*sc_receive_ihand;
8167196661SRafal Jaworowski 	int		sc_receive_irid;
8267196661SRafal Jaworowski 	struct resource *sc_error_ires;
8367196661SRafal Jaworowski 	void		*sc_error_ihand;
8467196661SRafal Jaworowski 	int		sc_error_irid;
8567196661SRafal Jaworowski 
8667196661SRafal Jaworowski 	int		tsec_if_flags;
8767196661SRafal Jaworowski 
885432bd9fSRafal Jaworowski 	/* Watchdog and MII tick related */
895432bd9fSRafal Jaworowski 	struct callout	tsec_callout;
905432bd9fSRafal Jaworowski 	int		tsec_watchdog;
91772619e1SRafal Jaworowski 
9267196661SRafal Jaworowski 	/* TX maps */
9367196661SRafal Jaworowski 	bus_dmamap_t	tx_map_data[TSEC_TX_NUM_DESC];
9467196661SRafal Jaworowski 
9567196661SRafal Jaworowski 	/* unused TX maps data */
9667196661SRafal Jaworowski 	uint32_t	tx_map_unused_get_cnt;
9767196661SRafal Jaworowski 	uint32_t	tx_map_unused_put_cnt;
9867196661SRafal Jaworowski 	bus_dmamap_t	*tx_map_unused_data[TSEC_TX_NUM_DESC];
9967196661SRafal Jaworowski 
10067196661SRafal Jaworowski 	/* used TX maps data */
10167196661SRafal Jaworowski 	uint32_t	tx_map_used_get_cnt;
10267196661SRafal Jaworowski 	uint32_t	tx_map_used_put_cnt;
10367196661SRafal Jaworowski 	bus_dmamap_t	*tx_map_used_data[TSEC_TX_NUM_DESC];
10467196661SRafal Jaworowski 
10567196661SRafal Jaworowski 	/* mbufs in TX queue */
10667196661SRafal Jaworowski 	uint32_t	tx_mbuf_used_get_cnt;
10767196661SRafal Jaworowski 	uint32_t	tx_mbuf_used_put_cnt;
10867196661SRafal Jaworowski 	struct mbuf	*tx_mbuf_used_data[TSEC_TX_NUM_DESC];
10967196661SRafal Jaworowski };
11067196661SRafal Jaworowski 
11167196661SRafal Jaworowski /* interface to get/put generic objects */
11267196661SRafal Jaworowski #define TSEC_CNT_INIT(cnt, wrap) ((cnt) = ((wrap) - 1))
11367196661SRafal Jaworowski 
11467196661SRafal Jaworowski #define TSEC_INC(count, wrap) (count = ((count) + 1) & ((wrap) - 1))
11567196661SRafal Jaworowski 
11667196661SRafal Jaworowski #define TSEC_GET_GENERIC(hand, tab, count, wrap) \
11767196661SRafal Jaworowski 		((hand)->tab[TSEC_INC((hand)->count, wrap)])
11867196661SRafal Jaworowski 
11967196661SRafal Jaworowski #define TSEC_PUT_GENERIC(hand, tab, count, wrap, val)	\
12067196661SRafal Jaworowski 		((hand)->tab[TSEC_INC((hand)->count, wrap)] = val)
12167196661SRafal Jaworowski 
12267196661SRafal Jaworowski #define TSEC_BACK_GENERIC(sc, count, wrap) do {				\
12367196661SRafal Jaworowski 		if ((sc)->count > 0)					\
12467196661SRafal Jaworowski 			(sc)->count--;					\
12567196661SRafal Jaworowski 		else							\
12667196661SRafal Jaworowski 			(sc)->count = (wrap) - 1;			\
12767196661SRafal Jaworowski } while (0)
12867196661SRafal Jaworowski 
12967196661SRafal Jaworowski /* TX maps interface */
13067196661SRafal Jaworowski #define TSEC_TX_MAP_CNT_INIT(sc) do {						\
13167196661SRafal Jaworowski 		TSEC_CNT_INIT((sc)->tx_map_unused_get_cnt, TSEC_TX_NUM_DESC);	\
13267196661SRafal Jaworowski 		TSEC_CNT_INIT((sc)->tx_map_unused_put_cnt, TSEC_TX_NUM_DESC);	\
13367196661SRafal Jaworowski 		TSEC_CNT_INIT((sc)->tx_map_used_get_cnt, TSEC_TX_NUM_DESC);	\
13467196661SRafal Jaworowski 		TSEC_CNT_INIT((sc)->tx_map_used_put_cnt, TSEC_TX_NUM_DESC);	\
13567196661SRafal Jaworowski } while (0)
13667196661SRafal Jaworowski 
13767196661SRafal Jaworowski /* interface to get/put unused TX maps */
13867196661SRafal Jaworowski #define TSEC_ALLOC_TX_MAP(sc)							\
13967196661SRafal Jaworowski 		TSEC_GET_GENERIC(sc, tx_map_unused_data, tx_map_unused_get_cnt,	\
14067196661SRafal Jaworowski 		TSEC_TX_NUM_DESC)
14167196661SRafal Jaworowski 
14267196661SRafal Jaworowski #define TSEC_FREE_TX_MAP(sc, val)						\
14367196661SRafal Jaworowski 		TSEC_PUT_GENERIC(sc, tx_map_unused_data, tx_map_unused_put_cnt,	\
14467196661SRafal Jaworowski 		TSEC_TX_NUM_DESC, val)
14567196661SRafal Jaworowski 
14667196661SRafal Jaworowski /* interface to get/put used TX maps */
14767196661SRafal Jaworowski #define TSEC_GET_TX_MAP(sc)							\
14867196661SRafal Jaworowski 		TSEC_GET_GENERIC(sc, tx_map_used_data, tx_map_used_get_cnt,	\
14967196661SRafal Jaworowski 		TSEC_TX_NUM_DESC)
15067196661SRafal Jaworowski 
15167196661SRafal Jaworowski #define TSEC_PUT_TX_MAP(sc, val)						\
15267196661SRafal Jaworowski 		TSEC_PUT_GENERIC(sc, tx_map_used_data, tx_map_used_put_cnt,	\
15367196661SRafal Jaworowski 		TSEC_TX_NUM_DESC, val)
15467196661SRafal Jaworowski 
15567196661SRafal Jaworowski /* interface to get/put TX mbufs in send queue */
15667196661SRafal Jaworowski #define TSEC_TX_MBUF_CNT_INIT(sc) do {						\
15767196661SRafal Jaworowski 		TSEC_CNT_INIT((sc)->tx_mbuf_used_get_cnt, TSEC_TX_NUM_DESC);	\
15867196661SRafal Jaworowski 		TSEC_CNT_INIT((sc)->tx_mbuf_used_put_cnt, TSEC_TX_NUM_DESC);	\
15967196661SRafal Jaworowski } while (0)
16067196661SRafal Jaworowski 
16167196661SRafal Jaworowski #define TSEC_GET_TX_MBUF(sc)							\
16267196661SRafal Jaworowski 		TSEC_GET_GENERIC(sc, tx_mbuf_used_data, tx_mbuf_used_get_cnt,	\
16367196661SRafal Jaworowski 		TSEC_TX_NUM_DESC)
16467196661SRafal Jaworowski 
16567196661SRafal Jaworowski #define TSEC_PUT_TX_MBUF(sc, val)						\
16667196661SRafal Jaworowski 		TSEC_PUT_GENERIC(sc, tx_mbuf_used_data, tx_mbuf_used_put_cnt,	\
16767196661SRafal Jaworowski 		TSEC_TX_NUM_DESC, val)
16867196661SRafal Jaworowski 
16967196661SRafal Jaworowski #define TSEC_EMPTYQ_TX_MBUF(sc) \
17067196661SRafal Jaworowski 		((sc)->tx_mbuf_used_get_cnt == (sc)->tx_mbuf_used_put_cnt)
17167196661SRafal Jaworowski 
17267196661SRafal Jaworowski /* interface for manage tx tsec_desc */
17367196661SRafal Jaworowski #define TSEC_TX_DESC_CNT_INIT(sc) do {						\
17467196661SRafal Jaworowski 		TSEC_CNT_INIT((sc)->tx_cur_desc_cnt, TSEC_TX_NUM_DESC);		\
17567196661SRafal Jaworowski 		TSEC_CNT_INIT((sc)->tx_dirty_desc_cnt, TSEC_TX_NUM_DESC);	\
17667196661SRafal Jaworowski } while (0)
17767196661SRafal Jaworowski 
17867196661SRafal Jaworowski #define TSEC_GET_CUR_TX_DESC(sc)					\
17967196661SRafal Jaworowski 		&TSEC_GET_GENERIC(sc, tsec_tx_vaddr, tx_cur_desc_cnt,	\
18067196661SRafal Jaworowski 		TSEC_TX_NUM_DESC)
18167196661SRafal Jaworowski 
18267196661SRafal Jaworowski #define TSEC_GET_DIRTY_TX_DESC(sc)					\
18367196661SRafal Jaworowski 		&TSEC_GET_GENERIC(sc, tsec_tx_vaddr, tx_dirty_desc_cnt,	\
18467196661SRafal Jaworowski 		TSEC_TX_NUM_DESC)
18567196661SRafal Jaworowski 
18667196661SRafal Jaworowski #define TSEC_BACK_DIRTY_TX_DESC(sc) \
18767196661SRafal Jaworowski 		TSEC_BACK_GENERIC(sc, tx_dirty_desc_cnt, TSEC_TX_NUM_DESC)
18867196661SRafal Jaworowski 
18967196661SRafal Jaworowski #define TSEC_CUR_DIFF_DIRTY_TX_DESC(sc) \
19067196661SRafal Jaworowski 		((sc)->tx_cur_desc_cnt != (sc)->tx_dirty_desc_cnt)
19167196661SRafal Jaworowski 
19267196661SRafal Jaworowski #define TSEC_FREE_TX_DESC(sc)						\
19367196661SRafal Jaworowski 		(((sc)->tx_cur_desc_cnt < (sc)->tx_dirty_desc_cnt) ?	\
19467196661SRafal Jaworowski 		((sc)->tx_dirty_desc_cnt - (sc)->tx_cur_desc_cnt - 1)	\
19567196661SRafal Jaworowski 		:							\
19667196661SRafal Jaworowski 		(TSEC_TX_NUM_DESC - (sc)->tx_cur_desc_cnt		\
19767196661SRafal Jaworowski 		+ (sc)->tx_dirty_desc_cnt - 1))
19867196661SRafal Jaworowski 
19967196661SRafal Jaworowski /* interface for manage rx tsec_desc */
20067196661SRafal Jaworowski #define TSEC_RX_DESC_CNT_INIT(sc) do {					\
20167196661SRafal Jaworowski 		TSEC_CNT_INIT((sc)->rx_cur_desc_cnt, TSEC_RX_NUM_DESC);	\
20267196661SRafal Jaworowski } while (0)
20367196661SRafal Jaworowski 
20467196661SRafal Jaworowski #define TSEC_GET_CUR_RX_DESC(sc)					\
20567196661SRafal Jaworowski 		&TSEC_GET_GENERIC(sc, tsec_rx_vaddr, rx_cur_desc_cnt,	\
20667196661SRafal Jaworowski 		TSEC_RX_NUM_DESC)
20767196661SRafal Jaworowski 
20867196661SRafal Jaworowski #define TSEC_BACK_CUR_RX_DESC(sc) \
20967196661SRafal Jaworowski 		TSEC_BACK_GENERIC(sc, rx_cur_desc_cnt, TSEC_RX_NUM_DESC)
21067196661SRafal Jaworowski 
21167196661SRafal Jaworowski #define TSEC_GET_CUR_RX_DESC_CNT(sc) \
21267196661SRafal Jaworowski 		((sc)->rx_cur_desc_cnt)
21367196661SRafal Jaworowski 
21467196661SRafal Jaworowski /* init all counters (for init only!) */
21567196661SRafal Jaworowski #define TSEC_TX_RX_COUNTERS_INIT(sc) do {	\
21667196661SRafal Jaworowski 		TSEC_TX_MAP_CNT_INIT(sc);	\
21767196661SRafal Jaworowski 		TSEC_TX_MBUF_CNT_INIT(sc);	\
21867196661SRafal Jaworowski 		TSEC_TX_DESC_CNT_INIT(sc);	\
21967196661SRafal Jaworowski 		TSEC_RX_DESC_CNT_INIT(sc);	\
22067196661SRafal Jaworowski } while (0)
22167196661SRafal Jaworowski 
22267196661SRafal Jaworowski /* read/write bus functions */
22367196661SRafal Jaworowski #define TSEC_READ(sc, reg)		\
22467196661SRafal Jaworowski 		bus_space_read_4((sc)->sc_bas.bst, (sc)->sc_bas.bsh, (reg))
22567196661SRafal Jaworowski #define TSEC_WRITE(sc, reg, val)	\
22667196661SRafal Jaworowski 		bus_space_write_4((sc)->sc_bas.bst, (sc)->sc_bas.bsh, (reg), (val))
22767196661SRafal Jaworowski 
22867196661SRafal Jaworowski /* Lock for transmitter */
22967196661SRafal Jaworowski #define TSEC_TRANSMIT_LOCK(sc) do {					\
23067196661SRafal Jaworowski 		mtx_assert(&(sc)->receive_lock, MA_NOTOWNED);		\
23167196661SRafal Jaworowski 		mtx_lock(&(sc)->transmit_lock);				\
23267196661SRafal Jaworowski } while (0)
23367196661SRafal Jaworowski 
23467196661SRafal Jaworowski #define TSEC_TRANSMIT_UNLOCK(sc)	mtx_unlock(&(sc)->transmit_lock)
23567196661SRafal Jaworowski #define TSEC_TRANSMIT_LOCK_ASSERT(sc)	mtx_assert(&(sc)->transmit_lock, MA_OWNED)
23667196661SRafal Jaworowski 
23767196661SRafal Jaworowski /* Lock for receiver */
23867196661SRafal Jaworowski #define TSEC_RECEIVE_LOCK(sc) do {				\
23967196661SRafal Jaworowski 		mtx_assert(&(sc)->transmit_lock, MA_NOTOWNED);	\
24067196661SRafal Jaworowski 		mtx_lock(&(sc)->receive_lock);			\
24167196661SRafal Jaworowski } while (0)
24267196661SRafal Jaworowski 
24367196661SRafal Jaworowski #define TSEC_RECEIVE_UNLOCK(sc)		mtx_unlock(&(sc)->receive_lock)
24467196661SRafal Jaworowski #define TSEC_RECEIVE_LOCK_ASSERT(sc)	mtx_assert(&(sc)->receive_lock, MA_OWNED)
24567196661SRafal Jaworowski 
24667196661SRafal Jaworowski /* Global tsec lock (with all locks) */
24767196661SRafal Jaworowski #define TSEC_GLOBAL_LOCK(sc) do {					\
24867196661SRafal Jaworowski 		if ((mtx_owned(&(sc)->transmit_lock) ? 1 : 0) !=	\
24967196661SRafal Jaworowski 			(mtx_owned(&(sc)->receive_lock) ? 1 : 0)) {	\
25067196661SRafal Jaworowski 			panic("tsec deadlock possibility detection!");	\
25167196661SRafal Jaworowski 		}							\
25267196661SRafal Jaworowski 		mtx_lock(&(sc)->transmit_lock);				\
25367196661SRafal Jaworowski 		mtx_lock(&(sc)->receive_lock);				\
25467196661SRafal Jaworowski } while (0)
25567196661SRafal Jaworowski 
25667196661SRafal Jaworowski #define TSEC_GLOBAL_UNLOCK(sc) do {		\
25767196661SRafal Jaworowski 		TSEC_RECEIVE_UNLOCK(sc);	\
25867196661SRafal Jaworowski 		TSEC_TRANSMIT_UNLOCK(sc);	\
25967196661SRafal Jaworowski } while (0)
26067196661SRafal Jaworowski 
26167196661SRafal Jaworowski #define TSEC_GLOBAL_LOCK_ASSERT(sc) do {	\
26267196661SRafal Jaworowski 		TSEC_TRANSMIT_LOCK_ASSERT(sc);	\
26367196661SRafal Jaworowski 		TSEC_RECEIVE_LOCK_ASSERT(sc);	\
26467196661SRafal Jaworowski } while (0)
26567196661SRafal Jaworowski 
26667196661SRafal Jaworowski /* From global to {transmit,receive} */
26767196661SRafal Jaworowski #define TSEC_GLOBAL_TO_TRANSMIT_LOCK(sc) do {	\
26867196661SRafal Jaworowski 		mtx_unlock(&(sc)->receive_lock);\
26967196661SRafal Jaworowski } while (0)
27067196661SRafal Jaworowski 
27167196661SRafal Jaworowski #define TSEC_GLOBAL_TO_RECEIVE_LOCK(sc) do {	\
27267196661SRafal Jaworowski 		mtx_unlock(&(sc)->transmit_lock);\
27367196661SRafal Jaworowski } while (0)
27467196661SRafal Jaworowski 
27567196661SRafal Jaworowski struct tsec_desc {
27667196661SRafal Jaworowski 	volatile uint16_t	flags; /* descriptor flags */
27767196661SRafal Jaworowski 	volatile uint16_t	length; /* buffer length */
27867196661SRafal Jaworowski 	volatile uint32_t	bufptr; /* buffer pointer */
27967196661SRafal Jaworowski };
28067196661SRafal Jaworowski 
28167196661SRafal Jaworowski #define TSEC_READ_RETRY	10000
28267196661SRafal Jaworowski #define TSEC_READ_DELAY	100
283321e12c8SRafal Jaworowski 
284321e12c8SRafal Jaworowski /* Prototypes */
285321e12c8SRafal Jaworowski extern devclass_t tsec_devclass;
286321e12c8SRafal Jaworowski 
287321e12c8SRafal Jaworowski int	tsec_attach(struct tsec_softc *sc);
288321e12c8SRafal Jaworowski int	tsec_detach(struct tsec_softc *sc);
289321e12c8SRafal Jaworowski 
290321e12c8SRafal Jaworowski void	tsec_error_intr(void *arg);
291321e12c8SRafal Jaworowski void	tsec_receive_intr(void *arg);
292321e12c8SRafal Jaworowski void	tsec_transmit_intr(void *arg);
293321e12c8SRafal Jaworowski 
294321e12c8SRafal Jaworowski int	tsec_miibus_readreg(device_t dev, int phy, int reg);
295321e12c8SRafal Jaworowski void	tsec_miibus_writereg(device_t dev, int phy, int reg, int value);
296321e12c8SRafal Jaworowski void	tsec_miibus_statchg(device_t dev);
297321e12c8SRafal Jaworowski int	tsec_resume(device_t dev); /* XXX */
298321e12c8SRafal Jaworowski void	tsec_shutdown(device_t dev);
299321e12c8SRafal Jaworowski int	tsec_suspend(device_t dev); /* XXX */
300321e12c8SRafal Jaworowski 
301321e12c8SRafal Jaworowski void	tsec_get_hwaddr(struct tsec_softc *sc, uint8_t *addr);
302321e12c8SRafal Jaworowski 
303321e12c8SRafal Jaworowski #endif
304