blob: 228d4f6e7e3780e5c81cd6bdde3d80f80599a0dc [file] [log] [blame]
Eric Biederman5899fd82003-04-24 06:25:08 +00001/*
Eric Biederman5899fd82003-04-24 06:25:08 +00002 * PCI defines and function prototypes
3 * Copyright 1994, Drew Eckhardt
4 * Copyright 1997--1999 Martin Mares <mj@atrey.karlin.mff.cuni.cz>
5 *
6 * For more information, please consult the following manuals (look at
7 * http://www.pcisig.com/ for how to get them):
8 *
9 * PCI BIOS Specification
10 * PCI Local Bus Specification
11 * PCI to PCI Bridge Specification
12 * PCI System Design Guide
13 */
14
15#ifndef PCI_H
16#define PCI_H
17
Eric Biederman52685572003-05-19 19:16:21 +000018#include <device/pci_def.h>
Eric Biederman5899fd82003-04-24 06:25:08 +000019#include <device/resource.h>
20#include <device/device.h>
21#include <device/pci_ops.h>
22
23
Eric Biedermanb78c1972004-10-14 20:54:17 +000024/* Common pci operations without a standard interface */
25struct pci_operations {
26 void (*set_subsystem)(device_t dev, unsigned vendor, unsigned device);
27};
28
Eric Biederman5899fd82003-04-24 06:25:08 +000029struct pci_driver {
30 struct device_operations *ops;
31 unsigned short vendor;
32 unsigned short device;
33};
34
Eric Biedermanb78c1972004-10-14 20:54:17 +000035#define __pci_driver __attribute__ ((used,__section__(".rodata.pci_driver")))
Li-Ta Loe5266692004-03-23 21:28:05 +000036/** start of compile time generated pci driver array */
Eric Biederman5899fd82003-04-24 06:25:08 +000037extern struct pci_driver pci_drivers[];
Li-Ta Loe5266692004-03-23 21:28:05 +000038/** end of compile time generated pci driver array */
Eric Biederman5899fd82003-04-24 06:25:08 +000039extern struct pci_driver epci_drivers[];
40
41
42struct device_operations default_pci_ops_dev;
43struct device_operations default_pci_ops_bus;
Eric Biederman5899fd82003-04-24 06:25:08 +000044
Eric Biedermane9a271e32003-09-02 03:36:25 +000045void pci_dev_read_resources(device_t dev);
46void pci_bus_read_resources(device_t dev);
47void pci_dev_set_resources(device_t dev);
48void pci_dev_enable_resources(device_t dev);
49void pci_bus_enable_resources(device_t dev);
50unsigned int pci_scan_bridge(device_t bus, unsigned int max);
51unsigned int pci_scan_bus(struct bus *bus, unsigned min_devfn, unsigned max_devfn, unsigned int max);
Eric Biedermanb78c1972004-10-14 20:54:17 +000052struct resource *pci_get_resource(struct device *dev, unsigned long index);
Eric Biedermandbec2d42004-10-21 10:44:08 +000053void pci_dev_set_subsystem(device_t dev, unsigned vendor, unsigned device);
Eric Biederman5899fd82003-04-24 06:25:08 +000054
55#define PCI_IO_BRIDGE_ALIGN 4096
56#define PCI_MEM_BRIDGE_ALIGN (1024*1024)
57
Eric Biedermanb78c1972004-10-14 20:54:17 +000058static inline struct pci_operations *ops_pci(device_t dev)
59{
60 struct pci_operations *pops;
61 pops = 0;
62 if (dev && dev->ops) {
63 pops = dev->ops->ops_pci;
64 }
65 return pops;
66}
67
Eric Biederman5899fd82003-04-24 06:25:08 +000068#endif /* PCI_H */