18ef24a0dSAdrian Chadd /*- 24d846d26SWarner Losh * SPDX-License-Identifier: BSD-2-Clause 36e778a7eSPedro F. Giffuni * 48ef24a0dSAdrian Chadd * Copyright (c) 2015 Landon Fuller <landon@landonf.org> 58ef24a0dSAdrian Chadd * All rights reserved. 68ef24a0dSAdrian Chadd * 78ef24a0dSAdrian Chadd * Redistribution and use in source and binary forms, with or without 88ef24a0dSAdrian Chadd * modification, are permitted provided that the following conditions 98ef24a0dSAdrian Chadd * are met: 108ef24a0dSAdrian Chadd * 1. Redistributions of source code must retain the above copyright 118ef24a0dSAdrian Chadd * notice, this list of conditions and the following disclaimer, 128ef24a0dSAdrian Chadd * without modification. 138ef24a0dSAdrian Chadd * 2. Redistributions in binary form must reproduce at minimum a disclaimer 148ef24a0dSAdrian Chadd * similar to the "NO WARRANTY" disclaimer below ("Disclaimer") and any 158ef24a0dSAdrian Chadd * redistribution must be conditioned upon including a substantially 168ef24a0dSAdrian Chadd * similar Disclaimer requirement for further binary redistribution. 178ef24a0dSAdrian Chadd * 188ef24a0dSAdrian Chadd * NO WARRANTY 198ef24a0dSAdrian Chadd * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 208ef24a0dSAdrian Chadd * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 218ef24a0dSAdrian Chadd * LIMITED TO, THE IMPLIED WARRANTIES OF NONINFRINGEMENT, MERCHANTIBILITY 228ef24a0dSAdrian Chadd * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL 238ef24a0dSAdrian Chadd * THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, 248ef24a0dSAdrian Chadd * OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 258ef24a0dSAdrian Chadd * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 268ef24a0dSAdrian Chadd * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER 278ef24a0dSAdrian Chadd * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 288ef24a0dSAdrian Chadd * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF 298ef24a0dSAdrian Chadd * THE POSSIBILITY OF SUCH DAMAGES. 308ef24a0dSAdrian Chadd * 318ef24a0dSAdrian Chadd */ 328ef24a0dSAdrian Chadd 338ef24a0dSAdrian Chadd #ifndef _BHND_CORES_PCIE2_BHND_PCIE2_VAR_H_ 348ef24a0dSAdrian Chadd #define _BHND_CORES_PCIE2_BHND_PCIE2_VAR_H_ 358ef24a0dSAdrian Chadd 368ef24a0dSAdrian Chadd #include <sys/param.h> 378ef24a0dSAdrian Chadd #include <sys/bus.h> 388ef24a0dSAdrian Chadd 398ef24a0dSAdrian Chadd /* 408ef24a0dSAdrian Chadd * Shared PCIe-G2 Bridge/Host Bridge definitions. 418ef24a0dSAdrian Chadd */ 428ef24a0dSAdrian Chadd 438ef24a0dSAdrian Chadd DECLARE_CLASS(bhnd_pcie2_driver); 448ef24a0dSAdrian Chadd struct bhnd_pcie2_softc; 458ef24a0dSAdrian Chadd 468ef24a0dSAdrian Chadd int bhnd_pcie2_generic_probe(device_t dev); 478ef24a0dSAdrian Chadd int bhnd_pcie2_generic_attach(device_t dev); 488ef24a0dSAdrian Chadd int bhnd_pcie2_generic_detach(device_t dev); 498ef24a0dSAdrian Chadd int bhnd_pcie2_generic_suspend(device_t dev); 508ef24a0dSAdrian Chadd int bhnd_pcie2_generic_resume(device_t dev); 518ef24a0dSAdrian Chadd 528ef24a0dSAdrian Chadd uint32_t bhnd_pcie2_read_proto_reg(struct bhnd_pcie2_softc *sc, 538ef24a0dSAdrian Chadd uint32_t addr); 548ef24a0dSAdrian Chadd void bhnd_pcie2_write_proto_reg(struct bhnd_pcie2_softc *sc, 558ef24a0dSAdrian Chadd uint32_t addr, uint32_t val); 568ef24a0dSAdrian Chadd int bhnd_pcie2_mdio_read(struct bhnd_pcie2_softc *sc, int phy, 578ef24a0dSAdrian Chadd int reg); 588ef24a0dSAdrian Chadd int bhnd_pcie2_mdio_write(struct bhnd_pcie2_softc *sc, int phy, 598ef24a0dSAdrian Chadd int reg, int val); 608ef24a0dSAdrian Chadd int bhnd_pcie2_mdio_read_ext(struct bhnd_pcie2_softc *sc, int phy, 618ef24a0dSAdrian Chadd int devaddr, int reg); 628ef24a0dSAdrian Chadd int bhnd_pcie2_mdio_write_ext(struct bhnd_pcie2_softc *sc, 638ef24a0dSAdrian Chadd int phy, int devaddr, int reg, int val); 648ef24a0dSAdrian Chadd 658ef24a0dSAdrian Chadd /** 668ef24a0dSAdrian Chadd * bhnd_pcie2 child device info 678ef24a0dSAdrian Chadd */ 688ef24a0dSAdrian Chadd struct bhnd_pcie2_devinfo { 698ef24a0dSAdrian Chadd struct resource_list resources; 708ef24a0dSAdrian Chadd }; 718ef24a0dSAdrian Chadd 728ef24a0dSAdrian Chadd /* 738ef24a0dSAdrian Chadd * Generic PCIe-G2 bridge/end-point driver state. 748ef24a0dSAdrian Chadd * 758ef24a0dSAdrian Chadd * Must be first member of all subclass softc structures. 768ef24a0dSAdrian Chadd */ 778ef24a0dSAdrian Chadd struct bhnd_pcie2_softc { 788ef24a0dSAdrian Chadd device_t dev; /**< pci device */ 798ef24a0dSAdrian Chadd uint32_t quirks; /**< quirk flags */ 808ef24a0dSAdrian Chadd 818ef24a0dSAdrian Chadd struct mtx mtx; /**< state mutex used to protect 828ef24a0dSAdrian Chadd interdependent register 838ef24a0dSAdrian Chadd accesses. */ 848ef24a0dSAdrian Chadd 858ef24a0dSAdrian Chadd struct bhnd_resource *mem_res; /**< device register block. */ 868ef24a0dSAdrian Chadd int mem_rid; /**< register block RID */ 878ef24a0dSAdrian Chadd }; 888ef24a0dSAdrian Chadd 898ef24a0dSAdrian Chadd #define BHND_PCIE2_LOCK_INIT(sc) \ 908ef24a0dSAdrian Chadd mtx_init(&(sc)->mtx, device_get_nameunit((sc)->dev), \ 918ef24a0dSAdrian Chadd "BHND PCIe-G2 driver lock", MTX_DEF) 928ef24a0dSAdrian Chadd #define BHND_PCIE2_LOCK(sc) mtx_lock(&(sc)->mtx) 938ef24a0dSAdrian Chadd #define BHND_PCIE2_UNLOCK(sc) mtx_unlock(&(sc)->mtx) 948ef24a0dSAdrian Chadd #define BHND_PCIE2_LOCK_ASSERT(sc, what) mtx_assert(&(sc)->mtx, what) 958ef24a0dSAdrian Chadd #define BHND_PCIE2_LOCK_DESTROY(sc) mtx_destroy(&(sc)->mtx) 968ef24a0dSAdrian Chadd 978ef24a0dSAdrian Chadd #endif /* _BHND_CORES_PCIE2_BHND_PCIE2_VAR_H_ */ 98