1300015Sadrian/*- 2300015Sadrian * Copyright (c) 2015 Landon Fuller <landon@landonf.org> 3300015Sadrian * All rights reserved. 4300015Sadrian * 5300015Sadrian * Redistribution and use in source and binary forms, with or without 6300015Sadrian * modification, are permitted provided that the following conditions 7300015Sadrian * are met: 8300015Sadrian * 1. Redistributions of source code must retain the above copyright 9300015Sadrian * notice, this list of conditions and the following disclaimer, 10300015Sadrian * without modification. 11300015Sadrian * 2. Redistributions in binary form must reproduce at minimum a disclaimer 12300015Sadrian * similar to the "NO WARRANTY" disclaimer below ("Disclaimer") and any 13300015Sadrian * redistribution must be conditioned upon including a substantially 14300015Sadrian * similar Disclaimer requirement for further binary redistribution. 15300015Sadrian * 16300015Sadrian * NO WARRANTY 17300015Sadrian * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 18300015Sadrian * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 19300015Sadrian * LIMITED TO, THE IMPLIED WARRANTIES OF NONINFRINGEMENT, MERCHANTIBILITY 20300015Sadrian * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL 21300015Sadrian * THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, 22300015Sadrian * OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 23300015Sadrian * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 24300015Sadrian * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER 25300015Sadrian * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 26300015Sadrian * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF 27300015Sadrian * THE POSSIBILITY OF SUCH DAMAGES. 28300015Sadrian * 29300015Sadrian * $FreeBSD$ 30300015Sadrian */ 31300015Sadrian 32300015Sadrian#ifndef _BHND_CORES_PCIE2_BHND_PCIE2_VAR_H_ 33300015Sadrian#define _BHND_CORES_PCIE2_BHND_PCIE2_VAR_H_ 34300015Sadrian 35300015Sadrian#include <sys/param.h> 36300015Sadrian#include <sys/bus.h> 37300015Sadrian 38300015Sadrian/* 39300015Sadrian * Shared PCIe-G2 Bridge/Host Bridge definitions. 40300015Sadrian */ 41300015Sadrian 42300015SadrianDECLARE_CLASS(bhnd_pcie2_driver); 43300015Sadrianstruct bhnd_pcie2_softc; 44300015Sadrian 45300015Sadrianint bhnd_pcie2_generic_probe(device_t dev); 46300015Sadrianint bhnd_pcie2_generic_attach(device_t dev); 47300015Sadrianint bhnd_pcie2_generic_detach(device_t dev); 48300015Sadrianint bhnd_pcie2_generic_suspend(device_t dev); 49300015Sadrianint bhnd_pcie2_generic_resume(device_t dev); 50300015Sadrian 51300015Sadrian 52300015Sadrianuint32_t bhnd_pcie2_read_proto_reg(struct bhnd_pcie2_softc *sc, 53300015Sadrian uint32_t addr); 54300015Sadrianvoid bhnd_pcie2_write_proto_reg(struct bhnd_pcie2_softc *sc, 55300015Sadrian uint32_t addr, uint32_t val); 56300015Sadrianint bhnd_pcie2_mdio_read(struct bhnd_pcie2_softc *sc, int phy, 57300015Sadrian int reg); 58300015Sadrianint bhnd_pcie2_mdio_write(struct bhnd_pcie2_softc *sc, int phy, 59300015Sadrian int reg, int val); 60300015Sadrianint bhnd_pcie2_mdio_read_ext(struct bhnd_pcie2_softc *sc, int phy, 61300015Sadrian int devaddr, int reg); 62300015Sadrianint bhnd_pcie2_mdio_write_ext(struct bhnd_pcie2_softc *sc, 63300015Sadrian int phy, int devaddr, int reg, int val); 64300015Sadrian 65300015Sadrian/** 66300015Sadrian * bhnd_pcie2 child device info 67300015Sadrian */ 68300015Sadrianstruct bhnd_pcie2_devinfo { 69300015Sadrian struct resource_list resources; 70300015Sadrian}; 71300015Sadrian 72300015Sadrian/* 73300015Sadrian * Generic PCIe-G2 bridge/end-point driver state. 74300015Sadrian * 75300015Sadrian * Must be first member of all subclass softc structures. 76300015Sadrian */ 77300015Sadrianstruct bhnd_pcie2_softc { 78300015Sadrian device_t dev; /**< pci device */ 79300015Sadrian uint32_t quirks; /**< quirk flags */ 80300015Sadrian 81300015Sadrian struct mtx mtx; /**< state mutex used to protect 82300015Sadrian interdependent register 83300015Sadrian accesses. */ 84300015Sadrian 85300015Sadrian struct bhnd_resource *mem_res; /**< device register block. */ 86300015Sadrian int mem_rid; /**< register block RID */ 87300015Sadrian}; 88300015Sadrian 89300015Sadrian 90300015Sadrian#define BHND_PCIE2_LOCK_INIT(sc) \ 91300015Sadrian mtx_init(&(sc)->mtx, device_get_nameunit((sc)->dev), \ 92300015Sadrian "BHND PCIe-G2 driver lock", MTX_DEF) 93300015Sadrian#define BHND_PCIE2_LOCK(sc) mtx_lock(&(sc)->mtx) 94300015Sadrian#define BHND_PCIE2_UNLOCK(sc) mtx_unlock(&(sc)->mtx) 95300015Sadrian#define BHND_PCIE2_LOCK_ASSERT(sc, what) mtx_assert(&(sc)->mtx, what) 96300015Sadrian#define BHND_PCIE2_LOCK_DESTROY(sc) mtx_destroy(&(sc)->mtx) 97300015Sadrian 98300015Sadrian#endif /* _BHND_CORES_PCIE2_BHND_PCIE2_VAR_H_ */