Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
O
osv
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Package registry
Container Registry
Model registry
Operate
Environments
Terraform modules
Monitor
Incidents
Service Desk
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
Verlässliche Systemsoftware
projects
osv
Commits
3e0919cd
Commit
3e0919cd
authored
12 years ago
by
Guy Zana
Browse files
Options
Downloads
Patches
Plain Diff
removed virtio-vring.hh.orig from repository
parent
fb859bc8
No related branches found
No related tags found
No related merge requests found
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
drivers/virtio-vring.hh.orig
+0
-141
0 additions, 141 deletions
drivers/virtio-vring.hh.orig
with
0 additions
and
141 deletions
drivers/virtio-vring.hh.orig
deleted
100644 → 0
+
0
−
141
View file @
fb859bc8
#ifndef VIRTIO_VRING_H
#define VIRTIO_VRING_H
#include "types.hh"
#include "drivers/virtio.hh"
namespace virtio {
// Buffer descriptors in the ring
class vring_desc {
public:
enum {
// This marks a buffer as continuing via the next field.
VRING_DESC_F_NEXT=1,
// This marks a buffer as write-only (otherwise read-only).
VRING_DESC_F_WRITE=2,
// This means the buffer contains a list of buffer descriptors.
VRING_DESC_F_INDIRECT=4
};
u64 get_paddr(void);
u32 get_len(void) { return (_len); }
u16 next_idx(void) { return (_next); }
// flags
bool is_chained(void) { return ((_flags & VRING_DESC_F_NEXT) == VRING_DESC_F_NEXT); };
bool is_write(void) { return ((_flags & VRING_DESC_F_WRITE) == VRING_DESC_F_WRITE); };
bool is_indirect(void) { return ((_flags & VRING_DESC_F_INDIRECT) == VRING_DESC_F_INDIRECT); };
private:
u64 _paddr;
u32 _len;
u16 _flags;
u16 _next;
};
// Guest to host
class vring_avail {
public:
enum {
// Mark that we do not need an interrupt for consuming a descriptor
// from the ring. Unrelieable so it's simply an optimization
VRING_AVAIL_F_NO_INTERRUPT=1
};
void disable_interrupt(void) { _flags |= VRING_AVAIL_F_NO_INTERRUPT; }
void enable_interrupt(void) { _flags = 0; }
u16 _flags;
// Where we put the next descriptor
u16 _idx;
// There may be no more entries than the queue size read from device
u16 _ring[];
};
class vring_used_elem {
public:
// Index of start of used vring_desc chain. (u32 for padding reasons)
u32 _id;
// Total length of the descriptor chain which was used (written to)
u32 _len;
};
// Host to guest
class vring_used {
public:
enum {
// The Host advise the Guest: don't kick me when
// you add a buffer. It's unreliable, so it's simply an
// optimization. Guest will still kick if it's out of buffers.
VRING_USED_F_NO_NOTIFY=1
};
void disable_interrupt(void) { _flags |= VRING_USED_F_NO_NOTIFY; }
void enable_interrupt(void) { _flags = 0; }
u16 _flags;
u16 _idx;
vring_used_elem _used_elements[];
};
class vring {
public:
enum VRING_CONFIG {
/* We support indirect buffer descriptors */
VIRTIO_RING_F_INDIRECT_DESC = 28,
/* The Guest publishes the used index for which it expects an interrupt
* at the end of the avail ring. Host should ignore the avail->flags field. */
/* The Host publishes the avail index for which it expects a kick
* at the end of the used ring. Guest should ignore the used->flags field. */
VIRTIO_RING_F_EVENT_IDX = 29,
};
vring(unsigned int num);
virtual ~vring();
<<<<<<< Updated upstream
u64 get_paddr(void);
=======
// Add a buffer to the next free descriptor,
// Keep chaining until kick is called
bool add_buf(u64 addr, u32 len);
// Notify the device
void kick(void);
void * get_paddr(void);
>>>>>>> Stashed changes
static unsigned get_size(unsigned int num, unsigned long align);
// The following is used with USED_EVENT_IDX and AVAIL_EVENT_IDX
// Assuming a given event_idx value from the other size, if
// we have just incremented index from old to new_idx,
// should we trigger an event?
static int need_event(u16 event_idx, u16 new_idx, u16 old);
private:
// The physical of the physical address handed to the virtio device
void* _vring_ptr;
// Total number of descriptors in ring
unsigned int _num;
// Flat list of chained descriptors
vring_desc *_desc;
// Available for host consumption
vring_avail *_avail;
// Available for guest consumption
vring_used *_used;
// next free idx
u16 free_avail_idx;
};
}
#endif // VIRTIO_VRING_H
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment