summaryrefslogtreecommitdiff
path: root/kernel/audio.c
blob: 60df1f3328da11d720acc1036ae2b8b98e76e1e2 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
// TODO: This should support multiple audio sources.
#include <audio.h>
#include <drivers/ac97.h>
#include <errno.h>
#include <fs/devfs.h>
#include <math.h>

int audio_write(u8 *buffer, u64 offset, u64 len, vfs_fd_t *fd) {
  (void)offset;
  (void)fd;
  int rc = ac97_add_pcm(buffer, len);
  if (0 == rc) {
    return -EWOULDBLOCK;
  }
  return rc;
}

int audio_can_write(vfs_inode_t *inode) {
  (void)inode;
  return ac97_can_write();
}

static int add_files(void) {
  devfs_add_file("/audio", NULL, audio_write, NULL, NULL, audio_can_write,
                 FS_TYPE_CHAR_DEVICE);
  return 1;
}

void audio_init(void) {
  ac97_init();
  add_files();
}