diff options
author | Stephen Rothwell <sfr@canb.auug.org.au> | 2005-08-17 02:41:44 -0400 |
---|---|---|
committer | Paul Mackerras <paulus@samba.org> | 2005-08-29 23:23:47 -0400 |
commit | 71d276d751ff5ddba28312aecefb174b20a5b970 (patch) | |
tree | 1d2262f427fb0e117d0ad464eaf3375373e166f8 /arch/ppc64/kernel/vio.c | |
parent | b877b90f227fb9698d99fb70492d432362584082 (diff) |
[PATCH] Create vio_bus_ops
Create vio_bus_ops so that we just pass a structure to vio_bus_init
instead of three separate function pointers.
Rearrange vio.h to avoid forward references. vio.h only needs
struct device_node from prom.h so remove the include and just
declare it.
Signed-off-by: Stephen Rothwell <sfr@canb.auug.org.au>
Signed-off-by: Paul Mackerras <paulus@samba.org>
Diffstat (limited to 'arch/ppc64/kernel/vio.c')
-rw-r--r-- | arch/ppc64/kernel/vio.c | 24 |
1 files changed, 8 insertions, 16 deletions
diff --git a/arch/ppc64/kernel/vio.c b/arch/ppc64/kernel/vio.c index 3eab2290b12..93c437a0911 100644 --- a/arch/ppc64/kernel/vio.c +++ b/arch/ppc64/kernel/vio.c | |||
@@ -32,10 +32,7 @@ struct vio_dev vio_bus_device = { /* fake "parent" device */ | |||
32 | .dev.bus = &vio_bus_type, | 32 | .dev.bus = &vio_bus_type, |
33 | }; | 33 | }; |
34 | 34 | ||
35 | static int (*is_match)(const struct vio_device_id *id, | 35 | static struct vio_bus_ops vio_bus_ops; |
36 | const struct vio_dev *dev); | ||
37 | static void (*unregister_device_callback)(struct vio_dev *dev); | ||
38 | static void (*release_device_callback)(struct device *dev); | ||
39 | 36 | ||
40 | /* | 37 | /* |
41 | * Convert from struct device to struct vio_dev and pass to driver. | 38 | * Convert from struct device to struct vio_dev and pass to driver. |
@@ -115,7 +112,7 @@ static const struct vio_device_id *vio_match_device( | |||
115 | const struct vio_device_id *ids, const struct vio_dev *dev) | 112 | const struct vio_device_id *ids, const struct vio_dev *dev) |
116 | { | 113 | { |
117 | while (ids->type) { | 114 | while (ids->type) { |
118 | if (is_match(ids, dev)) | 115 | if (vio_bus_ops.match(ids, dev)) |
119 | return ids; | 116 | return ids; |
120 | ids++; | 117 | ids++; |
121 | } | 118 | } |
@@ -125,16 +122,11 @@ static const struct vio_device_id *vio_match_device( | |||
125 | /** | 122 | /** |
126 | * vio_bus_init: - Initialize the virtual IO bus | 123 | * vio_bus_init: - Initialize the virtual IO bus |
127 | */ | 124 | */ |
128 | int __init vio_bus_init(int (*match_func)(const struct vio_device_id *id, | 125 | int __init vio_bus_init(struct vio_bus_ops *ops) |
129 | const struct vio_dev *dev), | ||
130 | void (*unregister_dev)(struct vio_dev *), | ||
131 | void (*release_dev)(struct device *)) | ||
132 | { | 126 | { |
133 | int err; | 127 | int err; |
134 | 128 | ||
135 | is_match = match_func; | 129 | vio_bus_ops = *ops; |
136 | unregister_device_callback = unregister_dev; | ||
137 | release_device_callback = release_dev; | ||
138 | 130 | ||
139 | err = bus_register(&vio_bus_type); | 131 | err = bus_register(&vio_bus_type); |
140 | if (err) { | 132 | if (err) { |
@@ -159,8 +151,8 @@ int __init vio_bus_init(int (*match_func)(const struct vio_device_id *id, | |||
159 | /* vio_dev refcount hit 0 */ | 151 | /* vio_dev refcount hit 0 */ |
160 | static void __devinit vio_dev_release(struct device *dev) | 152 | static void __devinit vio_dev_release(struct device *dev) |
161 | { | 153 | { |
162 | if (release_device_callback) | 154 | if (vio_bus_ops.release_device) |
163 | release_device_callback(dev); | 155 | vio_bus_ops.release_device(dev); |
164 | kfree(to_vio_dev(dev)); | 156 | kfree(to_vio_dev(dev)); |
165 | } | 157 | } |
166 | 158 | ||
@@ -191,8 +183,8 @@ struct vio_dev * __devinit vio_register_device(struct vio_dev *viodev) | |||
191 | 183 | ||
192 | void __devinit vio_unregister_device(struct vio_dev *viodev) | 184 | void __devinit vio_unregister_device(struct vio_dev *viodev) |
193 | { | 185 | { |
194 | if (unregister_device_callback) | 186 | if (vio_bus_ops.unregister_device) |
195 | unregister_device_callback(viodev); | 187 | vio_bus_ops.unregister_device(viodev); |
196 | device_remove_file(&viodev->dev, &dev_attr_name); | 188 | device_remove_file(&viodev->dev, &dev_attr_name); |
197 | device_unregister(&viodev->dev); | 189 | device_unregister(&viodev->dev); |
198 | } | 190 | } |