1 /* $OpenBSD: pyrovar.h,v 1.5 2020/06/23 01:21:29 jmatthew Exp $ */ 2 3 /* 4 * Copyright (c) 2007 Mark Kettenis 5 * All rights reserved. 6 * 7 * Redistribution and use in source and binary forms, with or without 8 * modification, are permitted provided that the following conditions 9 * are met: 10 * 1. Redistributions of source code must retain the above copyright 11 * notice, this list of conditions and the following disclaimer. 12 * 2. Redistributions in binary form must reproduce the above copyright 13 * notice, this list of conditions and the following disclaimer in the 14 * documentation and/or other materials provided with the distribution. 15 * 16 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 17 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 18 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 19 * DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, 20 * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 21 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 22 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 23 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 24 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN 25 * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 26 * POSSIBILITY OF SUCH DAMAGE. 27 */ 28 29 struct pyro_msi_msg { 30 uint8_t mm_type; 31 uint8_t mm_reserved[3]; 32 uint16_t mm_reqid; 33 uint16_t mm_data; 34 uint64_t mm_reserved2[7]; 35 }; 36 37 struct pyro_range { 38 u_int32_t cspace; 39 u_int32_t child_hi; 40 u_int32_t child_lo; 41 u_int32_t phys_hi; 42 u_int32_t phys_lo; 43 u_int32_t size_hi; 44 u_int32_t size_lo; 45 }; 46 47 struct pyro_eq { 48 char eq_name[16]; 49 struct pyro_pbm *eq_pbm; 50 void *eq_ih; 51 bus_size_t eq_head; 52 bus_size_t eq_tail; 53 struct pyro_msi_msg *eq_ring; 54 uint64_t eq_mask; 55 56 unsigned int eq_id; 57 unsigned int eq_intr; 58 }; 59 60 struct pyro_pbm { 61 struct pyro_softc *pp_sc; 62 63 struct pyro_range *pp_range; 64 pci_chipset_tag_t pp_pc; 65 int pp_nrange; 66 67 bus_space_tag_t pp_memt; 68 bus_space_tag_t pp_iot; 69 bus_space_tag_t pp_cfgt; 70 bus_space_handle_t pp_cfgh; 71 bus_dma_tag_t pp_dmat; 72 int pp_bus_a; 73 struct iommu_state pp_is; 74 struct strbuf_ctl pp_sb; 75 76 struct msi_eq *pp_meq; 77 bus_addr_t pp_msiaddr; 78 int pp_msinum; 79 struct intrhand **pp_msi; 80 81 unsigned int pp_neq; 82 struct pyro_eq *pp_eq; 83 84 int pp_flags; 85 }; 86 87 struct pyro_softc { 88 struct device sc_dv; 89 int sc_node; 90 int sc_ign; 91 bus_dma_tag_t sc_dmat; 92 bus_space_tag_t sc_bust; 93 bus_addr_t sc_csr, sc_xbc; 94 bus_space_handle_t sc_csrh, sc_xbch; 95 96 #if 0 97 struct pyro_pbm *sc_pbm; 98 #endif 99 100 int sc_oberon; 101 }; 102