diff options
| author | Laurent Vivier | 2008-11-19 17:28:25 +0100 |
|---|---|---|
| committer | Michael Brown | 2008-11-19 20:48:30 +0100 |
| commit | 5dd51079768140bcc9545fe64e75b760eb681ea8 (patch) | |
| tree | cfc9009ce64bd90c61217a96743cbc0d7016ec57 /src/drivers | |
| parent | [x86_64] Fix assorted 64-bit compilation errors and warnings (diff) | |
| download | ipxe-5dd51079768140bcc9545fe64e75b760eb681ea8.tar.gz ipxe-5dd51079768140bcc9545fe64e75b760eb681ea8.tar.xz ipxe-5dd51079768140bcc9545fe64e75b760eb681ea8.zip | |
[virtio] Move virtio-pci.h and virtio-ring.h to include/gpxe
Signed-off-by: Laurent Vivier <Laurent.Vivier@bull.net>
Diffstat (limited to 'src/drivers')
| -rw-r--r-- | src/drivers/net/virtio-net.c | 4 | ||||
| -rw-r--r-- | src/drivers/net/virtio-pci.h | 94 | ||||
| -rw-r--r-- | src/drivers/net/virtio-ring.h | 93 |
3 files changed, 2 insertions, 189 deletions
diff --git a/src/drivers/net/virtio-net.c b/src/drivers/net/virtio-net.c index 68c84d798..fce030094 100644 --- a/src/drivers/net/virtio-net.c +++ b/src/drivers/net/virtio-net.c @@ -21,8 +21,8 @@ #include "etherboot.h" #include "nic.h" -#include "virtio-ring.h" -#include "virtio-pci.h" +#include "gpxe/virtio-ring.h" +#include "gpxe/virtio-pci.h" #include "virtio-net.h" #define BUG() do { \ diff --git a/src/drivers/net/virtio-pci.h b/src/drivers/net/virtio-pci.h deleted file mode 100644 index ba0604d52..000000000 --- a/src/drivers/net/virtio-pci.h +++ /dev/null @@ -1,94 +0,0 @@ -#ifndef _VIRTIO_PCI_H_ -# define _VIRTIO_PCI_H_ - -/* A 32-bit r/o bitmask of the features supported by the host */ -#define VIRTIO_PCI_HOST_FEATURES 0 - -/* A 32-bit r/w bitmask of features activated by the guest */ -#define VIRTIO_PCI_GUEST_FEATURES 4 - -/* A 32-bit r/w PFN for the currently selected queue */ -#define VIRTIO_PCI_QUEUE_PFN 8 - -/* A 16-bit r/o queue size for the currently selected queue */ -#define VIRTIO_PCI_QUEUE_NUM 12 - -/* A 16-bit r/w queue selector */ -#define VIRTIO_PCI_QUEUE_SEL 14 - -/* A 16-bit r/w queue notifier */ -#define VIRTIO_PCI_QUEUE_NOTIFY 16 - -/* An 8-bit device status register. */ -#define VIRTIO_PCI_STATUS 18 - -/* An 8-bit r/o interrupt status register. Reading the value will return the - * current contents of the ISR and will also clear it. This is effectively - * a read-and-acknowledge. */ -#define VIRTIO_PCI_ISR 19 - -/* The bit of the ISR which indicates a device configuration change. */ -#define VIRTIO_PCI_ISR_CONFIG 0x2 - -/* The remaining space is defined by each driver as the per-driver - * configuration space */ -#define VIRTIO_PCI_CONFIG 20 - -/* Virtio ABI version, this must match exactly */ -#define VIRTIO_PCI_ABI_VERSION 0 - -static inline u32 vp_get_features(struct nic *nic) -{ - return inl(nic->ioaddr + VIRTIO_PCI_HOST_FEATURES); -} - -static inline void vp_set_features(struct nic *nic, u32 features) -{ - outl(features, nic->ioaddr + VIRTIO_PCI_GUEST_FEATURES); -} - -static inline void vp_get(struct nic *nic, unsigned offset, - void *buf, unsigned len) -{ - u8 *ptr = buf; - unsigned i; - - for (i = 0; i < len; i++) - ptr[i] = inb(nic->ioaddr + VIRTIO_PCI_CONFIG + offset + i); -} - -static inline u8 vp_get_status(struct nic *nic) -{ - return inb(nic->ioaddr + VIRTIO_PCI_STATUS); -} - -static inline void vp_set_status(struct nic *nic, u8 status) -{ - if (status == 0) /* reset */ - return; - outb(status, nic->ioaddr + VIRTIO_PCI_STATUS); -} - - -static inline void vp_reset(struct nic *nic) -{ - outb(0, nic->ioaddr + VIRTIO_PCI_STATUS); - (void)inb(nic->ioaddr + VIRTIO_PCI_ISR); -} - -static inline void vp_notify(struct nic *nic, int queue_index) -{ - outw(queue_index, nic->ioaddr + VIRTIO_PCI_QUEUE_NOTIFY); -} - -static inline void vp_del_vq(struct nic *nic, int queue_index) -{ - /* select the queue */ - - outw(queue_index, nic->ioaddr + VIRTIO_PCI_QUEUE_SEL); - - /* deactivate the queue */ - - outl(0, nic->ioaddr + VIRTIO_PCI_QUEUE_PFN); -} -#endif /* _VIRTIO_PCI_H_ */ diff --git a/src/drivers/net/virtio-ring.h b/src/drivers/net/virtio-ring.h deleted file mode 100644 index 33060b112..000000000 --- a/src/drivers/net/virtio-ring.h +++ /dev/null @@ -1,93 +0,0 @@ -#ifndef _VIRTIO_RING_H_ -# define _VIRTIO_RING_H_ -#define PAGE_SHIFT (12) -#define PAGE_SIZE (1<<PAGE_SHIFT) -#define PAGE_MASK (PAGE_SIZE-1) - -/* Status byte for guest to report progress, and synchronize features. */ -/* We have seen device and processed generic fields (VIRTIO_CONFIG_F_VIRTIO) */ -#define VIRTIO_CONFIG_S_ACKNOWLEDGE 1 -/* We have found a driver for the device. */ -#define VIRTIO_CONFIG_S_DRIVER 2 -/* Driver has used its parts of the config, and is happy */ -#define VIRTIO_CONFIG_S_DRIVER_OK 4 -/* We've given up on this device. */ -#define VIRTIO_CONFIG_S_FAILED 0x80 - -#define MAX_QUEUE_NUM (512) - -#define VRING_DESC_F_NEXT 1 -#define VRING_DESC_F_WRITE 2 - -#define VRING_AVAIL_F_NO_INTERRUPT 1 - -#define VRING_USED_F_NO_NOTIFY 1 - -struct vring_desc -{ - u64 addr; - u32 len; - u16 flags; - u16 next; -}; - -struct vring_avail -{ - u16 flags; - u16 idx; - u16 ring[0]; -}; - -struct vring_used_elem -{ - u32 id; - u32 len; -}; - -struct vring_used -{ - u16 flags; - u16 idx; - struct vring_used_elem ring[]; -}; - -struct vring { - unsigned int num; - struct vring_desc *desc; - struct vring_avail *avail; - struct vring_used *used; -}; - -static inline void vring_init(struct vring *vr, - unsigned int num, unsigned char *queue) -{ - unsigned int i; - unsigned long pa; - - vr->num = num; - - /* physical address of desc must be page aligned */ - - pa = virt_to_phys(queue); - pa = (pa + PAGE_MASK) & ~PAGE_MASK; - vr->desc = phys_to_virt(pa); - - vr->avail = (struct vring_avail *)&vr->desc[num]; - - /* physical address of used must be page aligned */ - - pa = virt_to_phys(&vr->avail->ring[num]); - pa = (pa + PAGE_MASK) & ~PAGE_MASK; - vr->used = phys_to_virt(pa); - - for (i = 0; i < num - 1; i++) - vr->desc[i].next = i + 1; - vr->desc[i].next = 0; -} - -#define vring_size(num) \ - (((((sizeof(struct vring_desc) * num) + \ - (sizeof(struct vring_avail) + sizeof(u16) * num)) \ - + PAGE_MASK) & ~PAGE_MASK) + \ - (sizeof(struct vring_used) + sizeof(struct vring_used_elem) * num)) -#endif /* _VIRTIO_RING_H_ */ |
