xref: /freebsd/sys/dev/etherswitch/arswitch/arswitch_8327.h (revision 4d846d260e2b9a3d4d0a701462568268cbfe7a5b)
17330dd0bSAdrian Chadd /*-
2*4d846d26SWarner Losh  * SPDX-License-Identifier: BSD-2-Clause
3718cf2ccSPedro F. Giffuni  *
47330dd0bSAdrian Chadd  * Copyright (c) 2014 Adrian Chadd <adrian@FreeBSD.org>
57330dd0bSAdrian Chadd  * All rights reserved.
67330dd0bSAdrian Chadd  *
77330dd0bSAdrian Chadd  * Redistribution and use in source and binary forms, with or without
87330dd0bSAdrian Chadd  * modification, are permitted provided that the following conditions
97330dd0bSAdrian Chadd  * are met:
107330dd0bSAdrian Chadd  * 1. Redistributions of source code must retain the above copyright
117330dd0bSAdrian Chadd  *    notice, this list of conditions and the following disclaimer.
127330dd0bSAdrian Chadd  * 2. Redistributions in binary form must reproduce the above copyright
137330dd0bSAdrian Chadd  *    notice, this list of conditions and the following disclaimer in the
147330dd0bSAdrian Chadd  *    documentation and/or other materials provided with the distribution.
157330dd0bSAdrian Chadd  *
167330dd0bSAdrian Chadd  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
177330dd0bSAdrian Chadd  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
187330dd0bSAdrian Chadd  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
197330dd0bSAdrian Chadd  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
207330dd0bSAdrian Chadd  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
217330dd0bSAdrian Chadd  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
227330dd0bSAdrian Chadd  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
237330dd0bSAdrian Chadd  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
247330dd0bSAdrian Chadd  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
257330dd0bSAdrian Chadd  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
267330dd0bSAdrian Chadd  * SUCH DAMAGE.
277330dd0bSAdrian Chadd  *
287330dd0bSAdrian Chadd  * $FreeBSD$
297330dd0bSAdrian Chadd  */
307330dd0bSAdrian Chadd #ifndef	__ARSWITCH_8327_H__
317330dd0bSAdrian Chadd #define	__ARSWITCH_8327_H__
327330dd0bSAdrian Chadd 
337330dd0bSAdrian Chadd enum ar8327_pad_mode {
347330dd0bSAdrian Chadd 	AR8327_PAD_NC = 0,
357330dd0bSAdrian Chadd 	AR8327_PAD_MAC2MAC_MII,
367330dd0bSAdrian Chadd 	AR8327_PAD_MAC2MAC_GMII,
377330dd0bSAdrian Chadd 	AR8327_PAD_MAC_SGMII,
387330dd0bSAdrian Chadd 	AR8327_PAD_MAC2PHY_MII,
397330dd0bSAdrian Chadd 	AR8327_PAD_MAC2PHY_GMII,
407330dd0bSAdrian Chadd 	AR8327_PAD_MAC_RGMII,
417330dd0bSAdrian Chadd 	AR8327_PAD_PHY_GMII,
427330dd0bSAdrian Chadd 	AR8327_PAD_PHY_RGMII,
437330dd0bSAdrian Chadd 	AR8327_PAD_PHY_MII,
447330dd0bSAdrian Chadd };
457330dd0bSAdrian Chadd 
467330dd0bSAdrian Chadd enum ar8327_clk_delay_sel {
477330dd0bSAdrian Chadd 	AR8327_CLK_DELAY_SEL0 = 0,
487330dd0bSAdrian Chadd 	AR8327_CLK_DELAY_SEL1,
497330dd0bSAdrian Chadd 	AR8327_CLK_DELAY_SEL2,
507330dd0bSAdrian Chadd 	AR8327_CLK_DELAY_SEL3,
517330dd0bSAdrian Chadd };
527330dd0bSAdrian Chadd 
537330dd0bSAdrian Chadd /* XXX update the field types */
547330dd0bSAdrian Chadd struct ar8327_pad_cfg {
557330dd0bSAdrian Chadd 	uint32_t mode;
567330dd0bSAdrian Chadd 	uint32_t rxclk_sel;
577330dd0bSAdrian Chadd 	uint32_t txclk_sel;
587330dd0bSAdrian Chadd 	uint32_t txclk_delay_sel;
597330dd0bSAdrian Chadd 	uint32_t rxclk_delay_sel;
607330dd0bSAdrian Chadd 	uint32_t txclk_delay_en;
617330dd0bSAdrian Chadd 	uint32_t rxclk_delay_en;
627330dd0bSAdrian Chadd 	uint32_t sgmii_delay_en;
637330dd0bSAdrian Chadd 	uint32_t pipe_rxclk_sel;
647330dd0bSAdrian Chadd };
657330dd0bSAdrian Chadd 
667330dd0bSAdrian Chadd struct ar8327_sgmii_cfg {
677330dd0bSAdrian Chadd 	uint32_t sgmii_ctrl;
687330dd0bSAdrian Chadd 	uint32_t serdes_aen;
697330dd0bSAdrian Chadd };
707330dd0bSAdrian Chadd 
717330dd0bSAdrian Chadd struct ar8327_led_cfg {
727330dd0bSAdrian Chadd 	uint32_t led_ctrl0;
737330dd0bSAdrian Chadd 	uint32_t led_ctrl1;
747330dd0bSAdrian Chadd 	uint32_t led_ctrl2;
757330dd0bSAdrian Chadd 	uint32_t led_ctrl3;
767330dd0bSAdrian Chadd 	uint32_t open_drain;
777330dd0bSAdrian Chadd };
787330dd0bSAdrian Chadd 
797330dd0bSAdrian Chadd struct ar8327_port_cfg {
807330dd0bSAdrian Chadd #define	AR8327_PORT_SPEED_10		1
817330dd0bSAdrian Chadd #define	AR8327_PORT_SPEED_100		2
827330dd0bSAdrian Chadd #define	AR8327_PORT_SPEED_1000		3
837330dd0bSAdrian Chadd 	uint32_t speed;
847330dd0bSAdrian Chadd 	uint32_t force_link;
857330dd0bSAdrian Chadd 	uint32_t duplex;
867330dd0bSAdrian Chadd 	uint32_t txpause;
877330dd0bSAdrian Chadd 	uint32_t rxpause;
887330dd0bSAdrian Chadd };
897330dd0bSAdrian Chadd 
90c94dc808SAdrian Chadd extern struct ar8327_led_mapping {
91c94dc808SAdrian Chadd 	int reg;
92c94dc808SAdrian Chadd 	int shift;
93c94dc808SAdrian Chadd } ar8327_led_mapping[AR8327_NUM_PHYS][ETHERSWITCH_PORT_MAX_LEDS];
94c94dc808SAdrian Chadd 
957330dd0bSAdrian Chadd extern	void ar8327_attach(struct arswitch_softc *sc);
967330dd0bSAdrian Chadd 
977330dd0bSAdrian Chadd #endif	/* __ARSWITCH_8327_H__ */
987330dd0bSAdrian Chadd 
99