xref: /freebsd-src/sys/dev/etherswitch/felix/felix_var.h (revision 4d846d260e2b9a3d4d0a701462568268cbfe7a5b)
1451bcf1bSMarcin Wojtas /*-
2*4d846d26SWarner Losh  * SPDX-License-Identifier: BSD-2-Clause
3451bcf1bSMarcin Wojtas  *
4451bcf1bSMarcin Wojtas  * Copyright (c) 2021 Alstom Group.
5451bcf1bSMarcin Wojtas  * Copyright (c) 2021 Semihalf.
6451bcf1bSMarcin Wojtas  *
7451bcf1bSMarcin Wojtas  * Redistribution and use in source and binary forms, with or without
8451bcf1bSMarcin Wojtas  * modification, are permitted provided that the following conditions
9451bcf1bSMarcin Wojtas  * are met:
10451bcf1bSMarcin Wojtas  * 1. Redistributions of source code must retain the above copyright
11451bcf1bSMarcin Wojtas  *    notice, this list of conditions and the following disclaimer.
12451bcf1bSMarcin Wojtas  * 2. Redistributions in binary form must reproduce the above copyright
13451bcf1bSMarcin Wojtas  *    notice, this list of conditions and the following disclaimer in the
14451bcf1bSMarcin Wojtas  *    documentation and/or other materials provided with the distribution.
15451bcf1bSMarcin Wojtas  *
16451bcf1bSMarcin Wojtas  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
17451bcf1bSMarcin Wojtas  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
18451bcf1bSMarcin Wojtas  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
19451bcf1bSMarcin Wojtas  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
20451bcf1bSMarcin Wojtas  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
21451bcf1bSMarcin Wojtas  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
22451bcf1bSMarcin Wojtas  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
23451bcf1bSMarcin Wojtas  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
24451bcf1bSMarcin Wojtas  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
25451bcf1bSMarcin Wojtas  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
26451bcf1bSMarcin Wojtas  * SUCH DAMAGE.
27451bcf1bSMarcin Wojtas  */
28451bcf1bSMarcin Wojtas 
29451bcf1bSMarcin Wojtas #ifndef _FELIX_VAR_H_
30451bcf1bSMarcin Wojtas #define _FELIX_VAR_H_
31451bcf1bSMarcin Wojtas 
32451bcf1bSMarcin Wojtas #define FELIX_INIT_TIMEOUT	5000	/* msec */
33451bcf1bSMarcin Wojtas 
34451bcf1bSMarcin Wojtas #define	FELIX_DEV_NAME	"Felix TSN Switch driver"
35451bcf1bSMarcin Wojtas #define	FELIX_MAX_PORTS	6
36451bcf1bSMarcin Wojtas #define	FELIX_NUM_VLANS	4096
37451bcf1bSMarcin Wojtas 
38451bcf1bSMarcin Wojtas #define	PCI_VENDOR_FREESCALE	0x1957
39451bcf1bSMarcin Wojtas #define	FELIX_DEV_ID		0xEEF0
40451bcf1bSMarcin Wojtas 
4129cf6a79SKornel Duleba #define	FELIX_BAR_MDIO		0
42451bcf1bSMarcin Wojtas #define	FELIX_BAR_REGS		4
43451bcf1bSMarcin Wojtas 
44451bcf1bSMarcin Wojtas #define	FELIX_LOCK(_sc)			mtx_lock(&(_sc)->mtx)
45451bcf1bSMarcin Wojtas #define	FELIX_UNLOCK(_sc)			mtx_unlock(&(_sc)->mtx)
46451bcf1bSMarcin Wojtas #define	FELIX_LOCK_ASSERT(_sc, _what)	mtx_assert(&(_sc)->mtx, (_what))
47451bcf1bSMarcin Wojtas 
48451bcf1bSMarcin Wojtas #define FELIX_RD4(sc, reg)		bus_read_4((sc)->regs, reg)
49451bcf1bSMarcin Wojtas #define FELIX_WR4(sc, reg, value)	bus_write_4((sc)->regs, reg, value)
50451bcf1bSMarcin Wojtas 
51451bcf1bSMarcin Wojtas #define FELIX_DEVGMII_PORT_RD4(sc, port, reg)	\
52451bcf1bSMarcin Wojtas 	FELIX_RD4(sc, \
53451bcf1bSMarcin Wojtas 	    FELIX_DEVGMII_BASE + (FELIX_DEVGMII_PORT_OFFSET * (port)) + reg)
54451bcf1bSMarcin Wojtas #define FELIX_DEVGMII_PORT_WR4(sc, port, reg, value)	\
55451bcf1bSMarcin Wojtas 	FELIX_WR4(sc, \
56451bcf1bSMarcin Wojtas 	    FELIX_DEVGMII_BASE + (FELIX_DEVGMII_PORT_OFFSET * (port)) + reg, \
57451bcf1bSMarcin Wojtas 	    value)
58451bcf1bSMarcin Wojtas 
59451bcf1bSMarcin Wojtas #define FELIX_ANA_PORT_RD4(sc, port, reg)	\
60451bcf1bSMarcin Wojtas 	FELIX_RD4(sc, \
61451bcf1bSMarcin Wojtas 	    FELIX_ANA_PORT_BASE + (FELIX_ANA_PORT_OFFSET * (port)) + reg)
62451bcf1bSMarcin Wojtas #define FELIX_ANA_PORT_WR4(sc, port, reg, value)	\
63451bcf1bSMarcin Wojtas 	FELIX_WR4(sc, \
64451bcf1bSMarcin Wojtas 	    FELIX_ANA_PORT_BASE + (FELIX_ANA_PORT_OFFSET * (port)) + reg, \
65451bcf1bSMarcin Wojtas 	    value)
66451bcf1bSMarcin Wojtas 
67451bcf1bSMarcin Wojtas #define FELIX_REW_PORT_RD4(sc, port, reg)	\
68451bcf1bSMarcin Wojtas 	FELIX_RD4(sc, \
69451bcf1bSMarcin Wojtas 	    FELIX_REW_PORT_BASE + (FELIX_REW_PORT_OFFSET * (port)) + reg)
70451bcf1bSMarcin Wojtas #define FELIX_REW_PORT_WR4(sc, port, reg, value)	\
71451bcf1bSMarcin Wojtas 	FELIX_WR4(sc, \
72451bcf1bSMarcin Wojtas 	    FELIX_REW_PORT_BASE + (FELIX_REW_PORT_OFFSET * (port)) + reg, \
73451bcf1bSMarcin Wojtas 	    value)
74451bcf1bSMarcin Wojtas 
75451bcf1bSMarcin Wojtas struct felix_pci_id {
76451bcf1bSMarcin Wojtas 	uint16_t vendor;
77451bcf1bSMarcin Wojtas 	uint16_t device;
78451bcf1bSMarcin Wojtas 	const char *desc;
79451bcf1bSMarcin Wojtas };
80451bcf1bSMarcin Wojtas 
81451bcf1bSMarcin Wojtas struct felix_port {
822e6a8c1aSJustin Hibbits 	if_t			ifp;
83451bcf1bSMarcin Wojtas 	device_t                miibus;
84451bcf1bSMarcin Wojtas 	char                    *ifname;
85451bcf1bSMarcin Wojtas 
86451bcf1bSMarcin Wojtas 	uint32_t                phyaddr;
87451bcf1bSMarcin Wojtas 
88451bcf1bSMarcin Wojtas 	int			fixed_link_status;
89451bcf1bSMarcin Wojtas 	bool			fixed_port;
90451bcf1bSMarcin Wojtas 	bool			cpu_port;
91451bcf1bSMarcin Wojtas };
92451bcf1bSMarcin Wojtas 
93451bcf1bSMarcin Wojtas typedef struct felix_softc {
94451bcf1bSMarcin Wojtas 	device_t		dev;
95451bcf1bSMarcin Wojtas 	struct resource		*regs;
9629cf6a79SKornel Duleba 	struct resource		*mdio;
97451bcf1bSMarcin Wojtas 
98451bcf1bSMarcin Wojtas 	etherswitch_info_t	info;
99451bcf1bSMarcin Wojtas 	struct callout		tick_callout;
100451bcf1bSMarcin Wojtas 	struct mtx		mtx;
101451bcf1bSMarcin Wojtas 	struct felix_port	ports[FELIX_MAX_PORTS];
102451bcf1bSMarcin Wojtas 
103451bcf1bSMarcin Wojtas 	int			vlan_mode;
104451bcf1bSMarcin Wojtas 	int                     vlans[FELIX_NUM_VLANS];
105d88aecceSKornel Duleba 
106d88aecceSKornel Duleba 	uint32_t		timer_ticks;
107451bcf1bSMarcin Wojtas } *felix_softc_t;
108451bcf1bSMarcin Wojtas 
109451bcf1bSMarcin Wojtas #endif
110