XenevaOS
Loading...
Searching...
No Matches
Classes | Macros | Typedefs | Enumerations | Functions | Variables
main.cpp File Reference
#include <aurora.h>
#include <Drivers/uart.h>
#include <aucon.h>
#include <stdint.h>
#include <pcie.h>
#include <Hal/AA64/aa64lowlevel.h>
#include <Mm/vmmngr.h>
#include <audrv.h>
#include <Drivers/virtio.h>
#include <Mm/pmmngr.h>
#include <Hal/AA64/gic.h>
#include <string.h>
#include <_null.h>
#include <Sound/sound.h>
#include <Mm/kmalloc.h>
Include dependency graph for main.cpp:

Classes

struct  virtio_snd_config
 
struct  virtio_snd_hdr
 
struct  virtio_snd_info
 
struct  _virtio_snd_query_info_
 
struct  virtio_snd_event
 
struct  virtio_snd_jack_info
 
struct  virtio_snd_pcm_hdr
 
struct  virtio_snd_pcm_info
 
struct  virtio_snd_pcm_set_params
 
struct  _snd_xfer_
 
struct  virtio_snd_pcm_status
 

Macros

#define VIRTIO_F_VERSION_1   (1ull << 32)
 
#define VIRTIO_PCI_CAP_ID   0x09
 
#define VIRTIO_PCI_CAP_COMMON_CFG   1
 
#define VIRTIO_PCI_CAP_DEVICE_CFG   4
 
#define VIRTQ_DESC_F_NEXT   1
 
#define VIRTQ_DESC_F_WRITE   2
 
#define VIRTIO_PCM_BUFFER_MAXSZ   0x1000
 

Typedefs

typedef struct _virtio_snd_query_info_ virtio_snd_query_info
 
typedef struct _snd_xfer_ virtio_snd_pcm_xfer
 

Enumerations

enum  {
  VIRTIO_SND_R_JACK_INFO = 1 , VIRTIO_SND_R_JACK_REMAP , VIRTIO_SND_R_PCM_INFO = 0x0100 , VIRTIO_SND_R_PCM_SET_PARAMS ,
  VIRTIO_SND_R_PCM_PREPARE , VIRTIO_SND_R_PCM_RELEASE , VIRTIO_SND_R_PCM_START , VIRTIO_SND_R_PCM_STOP ,
  VIRTIO_SND_R_CHMAP_INFO = 0x0200 , VIRTIO_SND_R_PCM_XFER = 0x1000 , VIRTIO_SND_R_CTL_INFO = 0x0300 , VIRTIO_SND_R_CTL_ENUM_ITEMS ,
  VIRTIO_SND_R_CTL_READ , VIRTIO_SND_R_CTL_WRITE , VIRTIO_SND_R_CTL_TLV_READ , VIRTIO_SND_R_CTL_TLV_WRITE ,
  VIRTIO_SND_R_CTL_TLV_COMMAND , VIRTIO_SND_EVT_JACK_CONNECTED = 0x1000 , VIRTIO_SND_EVT_JACK_DISCONNECTED , VIRTIO_SND_EVT_PCM_PERIOD_ELAPSED = 0x1100 ,
  VIRTIO_SND_EVT_PCM_XRUN , VIRTIO_SND_EVT_CTL_NOTIFY = 0x1200 , VIRTIO_SND_S_OK = 0x8000 , VIRTIO_SND_S_BAD_MSG ,
  VIRTIO_SND_S_NOT_SUPP , VIRTIO_SND_S_IO_ERR
}
 
enum  {
  VIRTIO_SND_PCM_F_SHMEM_HOST = 0 , VIRTIO_SND_PCM_F_SHMEM_GUEST , VIRTIO_SND_PCM_F_MSG_POLLING , VIRTIO_SND_PCM_F_EVT_SHMEM_PERIODS ,
  VIRTIO_SND_PCM_F_EVT_XRUNS
}
 
enum  {
  VIRTIO_SND_PCM_FMT_IMA_ADPCM = 0 , VIRTIO_SND_PCM_FMT_MU_LAW , VIRTIO_SND_PCM_FMT_A_LAW , VIRTIO_SND_PCM_FMT_S8 ,
  VIRTIO_SND_PCM_FMT_U8 , VIRTIO_SND_PCM_FMT_S16 , VIRTIO_SND_PCM_FMT_U16 , VIRTIO_SND_PCM_FMT_S18_3 ,
  VIRTIO_SND_PCM_FMT_U18_3 , VIRTIO_SND_PCM_FMT_S20_3 , VIRTIO_SND_PCM_FMT_U20_3 , VIRTIO_SND_PCM_FMT_S24_3 ,
  VIRTIO_SND_PCM_FMT_U24_3 , VIRTIO_SND_PCM_FMT_S20 , VIRTIO_SND_PCM_FMT_U20 , VIRTIO_SND_PCM_FMT_S24 ,
  VIRTIO_SND_PCM_FMT_U24 , VIRTIO_SND_PCM_FMT_S32 , VIRTIO_SND_PCM_FMT_U32 , VIRTIO_SND_PCM_FMT_FLOAT ,
  VIRTIO_SND_PCM_FMT_FLOAT64 , VIRTIO_SND_PCM_FMT_DSD_U8 , VIRTIO_SND_PCM_FMT_DSD_U16 , VIRTIO_SND_PCM_FMT_DSD_U32 ,
  VIRTIO_SND_PCM_FMT_IEC958_SUBFRAME
}
 
