1 #-
2 # Copyright (c) 2001, 2003 by Thomas Moestl <tmm@FreeBSD.org>
3 # All rights reserved.
4 #
5 # Redistribution and use in source and binary forms, with or without
6 # modification, are permitted provided that the following conditions
7 # are met:
8 # 1. Redistributions of source code must retain the above copyright
9 # notice, this list of conditions and the following disclaimer.
10 # 2. Redistributions in binary form must reproduce the above copyright
11 # notice, this list of conditions and the following disclaimer in the
12 # documentation and/or other materials provided with the distribution.
13 #
14 # THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
15 # IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
16 # OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
17 # IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
18 # INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
19 # (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
20 # SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
21 # CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
22 # OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
23 # USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
24 #
25 # $FreeBSD$
26
27 #include <sys/bus.h>
28
29 #include <dev/ofw/openfirm.h>
30
31 #include <sparc64/pci/ofw_pci.h>
32
33 INTERFACE ofw_pci;
34
35 CODE {
36 static ofw_pci_intr_pending_t ofw_pci_default_intr_pending;
37 static ofw_pci_alloc_busno_t ofw_pci_default_alloc_busno;
38 static ofw_pci_adjust_busrange_t ofw_pci_default_adjust_busrange;
39
40 static int
41 ofw_pci_default_intr_pending(device_t dev, ofw_pci_intr_t intr)
42 {
43
44 if (device_get_parent(dev) != NULL)
45 return (OFW_PCI_INTR_PENDING(device_get_parent(dev),
46 intr));
47 return (0);
48 }
49
50 static int
51 ofw_pci_default_alloc_busno(device_t dev)
52 {
53
54 if (device_get_parent(dev) != NULL)
55 return (OFW_PCI_ALLOC_BUSNO(device_get_parent(dev)));
56 return (-1);
57 }
58
59 static void
60 ofw_pci_default_adjust_busrange(device_t dev, u_int busno)
61 {
62
63 if (device_get_parent(dev) != NULL)
64 return (OFW_PCI_ADJUST_BUSRANGE(device_get_parent(dev),
65 busno));
66 }
67 };
68
69 # Return whether an interrupt request is pending for the INO intr.
70 METHOD int intr_pending {
71 device_t dev;
72 ofw_pci_intr_t intr;
73 } DEFAULT ofw_pci_default_intr_pending;
74
75 # Allocate a bus number for reenumerating a PCI bus. A return value of -1
76 # means that reenumeration is generally not supported, otherwise all PCI
77 # busses must be reenumerated using bus numbers obtained via this method.
78 METHOD int alloc_busno {
79 device_t dev;
80 } DEFAULT ofw_pci_default_alloc_busno;
81
82 # Make sure that all PCI bridges up in the hierarchy contain this bus in
83 # their subordinate bus range. This is required when reenumerating the PCI
84 # buses.
85 METHOD void adjust_busrange {
86 device_t dev;
87 u_int subbus;
88 } DEFAULT ofw_pci_default_adjust_busrange;
Cache object: a03cf87221c8085c2cf7f0184a06647b
|