1c43a8674SZbigniew Bodek /*- 2c43a8674SZbigniew Bodek * Copyright (c) 2011 Nathan Whitehorn 3c43a8674SZbigniew Bodek * All rights reserved. 4c43a8674SZbigniew Bodek * 5c43a8674SZbigniew Bodek * Redistribution and use in source and binary forms, with or without 6c43a8674SZbigniew Bodek * modification, are permitted provided that the following conditions 7c43a8674SZbigniew Bodek * are met: 8c43a8674SZbigniew Bodek * 1. Redistributions of source code must retain the above copyright 9c43a8674SZbigniew Bodek * notice, this list of conditions and the following disclaimer. 10c43a8674SZbigniew Bodek * 2. Redistributions in binary form must reproduce the above copyright 11c43a8674SZbigniew Bodek * notice, this list of conditions and the following disclaimer in the 12c43a8674SZbigniew Bodek * documentation and/or other materials provided with the distribution. 13c43a8674SZbigniew Bodek * 14c43a8674SZbigniew Bodek * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 15c43a8674SZbigniew Bodek * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 16c43a8674SZbigniew Bodek * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 17c43a8674SZbigniew Bodek * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 18c43a8674SZbigniew Bodek * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 19c43a8674SZbigniew Bodek * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 20c43a8674SZbigniew Bodek * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 21c43a8674SZbigniew Bodek * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 22c43a8674SZbigniew Bodek * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 23c43a8674SZbigniew Bodek * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 24c43a8674SZbigniew Bodek * SUCH DAMAGE. 25c43a8674SZbigniew Bodek * 26c43a8674SZbigniew Bodek * $FreeBSD$ 27c43a8674SZbigniew Bodek */ 28c43a8674SZbigniew Bodek 29c43a8674SZbigniew Bodek #ifndef _DEV_OFW_OFWPCI_H_ 30c43a8674SZbigniew Bodek #define _DEV_OFW_OFWPCI_H_ 31c43a8674SZbigniew Bodek 32c43a8674SZbigniew Bodek /* 33c43a8674SZbigniew Bodek * Export class definition for inheritance purposes 34c43a8674SZbigniew Bodek */ 35c43a8674SZbigniew Bodek DECLARE_CLASS(ofw_pci_driver); 36c43a8674SZbigniew Bodek 37c43a8674SZbigniew Bodek struct ofw_pci_cell_info { 38c43a8674SZbigniew Bodek pcell_t host_address_cells; 39c43a8674SZbigniew Bodek pcell_t pci_address_cell; 40c43a8674SZbigniew Bodek pcell_t size_cells; 41c43a8674SZbigniew Bodek }; 42c43a8674SZbigniew Bodek 43c43a8674SZbigniew Bodek struct ofw_pci_range { 44c43a8674SZbigniew Bodek uint32_t pci_hi; 45c43a8674SZbigniew Bodek uint64_t pci; 46c43a8674SZbigniew Bodek uint64_t host; 47c43a8674SZbigniew Bodek uint64_t size; 48c43a8674SZbigniew Bodek }; 49c43a8674SZbigniew Bodek 50c43a8674SZbigniew Bodek /* 51c43a8674SZbigniew Bodek * Quirks for some adapters 52c43a8674SZbigniew Bodek */ 53c43a8674SZbigniew Bodek enum { 54c43a8674SZbigniew Bodek OFW_PCI_QUIRK_RANGES_ON_CHILDREN = 1, 55c43a8674SZbigniew Bodek }; 56c43a8674SZbigniew Bodek 57c43a8674SZbigniew Bodek struct ofw_pci_softc { 58c43a8674SZbigniew Bodek device_t sc_dev; 59c43a8674SZbigniew Bodek phandle_t sc_node; 60c43a8674SZbigniew Bodek int sc_bus; 61c43a8674SZbigniew Bodek int sc_initialized; 62c43a8674SZbigniew Bodek int sc_quirks; 635572376dSMichal Meloun int sc_have_pmem; 64c43a8674SZbigniew Bodek 65c43a8674SZbigniew Bodek struct ofw_pci_range *sc_range; 66c43a8674SZbigniew Bodek int sc_nrange; 675572376dSMichal Meloun uint64_t sc_range_mask; 68c43a8674SZbigniew Bodek struct ofw_pci_cell_info *sc_cell_info; 69c43a8674SZbigniew Bodek 70c43a8674SZbigniew Bodek struct rman sc_io_rman; 71c43a8674SZbigniew Bodek struct rman sc_mem_rman; 725572376dSMichal Meloun struct rman sc_pmem_rman; 73c43a8674SZbigniew Bodek bus_space_tag_t sc_memt; 74c43a8674SZbigniew Bodek bus_dma_tag_t sc_dmat; 75*efafbd0aSMichal Meloun int sc_pci_domain; 76c43a8674SZbigniew Bodek 77c43a8674SZbigniew Bodek struct ofw_bus_iinfo sc_pci_iinfo; 78c43a8674SZbigniew Bodek }; 79c43a8674SZbigniew Bodek 80c43a8674SZbigniew Bodek int ofw_pci_init(device_t); 81c43a8674SZbigniew Bodek int ofw_pci_attach(device_t); 82c43a8674SZbigniew Bodek int ofw_pci_read_ivar(device_t, device_t, int, uintptr_t *); 83c43a8674SZbigniew Bodek int ofw_pci_write_ivar(device_t, device_t, int, uintptr_t); 84c43a8674SZbigniew Bodek int ofw_pci_route_interrupt(device_t, device_t, int); 85c43a8674SZbigniew Bodek int ofw_pci_nranges(phandle_t, struct ofw_pci_cell_info *); 86c43a8674SZbigniew Bodek 87c43a8674SZbigniew Bodek #endif /* _DEV_OFW_OFWPCI_H_ */ 88