[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>
This commit is contained in:
committed by
Heiko Carstens
parent
99611f8717
commit
f08adc008d
@@ -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;
|
|||||||
*/
|
*/
|
||||||
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);
|
|||||||
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 {
|
|||||||
|
|
||||||
/* 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;
|
||||||
|
Reference in New Issue
Block a user