xref: /openbmc/linux/drivers/pci/pci-sysfs.c (revision f7d84fa7)
1 /*
2  * drivers/pci/pci-sysfs.c
3  *
4  * (C) Copyright 2002-2004 Greg Kroah-Hartman <greg@kroah.com>
5  * (C) Copyright 2002-2004 IBM Corp.
6  * (C) Copyright 2003 Matthew Wilcox
7  * (C) Copyright 2003 Hewlett-Packard
8  * (C) Copyright 2004 Jon Smirl <jonsmirl@yahoo.com>
9  * (C) Copyright 2004 Silicon Graphics, Inc. Jesse Barnes <jbarnes@sgi.com>
10  *
11  * File attributes for PCI devices
12  *
13  * Modeled after usb's driverfs.c
14  *
15  */
16 
17 
18 #include <linux/kernel.h>
19 #include <linux/sched.h>
20 #include <linux/pci.h>
21 #include <linux/stat.h>
22 #include <linux/export.h>
23 #include <linux/topology.h>
24 #include <linux/mm.h>
25 #include <linux/fs.h>
26 #include <linux/capability.h>
27 #include <linux/security.h>
28 #include <linux/pci-aspm.h>
29 #include <linux/slab.h>
30 #include <linux/vgaarb.h>
31 #include <linux/pm_runtime.h>
32 #include <linux/of.h>
33 #include "pci.h"
34 
35 static int sysfs_initialized;	/* = 0 */
36 
37 /* show configuration fields */
38 #define pci_config_attr(field, format_string)				\
39 static ssize_t								\
40 field##_show(struct device *dev, struct device_attribute *attr, char *buf)				\
41 {									\
42 	struct pci_dev *pdev;						\
43 									\
44 	pdev = to_pci_dev(dev);						\
45 	return sprintf(buf, format_string, pdev->field);		\
46 }									\
47 static DEVICE_ATTR_RO(field)
48 
49 pci_config_attr(vendor, "0x%04x\n");
50 pci_config_attr(device, "0x%04x\n");
51 pci_config_attr(subsystem_vendor, "0x%04x\n");
52 pci_config_attr(subsystem_device, "0x%04x\n");
53 pci_config_attr(revision, "0x%02x\n");
54 pci_config_attr(class, "0x%06x\n");
55 pci_config_attr(irq, "%u\n");
56 
57 static ssize_t broken_parity_status_show(struct device *dev,
58 					 struct device_attribute *attr,
59 					 char *buf)
60 {
61 	struct pci_dev *pdev = to_pci_dev(dev);
62 	return sprintf(buf, "%u\n", pdev->broken_parity_status);
63 }
64 
65 static ssize_t broken_parity_status_store(struct device *dev,
66 					  struct device_attribute *attr,
67 					  const char *buf, size_t count)
68 {
69 	struct pci_dev *pdev = to_pci_dev(dev);
70 	unsigned long val;
71 
72 	if (kstrtoul(buf, 0, &val) < 0)
73 		return -EINVAL;
74 
75 	pdev->broken_parity_status = !!val;
76 
77 	return count;
78 }
79 static DEVICE_ATTR_RW(broken_parity_status);
80 
81 static ssize_t pci_dev_show_local_cpu(struct device *dev, bool list,
82 				      struct device_attribute *attr, char *buf)
83 {
84 	const struct cpumask *mask;
85 
86 #ifdef CONFIG_NUMA
87 	mask = (dev_to_node(dev) == -1) ? cpu_online_mask :
88 					  cpumask_of_node(dev_to_node(dev));
89 #else
90 	mask = cpumask_of_pcibus(to_pci_dev(dev)->bus);
91 #endif
92 	return cpumap_print_to_pagebuf(list, buf, mask);
93 }
94 
95 static ssize_t local_cpus_show(struct device *dev,
96 			       struct device_attribute *attr, char *buf)
97 {
98 	return pci_dev_show_local_cpu(dev, false, attr, buf);
99 }
100 static DEVICE_ATTR_RO(local_cpus);
101 
102 static ssize_t local_cpulist_show(struct device *dev,
103 				  struct device_attribute *attr, char *buf)
104 {
105 	return pci_dev_show_local_cpu(dev, true, attr, buf);
106 }
107 static DEVICE_ATTR_RO(local_cpulist);
108 
109 /*
110  * PCI Bus Class Devices
111  */
112 static ssize_t cpuaffinity_show(struct device *dev,
113 				struct device_attribute *attr, char *buf)
114 {
115 	const struct cpumask *cpumask = cpumask_of_pcibus(to_pci_bus(dev));
116 
117 	return cpumap_print_to_pagebuf(false, buf, cpumask);
118 }
119 static DEVICE_ATTR_RO(cpuaffinity);
120 
121 static ssize_t cpulistaffinity_show(struct device *dev,
122 				    struct device_attribute *attr, char *buf)
123 {
124 	const struct cpumask *cpumask = cpumask_of_pcibus(to_pci_bus(dev));
125 
126 	return cpumap_print_to_pagebuf(true, buf, cpumask);
127 }
128 static DEVICE_ATTR_RO(cpulistaffinity);
129 
130 /* show resources */
131 static ssize_t resource_show(struct device *dev, struct device_attribute *attr,
132 			     char *buf)
133 {
134 	struct pci_dev *pci_dev = to_pci_dev(dev);
135 	char *str = buf;
136 	int i;
137 	int max;
138 	resource_size_t start, end;
139 
140 	if (pci_dev->subordinate)
141 		max = DEVICE_COUNT_RESOURCE;
142 	else
143 		max = PCI_BRIDGE_RESOURCES;
144 
145 	for (i = 0; i < max; i++) {
146 		struct resource *res =  &pci_dev->resource[i];
147 		pci_resource_to_user(pci_dev, i, res, &start, &end);
148 		str += sprintf(str, "0x%016llx 0x%016llx 0x%016llx\n",
149 			       (unsigned long long)start,
150 			       (unsigned long long)end,
151 			       (unsigned long long)res->flags);
152 	}
153 	return (str - buf);
154 }
155 static DEVICE_ATTR_RO(resource);
156 
157 static ssize_t modalias_show(struct device *dev, struct device_attribute *attr,
158 			     char *buf)
159 {
160 	struct pci_dev *pci_dev = to_pci_dev(dev);
161 
162 	return sprintf(buf, "pci:v%08Xd%08Xsv%08Xsd%08Xbc%02Xsc%02Xi%02X\n",
163 		       pci_dev->vendor, pci_dev->device,
164 		       pci_dev->subsystem_vendor, pci_dev->subsystem_device,
165 		       (u8)(pci_dev->class >> 16), (u8)(pci_dev->class >> 8),
166 		       (u8)(pci_dev->class));
167 }
168 static DEVICE_ATTR_RO(modalias);
169 
170 static ssize_t enable_store(struct device *dev, struct device_attribute *attr,
171 			     const char *buf, size_t count)
172 {
173 	struct pci_dev *pdev = to_pci_dev(dev);
174 	unsigned long val;
175 	ssize_t result = kstrtoul(buf, 0, &val);
176 
177 	if (result < 0)
178 		return result;
179 
180 	/* this can crash the machine when done on the "wrong" device */
181 	if (!capable(CAP_SYS_ADMIN))
182 		return -EPERM;
183 
184 	if (!val) {
185 		if (pci_is_enabled(pdev))
186 			pci_disable_device(pdev);
187 		else
188 			result = -EIO;
189 	} else
190 		result = pci_enable_device(pdev);
191 
192 	return result < 0 ? result : count;
193 }
194 
195 static ssize_t enable_show(struct device *dev, struct device_attribute *attr,
196 			    char *buf)
197 {
198 	struct pci_dev *pdev;
199 
200 	pdev = to_pci_dev(dev);
201 	return sprintf(buf, "%u\n", atomic_read(&pdev->enable_cnt));
202 }
203 static DEVICE_ATTR_RW(enable);
204 
205 #ifdef CONFIG_NUMA
206 static ssize_t numa_node_store(struct device *dev,
207 			       struct device_attribute *attr, const char *buf,
208 			       size_t count)
209 {
210 	struct pci_dev *pdev = to_pci_dev(dev);
211 	int node, ret;
212 
213 	if (!capable(CAP_SYS_ADMIN))
214 		return -EPERM;
215 
216 	ret = kstrtoint(buf, 0, &node);
217 	if (ret)
218 		return ret;
219 
220 	if ((node < 0 && node != NUMA_NO_NODE) || node >= MAX_NUMNODES)
221 		return -EINVAL;
222 
223 	if (node != NUMA_NO_NODE && !node_online(node))
224 		return -EINVAL;
225 
226 	add_taint(TAINT_FIRMWARE_WORKAROUND, LOCKDEP_STILL_OK);
227 	dev_alert(&pdev->dev, FW_BUG "Overriding NUMA node to %d.  Contact your vendor for updates.",
228 		  node);
229 
230 	dev->numa_node = node;
231 	return count;
232 }
233 
234 static ssize_t numa_node_show(struct device *dev, struct device_attribute *attr,
235 			      char *buf)
236 {
237 	return sprintf(buf, "%d\n", dev->numa_node);
238 }
239 static DEVICE_ATTR_RW(numa_node);
240 #endif
241 
242 static ssize_t dma_mask_bits_show(struct device *dev,
243 				  struct device_attribute *attr, char *buf)
244 {
245 	struct pci_dev *pdev = to_pci_dev(dev);
246 
247 	return sprintf(buf, "%d\n", fls64(pdev->dma_mask));
248 }
249 static DEVICE_ATTR_RO(dma_mask_bits);
250 
251 static ssize_t consistent_dma_mask_bits_show(struct device *dev,
252 					     struct device_attribute *attr,
253 					     char *buf)
254 {
255 	return sprintf(buf, "%d\n", fls64(dev->coherent_dma_mask));
256 }
257 static DEVICE_ATTR_RO(consistent_dma_mask_bits);
258 
259 static ssize_t msi_bus_show(struct device *dev, struct device_attribute *attr,
260 			    char *buf)
261 {
262 	struct pci_dev *pdev = to_pci_dev(dev);
263 	struct pci_bus *subordinate = pdev->subordinate;
264 
265 	return sprintf(buf, "%u\n", subordinate ?
266 		       !(subordinate->bus_flags & PCI_BUS_FLAGS_NO_MSI)
267 			   : !pdev->no_msi);
268 }
269 
270 static ssize_t msi_bus_store(struct device *dev, struct device_attribute *attr,
271 			     const char *buf, size_t count)
272 {
273 	struct pci_dev *pdev = to_pci_dev(dev);
274 	struct pci_bus *subordinate = pdev->subordinate;
275 	unsigned long val;
276 
277 	if (kstrtoul(buf, 0, &val) < 0)
278 		return -EINVAL;
279 
280 	if (!capable(CAP_SYS_ADMIN))
281 		return -EPERM;
282 
283 	/*
284 	 * "no_msi" and "bus_flags" only affect what happens when a driver
285 	 * requests MSI or MSI-X.  They don't affect any drivers that have
286 	 * already requested MSI or MSI-X.
287 	 */
288 	if (!subordinate) {
289 		pdev->no_msi = !val;
290 		dev_info(&pdev->dev, "MSI/MSI-X %s for future drivers\n",
291 			 val ? "allowed" : "disallowed");
292 		return count;
293 	}
294 
295 	if (val)
296 		subordinate->bus_flags &= ~PCI_BUS_FLAGS_NO_MSI;
297 	else
298 		subordinate->bus_flags |= PCI_BUS_FLAGS_NO_MSI;
299 
300 	dev_info(&subordinate->dev, "MSI/MSI-X %s for future drivers of devices on this bus\n",
301 		 val ? "allowed" : "disallowed");
302 	return count;
303 }
304 static DEVICE_ATTR_RW(msi_bus);
305 
306 static ssize_t bus_rescan_store(struct bus_type *bus, const char *buf,
307 				size_t count)
308 {
309 	unsigned long val;
310 	struct pci_bus *b = NULL;
311 
312 	if (kstrtoul(buf, 0, &val) < 0)
313 		return -EINVAL;
314 
315 	if (val) {
316 		pci_lock_rescan_remove();
317 		while ((b = pci_find_next_bus(b)) != NULL)
318 			pci_rescan_bus(b);
319 		pci_unlock_rescan_remove();
320 	}
321 	return count;
322 }
323 static BUS_ATTR(rescan, (S_IWUSR|S_IWGRP), NULL, bus_rescan_store);
324 
325 static struct attribute *pci_bus_attrs[] = {
326 	&bus_attr_rescan.attr,
327 	NULL,
328 };
329 
330 static const struct attribute_group pci_bus_group = {
331 	.attrs = pci_bus_attrs,
332 };
333 
334 const struct attribute_group *pci_bus_groups[] = {
335 	&pci_bus_group,
336 	NULL,
337 };
338 
339 static ssize_t dev_rescan_store(struct device *dev,
340 				struct device_attribute *attr, const char *buf,
341 				size_t count)
342 {
343 	unsigned long val;
344 	struct pci_dev *pdev = to_pci_dev(dev);
345 
346 	if (kstrtoul(buf, 0, &val) < 0)
347 		return -EINVAL;
348 
349 	if (val) {
350 		pci_lock_rescan_remove();
351 		pci_rescan_bus(pdev->bus);
352 		pci_unlock_rescan_remove();
353 	}
354 	return count;
355 }
356 static struct device_attribute dev_rescan_attr = __ATTR(rescan,
357 							(S_IWUSR|S_IWGRP),
358 							NULL, dev_rescan_store);
359 
360 static ssize_t remove_store(struct device *dev, struct device_attribute *attr,
361 			    const char *buf, size_t count)
362 {
363 	unsigned long val;
364 
365 	if (kstrtoul(buf, 0, &val) < 0)
366 		return -EINVAL;
367 
368 	if (val && device_remove_file_self(dev, attr))
369 		pci_stop_and_remove_bus_device_locked(to_pci_dev(dev));
370 	return count;
371 }
372 static struct device_attribute dev_remove_attr = __ATTR(remove,
373 							(S_IWUSR|S_IWGRP),
374 							NULL, remove_store);
375 
376 static ssize_t dev_bus_rescan_store(struct device *dev,
377 				    struct device_attribute *attr,
378 				    const char *buf, size_t count)
379 {
380 	unsigned long val;
381 	struct pci_bus *bus = to_pci_bus(dev);
382 
383 	if (kstrtoul(buf, 0, &val) < 0)
384 		return -EINVAL;
385 
386 	if (val) {
387 		pci_lock_rescan_remove();
388 		if (!pci_is_root_bus(bus) && list_empty(&bus->devices))
389 			pci_rescan_bus_bridge_resize(bus->self);
390 		else
391 			pci_rescan_bus(bus);
392 		pci_unlock_rescan_remove();
393 	}
394 	return count;
395 }
396 static DEVICE_ATTR(rescan, (S_IWUSR|S_IWGRP), NULL, dev_bus_rescan_store);
397 
398 #if defined(CONFIG_PM) && defined(CONFIG_ACPI)
399 static ssize_t d3cold_allowed_store(struct device *dev,
400 				    struct device_attribute *attr,
401 				    const char *buf, size_t count)
402 {
403 	struct pci_dev *pdev = to_pci_dev(dev);
404 	unsigned long val;
405 
406 	if (kstrtoul(buf, 0, &val) < 0)
407 		return -EINVAL;
408 
409 	pdev->d3cold_allowed = !!val;
410 	if (pdev->d3cold_allowed)
411 		pci_d3cold_enable(pdev);
412 	else
413 		pci_d3cold_disable(pdev);
414 
415 	pm_runtime_resume(dev);
416 
417 	return count;
418 }
419 
420 static ssize_t d3cold_allowed_show(struct device *dev,
421 				   struct device_attribute *attr, char *buf)
422 {
423 	struct pci_dev *pdev = to_pci_dev(dev);
424 	return sprintf(buf, "%u\n", pdev->d3cold_allowed);
425 }
426 static DEVICE_ATTR_RW(d3cold_allowed);
427 #endif
428 
429 #ifdef CONFIG_OF
430 static ssize_t devspec_show(struct device *dev,
431 			    struct device_attribute *attr, char *buf)
432 {
433 	struct pci_dev *pdev = to_pci_dev(dev);
434 	struct device_node *np = pci_device_to_OF_node(pdev);
435 
436 	if (np == NULL || np->full_name == NULL)
437 		return 0;
438 	return sprintf(buf, "%s", np->full_name);
439 }
440 static DEVICE_ATTR_RO(devspec);
441 #endif
442 
443 #ifdef CONFIG_PCI_IOV
444 static ssize_t sriov_totalvfs_show(struct device *dev,
445 				   struct device_attribute *attr,
446 				   char *buf)
447 {
448 	struct pci_dev *pdev = to_pci_dev(dev);
449 
450 	return sprintf(buf, "%u\n", pci_sriov_get_totalvfs(pdev));
451 }
452 
453 
454 static ssize_t sriov_numvfs_show(struct device *dev,
455 				 struct device_attribute *attr,
456 				 char *buf)
457 {
458 	struct pci_dev *pdev = to_pci_dev(dev);
459 
460 	return sprintf(buf, "%u\n", pdev->sriov->num_VFs);
461 }
462 
463 /*
464  * num_vfs > 0; number of VFs to enable
465  * num_vfs = 0; disable all VFs
466  *
467  * Note: SRIOV spec doesn't allow partial VF
468  *       disable, so it's all or none.
469  */
470 static ssize_t sriov_numvfs_store(struct device *dev,
471 				  struct device_attribute *attr,
472 				  const char *buf, size_t count)
473 {
474 	struct pci_dev *pdev = to_pci_dev(dev);
475 	struct pci_sriov *iov = pdev->sriov;
476 	int ret;
477 	u16 num_vfs;
478 
479 	ret = kstrtou16(buf, 0, &num_vfs);
480 	if (ret < 0)
481 		return ret;
482 
483 	if (num_vfs > pci_sriov_get_totalvfs(pdev))
484 		return -ERANGE;
485 
486 	mutex_lock(&iov->dev->sriov->lock);
487 
488 	if (num_vfs == pdev->sriov->num_VFs)
489 		goto exit;
490 
491 	/* is PF driver loaded w/callback */
492 	if (!pdev->driver || !pdev->driver->sriov_configure) {
493 		dev_info(&pdev->dev, "Driver doesn't support SRIOV configuration via sysfs\n");
494 		ret = -ENOENT;
495 		goto exit;
496 	}
497 
498 	if (num_vfs == 0) {
499 		/* disable VFs */
500 		ret = pdev->driver->sriov_configure(pdev, 0);
501 		goto exit;
502 	}
503 
504 	/* enable VFs */
505 	if (pdev->sriov->num_VFs) {
506 		dev_warn(&pdev->dev, "%d VFs already enabled. Disable before enabling %d VFs\n",
507 			 pdev->sriov->num_VFs, num_vfs);
508 		ret = -EBUSY;
509 		goto exit;
510 	}
511 
512 	ret = pdev->driver->sriov_configure(pdev, num_vfs);
513 	if (ret < 0)
514 		goto exit;
515 
516 	if (ret != num_vfs)
517 		dev_warn(&pdev->dev, "%d VFs requested; only %d enabled\n",
518 			 num_vfs, ret);
519 
520 exit:
521 	mutex_unlock(&iov->dev->sriov->lock);
522 
523 	if (ret < 0)
524 		return ret;
525 
526 	return count;
527 }
528 
529 static ssize_t sriov_drivers_autoprobe_show(struct device *dev,
530 					    struct device_attribute *attr,
531 					    char *buf)
532 {
533 	struct pci_dev *pdev = to_pci_dev(dev);
534 
535 	return sprintf(buf, "%u\n", pdev->sriov->drivers_autoprobe);
536 }
537 
538 static ssize_t sriov_drivers_autoprobe_store(struct device *dev,
539 					     struct device_attribute *attr,
540 					     const char *buf, size_t count)
541 {
542 	struct pci_dev *pdev = to_pci_dev(dev);
543 	bool drivers_autoprobe;
544 
545 	if (kstrtobool(buf, &drivers_autoprobe) < 0)
546 		return -EINVAL;
547 
548 	pdev->sriov->drivers_autoprobe = drivers_autoprobe;
549 
550 	return count;
551 }
552 
553 static struct device_attribute sriov_totalvfs_attr = __ATTR_RO(sriov_totalvfs);
554 static struct device_attribute sriov_numvfs_attr =
555 		__ATTR(sriov_numvfs, (S_IRUGO|S_IWUSR|S_IWGRP),
556 		       sriov_numvfs_show, sriov_numvfs_store);
557 static struct device_attribute sriov_drivers_autoprobe_attr =
558 		__ATTR(sriov_drivers_autoprobe, (S_IRUGO|S_IWUSR|S_IWGRP),
559 		       sriov_drivers_autoprobe_show, sriov_drivers_autoprobe_store);
560 #endif /* CONFIG_PCI_IOV */
561 
562 static ssize_t driver_override_store(struct device *dev,
563 				     struct device_attribute *attr,
564 				     const char *buf, size_t count)
565 {
566 	struct pci_dev *pdev = to_pci_dev(dev);
567 	char *driver_override, *old = pdev->driver_override, *cp;
568 
569 	/* We need to keep extra room for a newline */
570 	if (count >= (PAGE_SIZE - 1))
571 		return -EINVAL;
572 
573 	driver_override = kstrndup(buf, count, GFP_KERNEL);
574 	if (!driver_override)
575 		return -ENOMEM;
576 
577 	cp = strchr(driver_override, '\n');
578 	if (cp)
579 		*cp = '\0';
580 
581 	if (strlen(driver_override)) {
582 		pdev->driver_override = driver_override;
583 	} else {
584 		kfree(driver_override);
585 		pdev->driver_override = NULL;
586 	}
587 
588 	kfree(old);
589 
590 	return count;
591 }
592 
593 static ssize_t driver_override_show(struct device *dev,
594 				    struct device_attribute *attr, char *buf)
595 {
596 	struct pci_dev *pdev = to_pci_dev(dev);
597 
598 	return snprintf(buf, PAGE_SIZE, "%s\n", pdev->driver_override);
599 }
600 static DEVICE_ATTR_RW(driver_override);
601 
602 static struct attribute *pci_dev_attrs[] = {
603 	&dev_attr_resource.attr,
604 	&dev_attr_vendor.attr,
605 	&dev_attr_device.attr,
606 	&dev_attr_subsystem_vendor.attr,
607 	&dev_attr_subsystem_device.attr,
608 	&dev_attr_revision.attr,
609 	&dev_attr_class.attr,
610 	&dev_attr_irq.attr,
611 	&dev_attr_local_cpus.attr,
612 	&dev_attr_local_cpulist.attr,
613 	&dev_attr_modalias.attr,
614 #ifdef CONFIG_NUMA
615 	&dev_attr_numa_node.attr,
616 #endif
617 	&dev_attr_dma_mask_bits.attr,
618 	&dev_attr_consistent_dma_mask_bits.attr,
619 	&dev_attr_enable.attr,
620 	&dev_attr_broken_parity_status.attr,
621 	&dev_attr_msi_bus.attr,
622 #if defined(CONFIG_PM) && defined(CONFIG_ACPI)
623 	&dev_attr_d3cold_allowed.attr,
624 #endif
625 #ifdef CONFIG_OF
626 	&dev_attr_devspec.attr,
627 #endif
628 	&dev_attr_driver_override.attr,
629 	NULL,
630 };
631 
632 static const struct attribute_group pci_dev_group = {
633 	.attrs = pci_dev_attrs,
634 };
635 
636 const struct attribute_group *pci_dev_groups[] = {
637 	&pci_dev_group,
638 	NULL,
639 };
640 
641 static struct attribute *pcibus_attrs[] = {
642 	&dev_attr_rescan.attr,
643 	&dev_attr_cpuaffinity.attr,
644 	&dev_attr_cpulistaffinity.attr,
645 	NULL,
646 };
647 
648 static const struct attribute_group pcibus_group = {
649 	.attrs = pcibus_attrs,
650 };
651 
652 const struct attribute_group *pcibus_groups[] = {
653 	&pcibus_group,
654 	NULL,
655 };
656 
657 static ssize_t boot_vga_show(struct device *dev, struct device_attribute *attr,
658 			     char *buf)
659 {
660 	struct pci_dev *pdev = to_pci_dev(dev);
661 	struct pci_dev *vga_dev = vga_default_device();
662 
663 	if (vga_dev)
664 		return sprintf(buf, "%u\n", (pdev == vga_dev));
665 
666 	return sprintf(buf, "%u\n",
667 		!!(pdev->resource[PCI_ROM_RESOURCE].flags &
668 		   IORESOURCE_ROM_SHADOW));
669 }
670 static struct device_attribute vga_attr = __ATTR_RO(boot_vga);
671 
672 static ssize_t pci_read_config(struct file *filp, struct kobject *kobj,
673 			       struct bin_attribute *bin_attr, char *buf,
674 			       loff_t off, size_t count)
675 {
676 	struct pci_dev *dev = to_pci_dev(kobj_to_dev(kobj));
677 	unsigned int size = 64;
678 	loff_t init_off = off;
679 	u8 *data = (u8 *) buf;
680 
681 	/* Several chips lock up trying to read undefined config space */
682 	if (file_ns_capable(filp, &init_user_ns, CAP_SYS_ADMIN))
683 		size = dev->cfg_size;
684 	else if (dev->hdr_type == PCI_HEADER_TYPE_CARDBUS)
685 		size = 128;
686 
687 	if (off > size)
688 		return 0;
689 	if (off + count > size) {
690 		size -= off;
691 		count = size;
692 	} else {
693 		size = count;
694 	}
695 
696 	pci_config_pm_runtime_get(dev);
697 
698 	if ((off & 1) && size) {
699 		u8 val;
700 		pci_user_read_config_byte(dev, off, &val);
701 		data[off - init_off] = val;
702 		off++;
703 		size--;
704 	}
705 
706 	if ((off & 3) && size > 2) {
707 		u16 val;
708 		pci_user_read_config_word(dev, off, &val);
709 		data[off - init_off] = val & 0xff;
710 		data[off - init_off + 1] = (val >> 8) & 0xff;
711 		off += 2;
712 		size -= 2;
713 	}
714 
715 	while (size > 3) {
716 		u32 val;
717 		pci_user_read_config_dword(dev, off, &val);
718 		data[off - init_off] = val & 0xff;
719 		data[off - init_off + 1] = (val >> 8) & 0xff;
720 		data[off - init_off + 2] = (val >> 16) & 0xff;
721 		data[off - init_off + 3] = (val >> 24) & 0xff;
722 		off += 4;
723 		size -= 4;
724 	}
725 
726 	if (size >= 2) {
727 		u16 val;
728 		pci_user_read_config_word(dev, off, &val);
729 		data[off - init_off] = val & 0xff;
730 		data[off - init_off + 1] = (val >> 8) & 0xff;
731 		off += 2;
732 		size -= 2;
733 	}
734 
735 	if (size > 0) {
736 		u8 val;
737 		pci_user_read_config_byte(dev, off, &val);
738 		data[off - init_off] = val;
739 		off++;
740 		--size;
741 	}
742 
743 	pci_config_pm_runtime_put(dev);
744 
745 	return count;
746 }
747 
748 static ssize_t pci_write_config(struct file *filp, struct kobject *kobj,
749 				struct bin_attribute *bin_attr, char *buf,
750 				loff_t off, size_t count)
751 {
752 	struct pci_dev *dev = to_pci_dev(kobj_to_dev(kobj));
753 	unsigned int size = count;
754 	loff_t init_off = off;
755 	u8 *data = (u8 *) buf;
756 
757 	if (off > dev->cfg_size)
758 		return 0;
759 	if (off + count > dev->cfg_size) {
760 		size = dev->cfg_size - off;
761 		count = size;
762 	}
763 
764 	pci_config_pm_runtime_get(dev);
765 
766 	if ((off & 1) && size) {
767 		pci_user_write_config_byte(dev, off, data[off - init_off]);
768 		off++;
769 		size--;
770 	}
771 
772 	if ((off & 3) && size > 2) {
773 		u16 val = data[off - init_off];
774 		val |= (u16) data[off - init_off + 1] << 8;
775 		pci_user_write_config_word(dev, off, val);
776 		off += 2;
777 		size -= 2;
778 	}
779 
780 	while (size > 3) {
781 		u32 val = data[off - init_off];
782 		val |= (u32) data[off - init_off + 1] << 8;
783 		val |= (u32) data[off - init_off + 2] << 16;
784 		val |= (u32) data[off - init_off + 3] << 24;
785 		pci_user_write_config_dword(dev, off, val);
786 		off += 4;
787 		size -= 4;
788 	}
789 
790 	if (size >= 2) {
791 		u16 val = data[off - init_off];
792 		val |= (u16) data[off - init_off + 1] << 8;
793 		pci_user_write_config_word(dev, off, val);
794 		off += 2;
795 		size -= 2;
796 	}
797 
798 	if (size) {
799 		pci_user_write_config_byte(dev, off, data[off - init_off]);
800 		off++;
801 		--size;
802 	}
803 
804 	pci_config_pm_runtime_put(dev);
805 
806 	return count;
807 }
808 
809 static ssize_t read_vpd_attr(struct file *filp, struct kobject *kobj,
810 			     struct bin_attribute *bin_attr, char *buf,
811 			     loff_t off, size_t count)
812 {
813 	struct pci_dev *dev = to_pci_dev(kobj_to_dev(kobj));
814 
815 	if (bin_attr->size > 0) {
816 		if (off > bin_attr->size)
817 			count = 0;
818 		else if (count > bin_attr->size - off)
819 			count = bin_attr->size - off;
820 	}
821 
822 	return pci_read_vpd(dev, off, count, buf);
823 }
824 
825 static ssize_t write_vpd_attr(struct file *filp, struct kobject *kobj,
826 			      struct bin_attribute *bin_attr, char *buf,
827 			      loff_t off, size_t count)
828 {
829 	struct pci_dev *dev = to_pci_dev(kobj_to_dev(kobj));
830 
831 	if (bin_attr->size > 0) {
832 		if (off > bin_attr->size)
833 			count = 0;
834 		else if (count > bin_attr->size - off)
835 			count = bin_attr->size - off;
836 	}
837 
838 	return pci_write_vpd(dev, off, count, buf);
839 }
840 
841 #ifdef HAVE_PCI_LEGACY
842 /**
843  * pci_read_legacy_io - read byte(s) from legacy I/O port space
844  * @filp: open sysfs file
845  * @kobj: kobject corresponding to file to read from
846  * @bin_attr: struct bin_attribute for this file
847  * @buf: buffer to store results
848  * @off: offset into legacy I/O port space
849  * @count: number of bytes to read
850  *
851  * Reads 1, 2, or 4 bytes from legacy I/O port space using an arch specific
852  * callback routine (pci_legacy_read).
853  */
854 static ssize_t pci_read_legacy_io(struct file *filp, struct kobject *kobj,
855 				  struct bin_attribute *bin_attr, char *buf,
856 				  loff_t off, size_t count)
857 {
858 	struct pci_bus *bus = to_pci_bus(kobj_to_dev(kobj));
859 
860 	/* Only support 1, 2 or 4 byte accesses */
861 	if (count != 1 && count != 2 && count != 4)
862 		return -EINVAL;
863 
864 	return pci_legacy_read(bus, off, (u32 *)buf, count);
865 }
866 
867 /**
868  * pci_write_legacy_io - write byte(s) to legacy I/O port space
869  * @filp: open sysfs file
870  * @kobj: kobject corresponding to file to read from
871  * @bin_attr: struct bin_attribute for this file
872  * @buf: buffer containing value to be written
873  * @off: offset into legacy I/O port space
874  * @count: number of bytes to write
875  *
876  * Writes 1, 2, or 4 bytes from legacy I/O port space using an arch specific
877  * callback routine (pci_legacy_write).
878  */
879 static ssize_t pci_write_legacy_io(struct file *filp, struct kobject *kobj,
880 				   struct bin_attribute *bin_attr, char *buf,
881 				   loff_t off, size_t count)
882 {
883 	struct pci_bus *bus = to_pci_bus(kobj_to_dev(kobj));
884 
885 	/* Only support 1, 2 or 4 byte accesses */
886 	if (count != 1 && count != 2 && count != 4)
887 		return -EINVAL;
888 
889 	return pci_legacy_write(bus, off, *(u32 *)buf, count);
890 }
891 
892 /**
893  * pci_mmap_legacy_mem - map legacy PCI memory into user memory space
894  * @filp: open sysfs file
895  * @kobj: kobject corresponding to device to be mapped
896  * @attr: struct bin_attribute for this file
897  * @vma: struct vm_area_struct passed to mmap
898  *
899  * Uses an arch specific callback, pci_mmap_legacy_mem_page_range, to mmap
900  * legacy memory space (first meg of bus space) into application virtual
901  * memory space.
902  */
903 static int pci_mmap_legacy_mem(struct file *filp, struct kobject *kobj,
904 			       struct bin_attribute *attr,
905 			       struct vm_area_struct *vma)
906 {
907 	struct pci_bus *bus = to_pci_bus(kobj_to_dev(kobj));
908 
909 	return pci_mmap_legacy_page_range(bus, vma, pci_mmap_mem);
910 }
911 
912 /**
913  * pci_mmap_legacy_io - map legacy PCI IO into user memory space
914  * @filp: open sysfs file
915  * @kobj: kobject corresponding to device to be mapped
916  * @attr: struct bin_attribute for this file
917  * @vma: struct vm_area_struct passed to mmap
918  *
919  * Uses an arch specific callback, pci_mmap_legacy_io_page_range, to mmap
920  * legacy IO space (first meg of bus space) into application virtual
921  * memory space. Returns -ENOSYS if the operation isn't supported
922  */
923 static int pci_mmap_legacy_io(struct file *filp, struct kobject *kobj,
924 			      struct bin_attribute *attr,
925 			      struct vm_area_struct *vma)
926 {
927 	struct pci_bus *bus = to_pci_bus(kobj_to_dev(kobj));
928 
929 	return pci_mmap_legacy_page_range(bus, vma, pci_mmap_io);
930 }
931 
932 /**
933  * pci_adjust_legacy_attr - adjustment of legacy file attributes
934  * @b: bus to create files under
935  * @mmap_type: I/O port or memory
936  *
937  * Stub implementation. Can be overridden by arch if necessary.
938  */
939 void __weak pci_adjust_legacy_attr(struct pci_bus *b,
940 				   enum pci_mmap_state mmap_type)
941 {
942 }
943 
944 /**
945  * pci_create_legacy_files - create legacy I/O port and memory files
946  * @b: bus to create files under
947  *
948  * Some platforms allow access to legacy I/O port and ISA memory space on
949  * a per-bus basis.  This routine creates the files and ties them into
950  * their associated read, write and mmap files from pci-sysfs.c
951  *
952  * On error unwind, but don't propagate the error to the caller
953  * as it is ok to set up the PCI bus without these files.
954  */
955 void pci_create_legacy_files(struct pci_bus *b)
956 {
957 	int error;
958 
959 	b->legacy_io = kzalloc(sizeof(struct bin_attribute) * 2,
960 			       GFP_ATOMIC);
961 	if (!b->legacy_io)
962 		goto kzalloc_err;
963 
964 	sysfs_bin_attr_init(b->legacy_io);
965 	b->legacy_io->attr.name = "legacy_io";
966 	b->legacy_io->size = 0xffff;
967 	b->legacy_io->attr.mode = S_IRUSR | S_IWUSR;
968 	b->legacy_io->read = pci_read_legacy_io;
969 	b->legacy_io->write = pci_write_legacy_io;
970 	b->legacy_io->mmap = pci_mmap_legacy_io;
971 	pci_adjust_legacy_attr(b, pci_mmap_io);
972 	error = device_create_bin_file(&b->dev, b->legacy_io);
973 	if (error)
974 		goto legacy_io_err;
975 
976 	/* Allocated above after the legacy_io struct */
977 	b->legacy_mem = b->legacy_io + 1;
978 	sysfs_bin_attr_init(b->legacy_mem);
979 	b->legacy_mem->attr.name = "legacy_mem";
980 	b->legacy_mem->size = 1024*1024;
981 	b->legacy_mem->attr.mode = S_IRUSR | S_IWUSR;
982 	b->legacy_mem->mmap = pci_mmap_legacy_mem;
983 	pci_adjust_legacy_attr(b, pci_mmap_mem);
984 	error = device_create_bin_file(&b->dev, b->legacy_mem);
985 	if (error)
986 		goto legacy_mem_err;
987 
988 	return;
989 
990 legacy_mem_err:
991 	device_remove_bin_file(&b->dev, b->legacy_io);
992 legacy_io_err:
993 	kfree(b->legacy_io);
994 	b->legacy_io = NULL;
995 kzalloc_err:
996 	printk(KERN_WARNING "pci: warning: could not create legacy I/O port and ISA memory resources to sysfs\n");
997 	return;
998 }
999 
1000 void pci_remove_legacy_files(struct pci_bus *b)
1001 {
1002 	if (b->legacy_io) {
1003 		device_remove_bin_file(&b->dev, b->legacy_io);
1004 		device_remove_bin_file(&b->dev, b->legacy_mem);
1005 		kfree(b->legacy_io); /* both are allocated here */
1006 	}
1007 }
1008 #endif /* HAVE_PCI_LEGACY */
1009 
1010 #if defined(HAVE_PCI_MMAP) || defined(ARCH_GENERIC_PCI_MMAP_RESOURCE)
1011 
1012 int pci_mmap_fits(struct pci_dev *pdev, int resno, struct vm_area_struct *vma,
1013 		  enum pci_mmap_api mmap_api)
1014 {
1015 	unsigned long nr, start, size;
1016 	resource_size_t pci_start = 0, pci_end;
1017 
1018 	if (pci_resource_len(pdev, resno) == 0)
1019 		return 0;
1020 	nr = vma_pages(vma);
1021 	start = vma->vm_pgoff;
1022 	size = ((pci_resource_len(pdev, resno) - 1) >> PAGE_SHIFT) + 1;
1023 	if (mmap_api == PCI_MMAP_PROCFS) {
1024 		pci_resource_to_user(pdev, resno, &pdev->resource[resno],
1025 				     &pci_start, &pci_end);
1026 		pci_start >>= PAGE_SHIFT;
1027 	}
1028 	if (start >= pci_start && start < pci_start + size &&
1029 			start + nr <= pci_start + size)
1030 		return 1;
1031 	return 0;
1032 }
1033 
1034 /**
1035  * pci_mmap_resource - map a PCI resource into user memory space
1036  * @kobj: kobject for mapping
1037  * @attr: struct bin_attribute for the file being mapped
1038  * @vma: struct vm_area_struct passed into the mmap
1039  * @write_combine: 1 for write_combine mapping
1040  *
1041  * Use the regular PCI mapping routines to map a PCI resource into userspace.
1042  */
1043 static int pci_mmap_resource(struct kobject *kobj, struct bin_attribute *attr,
1044 			     struct vm_area_struct *vma, int write_combine)
1045 {
1046 	struct pci_dev *pdev = to_pci_dev(kobj_to_dev(kobj));
1047 	int bar = (unsigned long)attr->private;
1048 	enum pci_mmap_state mmap_type;
1049 	struct resource *res = &pdev->resource[bar];
1050 
1051 	if (res->flags & IORESOURCE_MEM && iomem_is_exclusive(res->start))
1052 		return -EINVAL;
1053 
1054 	if (!pci_mmap_fits(pdev, bar, vma, PCI_MMAP_SYSFS)) {
1055 		WARN(1, "process \"%s\" tried to map 0x%08lx bytes at page 0x%08lx on %s BAR %d (start 0x%16Lx, size 0x%16Lx)\n",
1056 			current->comm, vma->vm_end-vma->vm_start, vma->vm_pgoff,
1057 			pci_name(pdev), bar,
1058 			(u64)pci_resource_start(pdev, bar),
1059 			(u64)pci_resource_len(pdev, bar));
1060 		return -EINVAL;
1061 	}
1062 	mmap_type = res->flags & IORESOURCE_MEM ? pci_mmap_mem : pci_mmap_io;
1063 
1064 	return pci_mmap_resource_range(pdev, bar, vma, mmap_type, write_combine);
1065 }
1066 
1067 static int pci_mmap_resource_uc(struct file *filp, struct kobject *kobj,
1068 				struct bin_attribute *attr,
1069 				struct vm_area_struct *vma)
1070 {
1071 	return pci_mmap_resource(kobj, attr, vma, 0);
1072 }
1073 
1074 static int pci_mmap_resource_wc(struct file *filp, struct kobject *kobj,
1075 				struct bin_attribute *attr,
1076 				struct vm_area_struct *vma)
1077 {
1078 	return pci_mmap_resource(kobj, attr, vma, 1);
1079 }
1080 
1081 static ssize_t pci_resource_io(struct file *filp, struct kobject *kobj,
1082 			       struct bin_attribute *attr, char *buf,
1083 			       loff_t off, size_t count, bool write)
1084 {
1085 	struct pci_dev *pdev = to_pci_dev(kobj_to_dev(kobj));
1086 	int bar = (unsigned long)attr->private;
1087 	struct resource *res;
1088 	unsigned long port = off;
1089 
1090 	res = &pdev->resource[bar];
1091 
1092 	port += pci_resource_start(pdev, bar);
1093 
1094 	if (port > pci_resource_end(pdev, bar))
1095 		return 0;
1096 
1097 	if (port + count - 1 > pci_resource_end(pdev, bar))
1098 		return -EINVAL;
1099 
1100 	switch (count) {
1101 	case 1:
1102 		if (write)
1103 			outb(*(u8 *)buf, port);
1104 		else
1105 			*(u8 *)buf = inb(port);
1106 		return 1;
1107 	case 2:
1108 		if (write)
1109 			outw(*(u16 *)buf, port);
1110 		else
1111 			*(u16 *)buf = inw(port);
1112 		return 2;
1113 	case 4:
1114 		if (write)
1115 			outl(*(u32 *)buf, port);
1116 		else
1117 			*(u32 *)buf = inl(port);
1118 		return 4;
1119 	}
1120 	return -EINVAL;
1121 }
1122 
1123 static ssize_t pci_read_resource_io(struct file *filp, struct kobject *kobj,
1124 				    struct bin_attribute *attr, char *buf,
1125 				    loff_t off, size_t count)
1126 {
1127 	return pci_resource_io(filp, kobj, attr, buf, off, count, false);
1128 }
1129 
1130 static ssize_t pci_write_resource_io(struct file *filp, struct kobject *kobj,
1131 				     struct bin_attribute *attr, char *buf,
1132 				     loff_t off, size_t count)
1133 {
1134 	return pci_resource_io(filp, kobj, attr, buf, off, count, true);
1135 }
1136 
1137 /**
1138  * pci_remove_resource_files - cleanup resource files
1139  * @pdev: dev to cleanup
1140  *
1141  * If we created resource files for @pdev, remove them from sysfs and
1142  * free their resources.
1143  */
1144 static void pci_remove_resource_files(struct pci_dev *pdev)
1145 {
1146 	int i;
1147 
1148 	for (i = 0; i < PCI_ROM_RESOURCE; i++) {
1149 		struct bin_attribute *res_attr;
1150 
1151 		res_attr = pdev->res_attr[i];
1152 		if (res_attr) {
1153 			sysfs_remove_bin_file(&pdev->dev.kobj, res_attr);
1154 			kfree(res_attr);
1155 		}
1156 
1157 		res_attr = pdev->res_attr_wc[i];
1158 		if (res_attr) {
1159 			sysfs_remove_bin_file(&pdev->dev.kobj, res_attr);
1160 			kfree(res_attr);
1161 		}
1162 	}
1163 }
1164 
1165 static int pci_create_attr(struct pci_dev *pdev, int num, int write_combine)
1166 {
1167 	/* allocate attribute structure, piggyback attribute name */
1168 	int name_len = write_combine ? 13 : 10;
1169 	struct bin_attribute *res_attr;
1170 	char *res_attr_name;
1171 	int retval;
1172 
1173 	res_attr = kzalloc(sizeof(*res_attr) + name_len, GFP_ATOMIC);
1174 	if (!res_attr)
1175 		return -ENOMEM;
1176 
1177 	res_attr_name = (char *)(res_attr + 1);
1178 
1179 	sysfs_bin_attr_init(res_attr);
1180 	if (write_combine) {
1181 		pdev->res_attr_wc[num] = res_attr;
1182 		sprintf(res_attr_name, "resource%d_wc", num);
1183 		res_attr->mmap = pci_mmap_resource_wc;
1184 	} else {
1185 		pdev->res_attr[num] = res_attr;
1186 		sprintf(res_attr_name, "resource%d", num);
1187 		if (pci_resource_flags(pdev, num) & IORESOURCE_IO) {
1188 			res_attr->read = pci_read_resource_io;
1189 			res_attr->write = pci_write_resource_io;
1190 			if (arch_can_pci_mmap_io())
1191 				res_attr->mmap = pci_mmap_resource_uc;
1192 		} else {
1193 			res_attr->mmap = pci_mmap_resource_uc;
1194 		}
1195 	}
1196 	res_attr->attr.name = res_attr_name;
1197 	res_attr->attr.mode = S_IRUSR | S_IWUSR;
1198 	res_attr->size = pci_resource_len(pdev, num);
1199 	res_attr->private = (void *)(unsigned long)num;
1200 	retval = sysfs_create_bin_file(&pdev->dev.kobj, res_attr);
1201 	if (retval)
1202 		kfree(res_attr);
1203 
1204 	return retval;
1205 }
1206 
1207 /**
1208  * pci_create_resource_files - create resource files in sysfs for @dev
1209  * @pdev: dev in question
1210  *
1211  * Walk the resources in @pdev creating files for each resource available.
1212  */
1213 static int pci_create_resource_files(struct pci_dev *pdev)
1214 {
1215 	int i;
1216 	int retval;
1217 
1218 	/* Expose the PCI resources from this device as files */
1219 	for (i = 0; i < PCI_ROM_RESOURCE; i++) {
1220 
1221 		/* skip empty resources */
1222 		if (!pci_resource_len(pdev, i))
1223 			continue;
1224 
1225 		retval = pci_create_attr(pdev, i, 0);
1226 		/* for prefetchable resources, create a WC mappable file */
1227 		if (!retval && arch_can_pci_mmap_wc() &&
1228 		    pdev->resource[i].flags & IORESOURCE_PREFETCH)
1229 			retval = pci_create_attr(pdev, i, 1);
1230 		if (retval) {
1231 			pci_remove_resource_files(pdev);
1232 			return retval;
1233 		}
1234 	}
1235 	return 0;
1236 }
1237 #else /* !HAVE_PCI_MMAP */
1238 int __weak pci_create_resource_files(struct pci_dev *dev) { return 0; }
1239 void __weak pci_remove_resource_files(struct pci_dev *dev) { return; }
1240 #endif /* HAVE_PCI_MMAP */
1241 
1242 /**
1243  * pci_write_rom - used to enable access to the PCI ROM display
1244  * @filp: sysfs file
1245  * @kobj: kernel object handle
1246  * @bin_attr: struct bin_attribute for this file
1247  * @buf: user input
1248  * @off: file offset
1249  * @count: number of byte in input
1250  *
1251  * writing anything except 0 enables it
1252  */
1253 static ssize_t pci_write_rom(struct file *filp, struct kobject *kobj,
1254 			     struct bin_attribute *bin_attr, char *buf,
1255 			     loff_t off, size_t count)
1256 {
1257 	struct pci_dev *pdev = to_pci_dev(kobj_to_dev(kobj));
1258 
1259 	if ((off ==  0) && (*buf == '0') && (count == 2))
1260 		pdev->rom_attr_enabled = 0;
1261 	else
1262 		pdev->rom_attr_enabled = 1;
1263 
1264 	return count;
1265 }
1266 
1267 /**
1268  * pci_read_rom - read a PCI ROM
1269  * @filp: sysfs file
1270  * @kobj: kernel object handle
1271  * @bin_attr: struct bin_attribute for this file
1272  * @buf: where to put the data we read from the ROM
1273  * @off: file offset
1274  * @count: number of bytes to read
1275  *
1276  * Put @count bytes starting at @off into @buf from the ROM in the PCI
1277  * device corresponding to @kobj.
1278  */
1279 static ssize_t pci_read_rom(struct file *filp, struct kobject *kobj,
1280 			    struct bin_attribute *bin_attr, char *buf,
1281 			    loff_t off, size_t count)
1282 {
1283 	struct pci_dev *pdev = to_pci_dev(kobj_to_dev(kobj));
1284 	void __iomem *rom;
1285 	size_t size;
1286 
1287 	if (!pdev->rom_attr_enabled)
1288 		return -EINVAL;
1289 
1290 	rom = pci_map_rom(pdev, &size);	/* size starts out as PCI window size */
1291 	if (!rom || !size)
1292 		return -EIO;
1293 
1294 	if (off >= size)
1295 		count = 0;
1296 	else {
1297 		if (off + count > size)
1298 			count = size - off;
1299 
1300 		memcpy_fromio(buf, rom + off, count);
1301 	}
1302 	pci_unmap_rom(pdev, rom);
1303 
1304 	return count;
1305 }
1306 
1307 static struct bin_attribute pci_config_attr = {
1308 	.attr =	{
1309 		.name = "config",
1310 		.mode = S_IRUGO | S_IWUSR,
1311 	},
1312 	.size = PCI_CFG_SPACE_SIZE,
1313 	.read = pci_read_config,
1314 	.write = pci_write_config,
1315 };
1316 
1317 static struct bin_attribute pcie_config_attr = {
1318 	.attr =	{
1319 		.name = "config",
1320 		.mode = S_IRUGO | S_IWUSR,
1321 	},
1322 	.size = PCI_CFG_SPACE_EXP_SIZE,
1323 	.read = pci_read_config,
1324 	.write = pci_write_config,
1325 };
1326 
1327 static ssize_t reset_store(struct device *dev, struct device_attribute *attr,
1328 			   const char *buf, size_t count)
1329 {
1330 	struct pci_dev *pdev = to_pci_dev(dev);
1331 	unsigned long val;
1332 	ssize_t result = kstrtoul(buf, 0, &val);
1333 
1334 	if (result < 0)
1335 		return result;
1336 
1337 	if (val != 1)
1338 		return -EINVAL;
1339 
1340 	result = pci_reset_function(pdev);
1341 	if (result < 0)
1342 		return result;
1343 
1344 	return count;
1345 }
1346 
1347 static struct device_attribute reset_attr = __ATTR(reset, 0200, NULL, reset_store);
1348 
1349 static int pci_create_capabilities_sysfs(struct pci_dev *dev)
1350 {
1351 	int retval;
1352 	struct bin_attribute *attr;
1353 
1354 	/* If the device has VPD, try to expose it in sysfs. */
1355 	if (dev->vpd) {
1356 		attr = kzalloc(sizeof(*attr), GFP_ATOMIC);
1357 		if (!attr)
1358 			return -ENOMEM;
1359 
1360 		sysfs_bin_attr_init(attr);
1361 		attr->size = 0;
1362 		attr->attr.name = "vpd";
1363 		attr->attr.mode = S_IRUSR | S_IWUSR;
1364 		attr->read = read_vpd_attr;
1365 		attr->write = write_vpd_attr;
1366 		retval = sysfs_create_bin_file(&dev->dev.kobj, attr);
1367 		if (retval) {
1368 			kfree(attr);
1369 			return retval;
1370 		}
1371 		dev->vpd->attr = attr;
1372 	}
1373 
1374 	/* Active State Power Management */
1375 	pcie_aspm_create_sysfs_dev_files(dev);
1376 
1377 	if (!pci_probe_reset_function(dev)) {
1378 		retval = device_create_file(&dev->dev, &reset_attr);
1379 		if (retval)
1380 			goto error;
1381 		dev->reset_fn = 1;
1382 	}
1383 	return 0;
1384 
1385 error:
1386 	pcie_aspm_remove_sysfs_dev_files(dev);
1387 	if (dev->vpd && dev->vpd->attr) {
1388 		sysfs_remove_bin_file(&dev->dev.kobj, dev->vpd->attr);
1389 		kfree(dev->vpd->attr);
1390 	}
1391 
1392 	return retval;
1393 }
1394 
1395 int __must_check pci_create_sysfs_dev_files(struct pci_dev *pdev)
1396 {
1397 	int retval;
1398 	int rom_size;
1399 	struct bin_attribute *attr;
1400 
1401 	if (!sysfs_initialized)
1402 		return -EACCES;
1403 
1404 	if (pdev->cfg_size > PCI_CFG_SPACE_SIZE)
1405 		retval = sysfs_create_bin_file(&pdev->dev.kobj, &pcie_config_attr);
1406 	else
1407 		retval = sysfs_create_bin_file(&pdev->dev.kobj, &pci_config_attr);
1408 	if (retval)
1409 		goto err;
1410 
1411 	retval = pci_create_resource_files(pdev);
1412 	if (retval)
1413 		goto err_config_file;
1414 
1415 	/* If the device has a ROM, try to expose it in sysfs. */
1416 	rom_size = pci_resource_len(pdev, PCI_ROM_RESOURCE);
1417 	if (rom_size) {
1418 		attr = kzalloc(sizeof(*attr), GFP_ATOMIC);
1419 		if (!attr) {
1420 			retval = -ENOMEM;
1421 			goto err_resource_files;
1422 		}
1423 		sysfs_bin_attr_init(attr);
1424 		attr->size = rom_size;
1425 		attr->attr.name = "rom";
1426 		attr->attr.mode = S_IRUSR | S_IWUSR;
1427 		attr->read = pci_read_rom;
1428 		attr->write = pci_write_rom;
1429 		retval = sysfs_create_bin_file(&pdev->dev.kobj, attr);
1430 		if (retval) {
1431 			kfree(attr);
1432 			goto err_resource_files;
1433 		}
1434 		pdev->rom_attr = attr;
1435 	}
1436 
1437 	/* add sysfs entries for various capabilities */
1438 	retval = pci_create_capabilities_sysfs(pdev);
1439 	if (retval)
1440 		goto err_rom_file;
1441 
1442 	pci_create_firmware_label_files(pdev);
1443 
1444 	return 0;
1445 
1446 err_rom_file:
1447 	if (pdev->rom_attr) {
1448 		sysfs_remove_bin_file(&pdev->dev.kobj, pdev->rom_attr);
1449 		kfree(pdev->rom_attr);
1450 		pdev->rom_attr = NULL;
1451 	}
1452 err_resource_files:
1453 	pci_remove_resource_files(pdev);
1454 err_config_file:
1455 	if (pdev->cfg_size > PCI_CFG_SPACE_SIZE)
1456 		sysfs_remove_bin_file(&pdev->dev.kobj, &pcie_config_attr);
1457 	else
1458 		sysfs_remove_bin_file(&pdev->dev.kobj, &pci_config_attr);
1459 err:
1460 	return retval;
1461 }
1462 
1463 static void pci_remove_capabilities_sysfs(struct pci_dev *dev)
1464 {
1465 	if (dev->vpd && dev->vpd->attr) {
1466 		sysfs_remove_bin_file(&dev->dev.kobj, dev->vpd->attr);
1467 		kfree(dev->vpd->attr);
1468 	}
1469 
1470 	pcie_aspm_remove_sysfs_dev_files(dev);
1471 	if (dev->reset_fn) {
1472 		device_remove_file(&dev->dev, &reset_attr);
1473 		dev->reset_fn = 0;
1474 	}
1475 }
1476 
1477 /**
1478  * pci_remove_sysfs_dev_files - cleanup PCI specific sysfs files
1479  * @pdev: device whose entries we should free
1480  *
1481  * Cleanup when @pdev is removed from sysfs.
1482  */
1483 void pci_remove_sysfs_dev_files(struct pci_dev *pdev)
1484 {
1485 	if (!sysfs_initialized)
1486 		return;
1487 
1488 	pci_remove_capabilities_sysfs(pdev);
1489 
1490 	if (pdev->cfg_size > PCI_CFG_SPACE_SIZE)
1491 		sysfs_remove_bin_file(&pdev->dev.kobj, &pcie_config_attr);
1492 	else
1493 		sysfs_remove_bin_file(&pdev->dev.kobj, &pci_config_attr);
1494 
1495 	pci_remove_resource_files(pdev);
1496 
1497 	if (pdev->rom_attr) {
1498 		sysfs_remove_bin_file(&pdev->dev.kobj, pdev->rom_attr);
1499 		kfree(pdev->rom_attr);
1500 		pdev->rom_attr = NULL;
1501 	}
1502 
1503 	pci_remove_firmware_label_files(pdev);
1504 }
1505 
1506 static int __init pci_sysfs_init(void)
1507 {
1508 	struct pci_dev *pdev = NULL;
1509 	int retval;
1510 
1511 	sysfs_initialized = 1;
1512 	for_each_pci_dev(pdev) {
1513 		retval = pci_create_sysfs_dev_files(pdev);
1514 		if (retval) {
1515 			pci_dev_put(pdev);
1516 			return retval;
1517 		}
1518 	}
1519 
1520 	return 0;
1521 }
1522 late_initcall(pci_sysfs_init);
1523 
1524 static struct attribute *pci_dev_dev_attrs[] = {
1525 	&vga_attr.attr,
1526 	NULL,
1527 };
1528 
1529 static umode_t pci_dev_attrs_are_visible(struct kobject *kobj,
1530 					 struct attribute *a, int n)
1531 {
1532 	struct device *dev = kobj_to_dev(kobj);
1533 	struct pci_dev *pdev = to_pci_dev(dev);
1534 
1535 	if (a == &vga_attr.attr)
1536 		if ((pdev->class >> 8) != PCI_CLASS_DISPLAY_VGA)
1537 			return 0;
1538 
1539 	return a->mode;
1540 }
1541 
1542 static struct attribute *pci_dev_hp_attrs[] = {
1543 	&dev_remove_attr.attr,
1544 	&dev_rescan_attr.attr,
1545 	NULL,
1546 };
1547 
1548 static umode_t pci_dev_hp_attrs_are_visible(struct kobject *kobj,
1549 					    struct attribute *a, int n)
1550 {
1551 	struct device *dev = kobj_to_dev(kobj);
1552 	struct pci_dev *pdev = to_pci_dev(dev);
1553 
1554 	if (pdev->is_virtfn)
1555 		return 0;
1556 
1557 	return a->mode;
1558 }
1559 
1560 static struct attribute_group pci_dev_hp_attr_group = {
1561 	.attrs = pci_dev_hp_attrs,
1562 	.is_visible = pci_dev_hp_attrs_are_visible,
1563 };
1564 
1565 #ifdef CONFIG_PCI_IOV
1566 static struct attribute *sriov_dev_attrs[] = {
1567 	&sriov_totalvfs_attr.attr,
1568 	&sriov_numvfs_attr.attr,
1569 	&sriov_drivers_autoprobe_attr.attr,
1570 	NULL,
1571 };
1572 
1573 static umode_t sriov_attrs_are_visible(struct kobject *kobj,
1574 				       struct attribute *a, int n)
1575 {
1576 	struct device *dev = kobj_to_dev(kobj);
1577 
1578 	if (!dev_is_pf(dev))
1579 		return 0;
1580 
1581 	return a->mode;
1582 }
1583 
1584 static struct attribute_group sriov_dev_attr_group = {
1585 	.attrs = sriov_dev_attrs,
1586 	.is_visible = sriov_attrs_are_visible,
1587 };
1588 #endif /* CONFIG_PCI_IOV */
1589 
1590 static struct attribute_group pci_dev_attr_group = {
1591 	.attrs = pci_dev_dev_attrs,
1592 	.is_visible = pci_dev_attrs_are_visible,
1593 };
1594 
1595 static const struct attribute_group *pci_dev_attr_groups[] = {
1596 	&pci_dev_attr_group,
1597 	&pci_dev_hp_attr_group,
1598 #ifdef CONFIG_PCI_IOV
1599 	&sriov_dev_attr_group,
1600 #endif
1601 	NULL,
1602 };
1603 
1604 struct device_type pci_dev_type = {
1605 	.groups = pci_dev_attr_groups,
1606 };
1607