enum  {
  VIRTIO_SND_PCM_RATE_5512 = 0 , VIRTIO_SND_PCM_RATE_8000 , VIRTIO_SND_PCM_RATE_11025 , VIRTIO_SND_PCM_RATE_16000 ,
  VIRTIO_SND_PCM_RATE_22050 , VIRTIO_SND_PCM_RATE_32000 , VIRTIO_SND_PCM_RATE_44100 , VIRTIO_SND_PCM_RATE_48000 ,
  VIRTIO_SND_PCM_RATE_64000 , VIRTIO_SND_PCM_RATE_88200 , VIRTIO_SND_PCM_RATE_96000 , VIRTIO_SND_PCM_RATE_176400 ,
  VIRTIO_SND_PCM_RATE_192000 , VIRTIO_SND_PCM_RATE_384000
}
 

Functions

AU_EXTERN AU_EXPORT int AuDriverUnload ()
 
void snd_notify_queue (VirtioCommonCfg *cfg, uint16_t queueIdx)
 snd_notify_queue – notify host that new command is present
 
virtio_snd_pcm_infosnd_query_pcm_info (VirtioCommonCfg *cfg)
 snd_query_pcm_info – query pcm information like number of jacks, chmaps, etc
 
void virtio_snd_interrupt (int spi_id)
 virtio_snd_interrupt – virtio-snd interrupt handler
 
int virtio_snd_write (uint8_t *buffer, size_t len)
 virtio_snd_write – sound write pcm data to card
 
int virtio_snd_read (uint8_t *buffer, size_t len)
 virtio_snd_read – read pcm data from sound
 
int virtio_snd_output_stop ()
 virtio_snd_stop – stop output stream
 
int virtio_snd_output_start ()
 virtio_snd_output_start – start output stream
 
int virtio_snd_set_vol (uint8_t vol)
 virtio_snd_set_vol – set volume of output stream
 
AU_EXTERN AU_EXPORT int AuDriverMain (AuDriver *drv)
 

Variables

volatile uint8_tnotifyBase
 

Macro Definition Documentation

◆ VIRTIO_F_VERSION_1

#define VIRTIO_F_VERSION_1   (1ull << 32)

BSD 2-Clause License

Copyright (c) 2022-2026, Manas Kamal Choudhury All rights reserved.

Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:

  1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
  2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

◆ 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

◆ VIRTIO_PCM_BUFFER_MAXSZ

#define VIRTIO_PCM_BUFFER_MAXSZ   0x1000

◆ VIRTQ_DESC_F_NEXT

#define VIRTQ_DESC_F_NEXT   1

◆ VIRTQ_DESC_F_WRITE

#define VIRTQ_DESC_F_WRITE   2

Typedef Documentation

◆ virtio_snd_pcm_xfer

◆ virtio_snd_query_info

Enumeration Type Documentation

◆ anonymous enum

anonymous enum
Enumerator
VIRTIO_SND_R_JACK_INFO 
VIRTIO_SND_R_JACK_REMAP 
VIRTIO_SND_R_PCM_INFO 
VIRTIO_SND_R_PCM_SET_PARAMS 
VIRTIO_SND_R_PCM_PREPARE 
VIRTIO_SND_R_PCM_RELEASE 
VIRTIO_SND_R_PCM_START 
VIRTIO_SND_R_PCM_STOP 
VIRTIO_SND_R_CHMAP_INFO 
VIRTIO_SND_R_PCM_XFER 
VIRTIO_SND_R_CTL_INFO 
VIRTIO_SND_R_CTL_ENUM_ITEMS 
VIRTIO_SND_R_CTL_READ 
VIRTIO_SND_R_CTL_WRITE 
VIRTIO_SND_R_CTL_TLV_READ 
VIRTIO_SND_R_CTL_TLV_WRITE 
VIRTIO_SND_R_CTL_TLV_COMMAND 
VIRTIO_SND_EVT_JACK_CONNECTED 
VIRTIO_SND_EVT_JACK_DISCONNECTED 
VIRTIO_SND_EVT_PCM_PERIOD_ELAPSED 
VIRTIO_SND_EVT_PCM_XRUN 
VIRTIO_SND_EVT_CTL_NOTIFY 
VIRTIO_SND_S_OK 
VIRTIO_SND_S_BAD_MSG 
VIRTIO_SND_S_NOT_SUPP 
VIRTIO_SND_S_IO_ERR 

◆ anonymous enum

