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