Commit f08adc00 authored by Cornelia Huck's avatar Cornelia Huck Committed by Heiko Carstens

[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: default avatarCornelia Huck <cornelia.huck@de.ibm.com>
Signed-off-by: default avatarMartin Schwidefsky <schwidefsky@de.ibm.com>
Signed-off-by: default avatarHeiko Carstens <heiko.carstens@de.ibm.com>
parent 99611f87
...@@ -850,19 +850,16 @@ int sch_is_pseudo_sch(struct subchannel *sch) ...@@ -850,19 +850,16 @@ int sch_is_pseudo_sch(struct subchannel *sch)
return sch == to_css(sch->dev.parent)->pseudo_subchannel; return sch == to_css(sch->dev.parent)->pseudo_subchannel;
} }
/* static int css_bus_match(struct device *dev, struct device_driver *drv)
* find a driver for a subchannel. They identify by the subchannel
* type with the exception that the console subchannel driver has its own
* subchannel type although the device is an i/o subchannel
*/
static int
css_bus_match (struct device *dev, struct device_driver *drv)
{ {
struct subchannel *sch = to_subchannel(dev); struct subchannel *sch = to_subchannel(dev);
struct css_driver *driver = to_cssdriver(drv); struct css_driver *driver = to_cssdriver(drv);
struct css_device_id *id;
if (sch->st == driver->subchannel_type) for (id = driver->subchannel_type; id->match_flags; id++) {
return 1; if (sch->st == id->type)
return 1;
}
return 0; return 0;
} }
......
...@@ -75,7 +75,7 @@ struct chp_link; ...@@ -75,7 +75,7 @@ struct chp_link;
*/ */
struct css_driver { struct css_driver {
struct module *owner; struct module *owner;
unsigned int subchannel_type; struct css_device_id *subchannel_type;
struct device_driver drv; struct device_driver drv;
void (*irq)(struct subchannel *); void (*irq)(struct subchannel *);
int (*chp_event)(struct subchannel *, struct chp_link *, int); int (*chp_event)(struct subchannel *, struct chp_link *, int);
......
...@@ -131,9 +131,15 @@ static int io_subchannel_sch_event(struct subchannel *, int); ...@@ -131,9 +131,15 @@ static int io_subchannel_sch_event(struct subchannel *, int);
static int io_subchannel_chp_event(struct subchannel *, struct chp_link *, static int io_subchannel_chp_event(struct subchannel *, struct chp_link *,
int); int);
static struct css_device_id io_subchannel_ids[] = {
{ .match_flags = 0x1, .type = SUBCHANNEL_TYPE_IO, },
{ /* end of list */ },
};
MODULE_DEVICE_TABLE(css, io_subchannel_ids);
static struct css_driver io_subchannel_driver = { static struct css_driver io_subchannel_driver = {
.owner = THIS_MODULE, .owner = THIS_MODULE,
.subchannel_type = SUBCHANNEL_TYPE_IO, .subchannel_type = io_subchannel_ids,
.name = "io_subchannel", .name = "io_subchannel",
.irq = io_subchannel_irq, .irq = io_subchannel_irq,
.sch_event = io_subchannel_sch_event, .sch_event = io_subchannel_sch_event,
......
...@@ -161,8 +161,8 @@ struct ap_device_id { ...@@ -161,8 +161,8 @@ struct ap_device_id {
/* s390 css bus devices (subchannels) */ /* s390 css bus devices (subchannels) */
struct css_device_id { struct css_device_id {
__u8 match_flags;
__u8 type; /* subchannel type */ __u8 type; /* subchannel type */
__u8 pad1;
__u16 pad2; __u16 pad2;
__u32 pad3; __u32 pad3;
kernel_ulong_t driver_data; kernel_ulong_t driver_data;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment