XenevaOS
Loading...
Searching...
No Matches
Classes | Macros | Typedefs | Enumerations | Functions
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_PERIOD   2048
 
#define VIRTIO_PCM_BUFFER   (VIRTIO_PCM_PERIOD * 4)
 

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_DRIVER_FLAGS (AU_DRV_FLAG_UNLOADABLE)
 
AU_EXTERN AU_EXPORT int AuDriverUnload ()
 
int virtio_snd_write (uint8_t *buffer, size_t len)
 
int virtio_snd_read (uint8_t *buffer, size_t len)
 
int virtio_snd_output_stop ()
 
int virtio_snd_output_start ()
 
int virtio_snd_set_vol (uint8_t vol)
 
AU_EXTERN AU_EXPORT int AuDriverMain (AuDriver *drv)
 

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

#define VIRTIO_PCM_BUFFER   (VIRTIO_PCM_PERIOD * 4)

◆ VIRTIO_PCM_PERIOD

#define VIRTIO_PCM_PERIOD   2048

| Low Latency | 128 frame | 3 Period | 512 (period_bytes) | 1,536 (buffer_bytes) | General | 512 frame | 4 period | 2048 (period_bytes) | 8,192 (buffer_bytes)

| Media/Battery| 2048 frame | 3 period | 8,192 (period_byte) | 24,576 (buffer_bytes)

Latency profiles |-----------------------------— | Low latency | 8ms | 1 Page | General | 43 ms | 2 page |Media/Battery| 128 ms | 6 Pages |------------------------------—

Formulas: frame_bytes = channels (2=stereo) x bytes_per_sample period_bytes = period_frames x frame_bytes byffer_bytes = period_bytes x N_periods latency = buffer_bytes / (rate x frame_bytes) = N x period_frames / rate) period_frames = rate x target_latency / N

Sample bytes value U8/S8 = 1 bytes S16 = 2 bytes S24 = 3 bytes S24 in 32_BIT Container = 4 bytes S32/FLOAT32 = 4 bytes FLOAT64 = 8 bytes

Let's choose General profile

◆ 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

◆ AU_DRIVER_FLAGS()

AU_DRIVER_FLAGS ( AU_DRV_FLAG_UNLOADABLE  )

◆ AuDriverMain()

AU_EXTERN AU_EXPORT int AuDriverMain ( AuDriver *  drv)

◆ AuDriverUnload()

AU_EXTERN AU_EXPORT int AuDriverUnload ( void  )

◆ virtio_snd_output_start()

int virtio_snd_output_start ( )

◆ virtio_snd_output_stop()

int virtio_snd_output_stop ( )

◆ virtio_snd_read()

int virtio_snd_read ( uint8_t *  buffer,
size_t  len 
)

◆ virtio_snd_set_vol()

int virtio_snd_set_vol ( uint8_t  vol)

◆ virtio_snd_write()

int virtio_snd_write ( uint8_t *  buffer,
size_t  len 
)