diff options
author | Paul Mackerras <paulus@samba.org> | 2005-10-30 21:37:12 -0500 |
---|---|---|
committer | Paul Mackerras <paulus@samba.org> | 2005-10-30 21:37:12 -0500 |
commit | 23fd07750a789a66fe88cf173d52a18f1a387da4 (patch) | |
tree | 06fdd6df35fdb835abdaa9b754d62f6b84b97250 /drivers/pci/hotplug/shpchp_sysfs.c | |
parent | bd787d438a59266af3c9f6351644c85ef1dd21fe (diff) | |
parent | ed28f96ac1960f30f818374d65be71d2fdf811b0 (diff) |
Merge ../linux-2.6 by hand
Diffstat (limited to 'drivers/pci/hotplug/shpchp_sysfs.c')
-rw-r--r-- | drivers/pci/hotplug/shpchp_sysfs.c | 119 |
1 files changed, 36 insertions, 83 deletions
diff --git a/drivers/pci/hotplug/shpchp_sysfs.c b/drivers/pci/hotplug/shpchp_sysfs.c index c9445ebda5c7..f5cfbf2c047c 100644 --- a/drivers/pci/hotplug/shpchp_sysfs.c +++ b/drivers/pci/hotplug/shpchp_sysfs.c | |||
@@ -26,12 +26,9 @@ | |||
26 | * | 26 | * |
27 | */ | 27 | */ |
28 | 28 | ||
29 | #include <linux/config.h> | ||
30 | #include <linux/module.h> | 29 | #include <linux/module.h> |
31 | #include <linux/kernel.h> | 30 | #include <linux/kernel.h> |
32 | #include <linux/types.h> | 31 | #include <linux/types.h> |
33 | #include <linux/proc_fs.h> | ||
34 | #include <linux/workqueue.h> | ||
35 | #include <linux/pci.h> | 32 | #include <linux/pci.h> |
36 | #include "shpchp.h" | 33 | #include "shpchp.h" |
37 | 34 | ||
@@ -40,104 +37,60 @@ | |||
40 | 37 | ||
41 | static ssize_t show_ctrl (struct device *dev, struct device_attribute *attr, char *buf) | 38 | static ssize_t show_ctrl (struct device *dev, struct device_attribute *attr, char *buf) |
42 | { | 39 | { |
43 | struct pci_dev *pci_dev; | 40 | struct pci_dev *pdev; |
44 | struct controller *ctrl; | ||
45 | char * out = buf; | 41 | char * out = buf; |
46 | int index; | 42 | int index, busnr; |
47 | struct pci_resource *res; | 43 | struct resource *res; |
44 | struct pci_bus *bus; | ||
48 | 45 | ||
49 | pci_dev = container_of (dev, struct pci_dev, dev); | 46 | pdev = container_of (dev, struct pci_dev, dev); |
50 | ctrl = pci_get_drvdata(pci_dev); | 47 | bus = pdev->subordinate; |
51 | 48 | ||
52 | out += sprintf(buf, "Free resources: memory\n"); | 49 | out += sprintf(buf, "Free resources: memory\n"); |
53 | index = 11; | 50 | for (index = 0; index < PCI_BUS_NUM_RESOURCES; index++) { |
54 | res = ctrl->mem_head; | 51 | res = bus->resource[index]; |
55 | while (res && index--) { | 52 | if (res && (res->flags & IORESOURCE_MEM) && |
56 | out += sprintf(out, "start = %8.8x, length = %8.8x\n", res->base, res->length); | 53 | !(res->flags & IORESOURCE_PREFETCH)) { |
57 | res = res->next; | 54 | out += sprintf(out, "start = %8.8lx, length = %8.8lx\n", |
55 | res->start, (res->end - res->start)); | ||
56 | } | ||
58 | } | 57 | } |
59 | out += sprintf(out, "Free resources: prefetchable memory\n"); | 58 | out += sprintf(out, "Free resources: prefetchable memory\n"); |
60 | index = 11; | 59 | for (index = 0; index < PCI_BUS_NUM_RESOURCES; index++) { |
61 | res = ctrl->p_mem_head; | 60 | res = bus->resource[index]; |
62 | while (res && index--) { | 61 | if (res && (res->flags & IORESOURCE_MEM) && |
63 | out += sprintf(out, "start = %8.8x, length = %8.8x\n", res->base, res->length); | 62 | (res->flags & IORESOURCE_PREFETCH)) { |
64 | res = res->next; | 63 | out += sprintf(out, "start = %8.8lx, length = %8.8lx\n", |
64 | res->start, (res->end - res->start)); | ||
65 | } | ||
65 | } | 66 | } |
66 | out += sprintf(out, "Free resources: IO\n"); | 67 | out += sprintf(out, "Free resources: IO\n"); |
67 | index = 11; | 68 | for (index = 0; index < PCI_BUS_NUM_RESOURCES; index++) { |
68 | res = ctrl->io_head; | 69 | res = bus->resource[index]; |
69 | while (res && index--) { | 70 | if (res && (res->flags & IORESOURCE_IO)) { |
70 | out += sprintf(out, "start = %8.8x, length = %8.8x\n", res->base, res->length); | 71 | out += sprintf(out, "start = %8.8lx, length = %8.8lx\n", |
71 | res = res->next; | 72 | res->start, (res->end - res->start)); |
73 | } | ||
72 | } | 74 | } |
73 | out += sprintf(out, "Free resources: bus numbers\n"); | 75 | out += sprintf(out, "Free resources: bus numbers\n"); |
74 | index = 11; | 76 | for (busnr = bus->secondary; busnr <= bus->subordinate; busnr++) { |
75 | res = ctrl->bus_head; | 77 | if (!pci_find_bus(pci_domain_nr(bus), busnr)) |
76 | while (res && index--) { | 78 | break; |
77 | out += sprintf(out, "start = %8.8x, length = %8.8x\n", res->base, res->length); | ||
78 | res = res->next; | ||
79 | } | 79 | } |
80 | if (busnr < bus->subordinate) | ||
81 | out += sprintf(out, "start = %8.8x, length = %8.8x\n", | ||
82 | busnr, (bus->subordinate - busnr)); | ||
80 | 83 | ||
81 | return out - buf; | 84 | return out - buf; |
82 | } | 85 | } |
83 | static DEVICE_ATTR (ctrl, S_IRUGO, show_ctrl, NULL); | 86 | static DEVICE_ATTR (ctrl, S_IRUGO, show_ctrl, NULL); |
84 | 87 | ||
85 | static ssize_t show_dev (struct device *dev, struct device_attribute *attr, char *buf) | 88 | void shpchp_create_ctrl_files (struct controller *ctrl) |
86 | { | 89 | { |
87 | struct pci_dev *pci_dev; | 90 | device_create_file (&ctrl->pci_dev->dev, &dev_attr_ctrl); |
88 | struct controller *ctrl; | ||
89 | char * out = buf; | ||
90 | int index; | ||
91 | struct pci_resource *res; | ||
92 | struct pci_func *new_slot; | ||
93 | struct slot *slot; | ||
94 | |||
95 | pci_dev = container_of (dev, struct pci_dev, dev); | ||
96 | ctrl = pci_get_drvdata(pci_dev); | ||
97 | |||
98 | slot=ctrl->slot; | ||
99 | |||
100 | while (slot) { | ||
101 | new_slot = shpchp_slot_find(slot->bus, slot->device, 0); | ||
102 | if (!new_slot) | ||
103 | break; | ||
104 | out += sprintf(out, "assigned resources: memory\n"); | ||
105 | index = 11; | ||
106 | res = new_slot->mem_head; | ||
107 | while (res && index--) { | ||
108 | out += sprintf(out, "start = %8.8x, length = %8.8x\n", res->base, res->length); | ||
109 | res = res->next; | ||
110 | } | ||
111 | out += sprintf(out, "assigned resources: prefetchable memory\n"); | ||
112 | index = 11; | ||
113 | res = new_slot->p_mem_head; | ||
114 | while (res && index--) { | ||
115 | out += sprintf(out, "start = %8.8x, length = %8.8x\n", res->base, res->length); | ||
116 | res = res->next; | ||
117 | } | ||
118 | out += sprintf(out, "assigned resources: IO\n"); | ||
119 | index = 11; | ||
120 | res = new_slot->io_head; | ||
121 | while (res && index--) { | ||
122 | out += sprintf(out, "start = %8.8x, length = %8.8x\n", res->base, res->length); | ||
123 | res = res->next; | ||
124 | } | ||
125 | out += sprintf(out, "assigned resources: bus numbers\n"); | ||
126 | index = 11; | ||
127 | res = new_slot->bus_head; | ||
128 | while (res && index--) { | ||
129 | out += sprintf(out, "start = %8.8x, length = %8.8x\n", res->base, res->length); | ||
130 | res = res->next; | ||
131 | } | ||
132 | slot=slot->next; | ||
133 | } | ||
134 | |||
135 | return out - buf; | ||
136 | } | 91 | } |
137 | static DEVICE_ATTR (dev, S_IRUGO, show_dev, NULL); | ||
138 | 92 | ||
139 | void shpchp_create_ctrl_files (struct controller *ctrl) | 93 | void shpchp_remove_ctrl_files(struct controller *ctrl) |
140 | { | 94 | { |
141 | device_create_file (&ctrl->pci_dev->dev, &dev_attr_ctrl); | 95 | device_remove_file(&ctrl->pci_dev->dev, &dev_attr_ctrl); |
142 | device_create_file (&ctrl->pci_dev->dev, &dev_attr_dev); | ||
143 | } | 96 | } |