anonymous enum
Enumerator
VIRTIO_SND_PCM_F_SHMEM_HOST 
VIRTIO_SND_PCM_F_SHMEM_GUEST 
VIRTIO_SND_PCM_F_MSG_POLLING 
VIRTIO_SND_PCM_F_EVT_SHMEM_PERIODS 
VIRTIO_SND_PCM_F_EVT_XRUNS 

◆ anonymous enum

anonymous enum
Enumerator
VIRTIO_SND_PCM_FMT_IMA_ADPCM 
VIRTIO_SND_PCM_FMT_MU_LAW 
VIRTIO_SND_PCM_FMT_A_LAW 
VIRTIO_SND_PCM_FMT_S8 
VIRTIO_SND_PCM_FMT_U8 
VIRTIO_SND_PCM_FMT_S16 
VIRTIO_SND_PCM_FMT_U16 
VIRTIO_SND_PCM_FMT_S18_3 
VIRTIO_SND_PCM_FMT_U18_3 
VIRTIO_SND_PCM_FMT_S20_3 
VIRTIO_SND_PCM_FMT_U20_3 
VIRTIO_SND_PCM_FMT_S24_3 
VIRTIO_SND_PCM_FMT_U24_3 
VIRTIO_SND_PCM_FMT_S20 
VIRTIO_SND_PCM_FMT_U20 
VIRTIO_SND_PCM_FMT_S24 
VIRTIO_SND_PCM_FMT_U24 
VIRTIO_SND_PCM_FMT_S32 
VIRTIO_SND_PCM_FMT_U32 
VIRTIO_SND_PCM_FMT_FLOAT 
VIRTIO_SND_PCM_FMT_FLOAT64 
VIRTIO_SND_PCM_FMT_DSD_U8 
VIRTIO_SND_PCM_FMT_DSD_U16 
VIRTIO_SND_PCM_FMT_DSD_U32 
VIRTIO_SND_PCM_FMT_IEC958_SUBFRAME 

◆ anonymous enum

anonymous enum
Enumerator
VIRTIO_SND_PCM_RATE_5512 
VIRTIO_SND_PCM_RATE_8000 
VIRTIO_SND_PCM_RATE_11025 
VIRTIO_SND_PCM_RATE_16000 
VIRTIO_SND_PCM_RATE_22050 
VIRTIO_SND_PCM_RATE_32000 
VIRTIO_SND_PCM_RATE_44100 
VIRTIO_SND_PCM_RATE_48000 
VIRTIO_SND_PCM_RATE_64000 
VIRTIO_SND_PCM_RATE_88200 
VIRTIO_SND_PCM_RATE_96000 
VIRTIO_SND_PCM_RATE_176400 
VIRTIO_SND_PCM_RATE_192000 
VIRTIO_SND_PCM_RATE_384000 

Function Documentation

◆ AuDriverMain()

AU_EXTERN AU_EXPORT int AuDriverMain ( AuDriver drv)

change the class/subclass value

reset the device

allocate controlq

allocate eventq

allocate txq

TODO: input rxq for input

set params for the output stream

prepare the output stream too

start the output stream

no interrupt based sound playback, hardware need to be forced to send pcm through command

◆ AuDriverUnload()

AU_EXTERN AU_EXPORT int AuDriverUnload ( )

◆ snd_notify_queue()

void snd_notify_queue ( VirtioCommonCfg cfg,
uint16_t  queueIdx 
)

snd_notify_queue – notify host that new command is present

Parameters
queueIdx– queue number, zero for controlq and one for cursorq

◆ snd_query_pcm_info()

virtio_snd_pcm_info * snd_query_pcm_info ( VirtioCommonCfg cfg)

snd_query_pcm_info – query pcm information like number of jacks, chmaps, etc

Parameters
cfg– pointer to virtio common config

◆ virtio_snd_interrupt()

void virtio_snd_interrupt ( int  spi_id)

virtio_snd_interrupt – virtio-snd interrupt handler

◆ virtio_snd_output_start()

int virtio_snd_output_start ( )

virtio_snd_output_start – start output stream

◆ virtio_snd_output_stop()

int virtio_snd_output_stop ( )

virtio_snd_stop – stop output stream

◆ virtio_snd_read()

int virtio_snd_read ( uint8_t buffer,
size_t  len 
)

virtio_snd_read – read pcm data from sound

Parameters
buffer– buffer where to copy input pcm data
len– length to copy

input capability not implemented yet

◆ virtio_snd_set_vol()

int virtio_snd_set_vol ( uint8_t  vol)

virtio_snd_set_vol – set volume of output stream

Parameters
vol– volume in steps

◆ virtio_snd_write()

int virtio_snd_write ( uint8_t buffer,
size_t  len 
)

virtio_snd_write – sound write pcm data to card

Parameters
buffer– buffer containing pcm data
len– len of the pcm data

Variable Documentation

◆ notifyBase

volatile uint8_t* notifyBase

private definitions