diff options
author | Linus Torvalds <torvalds@ppc970.osdl.org> | 2005-04-16 18:20:36 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@ppc970.osdl.org> | 2005-04-16 18:20:36 -0400 |
commit | 1da177e4c3f41524e886b7f1b8a0c1fc7321cac2 (patch) | |
tree | 0bba044c4ce775e45a88a51686b5d9f90697ea9d /include/linux/pcieport_if.h |
Linux-2.6.12-rc2v2.6.12-rc2
Initial git repository build. I'm not bothering with the full history,
even though we have it. We can create a separate "historical" git
archive of that later if we want to, and in the meantime it's about
3.2GB when imported into git - space that would just make the early
git days unnecessarily complicated, when we don't have a lot of good
infrastructure for it.
Let it rip!
Diffstat (limited to 'include/linux/pcieport_if.h')
-rw-r--r-- | include/linux/pcieport_if.h | 74 |
1 files changed, 74 insertions, 0 deletions
diff --git a/include/linux/pcieport_if.h b/include/linux/pcieport_if.h new file mode 100644 index 000000000000..cd3eafc2c233 --- /dev/null +++ b/include/linux/pcieport_if.h | |||
@@ -0,0 +1,74 @@ | |||
1 | /* | ||
2 | * File: pcieport_if.h | ||
3 | * Purpose: PCI Express Port Bus Driver's IF Data Structure | ||
4 | * | ||
5 | * Copyright (C) 2004 Intel | ||
6 | * Copyright (C) Tom Long Nguyen (tom.l.nguyen@intel.com) | ||
7 | */ | ||
8 | |||
9 | #ifndef _PCIEPORT_IF_H_ | ||
10 | #define _PCIEPORT_IF_H_ | ||
11 | |||
12 | /* Port Type */ | ||
13 | #define PCIE_RC_PORT 4 /* Root port of RC */ | ||
14 | #define PCIE_SW_UPSTREAM_PORT 5 /* Upstream port of Switch */ | ||
15 | #define PCIE_SW_DOWNSTREAM_PORT 6 /* Downstream port of Switch */ | ||
16 | #define PCIE_ANY_PORT 7 | ||
17 | |||
18 | /* Service Type */ | ||
19 | #define PCIE_PORT_SERVICE_PME 1 /* Power Management Event */ | ||
20 | #define PCIE_PORT_SERVICE_AER 2 /* Advanced Error Reporting */ | ||
21 | #define PCIE_PORT_SERVICE_HP 4 /* Native Hotplug */ | ||
22 | #define PCIE_PORT_SERVICE_VC 8 /* Virtual Channel */ | ||
23 | |||
24 | /* Root/Upstream/Downstream Port's Interrupt Mode */ | ||
25 | #define PCIE_PORT_INTx_MODE 0 | ||
26 | #define PCIE_PORT_MSI_MODE 1 | ||
27 | #define PCIE_PORT_MSIX_MODE 2 | ||
28 | |||
29 | struct pcie_port_service_id { | ||
30 | __u32 vendor, device; /* Vendor and device ID or PCI_ANY_ID*/ | ||
31 | __u32 subvendor, subdevice; /* Subsystem ID's or PCI_ANY_ID */ | ||
32 | __u32 class, class_mask; /* (class,subclass,prog-if) triplet */ | ||
33 | __u32 port_type, service_type; /* Port Entity */ | ||
34 | kernel_ulong_t driver_data; | ||
35 | }; | ||
36 | |||
37 | struct pcie_device { | ||
38 | int irq; /* Service IRQ/MSI/MSI-X Vector */ | ||
39 | int interrupt_mode; /* [0:INTx | 1:MSI | 2:MSI-X] */ | ||
40 | struct pcie_port_service_id id; /* Service ID */ | ||
41 | struct pci_dev *port; /* Root/Upstream/Downstream Port */ | ||
42 | void *priv_data; /* Service Private Data */ | ||
43 | struct device device; /* Generic Device Interface */ | ||
44 | }; | ||
45 | #define to_pcie_device(d) container_of(d, struct pcie_device, device) | ||
46 | |||
47 | static inline void set_service_data(struct pcie_device *dev, void *data) | ||
48 | { | ||
49 | dev->priv_data = data; | ||
50 | } | ||
51 | |||
52 | static inline void* get_service_data(struct pcie_device *dev) | ||
53 | { | ||
54 | return dev->priv_data; | ||
55 | } | ||
56 | |||
57 | struct pcie_port_service_driver { | ||
58 | const char *name; | ||
59 | int (*probe) (struct pcie_device *dev, | ||
60 | const struct pcie_port_service_id *id); | ||
61 | void (*remove) (struct pcie_device *dev); | ||
62 | int (*suspend) (struct pcie_device *dev, u32 state); | ||
63 | int (*resume) (struct pcie_device *dev); | ||
64 | |||
65 | const struct pcie_port_service_id *id_table; | ||
66 | struct device_driver driver; | ||
67 | }; | ||
68 | #define to_service_driver(d) \ | ||
69 | container_of(d, struct pcie_port_service_driver, driver) | ||
70 | |||
71 | extern int pcie_port_service_register(struct pcie_port_service_driver *new); | ||
72 | extern void pcie_port_service_unregister(struct pcie_port_service_driver *new); | ||
73 | |||
74 | #endif /* _PCIEPORT_IF_H_ */ | ||