device/queue: query information for all buffers

We will need to offset of each individual buffer in order to expose MMAP
buffers to userspace, so perform a `querybuf` on each buffer.
diff --git a/src/device/queue.rs b/src/device/queue.rs
index a63e24a..06aae24 100644
--- a/src/device/queue.rs
+++ b/src/device/queue.rs
@@ -210,7 +210,10 @@
             ioctl::reqbufs(&mut self.inner, type_, M::HandleType::MEMORY_TYPE, count)?;
 
         // The buffers have been allocated, now let's get their features.
-        let querybuf: ioctl::QueryBuffer = ioctl::querybuf(&self.inner, self.inner.type_, 0)?;
+        let mut buffer_features = Vec::new();
+        for i in 0..num_buffers {
+            buffer_features.push(ioctl::querybuf(&self.inner, self.inner.type_, i)?);
+        }
 
         Ok(Queue {
             inner: self.inner,
@@ -219,7 +222,7 @@
                 num_buffers,
                 num_queued_buffers: Default::default(),
                 buffers_state: Arc::new(Mutex::new(BuffersManager::new(num_buffers))),
-                buffer_features: querybuf,
+                buffer_features,
             },
         })
     }
@@ -351,7 +354,13 @@
             _ => return Err(Error::AlreadyBorrowed),
         };
 
-        let num_planes = self.state.buffer_features.planes.len();
+        let num_planes = self
+            .state
+            .buffer_features
+            .get(index)
+            .expect("Inconsistent queue state")
+            .planes
+            .len();
 
         // The buffer will remain in PreQueue state until it is queued
         // or the reference to it is lost.
@@ -381,7 +390,13 @@
             _ => panic!("Inconsistent buffer state: buffer not free"),
         }
 
-        let num_planes = self.state.buffer_features.planes.len();
+        let num_planes = self
+            .state
+            .buffer_features
+            .get(index)
+            .expect("Inconsistent buffer state")
+            .planes
+            .len();
 
         // The buffer remains will remain in PreQueue state until it is queued
         // or the reference to it is lost.
diff --git a/src/device/queue/states.rs b/src/device/queue/states.rs
index c8d50a7..9c43493 100644
--- a/src/device/queue/states.rs
+++ b/src/device/queue/states.rs
@@ -84,6 +84,6 @@
     pub(super) num_buffers: usize,
     pub(super) num_queued_buffers: Cell<usize>,
     pub(super) buffers_state: Arc<Mutex<BuffersManager<M>>>,
-    pub(super) buffer_features: ioctl::QueryBuffer,
+    pub(super) buffer_features: Vec<ioctl::QueryBuffer>,
 }
 impl<M: Memory> QueueState for BuffersAllocated<M> {}