* ES1370 Haiku Driver for ES1370 audio
*
* Copyright 2003-2007, Haiku, Inc.
* Distributed under the terms of the MIT License.
*
* Authors:
* Jerome Duval, jerome.duval@free.fr
*/
#ifndef _DEV_PCI_ES1370_H_
#define _DEV_PCI_ES1370_H_
#include <Drivers.h>
#include <SupportDefs.h>
#include <OS.h>
#include <PCI.h>
#include "es1370reg.h"
#include "config.h"
#include "queue.h"
#include "hmulti_audio.h"
#include "multi.h"
#define VERSION "Version alpha 1, Copyright (c) 2007 JΓ©rΓ΄me Duval, compiled on " __DATE__ " " __TIME__
#define DRIVER_NAME "es1370"
#define FRIENDLY_NAME "ES1370"
#define AUTHOR "JΓ©rΓ΄me Duval"
#define FRIENDLY_NAME_ES1370 "ES1370"
#define ES1370_USE_PLAY (1 << 0)
#define ES1370_USE_RECORD (1 << 1)
#define ES1370_STATE_STARTED (1 << 0)
* es1370 memory managment
*/
typedef struct _es1370_mem {
LIST_ENTRY(_es1370_mem) next;
void *log_base;
phys_addr_t phy_base;
area_id area;
size_t size;
} es1370_mem;
* Streams
*/
typedef struct _es1370_stream {
struct _es1370_dev *card;
uint8 use;
uint8 state;
uint8 b16;
uint32 sample_rate;
uint8 channels;
uint32 bufframes;
uint8 bufcount;
uint32 base;
LIST_ENTRY(_es1370_stream) next;
void (*inth) (void *);
void *inthparam;
void *dmaops_log_base;
void *dmaops_phy_base;
area_id dmaops_area;
es1370_mem *buffer;
uint16 blksize;
uint16 trigblk;
uint16 blkmod;
volatile int64 frames_count;
volatile bigtime_t real_time;
volatile int32 buffer_cycle;
int32 first_channel;
bool update_needed;
} es1370_stream;
* Devices
*/
typedef struct _es1370_dev {
char name[DEVNAME];
pci_info info;
device_config config;
void *ptb_log_base;
void *ptb_phy_base;
area_id ptb_area;
sem_id buffer_ready_sem;
uint32 interrupt_mask;
LIST_HEAD(, _es1370_stream) streams;
LIST_HEAD(, _es1370_mem) mems;
es1370_stream *pstream;
es1370_stream *rstream;
multi_dev multi;
} es1370_dev;
#define ES1370_SETTINGS "es1370.settings"
typedef struct {
uint32 sample_rate;
uint32 buffer_frames;
int32 buffer_count;
} es1370_settings;
extern es1370_settings current_settings;
extern int32 num_cards;
extern es1370_dev cards[NUM_CARDS];
status_t es1370_stream_set_audioparms(es1370_stream *stream, uint8 channels,
uint8 b16, uint32 sample_rate);
status_t es1370_stream_commit_parms(es1370_stream *stream);
status_t es1370_stream_get_nth_buffer(es1370_stream *stream, uint8 chan, uint8 buf,
char** buffer, size_t *stride);
void es1370_stream_start(es1370_stream *stream, void (*inth) (void *), void *inthparam);
void es1370_stream_halt(es1370_stream *stream);
es1370_stream *es1370_stream_new(es1370_dev *card, uint8 use, uint32 bufframes, uint8 bufcount);
void es1370_stream_delete(es1370_stream *stream);
#endif