mirror of
https://github.com/Mathewnd/Astral.git
synced 2026-10-27 20:58:22 +00:00
audio: initial hda driver and oss interface
This commit is contained in:
@@ -0,0 +1,49 @@
|
||||
#ifndef _AUDIO_H
|
||||
#define _AUDIO_H
|
||||
|
||||
#include <ringbuffer.h>
|
||||
#include <mutex.h>
|
||||
#include <stdbool.h>
|
||||
#include <kernel/poll.h>
|
||||
|
||||
typedef struct audio_stream audio_stream_t;
|
||||
|
||||
#define AUDIO_STREAM_INFO_FRAGMENT_SIZE 1
|
||||
#define AUDIO_STREAM_INFO_SPEED 2
|
||||
#define AUDIO_STREAM_INFO_CHANNELS 3
|
||||
#define AUDIO_STREAM_INFO_FORMAT 4
|
||||
#define AUDIO_STREAM_INFO_FIFO_FRAMES 5
|
||||
#define AUDIO_STREAM_INFO_PLAYED_FRAMES 6
|
||||
|
||||
#define AUDIO_FORMAT_S16_LE 0x10
|
||||
|
||||
#define AUDIO_TRIGGER_INPUT 1
|
||||
#define AUDIO_TRIGGER_OUTPUT 2
|
||||
|
||||
typedef struct {
|
||||
void (*start)(audio_stream_t *);
|
||||
void (*stop)(audio_stream_t *);
|
||||
void (*wait_for_playback)(audio_stream_t *);
|
||||
void (*reset)(audio_stream_t *);
|
||||
void (*get_info)(audio_stream_t *, int what, void *buf);
|
||||
} audio_stream_ops_t;
|
||||
|
||||
typedef struct audio_stream {
|
||||
mutex_t mutex;
|
||||
ringbuffer_t ringbuffer;
|
||||
pollheader_t pollheader;
|
||||
audio_stream_ops_t *ops;
|
||||
bool opened;
|
||||
bool playing;
|
||||
int trigger;
|
||||
size_t underruns;
|
||||
size_t bytes_submitted;
|
||||
size_t bytes_written;
|
||||
size_t bytes_played;
|
||||
} audio_stream_t;
|
||||
|
||||
bool audio_take_stream_data(audio_stream_t *stream, void *buffer, size_t size);
|
||||
int audio_initialize_stream(audio_stream_t *stream, audio_stream_ops_t *stream_ops);
|
||||
int audio_register_stream(audio_stream_t *stream);
|
||||
|
||||
#endif
|
||||
@@ -12,16 +12,17 @@
|
||||
#define DEV_MAJOR_ZERO 3
|
||||
#define DEV_MAJOR_TTY 4
|
||||
#define DEV_MAJOR_FB 5
|
||||
#define DEV_MAJOR_KEYBOARD 6
|
||||
#define DEV_MAJOR_KEYBOARD 6 // unused, kept as to not reuse numbers
|
||||
#define DEV_MAJOR_BLOCK 7
|
||||
#define DEV_MAJOR_E9 8
|
||||
#define DEV_MAJOR_URANDOM 9
|
||||
#define DEV_MAJOR_NET 10
|
||||
#define DEV_MAJOR_MOUSE 11
|
||||
#define DEV_MAJOR_MOUSE 11 // unused, kept as to not reuse numbers
|
||||
#define DEV_MAJOR_PTY 12
|
||||
#define DEV_MAJOR_ACPI 13
|
||||
#define DEV_MAJOR_PROF 14
|
||||
#define DEV_MAJOR_INPUT 15
|
||||
#define DEV_MAJOR_AUDIO 16
|
||||
|
||||
typedef struct {
|
||||
int (*open)(int minor, vnode_t **vnode, int flags);
|
||||
|
||||
@@ -15,6 +15,7 @@
|
||||
#define IPL_IGNORE -1
|
||||
#define IPL_MAX 0
|
||||
#define IPL_TIMER 1
|
||||
#define IPL_AUDIO 300
|
||||
#define IPL_NET 400
|
||||
#define IPL_DISK 500
|
||||
#define IPL_SERIAL 550
|
||||
|
||||
@@ -119,6 +119,7 @@ typedef struct advlock_t {
|
||||
#define V_FFLAGS_EXEC 16
|
||||
#define V_FFLAGS_NOCTTY 32
|
||||
#define V_FFLAGS_NOCACHE 64
|
||||
#define V_FFLAGS_CLOSE_URGENT 128
|
||||
|
||||
typedef struct vnode_t {
|
||||
struct vops_t *ops;
|
||||
|
||||
Reference in New Issue
Block a user