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 #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 88c94dc808SAdrian Chadd extern struct ar8327_led_mapping { 89c94dc808SAdrian Chadd int reg; 90c94dc808SAdrian Chadd int shift; 91c94dc808SAdrian Chadd } ar8327_led_mapping[AR8327_NUM_PHYS][ETHERSWITCH_PORT_MAX_LEDS]; 92c94dc808SAdrian Chadd 937330dd0bSAdrian Chadd extern void ar8327_attach(struct arswitch_softc *sc); 947330dd0bSAdrian Chadd 957330dd0bSAdrian Chadd #endif /* __ARSWITCH_8327_H__ */ 967330dd0bSAdrian Chadd 97