xref: /freebsd/sys/dev/etherswitch/ip17x/ip17x_var.h (revision 95ee2897e98f5d444f26ed2334cc7c439f9c16c6)
1248dd603SAdrian Chadd /*-
2*4d846d26SWarner Losh  * SPDX-License-Identifier: BSD-2-Clause
3718cf2ccSPedro F. Giffuni  *
4248dd603SAdrian Chadd  * Copyright (c) 2013 Luiz Otavio O Souza.
5248dd603SAdrian Chadd  * Copyright (c) 2011-2012 Stefan Bethke.
6248dd603SAdrian Chadd  * Copyright (c) 2012 Adrian Chadd.
7248dd603SAdrian Chadd  * All rights reserved.
8248dd603SAdrian Chadd  *
9248dd603SAdrian Chadd  * Redistribution and use in source and binary forms, with or without
10248dd603SAdrian Chadd  * modification, are permitted provided that the following conditions
11248dd603SAdrian Chadd  * are met:
12248dd603SAdrian Chadd  * 1. Redistributions of source code must retain the above copyright
13248dd603SAdrian Chadd  *    notice, this list of conditions and the following disclaimer.
14248dd603SAdrian Chadd  * 2. Redistributions in binary form must reproduce the above copyright
15248dd603SAdrian Chadd  *    notice, this list of conditions and the following disclaimer in the
16248dd603SAdrian Chadd  *    documentation and/or other materials provided with the distribution.
17248dd603SAdrian Chadd  *
18248dd603SAdrian Chadd  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
19248dd603SAdrian Chadd  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
20248dd603SAdrian Chadd  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
21248dd603SAdrian Chadd  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
22248dd603SAdrian Chadd  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
23248dd603SAdrian Chadd  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
24248dd603SAdrian Chadd  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
25248dd603SAdrian Chadd  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
26248dd603SAdrian Chadd  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
27248dd603SAdrian Chadd  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
28248dd603SAdrian Chadd  * SUCH DAMAGE.
29248dd603SAdrian Chadd  */
30248dd603SAdrian Chadd 
31248dd603SAdrian Chadd #ifndef	__IP17X_VAR_H__
32248dd603SAdrian Chadd #define	__IP17X_VAR_H__
33248dd603SAdrian Chadd 
34248dd603SAdrian Chadd typedef enum {
35248dd603SAdrian Chadd 	IP17X_SWITCH_NONE,
36248dd603SAdrian Chadd 	IP17X_SWITCH_IP175A,
37248dd603SAdrian Chadd 	IP17X_SWITCH_IP175C,
38248dd603SAdrian Chadd 	IP17X_SWITCH_IP175D,
39248dd603SAdrian Chadd 	IP17X_SWITCH_IP178C,
40248dd603SAdrian Chadd } ip17x_switch_type;
41248dd603SAdrian Chadd 
42248dd603SAdrian Chadd struct ip17x_vlan {
43248dd603SAdrian Chadd 	uint32_t	ports;
44248dd603SAdrian Chadd 	int		vlanid;
45248dd603SAdrian Chadd };
46248dd603SAdrian Chadd 
47248dd603SAdrian Chadd struct ip17x_softc {
48248dd603SAdrian Chadd 	device_t	sc_dev;
49248dd603SAdrian Chadd 	int		media;		/* cpu port media */
50248dd603SAdrian Chadd 	int		cpuport;	/* which PHY is connected to the CPU */
51248dd603SAdrian Chadd 	int		phymask;	/* PHYs we manage */
52248dd603SAdrian Chadd 	int		phyport[MII_NPHY];
53248dd603SAdrian Chadd 	int		numports;	/* number of ports */
54248dd603SAdrian Chadd 	int		*portphy;
55248dd603SAdrian Chadd 	device_t	**miibus;
56a99badc2SAdrian Chadd 	int		miipoll;
57248dd603SAdrian Chadd 	etherswitch_info_t	info;
58248dd603SAdrian Chadd 	ip17x_switch_type	sc_switchtype;
59248dd603SAdrian Chadd 	struct callout	callout_tick;
602e6a8c1aSJustin Hibbits 	if_t *ifp;
61248dd603SAdrian Chadd 	struct mtx	sc_mtx;		/* serialize access to softc */
62248dd603SAdrian Chadd 
63248dd603SAdrian Chadd 	struct ip17x_vlan	vlan[IP17X_MAX_VLANS];
64248dd603SAdrian Chadd 	uint32_t	*pvid;		/* PVID */
65248dd603SAdrian Chadd 	uint32_t	addtag;		/* per port add tag flag */
66248dd603SAdrian Chadd 	uint32_t	striptag;	/* per port strip tag flag */
67248dd603SAdrian Chadd 	uint32_t	vlan_mode;	/* VLAN mode */
68248dd603SAdrian Chadd 
69248dd603SAdrian Chadd 	struct {
70248dd603SAdrian Chadd 		int (* ip17x_reset) (struct ip17x_softc *);
71248dd603SAdrian Chadd 		int (* ip17x_hw_setup) (struct ip17x_softc *);
72248dd603SAdrian Chadd 		int (* ip17x_get_vlan_mode) (struct ip17x_softc *);
73248dd603SAdrian Chadd 		int (* ip17x_set_vlan_mode) (struct ip17x_softc *, uint32_t);
74248dd603SAdrian Chadd 	} hal;
75248dd603SAdrian Chadd };
76248dd603SAdrian Chadd 
77248dd603SAdrian Chadd #define IP17X_IS_SWITCH(_sc, _type)	\
78248dd603SAdrian Chadd 	    (!!((_sc)->sc_switchtype == IP17X_SWITCH_ ## _type))
79248dd603SAdrian Chadd 
80248dd603SAdrian Chadd #define IP17X_LOCK(_sc)			\
81248dd603SAdrian Chadd 	    mtx_lock(&(_sc)->sc_mtx)
82248dd603SAdrian Chadd #define IP17X_UNLOCK(_sc)		\
83248dd603SAdrian Chadd 	    mtx_unlock(&(_sc)->sc_mtx)
84248dd603SAdrian Chadd #define IP17X_LOCK_ASSERT(_sc, _what)	\
85248dd603SAdrian Chadd 	    mtx_assert(&(_sc)->sc_mtx, (_what))
86248dd603SAdrian Chadd #define IP17X_TRYLOCK(_sc)		\
87248dd603SAdrian Chadd 	    mtx_trylock(&(_sc)->sc_mtx)
88248dd603SAdrian Chadd 
89248dd603SAdrian Chadd #if defined(DEBUG)
90248dd603SAdrian Chadd #define	DPRINTF(dev, args...) device_printf(dev, args)
91248dd603SAdrian Chadd #else
92248dd603SAdrian Chadd #define	DPRINTF(dev, args...)
93248dd603SAdrian Chadd #endif
94248dd603SAdrian Chadd 
95248dd603SAdrian Chadd #endif	/* __IP17X_VAR_H__ */
96