Commit Graph

69 Commits

Author SHA1 Message Date
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 5fa053333d add centralized {eisa,isa,pci,agp,mca}busprint() functions which do
what tens of the bus' parents foo{...}bridge_print()s scattered around do
2004-08-30 10:30:38 +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
mycroft 31a80e2d68 For the PCIVERBOSE case, separate vendors and products into separate tables.
Eliminating redundant pointers in the tables saves nearly 20K (20% of the table
size).  In the process, add a pci_findproduct() and make that and
pci_findvendor() return a "const char *".
2004-08-02 18:43:38 +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
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 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 d5aece61d6 Back out the lwp/ktrace changes. They contained a lot of colateral damage,
and need to be examined and discussed more.
2003-06-29 22:28:00 +00:00
darrenr 960df3c8d1 Pass lwp pointers throughtout the kernel, as required, so that the lwpid can
be inserted into ktrace records.  The general change has been to replace
"struct proc *" with "struct lwp *" in various function prototypes, pass
the lwp through and use l_proc to get the process pointer when needed.

Bump the kernel rev up to 1.6V
2003-06-28 14:20:43 +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 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
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
drochner 34c0afbf8d implement a check whether a BAR is present at all at a given configuration
space address and use it where the mappings of the VGA card are registered
before descenting too deep into "memory" type specific code
(pci_mem_find() gets noisy if it doesn't like the register)
2002-05-30 12:06:43 +00:00
sommerfeld ce6cc5672c Add "pa_rawintrpin" containing unswizzled interrupt pin to pci_attach_args. 2002-05-18 21:40:41 +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 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
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
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
matt 37d2bbb0a2 Only include "locators.h" is _KERNEL is defined. 2001-03-05 23:50:02 +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
thorpej 5939e70ca3 Add support for mapping 64-bit PCI memory space. If the region
is mapped in a way that is inaccessible by a 32-bit bus_addr_t, then
print a message to that effect and return failure.

Original patches by Bill Studenmund, with a few small changes by me.
2000-05-10 16:58:42 +00:00
thorpej 30e63d853c Define flags in pci_attach_args which indicate it's okay to use the
Memory Read Line, Memory Read Multiple, and Memory Write and Invalidate
PCI commands.
1999-09-30 20:30:06 +00:00
thorpej 964b69ec84 Back out previous. Thanks to cgd for pointing out another way to do this. 1999-05-06 01:10:28 +00:00
thorpej 2a4490daa5 Add a `bus' member to the pci_attach_args. This is not normally used,
but some child drivers might need to know this information.
1999-05-06 01:01:19 +00:00
cgd ff42ff62e8 pull pci_machdep.h in from machine/ 1999-03-19 03:37:52 +00:00
drochner bbe9d71415 add support for "extended capabilities" (new in PCI spec 2.2) 1998-11-07 16:47:22 +00:00
mycroft 6d3d8a1350 Make copyright notices with my name consistent. 1998-08-15 03:02:31 +00:00
augustss deb00272b9 Add USB support. Supported so far:
* UHCI and OHCI host controllers on PCI
* Hubs
* HID devices withe special drivers for mouse and keyboard
* Printers
1998-07-12 19:51:55 +00:00
thorpej ab548fbb40 Remove the PCI-ISA bridge callback mechanism; it's no longer needed. 1998-06-09 18:48:41 +00:00
cgd 6e73ca754f add a PCI 'quirks' mechanism, meant to be used as the mechanism
of last resort when trying to communicate information about
bogus behaviour of PCI devices to the MI autoconfiguration code.
In general, bogus behaviour should be handled by drivers, but there
are some types of bogons which can't be addressed that way.  The
only quirk currently defined is one which indicates that the device
is multi-function even though the device's header says otherwise.
(Mmm, Intel 82371FB PCI-to-ISA Bridge (PIIX); you'd think that at least
Intel would have gotten it right...)
1998-05-31 06:07:59 +00:00
mark 69a9a5c445 Include arm32/pci/pci_machdep.h if arm32 is defined. 1998-05-25 22:11:37 +00:00
cgd 4b0876c74b largely reimplement pci_conf_print():
* print all configuration space registers.  Then, where possible,
  interpret them.  (That is, PRESENT ALL THE DATA, then interpret it --
  don't hide data behind interpretation.  Also, when interpreting
  fields, try to print out the specific value that's being interpreted.)
* handle different header types.
* allow caller to specify a function which can interpret the
  device-dependent header and is responsible for pretty-printing it.

It spews (use 'options MSGBUFSIZE=...' 8-), but when you want the data,
you really want _all_ of it.

Still needs some cleanup and additional code (e.g. interepretation
of PCI-PCI (type 1) and PCI-Cardbus (type 2(?)) bridge headers).
1998-05-18 17:25:17 +00:00
tsubai 02aa1f7050 Add macppc support. 1998-05-15 12:35:06 +00:00
thorpej a95c0ac15a Add pci_conf_print(), a function to dump the PCI configuration space, useful
in driver debugging.  From Zubin D. Dittia <zubin@clouseau.arl.wustl.edu>,
PR #4249.
1998-04-14 21:24:50 +00:00
sakamoto 837124b35c add bebox 1997-10-14 07:15:45 +00:00
thorpej 8eb7170ff8 Back out last change. (Partially my fault, for not reviewing it close
enough.)
1997-10-06 21:01:23 +00:00
lonhyn a9ad6cae19 pci_mapreg_info() has been changed to take arguments like pci_mapreg_map() 1997-10-03 18:45:39 +00:00
mycroft aae78d29c3 Don't export pci_*_find() any more. 1997-08-30 06:48:24 +00:00
jtk c0f08c42a8 use "locators.h" defines for indices for cf_loc[] and default values 1997-07-17 01:01:06 +00:00
thorpej 11e78a6b0d Pull thorpej-bus-dma branch into mainline. 1997-06-06 23:43:45 +00:00
cgd 78b378b2bc create pci_mapreg_info() which simply gets mapping register information.
It's used by pci_mapreg_map() and can be used directly by drivers
with special needs (e.g. those being attached as console devices).
1997-04-13 22:05:10 +00:00
cgd 36949596f0 rename pci_map_register to pci_mapreg_map. The latter name is more
descriptive, and allows for a sane name for a function which just digs
the info out of the mapping register but doesn't do the mapping.
1997-04-13 20:14:20 +00:00
cgd 2eae910210 implement pci_map_register(), which gets information about a device's
mapping register, maps it, and returns all of the relevant information.
deprecate use of pci_{io,mem}_find(), but leave them around (for a while)
for backward compatibility with third-party drivers.
1997-04-13 19:46:01 +00:00