aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/s390/cio
diff options
context:
space:
mode:
authorCornelia Huck <cornelia.huck@de.ibm.com>2008-07-14 03:59:03 -0400
committerHeiko Carstens <heiko.carstens@de.ibm.com>2008-07-14 04:02:12 -0400
commitf08adc008d84f6b03d377ede951e29ed169e76e2 (patch)
tree5c8c90f6b3710a4f04f23d25e735ce4108fdc553 /drivers/s390/cio
parent99611f87176b2a908d8c66ab19a5fc550a3cd13a (diff)
[S390] css: Use css_device_id for bus matching.
css_device_id exists, so use it for determining the right driver (and add a match_flags which is always 1 for valid types). Signed-off-by: Cornelia Huck <cornelia.huck@de.ibm.com> Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com> Signed-off-by: Heiko Carstens <heiko.carstens@de.ibm.com>
Diffstat (limited to 'drivers/s390/cio')
-rw-r--r--drivers/s390/cio/css.c15
-rw-r--r--drivers/s390/cio/css.h2
-rw-r--r--drivers/s390/cio/device.c8
3 files changed, 14 insertions, 11 deletions
diff --git a/drivers/s390/cio/css.c b/drivers/s390/cio/css.c
index 45ba07c0a286..4e2f2bbf4ba5 100644
--- a/drivers/s390/cio/css.c
+++ b/drivers/s390/cio/css.c
@@ -850,19 +850,16 @@ int sch_is_pseudo_sch(struct subchannel *sch)
850 return sch == to_css(sch->dev.parent)->pseudo_subchannel; 850 return sch == to_css(sch->dev.parent)->pseudo_subchannel;
851} 851}
852 852
853/* 853static int css_bus_match(struct device *dev, struct device_driver *drv)
854 * find a driver for a subchannel. They identify by the subchannel
855 * type with the exception that the console subchannel driver has its own
856 * subchannel type although the device is an i/o subchannel
857 */
858static int
859css_bus_match (struct device *dev, struct device_driver *drv)
860{ 854{
861 struct subchannel *sch = to_subchannel(dev); 855 struct subchannel *sch = to_subchannel(dev);
862 struct css_driver *driver = to_cssdriver(drv); 856 struct css_driver *driver = to_cssdriver(drv);
857 struct css_device_id *id;
863 858
864 if (sch->st == driver->subchannel_type) 859 for (id = driver->subchannel_type; id->match_flags; id++) {
865 return 1; 860 if (sch->st == id->type)
861 return 1;
862 }
866 863
867 return 0; 864 return 0;
868} 865}
diff --git a/drivers/s390/cio/css.h b/drivers/s390/cio/css.h
index 38bf9ddb8412..58020bf41ed0 100644
--- a/drivers/s390/cio/css.h
+++ b/drivers/s390/cio/css.h
@@ -75,7 +75,7 @@ struct chp_link;
75 */ 75 */
76struct css_driver { 76struct css_driver {
77 struct module *owner; 77 struct module *owner;
78 unsigned int subchannel_type; 78 struct css_device_id *subchannel_type;
79 struct device_driver drv; 79 struct device_driver drv;
80 void (*irq)(struct subchannel *); 80 void (*irq)(struct subchannel *);
81 int (*chp_event)(struct subchannel *, struct chp_link *, int); 81 int (*chp_event)(struct subchannel *, struct chp_link *, int);
diff --git a/drivers/s390/cio/device.c b/drivers/s390/cio/device.c
index 522d47afc950..c904cb84d75e 100644
--- a/drivers/s390/cio/device.c
+++ b/drivers/s390/cio/device.c
@@ -131,9 +131,15 @@ static int io_subchannel_sch_event(struct subchannel *, int);
131static int io_subchannel_chp_event(struct subchannel *, struct chp_link *, 131static int io_subchannel_chp_event(struct subchannel *, struct chp_link *,
132 int); 132 int);
133 133
134static struct css_device_id io_subchannel_ids[] = {
135 { .match_flags = 0x1, .type = SUBCHANNEL_TYPE_IO, },
136 { /* end of list */ },
137};
138MODULE_DEVICE_TABLE(css, io_subchannel_ids);
139
134static struct css_driver io_subchannel_driver = { 140static struct css_driver io_subchannel_driver = {
135 .owner = THIS_MODULE, 141 .owner = THIS_MODULE,
136 .subchannel_type = SUBCHANNEL_TYPE_IO, 142 .subchannel_type = io_subchannel_ids,
137 .name = "io_subchannel", 143 .name = "io_subchannel",
138 .irq = io_subchannel_irq, 144 .irq = io_subchannel_irq,
139 .sch_event = io_subchannel_sch_event, 145 .sch_event = io_subchannel_sch_event,