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

Classes

struct  VirtioNetCfg
 
struct  _ethernet_
 

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 ETHERNET_TYPE_IPV4   0x0800
 
#define ETHERNET_TYPE_ARP   0x0806
 
#define ETHERNET_TYPE_WAKE_ON_LAN   0x0842
 
#define ETHERNET_TYPE_AVTP   0x22F0
 
#define ETHERNET_TYPE_IETF_TRILL_PROTOCOL   0x22F3
 
#define ETHERNET_TYPE_STREAM_RESV_PROTOCOL   0x22EA
 
#define ETHERNET_TYPE_IPV6   0x86DD
 
#define VIRTIO_NET_HDR_GSO_NODE   0
 

Typedefs

typedef struct _ethernet_ Ethernet
 

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 AuVirtioTransmit (void *packet, uint16_t len)
 
AU_EXTERN AU_EXPORT size_t AuVirtioWrite (AuVFSNode *node, AuVFSNode *file, uint64_t *buffer, uint32_t len)
 
AU_EXTERN AU_EXPORT int VirtioNetIOCtl (AuVFSNode *file, int code, void *arg)
 VirtioNetIOCtl – io control codes.
 
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
 
virtio_net_hdr_trx_hdrs
 
volatile uint8_tnotifyBase
 
uint32_t notifyOffMultiplier
 
VirtioCommonCfg_cfg
 
AuVFSNodenic
 
AuNetworkDevicendev
 

Macro Definition Documentation

◆ ETHERNET_TYPE_ARP

#define ETHERNET_TYPE_ARP   0x0806

◆ ETHERNET_TYPE_AVTP

#define ETHERNET_TYPE_AVTP   0x22F0

◆ ETHERNET_TYPE_IETF_TRILL_PROTOCOL

#define ETHERNET_TYPE_IETF_TRILL_PROTOCOL   0x22F3

◆ ETHERNET_TYPE_IPV4

#define ETHERNET_TYPE_IPV4   0x0800

◆ ETHERNET_TYPE_IPV6

#define ETHERNET_TYPE_IPV6   0x86DD

◆ ETHERNET_TYPE_STREAM_RESV_PROTOCOL

#define ETHERNET_TYPE_STREAM_RESV_PROTOCOL   0x22EA

◆ ETHERNET_TYPE_WAKE_ON_LAN

#define ETHERNET_TYPE_WAKE_ON_LAN   0x0842

◆ 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_NET_HDR_GSO_NODE

#define VIRTIO_NET_HDR_GSO_NODE   0

◆ 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

Typedef Documentation

◆ Ethernet

typedef struct _ethernet_ Ethernet

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

◆ AuVirtioTransmit()

void AuVirtioTransmit ( void *  packet,
uint16_t  len 
)

◆ AuVirtioWrite()

AU_EXTERN AU_EXPORT size_t AuVirtioWrite ( AuVFSNode node,
AuVFSNode file,
uint64_t buffer,
uint32_t  len 
)

◆ VirtioNetIOCtl()

AU_EXTERN AU_EXPORT int VirtioNetIOCtl ( AuVFSNode file,
int  code,
void *  arg 
)

VirtioNetIOCtl – io control codes.

Variable Documentation

◆ _cfg

◆ ndev

◆ nic

AuVFSNode* nic

◆ notifyBase

volatile uint8_t* notifyBase

◆ notifyOffMultiplier

uint32_t notifyOffMultiplier

◆ rx_hdrs

virtio_net_hdr_t* rx_hdrs

◆ rxqueue

struct VirtioQueue* rxqueue

◆ txqueue

struct VirtioQueue* txqueue