Commit Graph

92 Commits

Author SHA1 Message Date
perry f31bd063e9 nuke trailing whitespace 2005-02-27 00:26:58 +00:00
perry 18db93c7f6 de-__P 2005-02-04 02:10:35 +00:00
jmcneill 9c40186bce Add support functions for capturing and restoring PCI configuration
registers for power management code.
2005-01-26 21:49:00 +00:00
drochner a987cab220 remove macros which just hide cfdata internals
(and are used at one place only)
2004-09-13 12:22:52 +00:00
drochner 46289e1fef Phase out the use of a string as first "attach args" member to control
which bustype should be attached with a specific call to config_found()
(from a "mainbus" or a bus bridge).
Do it for isa/eisa/mca and pci/agp for now. These buses all attach to
an mi interface attribute "isabus", "eisabus" etc., and the autoconf
framework now allows to specify an interface attribute on config_found()
and config_search(), which limits the search of matching config data
to these which attach to that specific attribute.
So we basically have to call config_found_ia(..., "foobus", ...) where
such a bus is attached.
As a consequence, where a "mainbus" or alike also attaches other
devices (eg CPUs) which do not attach to a specific attribute yet,
we need at least pass an attribute name (different from "foobus") so
that the foo bus is not found at these places. This made some minor
changes necessary which are not obviously related to the mentioned buses.
2004-08-30 15:05:15 +00:00
drochner c67a72f6ff make PCI devices attachable/detachable (as far as the particular drivers
allow), and allow to rescan a bus selectively (ie only the device/
function I'm looking at)
2004-08-17 23:20:10 +00:00
drochner 04a2fc0f5a make the "generic" PCI bus enumeration code the standard case which
gets used if nothing else is defined in MD headers,
introduce a "PCI_MACHDEP_ENUMERATE_BUS" CPP definition which can
be used by MD headers (just 1 port atm) to plug in special code
2004-07-29 16:51:01 +00:00
kochi d8c488d1ef Fix typo (func8 -> func7) 2004-05-17 16:57:49 +00:00
christos 956dab9c37 GC pci_{g,s}et_powerstate into pci_powerstate(). Idea from mycroft and gimpy.
Nothing uses them yet.
2004-05-08 23:41:40 +00:00
itojun 6123043789 pass string length (= boundary info) to pci_devinfo so that we do not run over
the end of memory region
2004-04-23 21:13:05 +00:00
itojun dc4bf37abf support new quirk bits on debug output 2003-08-18 05:39:07 +00:00
itojun c2ab035d77 - check HDRTYPE early, and ignore if it is not supported (n > 2).
- defer access to interrupt configuration register, as its existence depends on
  HDRTYPE.
- add "skip particular funtion in multifunction device" functionality
  to quirk table.
- add GEODE/NS SC1100 quirk (now boots on soekris Net4801).
2003-08-15 07:17:21 +00:00
fvdl 7dd7f8baa2 Handle 64bit DMA addresses on PCI for platforms that can (currently only
enabled on amd64). Add a dmat64 field to various PCI attach structures,
and pass it down where needed. Implement a simple new function called
pci_dma64_available(pa) to test if 64bit DMA addresses may be used.
This returns 1 iff _PCI_HAVE_DMA64 is defined in <machine/pci_machdep.h>,
and there is more than 4G of memory.
2003-06-15 23:08:53 +00:00
thorpej 9039a9311b Fix inverted logic in pci_vpd_write(). From Jachym Holecek, PR kern/21440. 2003-05-03 18:02:37 +00:00
thorpej b43b1645a2 Use aprint*(). 2003-04-29 01:07:30 +00:00
thorpej ecb44c329e Add PCI VPD access routines. From psi.cz!freza, PR kern/20889. 2003-03-25 21:56:20 +00:00
christos fb66693ce7 It is not appropriate for pcivar.h to include "locators.h"
The two files that need it, should include it themselves.
2003-03-19 17:56:58 +00:00
thorpej 72a7af27b0 Use aprint_normal() in cfprint routines. 2003-01-01 00:10:15 +00:00
perry 43ed640ca5 fix lint warnings about things being stringified under cpp -traditional 2002-10-23 01:50:11 +00:00
thorpej b75a007d9f Add trailing ; to CFATTACH_DECL. 2002-10-02 16:51:16 +00:00
thorpej 387fc6dc87 Use CFATTACH_DECL(). 2002-09-30 20:37:04 +00:00
thorpej f818766afe Declare all cfattach structures const. 2002-09-27 20:31:45 +00:00
thorpej 6c88de3b53 Introduce a new routine, config_match(), which invokes the
cfattach->ca_match function in behalf of the caller.  Use it
rather than invoking cfattach->ca_match directly.
2002-09-27 03:17:40 +00:00
thorpej d1ad2ac4f2 Rather than referencing the cfdriver directly in the cfdata entries,
instead use a string naming the driver.  The cfdriver is then looked
up in a list which is built at run-time.
2002-09-27 02:24:06 +00:00
thorpej 6a5e35f6cc Return 0, not NULL, when we mean 0. 2002-07-05 00:16:26 +00:00
itojun 6dc6d89865 minor KNF 2002-06-20 23:02:06 +00:00
tshiozak fe6f56bfb7 add support for the per-device power management capability.
int pci_set_powerstate(pci_chipset_tag_t pc, pcitag_t tag, int newstate)
	set power state of the device to newstate.
int pci_get_powerstate(pci_chipset_tag_t pc, pcitag_t tag)
	get current power state of the device.

In the future, these functions will be used for ACPI support.
2002-06-18 13:18:37 +00:00
sommerfeld ce6cc5672c Add "pa_rawintrpin" containing unswizzled interrupt pin to pci_attach_args. 2002-05-18 21:40:41 +00:00
sommerfeld 314ef13c23 In pci_probe_device(), correct test for whether the device is behind a
pci-pci bridge (and thus needs its interrupts "swizzled").

Formerly, pci_probe_device() assumed pci busses other than bus zero
were bridged; however, much recent x86 hardware supports multiple
primary pci busses differently -- there is a system-wide bus numbering
scheme.  Now, we instead look at the (newly introduced) sc_bridgetag
value in the parent bus to figure out if there's a ppb or equivalent
in the way.

This fixed at least one case where the i386 MP branch gets interrupt
mapping wrong.
2002-05-18 18:14:11 +00:00
thorpej 86b4df33e7 Make sure pa.pa_bus is initialized. (Thanks, uwe!) 2002-05-16 01:03:05 +00:00
thorpej 204183c0fa * Add "pcitag_t *pba_bridgetag" to pci_attach_args. This is set to
NULL for root PCI busses.  For busses behind a bridge, it points to
  a persistent copy of the bridge's pcitag_t.  This can be very useful
  for machine-dependent PCI bus enumeration code.
* Implement a machine-dependent pci_enumerate_bus() for sparc64 which
  uses OFW device nodes to enumerate the bus.  When a PCI bus that is
  behind a bridge is attached, pci_attach_hook() allocates a new PCI
  chipset tag for the new bus and sets it's "curnode" to the OFW node
  of the bridge.  This is used as a starting point when enumerating
  that bus.  Root busses get the OFW node of the host bridge (psycho).
* Garbage-collect "ofpci" and "ofppb" from the sparc64 port.
2002-05-16 01:01:28 +00:00
thorpej dada8613e1 Let machine-dependent code specify how to enumerate the bus.
Currently, everyone uses pci_enumerate_bus_generic().
2002-05-15 19:23:51 +00:00
thorpej 40116f53dd Put back __PCI_BUS_DEVORDER for now. 2002-05-15 18:39:47 +00:00
thorpej 7c86eb62bc Split the code that enumerates the PCI bus and that actually probes
for a device into two functions:

* pci_probe_device() actually probes/attaches the device specified
  by the provide pcitag_t.

* pci_enumerate_bus() enumerates the bus, and calls pci_probe_device()
  for each device on the bus.  A pci_enumerate_bus_generic() is provided
  which implements the old method of doing this: If something found at
  dev0/func0, determine number of functions and probe each one.

  Machine-dependent code will be able to specify the bus enumeration
  routine in the future.
2002-05-15 18:13:00 +00:00
lukem 9048aaae21 add RCSID 2001-11-13 07:48:40 +00:00
thorpej 397a84f51a Fix the semantics of __PCI_DEV_FUNCORDER so that they're actually useful:
If __PCI_DEV_FUNCORDER is defined, don't do the song-and-dance to check if
a device is multi-function; machdep code is going to tell us exactly which
functions to probe.

Note this required changing how pci_func_devorder() works in the
sparc64 PCI machdep code; now the "curnode" is assumed to point
to the bus, rather than some function (typically 0) on the device,
just as pci_bus_devorder() makes that assumption.

All this should allow the PCI code to actually locate the second
HME device on a Sun Netra t1, which is at 3,1 -- previously, the
PCI code would have missed it because there is no device at 3,0.

(Sun deserves a brick to the head for this one -- this seems clearly
out of line with the PCI spec.)
2001-10-17 22:16:41 +00:00
thorpej 23763f2f28 Add an ioctl interface to the PCI bus. Add ioctls to read/write
PCI configuration space registers, and to fetch bus info.
2001-09-13 21:49:40 +00:00
fvdl ac50343c76 Add a pci_find_device function, to find a PCI device using a match
function on all (probed) PCI buses:

int     pci_find_device(struct pci_attach_args *pa,
                        int (*match)(struct pci_attach_args *));

The pci_attach_args structure pointed to by pa is filled in if the
device is found, and 1 is returned. Otherwise 0 is returned.

This function is, unfortunately, needed by the i810 agp code. It's
also of use for LKMs.

Also frob pci_probe_bus to take 2 extra args when used by pci_find_device.
2001-09-10 10:04:49 +00:00
mrg 0b1849a71a don't try to print pcitag_t values; these are opaque values that should not
be interpreted by MI code.
2001-07-11 08:36:46 +00:00
thorpej a888f6ef73 If the cache line size in the BHLC register is not configured,
then clear the MRL/MRM/MWI command-ok flags when attaching a
device.
2001-05-22 16:10:44 +00:00
bouyer 956a71c1c5 Add pci bus number to pci_attach_args, as suggested by Jason on tech-kern
(needed for pciide)
2001-05-04 15:13:17 +00:00
mrg 11524b8374 allow pci_bus_maxdevs() to be replaced with pci_bus_devorder() and
pci_dev_funcorder() that have the following signatures:

int pci_bus_devorder(pci_chipset_tag_t pc, int bus, char list[32]);
int pci_dev_funcorder(pci_chipset_tag_t pc, int bus, int device, char list[8]);

they control the order of PCI bus probe at the device and function level,
by filling in a value from 0 to 31 for pci_bus_devorder() or 0 to 7 for
pci_dev_funcorder, with a value of -1 to signify no more entries.


when device properties arrive, these will be replaced with some facility
based on properties (design/implementation unknown currently.)
2001-03-02 06:24:17 +00:00
mrg 6ee70851f1 backout the parts of the previous change (7 months ago) that were *not* part
of the sys/vm removal, but some (fortunately disabled) work-in-progress.
2001-02-12 09:14:53 +00:00
mrg 7c15053eed remove include of <vm/vm.h>. <vm/vm.h> -> <uvm/uvm_extern.h> 2000-06-28 16:08:42 +00:00
kleink 7a6f003756 Add a comment describing the previous change. 2000-05-10 08:39:58 +00:00
kleink 05f0b17555 Make pci_get_capability() work correctly on both header type 0 and type 2
devices; both have different Capability List Pointer registers.
2000-05-08 10:52:38 +00:00
augustss 169ac5b3c1 Remove register declarations. 2000-03-30 12:41:09 +00:00
cgd 00f7a2d476 if the PCI_CONFIG_DUMP option is defined, set the patchable
pci_config_dump variable to 1.  otherwise, it gets set to 0.  If
that's set, when configuring PCI devices spew the very verbose
configuration space header dump that was previously "#if 0"'d.
If you use this option, or patch the variable to 1, it's strongly
encouraged that you have used the MSGBUFSIZE option to enlarge the
kernel message buffer.
2000-03-22 00:47:26 +00:00
thorpej 110ac27449 Make sure devices are told they can use rd/line, rd/mult, and wr/inval. 1999-11-04 19:03:00 +00:00
thorpej a4e1bde0b3 Print out if the read {line,multiple} and write/invalidate commands are
okay to use.
1999-11-04 01:03:34 +00:00