#define ERR_VIRTIO_TXQ_DISABLED 6
-static int virtio_free(struct vm_device * dev)
-{
-
- return 0;
-}
+
static int virtio_init_state(struct virtio_net_state * virtio)
{
flags = v3_lock_irqsave(virtio->rx_lock);
- virtio->net_ops->start_rx(virtio->backend_data);
- //disable_cb(&virtio->rx_vq);
+ if(virtio->net_ops->start_rx != NULL){
+ virtio->net_ops->start_rx(virtio->backend_data);
+ }
+ //disable_cb(&virtio->rx_vq);
v3_unlock_irqrestore(virtio->rx_lock, flags);
return ret_val;
}
+static int virtio_free(struct virtio_dev_state * virtio) {
+ struct virtio_net_state * backend = NULL;
+ struct virtio_net_state * tmp = NULL;
+
+
+ list_for_each_entry_safe(backend, tmp, &(virtio->dev_list), dev_link) {
+
+ // unregister from PCI
+
+ list_del(&(backend->dev_link));
+ V3_Free(backend);
+ }
+
+ V3_Free(virtio);
+ return 0;
+}
+
static struct v3_device_ops dev_ops = {
- .free = virtio_free,
+ .free = (int (*)(void *))virtio_free,
};
virtio_init_state(net_state);
+
+ /* Add backend to list of devices */
+ list_add(&(net_state->dev_link), &(virtio->dev_list));
+
return 0;
}