xref: /freebsd/sys/dev/ofw/ofwpci.h (revision efafbd0a871888db6fe8a52b241528b86a17bcb1)
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