source: trunk/packages/xen-3.1/xen-3.1/linux-2.6-xen-sparse/drivers/xen/pciback/conf_space_capability.c @ 34

Last change on this file since 34 was 34, checked in by hartmans, 18 years ago

Add xen and xen-common

File size: 1.6 KB
Line 
1/*
2 * PCI Backend - Handles the virtual fields found on the capability lists
3 *               in the configuration space.
4 *
5 * Author: Ryan Wilson <hap9@epoch.ncsc.mil>
6 */
7
8#include <linux/kernel.h>
9#include <linux/pci.h>
10#include "pciback.h"
11#include "conf_space.h"
12#include "conf_space_capability.h"
13
14static LIST_HEAD(capabilities);
15
16static struct config_field caplist_header[] = {
17        {
18         .offset    = PCI_CAP_LIST_ID,
19         .size      = 2, /* encompass PCI_CAP_LIST_ID & PCI_CAP_LIST_NEXT */
20         .u.w.read  = pciback_read_config_word,
21         .u.w.write = NULL,
22        },
23        {
24         .size = 0,
25        },
26};
27
28static inline void register_capability(struct pciback_config_capability *cap)
29{
30        list_add_tail(&cap->cap_list, &capabilities);
31}
32
33int pciback_config_capability_add_fields(struct pci_dev *dev)
34{
35        int err = 0;
36        struct pciback_config_capability *cap;
37        int cap_offset;
38
39        list_for_each_entry(cap, &capabilities, cap_list) {
40                cap_offset = pci_find_capability(dev, cap->capability);
41                if (cap_offset) {
42                        dev_dbg(&dev->dev, "Found capability 0x%x at 0x%x\n",
43                                cap->capability, cap_offset);
44
45                        err = pciback_config_add_fields_offset(dev,
46                                                               caplist_header,
47                                                               cap_offset);
48                        if (err)
49                                goto out;
50                        err = pciback_config_add_fields_offset(dev,
51                                                               cap->fields,
52                                                               cap_offset);
53                        if (err)
54                                goto out;
55                }
56        }
57
58      out:
59        return err;
60}
61
62extern struct pciback_config_capability pciback_config_capability_vpd;
63extern struct pciback_config_capability pciback_config_capability_pm;
64
65int pciback_config_capability_init(void)
66{
67        register_capability(&pciback_config_capability_vpd);
68        register_capability(&pciback_config_capability_pm);
69
70        return 0;
71}
Note: See TracBrowser for help on using the repository browser.