1 // SPDX-License-Identifier: GPL-2.0+
3 * Compaq Hot Plug Controller Driver
5 * Copyright (c) 1995,2001 Compaq Computer Corporation
6 * Copyright (c) 2001,2003 Greg Kroah-Hartman (greg@kroah.com)
7 * Copyright (c) 2001 IBM Corp.
11 * Send feedback to <greg@kroah.com>
15 #include <linux/module.h>
16 #include <linux/kernel.h>
17 #include <linux/types.h>
18 #include <linux/pci.h>
22 /* A few routines that create sysfs entries for the hot plug controller */
24 static ssize_t
show_ctrl(struct device
*dev
, struct device_attribute
*attr
, char *buf
)
32 pdev
= to_pci_dev(dev
);
33 bus
= pdev
->subordinate
;
35 out
+= sprintf(buf
, "Free resources: memory\n");
36 pci_bus_for_each_resource(bus
, res
, index
) {
37 if (res
&& (res
->flags
& IORESOURCE_MEM
) &&
38 !(res
->flags
& IORESOURCE_PREFETCH
)) {
39 out
+= sprintf(out
, "start = %8.8llx, length = %8.8llx\n",
40 (unsigned long long)res
->start
,
41 (unsigned long long)resource_size(res
));
44 out
+= sprintf(out
, "Free resources: prefetchable memory\n");
45 pci_bus_for_each_resource(bus
, res
, index
) {
46 if (res
&& (res
->flags
& IORESOURCE_MEM
) &&
47 (res
->flags
& IORESOURCE_PREFETCH
)) {
48 out
+= sprintf(out
, "start = %8.8llx, length = %8.8llx\n",
49 (unsigned long long)res
->start
,
50 (unsigned long long)resource_size(res
));
53 out
+= sprintf(out
, "Free resources: IO\n");
54 pci_bus_for_each_resource(bus
, res
, index
) {
55 if (res
&& (res
->flags
& IORESOURCE_IO
)) {
56 out
+= sprintf(out
, "start = %8.8llx, length = %8.8llx\n",
57 (unsigned long long)res
->start
,
58 (unsigned long long)resource_size(res
));
61 out
+= sprintf(out
, "Free resources: bus numbers\n");
62 for (busnr
= bus
->busn_res
.start
; busnr
<= bus
->busn_res
.end
; busnr
++) {
63 if (!pci_find_bus(pci_domain_nr(bus
), busnr
))
66 if (busnr
< bus
->busn_res
.end
)
67 out
+= sprintf(out
, "start = %8.8x, length = %8.8x\n",
68 busnr
, (int)(bus
->busn_res
.end
- busnr
));
72 static DEVICE_ATTR(ctrl
, S_IRUGO
, show_ctrl
, NULL
);
74 int shpchp_create_ctrl_files(struct controller
*ctrl
)
76 return device_create_file(&ctrl
->pci_dev
->dev
, &dev_attr_ctrl
);
79 void shpchp_remove_ctrl_files(struct controller
*ctrl
)
81 device_remove_file(&ctrl
->pci_dev
->dev
, &dev_attr_ctrl
);