aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/mcb
diff options
context:
space:
mode:
authorJohannes Thumshirn <jthumshirn@suse.de>2016-05-03 03:46:23 -0400
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2016-05-03 18:07:35 -0400
commit803f1ca60d5c0107adfbce4e2d70488598b03a80 (patch)
tree763936d780406f59bef75b19d91f674a855345ba /drivers/mcb
parent18d28819809909c3f24bb72183a901c5e332a63d (diff)
mcb: export bus information via sysfs
Export information about the bus stored in the FPGA's header to userspace via sysfs, instead of hiding it in pr_debug()s from everyone. Signed-off-by: Johannes Thumshirn <jthumshirn@suse.de> Reviewed-by: Andreas Werner <andreas.werner@men.de> Tested-by: Andreas Werner <andreas.werner@men.de> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'drivers/mcb')
-rw-r--r--drivers/mcb/mcb-core.c60
-rw-r--r--drivers/mcb/mcb-internal.h1
-rw-r--r--drivers/mcb/mcb-parse.c15
3 files changed, 65 insertions, 11 deletions
diff --git a/drivers/mcb/mcb-core.c b/drivers/mcb/mcb-core.c
index 1e336cc56751..9ae4d15fc229 100644
--- a/drivers/mcb/mcb-core.c
+++ b/drivers/mcb/mcb-core.c
@@ -90,6 +90,60 @@ static void mcb_shutdown(struct device *dev)
90 mdrv->shutdown(mdev); 90 mdrv->shutdown(mdev);
91} 91}
92 92
93static ssize_t revision_show(struct device *dev, struct device_attribute *attr,
94 char *buf)
95{
96 struct mcb_bus *bus = to_mcb_bus(dev);
97
98 return scnprintf(buf, PAGE_SIZE, "%d\n", bus->revision);
99}
100static DEVICE_ATTR_RO(revision);
101
102static ssize_t model_show(struct device *dev, struct device_attribute *attr,
103 char *buf)
104{
105 struct mcb_bus *bus = to_mcb_bus(dev);
106
107 return scnprintf(buf, PAGE_SIZE, "%c\n", bus->model);
108}
109static DEVICE_ATTR_RO(model);
110
111static ssize_t minor_show(struct device *dev, struct device_attribute *attr,
112 char *buf)
113{
114 struct mcb_bus *bus = to_mcb_bus(dev);
115
116 return scnprintf(buf, PAGE_SIZE, "%d\n", bus->minor);
117}
118static DEVICE_ATTR_RO(minor);
119
120static ssize_t name_show(struct device *dev, struct device_attribute *attr,
121 char *buf)
122{
123 struct mcb_bus *bus = to_mcb_bus(dev);
124
125 return scnprintf(buf, PAGE_SIZE, "%s\n", bus->name);
126}
127static DEVICE_ATTR_RO(name);
128
129static struct attribute *mcb_bus_attrs[] = {
130 &dev_attr_revision.attr,
131 &dev_attr_model.attr,
132 &dev_attr_minor.attr,
133 &dev_attr_name.attr,
134 NULL,
135};
136
137static const struct attribute_group mcb_carrier_group = {
138 .attrs = mcb_bus_attrs,
139};
140
141static const struct attribute_group *mcb_carrier_groups[] = {
142 &mcb_carrier_group,
143 NULL,
144};
145
146
93static struct bus_type mcb_bus_type = { 147static struct bus_type mcb_bus_type = {
94 .name = "mcb", 148 .name = "mcb",
95 .match = mcb_match, 149 .match = mcb_match,
@@ -99,6 +153,11 @@ static struct bus_type mcb_bus_type = {
99 .shutdown = mcb_shutdown, 153 .shutdown = mcb_shutdown,
100}; 154};
101 155
156static struct device_type mcb_carrier_device_type = {
157 .name = "mcb-carrier",
158 .groups = mcb_carrier_groups,
159};
160
102/** 161/**
103 * __mcb_register_driver() - Register a @mcb_driver at the system 162 * __mcb_register_driver() - Register a @mcb_driver at the system
104 * @drv: The @mcb_driver 163 * @drv: The @mcb_driver
@@ -205,6 +264,7 @@ struct mcb_bus *mcb_alloc_bus(struct device *carrier)
205 device_initialize(&bus->dev); 264 device_initialize(&bus->dev);
206 bus->dev.parent = carrier; 265 bus->dev.parent = carrier;
207 bus->dev.bus = &mcb_bus_type; 266 bus->dev.bus = &mcb_bus_type;
267 bus->dev.type = &mcb_carrier_device_type;
208 268
209 dev_set_name(&bus->dev, "mcb:%d", bus_nr); 269 dev_set_name(&bus->dev, "mcb:%d", bus_nr);
210 rc = device_add(&bus->dev); 270 rc = device_add(&bus->dev);
diff --git a/drivers/mcb/mcb-internal.h b/drivers/mcb/mcb-internal.h
index fb7493dcfb79..5254e0285725 100644
--- a/drivers/mcb/mcb-internal.h
+++ b/drivers/mcb/mcb-internal.h
@@ -5,7 +5,6 @@
5 5
6#define PCI_VENDOR_ID_MEN 0x1a88 6#define PCI_VENDOR_ID_MEN 0x1a88
7#define PCI_DEVICE_ID_MEN_CHAMELEON 0x4d45 7#define PCI_DEVICE_ID_MEN_CHAMELEON 0x4d45
8#define CHAMELEON_FILENAME_LEN 12
9#define CHAMELEONV2_MAGIC 0xabce 8#define CHAMELEONV2_MAGIC 0xabce
10#define CHAM_HEADER_SIZE 0x200 9#define CHAM_HEADER_SIZE 0x200
11 10
diff --git a/drivers/mcb/mcb-parse.c b/drivers/mcb/mcb-parse.c
index 004926955263..35f385b59221 100644
--- a/drivers/mcb/mcb-parse.c
+++ b/drivers/mcb/mcb-parse.c
@@ -113,16 +113,11 @@ int chameleon_parse_cells(struct mcb_bus *bus, phys_addr_t mapbase,
113 } 113 }
114 p += hsize; 114 p += hsize;
115 115
116 pr_debug("header->revision = %d\n", header->revision); 116 bus->revision = header->revision;
117 pr_debug("header->model = 0x%x ('%c')\n", header->model, 117 bus->model = header->model;
118 header->model); 118 bus->minor = header->minor;
119 pr_debug("header->minor = %d\n", header->minor); 119 snprintf(bus->name, CHAMELEON_FILENAME_LEN + 1, "%s",
120 pr_debug("header->bus_type = 0x%x\n", header->bus_type); 120 header->filename);
121
122
123 pr_debug("header->magic = 0x%x\n", header->magic);
124 pr_debug("header->filename = \"%.*s\"\n", CHAMELEON_FILENAME_LEN,
125 header->filename);
126 121
127 for_each_chameleon_cell(dtype, p) { 122 for_each_chameleon_cell(dtype, p) {
128 switch (dtype) { 123 switch (dtype) {