NetBSD/share/man/man9/pci_configure_bus.9

186 lines
5.9 KiB
Groff

.\" $NetBSD: pci_configure_bus.9,v 1.3 2001/12/26 01:02:01 wiz Exp $
.\"
.\" Copyright 2001 Wasabi Systems, Inc.
.\" All rights reserved.
.\"
.\" Written by Allen Briggs for Wasabi Systems, Inc.
.\"
.\" Redistribution and use in source and binary forms, with or without
.\" modification, are permitted provided that the following conditions
.\" are met:
.\" 1. Redistributions of source code must retain the above copyright
.\" notice, this list of conditions and the following disclaimer.
.\" 2. Redistributions in binary form must reproduce the above copyright
.\" notice, this list of conditions and the following disclaimer in the
.\" documentation and/or other materials provided with the distribution.
.\" 3. All advertising materials mentioning features or use of this software
.\" must display the following acknowledgement:
.\" This product includes software developed for the NetBSD Project by
.\" Wasabi Systems, Inc.
.\" 4. The name of Wasabi Systems, Inc. may not be used to endorse
.\" or promote products derived from this software without specific prior
.\" written permission.
.\"
.\" THIS SOFTWARE IS PROVIDED BY WASABI SYSTEMS, INC. ``AS IS'' AND
.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
.\" TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
.\" PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL WASABI SYSTEMS, INC
.\" BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
.\" CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
.\" SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
.\" CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
.\" ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
.\" POSSIBILITY OF SUCH DAMAGE.
.\"
.Dd February 9, 2001
.Dt PCI_CONFIGURE_BUS 9
.Os
.Sh NAME
.Nm pci_configure_bus
.Nm pci_conf_interrupt
.Nd perform PCI bus configuration
.Sh SYNOPSIS
.Fd #include <dev/pci/pciconf.h>
.Ft int
.Fo pci_configure_bus
.Fa "pci_chipset_tag_t pc"
.Fa "struct extent *ioext"
.Fa "struct extent *memext"
.Fa "struct extent *pmemext"
.Fc
.Sh DESCRIPTION
The
.Fn pci_configure_bus
function configures a PCI bus for use. This involves:
.Bl -bullet
.It
Defining bus numbers for all busses on the system,
.It
Setting the Base Address Registers for all devices,
.It
Setting up the interrupt line register for all devices, and
.It
Configuring bus latency timers for all devices.
.El
.Pp
In traditional PCs and Alpha systems, the BIOS or firmware takes care
of this task, but that is not the case for all systems.
.Fn pci_configure_bus
should be called prior to the auto-configuration of the bus.
.Pp
The
.Fa pc
argument is a machine-dependent tag used to specify the PCI chipset to the
system. This should be the same value used with
.Fn pci_make_tag .
The extent arguments
define memory extents from which the address space for the cards will be
taken. These addresses should be in the PCI address space. The
.Fa ioext
extent is for PCI I/O accesses. The
.Fa memext
extent is for PCI memory accesses that might have side effects. I.e.,
that can not be cached. The
.Fa pmemext
extent is for PCI memory accesses that can be cached. The
.Fa pmemext
extent will be used for any ROMs and any memory regions that are marked as
.Dq prefetchable
in their BAR. If an implementation does not distinguish between
prefetchable and non-prefetchable memory, it may pass NULL for
.Fa pmemext .
In this case, prefetchable memory allocations will be made from the
non-prefetchable region.
.Pp
One of the functions of
.Fn pci_configure_bus
is to configure interrupt
.Dq line
information. This must be done on a machine-dependent basis, so a
machine-dependent function
.Fn pci_conf_interrupt
must be defined. The prototype for this function is
.Pp
.Fn "void pci_conf_interrupt" "pci_chipset_tag_t pc" "int bus" \
"int device" "int function" "int swiz" "int *iline"
.Pp
In this function,
.Fa bus ,
.Fa device ,
and
.Fa function ,
uniquely identify the item being configured. The
.Fa swiz
argument is a
.Dq swizzle ,
a sum of the device numbers of the primary interface of the bridges between
the host bridge and the current device. The function is responsible for
setting the value of
.Fa iline .
See chapter 9 of the
.Dq PCI-to-PCI Bridge Architecture Specification
for more information on swizzling (also known as interrupt routing).
.Sh RETURN VALUES
If successful
.Fn pci_configure_bus
returns 0. A non-zero return value means that the bus was not completely
configured for some reason. A description of the failure will be displayed
on the console.
.Sh ENVIRONMENT
The
.Fn pci_configure_bus
function is only included in the kernel if the kernel is compiled with
the
.Dv PCI_NETBSD_CONFIGURE
option enabled.
.Sh EXAMPLES
The
.Fn pci_conf_interrupt
function in the sandpoint implementation looks like:
.Pp
.Bd -literal -compact
void
pci_conf_interrupt(pci_chipset_tag_t pc, int bus, int dev, int func,
int swiz, int *iline)
{
if (bus == 0) {
*iline = dev;
} else {
*iline = 13 + ((swiz + dev + 3) & 3);
}
}
.Ed
.Pp
The BeBox has nearly 1GB of PCI I/O memory starting at processor address
0x81000000 (PCI I/O address 0x01000000), and nearly 1GB of PCI memory
starting at 0xC0000000 (PCI memory address 0x00000000).
The
.Fn pci_configure_bus
function might be called as follows:
.Pp
.Bd -literal -compact
struct extent *ioext, *memext;
...
ioext = extent_create("pciio", 0x01000000, 0x0fffffff, M_DEVBUF,
NULL, 0, EX_NOWAIT);
memext = extent_create("pcimem", 0x00000000, 0x0fffffff, M_DEVBUF,
NULL, 0, EX_NOWAIT);
...
pci_configure_bus(0, ioext, memext, NULL);
...
extent_destroy(ioext);
extent_destroy(memext);
...
.Ed
.Pp
Note that this must be called before the PCI bus is attached during
autoconfiguration.
.Sh SEE ALSO
.Xr pci 4 ,
.Xr extent 9
.Sh HISTORY
.Fn pci_configure_bus
was added in
.Nx 1.6 .