virtio: switch to 64 bit features
[dpdk.git] / drivers / net / virtio / virtio_pci.h
index 47f722a..d7bc6bb 100644 (file)
@@ -163,10 +163,35 @@ struct virtqueue;
  */
 #define VIRTIO_MAX_VIRTQUEUES 8
 
+struct virtio_hw;
+
+struct virtio_pci_ops {
+       void (*read_dev_cfg)(struct virtio_hw *hw, size_t offset,
+                            void *dst, int len);
+       void (*write_dev_cfg)(struct virtio_hw *hw, size_t offset,
+                             const void *src, int len);
+       void (*reset)(struct virtio_hw *hw);
+
+       uint8_t (*get_status)(struct virtio_hw *hw);
+       void    (*set_status)(struct virtio_hw *hw, uint8_t status);
+
+       uint64_t (*get_features)(struct virtio_hw *hw);
+       void     (*set_features)(struct virtio_hw *hw, uint64_t features);
+
+       uint8_t (*get_isr)(struct virtio_hw *hw);
+
+       uint16_t (*set_config_irq)(struct virtio_hw *hw, uint16_t vec);
+
+       uint16_t (*get_queue_num)(struct virtio_hw *hw, uint16_t queue_id);
+       void (*setup_queue)(struct virtio_hw *hw, struct virtqueue *vq);
+       void (*del_queue)(struct virtio_hw *hw, struct virtqueue *vq);
+       void (*notify_queue)(struct virtio_hw *hw, struct virtqueue *vq);
+};
+
 struct virtio_hw {
        struct virtqueue *cvq;
        uint32_t    io_base;
-       uint32_t    guest_features;
+       uint64_t    guest_features;
        uint32_t    max_tx_queues;
        uint32_t    max_rx_queues;
        uint16_t    vtnet_hdr_size;
@@ -174,6 +199,7 @@ struct virtio_hw {
        uint8_t     use_msix;
        uint8_t     started;
        uint8_t     mac_addr[ETHER_ADDR_LEN];
+       const struct virtio_pci_ops *vtpci_ops;
 };
 
 /*
@@ -245,25 +271,26 @@ outl_p(unsigned int data, unsigned int port)
        outl_p((unsigned int)(value), (VIRTIO_PCI_REG_ADDR((hw), (reg))))
 
 static inline int
-vtpci_with_feature(struct virtio_hw *hw, uint32_t bit)
+vtpci_with_feature(struct virtio_hw *hw, uint64_t bit)
 {
-       return (hw->guest_features & (1u << bit)) != 0;
+       return (hw->guest_features & (1ULL << bit)) != 0;
 }
 
 /*
  * Function declaration from virtio_pci.c
  */
+int vtpci_init(struct rte_pci_device *, struct virtio_hw *);
 void vtpci_reset(struct virtio_hw *);
 
 void vtpci_reinit_complete(struct virtio_hw *);
 
 void vtpci_set_status(struct virtio_hw *, uint8_t);
 
-uint32_t vtpci_negotiate_features(struct virtio_hw *, uint32_t);
+uint64_t vtpci_negotiate_features(struct virtio_hw *, uint64_t);
 
-void vtpci_write_dev_config(struct virtio_hw *, uint64_t, void *, int);
+void vtpci_write_dev_config(struct virtio_hw *, size_t, const void *, int);
 
-void vtpci_read_dev_config(struct virtio_hw *, uint64_t, void *, int);
+void vtpci_read_dev_config(struct virtio_hw *, size_t, void *, int);
 
 uint8_t vtpci_isr(struct virtio_hw *);