diff options
author | Rusty Russell <rusty@rustcorp.com.au> | 2008-02-04 23:49:56 -0500 |
---|---|---|
committer | Rusty Russell <rusty@rustcorp.com.au> | 2008-02-04 07:49:57 -0500 |
commit | a586d4f6016f7139d8c26df0e6927131168d3b5b (patch) | |
tree | 1c47e1a6b6b8fb18baa42f32980f29c4ae9cbbdc /drivers/virtio | |
parent | f35d9d8aae08940b7fdd1bb8110619da2ece6b28 (diff) |
virtio: simplify config mechanism.
Previously we used a type/len pair within the config space, but this
seems overkill. We now simply define a structure which represents the
layout in the config space: the config space can now only be extended
at the end.
The main driver-visible changes:
1) We indicate what fields are present with an explicit feature bit.
2) Virtqueues are explicitly numbered, and not in the config space.
Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
Diffstat (limited to 'drivers/virtio')
-rw-r--r-- | drivers/virtio/virtio.c | 45 |
1 files changed, 0 insertions, 45 deletions
diff --git a/drivers/virtio/virtio.c b/drivers/virtio/virtio.c index 69d7ea02cd48..303cb6f90108 100644 --- a/drivers/virtio/virtio.c +++ b/drivers/virtio/virtio.c | |||
@@ -148,51 +148,6 @@ void unregister_virtio_device(struct virtio_device *dev) | |||
148 | } | 148 | } |
149 | EXPORT_SYMBOL_GPL(unregister_virtio_device); | 149 | EXPORT_SYMBOL_GPL(unregister_virtio_device); |
150 | 150 | ||
151 | int __virtio_config_val(struct virtio_device *vdev, | ||
152 | u8 type, void *val, size_t size) | ||
153 | { | ||
154 | void *token; | ||
155 | unsigned int len; | ||
156 | |||
157 | token = vdev->config->find(vdev, type, &len); | ||
158 | if (!token) | ||
159 | return -ENOENT; | ||
160 | |||
161 | if (len != size) | ||
162 | return -EIO; | ||
163 | |||
164 | vdev->config->get(vdev, token, val, size); | ||
165 | return 0; | ||
166 | } | ||
167 | EXPORT_SYMBOL_GPL(__virtio_config_val); | ||
168 | |||
169 | int virtio_use_bit(struct virtio_device *vdev, | ||
170 | void *token, unsigned int len, unsigned int bitnum) | ||
171 | { | ||
172 | unsigned long bits[16]; | ||
173 | |||
174 | /* This makes it convenient to pass-through find() results. */ | ||
175 | if (!token) | ||
176 | return 0; | ||
177 | |||
178 | /* bit not in range of this bitfield? */ | ||
179 | if (bitnum * 8 >= len / 2) | ||
180 | return 0; | ||
181 | |||
182 | /* Giant feature bitfields are silly. */ | ||
183 | BUG_ON(len > sizeof(bits)); | ||
184 | vdev->config->get(vdev, token, bits, len); | ||
185 | |||
186 | if (!test_bit(bitnum, bits)) | ||
187 | return 0; | ||
188 | |||
189 | /* Set acknowledge bit, and write it back. */ | ||
190 | set_bit(bitnum + len * 8 / 2, bits); | ||
191 | vdev->config->set(vdev, token, bits, len); | ||
192 | return 1; | ||
193 | } | ||
194 | EXPORT_SYMBOL_GPL(virtio_use_bit); | ||
195 | |||
196 | static int virtio_init(void) | 151 | static int virtio_init(void) |
197 | { | 152 | { |
198 | if (bus_register(&virtio_bus) != 0) | 153 | if (bus_register(&virtio_bus) != 0) |