1#ifndef DRIVER_H 2#define DRIVER_H 3 4#include <drivers/driver_settings.h> 5#include <drivers/KernelExport.h> 6#include <drivers/Drivers.h> 7 8#include <string.h> 9#include <stdlib.h> 10 11#define DEVFS_PATH "audio/hmulti" 12#include <hmulti_audio.h> 13 14 15#define STRMINBUF 2 16#define STRMAXBUF 2 17#define DEFAULT_FRAMESPERBUF 512 18 19#define SB16_MULTI_CONTROL_FIRSTID 1024 20#define SB16_MULTI_CONTROL_MASTERID 0 21 22typedef struct { 23 int running; 24 spinlock lock; 25 int bits; 26 27 void* buffers[STRMAXBUF]; 28 uint32 num_buffers; 29 uint32 num_channels; 30 uint32 sample_size; 31 uint32 sampleformat; 32 uint32 samplerate; 33 uint32 buffer_length; 34 sem_id buffer_ready_sem; 35 uint32 frames_count; 36 uint32 buffer_cycle; 37 bigtime_t real_time; 38} sb16_stream_t; 39 40typedef struct { 41 int port, irq, dma8, dma16, midiport; 42 int opened; 43 44 sb16_stream_t playback_stream; 45 sb16_stream_t record_stream; 46} sb16_dev_t; 47 48extern device_hooks driver_hooks; 49 50status_t sb16_hw_init(sb16_dev_t* dev); 51void sb16_hw_stop(sb16_dev_t* dev); 52void sb16_hw_uninit(sb16_dev_t* dev); 53 54status_t sb16_stream_setup_buffers(sb16_dev_t* dev, sb16_stream_t* s, const char* desc); 55status_t sb16_stream_start(sb16_dev_t* dev, sb16_stream_t* s); 56status_t sb16_stream_stop(sb16_dev_t* dev, sb16_stream_t* s); 57void sb16_stream_buffer_done(sb16_stream_t* stream); 58 59status_t multi_audio_control(void* cookie, uint32 op, void* arg, size_t len); 60 61#endif /* DRIVER_H */ 62 63