XenevaOS
Loading...
Searching...
No Matches
Classes | Macros | Functions | Variables
virtionet.cpp File Reference
#include <pcie.h>
#include <Hal/AA64/aa64lowlevel.h>
#include <Hal/AA64/gic.h>
#include <Fs/Dev/devinput.h>
#include <Fs/vfs.h>
#include <Drivers/virtio.h>
#include <Drivers/uart.h>
#include <Mm/pmmngr.h>
#include <Mm/kmalloc.h>
#include <aucon.h>
#include <Mm/vmmngr.h>
#include <Hal/AA64/sched.h>
#include <Net/aunet.h>
#include <Net/ethernet.h>
#include <string.h>
Include dependency graph for virtionet.cpp:

Classes

struct  VirtioNetCfg
 

Macros

#define VIRTIO_F_VERSION_1   (1ull << 32)
 
#define RX_BUFFER_COUNT   8
 
#define TX_BUFFER_COUNT   8
 
#define TX_BUFFER_SIZE   2048
 
#define RX_BUFFER_SIZE   2048
 
#define VIRTIO_PCI_CAP_ID   0x09
 
#define VIRTIO_PCI_CAP_COMMON_CFG   1
 
#define VIRTIO_PCI_CAP_DEVICE_CFG   4
 
#define MAKE_IP(a, b, c, d)    ((uint32_t)(d) << 24 | (uint32_t)(c) << 16 | (uint32_t)(b) << 8 | (uint32_t)(a))
 

Functions

void AuVirtioNetHandler (int spiNum)
 AuVirtioNetHandler – interrupt handler for virtio-net-dev.
 
void AuVirtioNetNotifyQueue (struct VirtioCommonCfg *cfg, uint16_t queueIdx)
 AuVirtioNetNotifyQueue – notify queue.
 
void AuVirtioNetRxinitialize (struct VirtioCommonCfg *common)
 AuVirtioNetRxInitialize – initialize rx queue.
 
void AuVirtioNetTxinitialize (struct VirtioCommonCfg *common)
 AuVirtioNetTxInitialize – initialize tx queue.
 
void AuVirtioNetInitialize (uint64_t device)
 AuVirtioNetInitialize – initialize the virtio network device.
 
AU_EXTERN AU_EXPORT int AuDriverUnload ()
 
AU_EXTERN AU_EXPORT int AuDriverMain ()
 

Variables

struct VirtioQueuerxqueue
 
struct VirtioQueuetxqueue
 
volatile uint8_tnotifyBase
 
uint32_t notifyOffMultiplier
 

Macro Definition Documentation

◆ MAKE_IP

#define MAKE_IP (   a,
  b,
  c,
 
)     ((uint32_t)(d) << 24 | (uint32_t)(c) << 16 | (uint32_t)(b) << 8 | (uint32_t)(a))

◆ RX_BUFFER_COUNT

#define RX_BUFFER_COUNT   8

◆ RX_BUFFER_SIZE

#define RX_BUFFER_SIZE   2048

◆ TX_BUFFER_COUNT

#define TX_BUFFER_COUNT   8

◆ TX_BUFFER_SIZE

#define TX_BUFFER_SIZE   2048

◆ VIRTIO_F_VERSION_1

#define VIRTIO_F_VERSION_1   (1ull << 32)

◆ VIRTIO_PCI_CAP_COMMON_CFG

#define VIRTIO_PCI_CAP_COMMON_CFG   1

◆ VIRTIO_PCI_CAP_DEVICE_CFG

#define VIRTIO_PCI_CAP_DEVICE_CFG   4

◆ VIRTIO_PCI_CAP_ID

#define VIRTIO_PCI_CAP_ID   0x09

Function Documentation

◆ AuDriverMain()

AU_EXTERN AU_EXPORT int AuDriverMain ( )

AuDriverMain – Main entry for virtio net driver

◆ AuDriverUnload()

AU_EXTERN AU_EXPORT int AuDriverUnload ( )

◆ AuVirtioNetHandler()

void AuVirtioNetHandler ( int  spiNum)

AuVirtioNetHandler – interrupt handler for virtio-net-dev.

Parameters
spiNum– shared peripheral interrupt number passed by system

◆ AuVirtioNetInitialize()

void AuVirtioNetInitialize ( uint64_t  device)

AuVirtioNetInitialize – initialize the virtio network device.

Parameters
device– device address passed by PCIe

feature negotiation

enable RX+TX queue

◆ AuVirtioNetNotifyQueue()

void AuVirtioNetNotifyQueue ( struct VirtioCommonCfg cfg,
uint16_t  queueIdx 
)

AuVirtioNetNotifyQueue – notify queue.

Parameters
cfg– Pointer to common queue
queueIdx– queue number, zero – rx queue, one – tx queue

◆ AuVirtioNetRxinitialize()

void AuVirtioNetRxinitialize ( struct VirtioCommonCfg common)

AuVirtioNetRxInitialize – initialize rx queue.

Parameters
common– pointer to virtio common config

◆ AuVirtioNetTxinitialize()

void AuVirtioNetTxinitialize ( struct VirtioCommonCfg common)

AuVirtioNetTxInitialize – initialize tx queue.

Parameters
common– pointer to virtio common config

Variable Documentation

◆ notifyBase

volatile uint8_t* notifyBase

◆ notifyOffMultiplier

uint32_t notifyOffMultiplier

◆ rxqueue

struct VirtioQueue* rxqueue

◆ txqueue

struct VirtioQueue* txqueue