removed warnigs, spelling errors, added prototypes

git-svn-id: file:///srv/svn/repos/haiku/trunk/current@139 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
beveloper
2002-07-12 15:48:55 +00:00
parent b6de9d11ff
commit dc03e28f18
10 changed files with 83 additions and 54 deletions
@@ -28,6 +28,7 @@
#include <OS.h> #include <OS.h>
#include <MediaDefs.h> #include <MediaDefs.h>
#include "multi_audio.h" #include "multi_audio.h"
#include "ac97_multi.h"
//#define DEBUG 1 //#define DEBUG 1
@@ -43,10 +44,15 @@
* *
*/ */
static status_t get_control(multi_mix_control * control) static status_t list_mix_controls(multi_mix_control_info *data);
{ static status_t list_mix_connections(multi_mix_connection_info *data);
return B_ERROR; static status_t list_mix_channels(multi_mix_channel_info *data);
} static status_t get_description(multi_description *data);
static status_t get_enabled_channels(multi_channel_enable *data);
static status_t get_global_format(multi_format_info *data);
static status_t get_buffers(multi_buffer_list *data);
static status_t buffer_exchange(multi_buffer_info *data);
static status_t buffer_force_stop();
static status_t list_mix_controls(multi_mix_control_info * data) static status_t list_mix_controls(multi_mix_control_info * data)
{ {
@@ -74,7 +80,7 @@ multi_channel_info chans[] = {
{ 7, B_MULTI_INPUT_BUS, B_CHANNEL_RIGHT | B_CHANNEL_STEREO_BUS, B_CHANNEL_MINI_JACK_STEREO }, { 7, B_MULTI_INPUT_BUS, B_CHANNEL_RIGHT | B_CHANNEL_STEREO_BUS, B_CHANNEL_MINI_JACK_STEREO },
}; };
status_t get_description(multi_description *data) static status_t get_description(multi_description *data)
{ {
data->interface_version = B_CURRENT_INTERFACE_VERSION; data->interface_version = B_CURRENT_INTERFACE_VERSION;
data->interface_minimum = B_CURRENT_INTERFACE_VERSION; data->interface_minimum = B_CURRENT_INTERFACE_VERSION;
@@ -116,7 +122,7 @@ status_t get_description(multi_description *data)
return B_OK; return B_OK;
} }
status_t get_enabled_channels(multi_channel_enable *data) static status_t get_enabled_channels(multi_channel_enable *data)
{ {
B_SET_CHANNEL(data->enable_bits, 0, true); B_SET_CHANNEL(data->enable_bits, 0, true);
B_SET_CHANNEL(data->enable_bits, 1, true); B_SET_CHANNEL(data->enable_bits, 1, true);
@@ -132,7 +138,7 @@ status_t get_enabled_channels(multi_channel_enable *data)
return B_OK; return B_OK;
} }
status_t get_global_format(multi_format_info *data) static status_t get_global_format(multi_format_info *data)
{ {
data->output_latency = 0; data->output_latency = 0;
data->input_latency = 0; data->input_latency = 0;
@@ -146,7 +152,7 @@ status_t get_global_format(multi_format_info *data)
return B_OK; return B_OK;
} }
status_t get_buffers(multi_buffer_list *data) static status_t get_buffers(multi_buffer_list *data)
{ {
TRACE(("flags = %#x\n",data->flags)); TRACE(("flags = %#x\n",data->flags));
TRACE(("request_playback_buffers = %#x\n",data->request_playback_buffers)); TRACE(("request_playback_buffers = %#x\n",data->request_playback_buffers));
@@ -193,19 +199,19 @@ status_t get_buffers(multi_buffer_list *data)
data->record_buffers[0][0].base = chan_pi->userbuffer[0]; /* pointer to first sample for channel for buffer */ data->record_buffers[0][0].base = chan_pi->userbuffer[0]; /* pointer to first sample for channel for buffer */
data->record_buffers[0][0].stride = 4; /* offset to next sample */ data->record_buffers[0][0].stride = 4; /* offset to next sample */
/* buffer 0, right channel */ /* buffer 0, right channel */
data->record_buffers[0][1].base = chan_pi->userbuffer[0] + 2; /* pointer to first sample for channel for buffer */ data->record_buffers[0][1].base = ((char*)chan_pi->userbuffer[0]) + 2; /* pointer to first sample for channel for buffer */
data->record_buffers[0][1].stride = 4; /* offset to next sample */ data->record_buffers[0][1].stride = 4; /* offset to next sample */
/* buffer 1, left channel */ /* buffer 1, left channel */
data->record_buffers[1][0].base = chan_pi->userbuffer[1]; /* pointer to first sample for channel for buffer */ data->record_buffers[1][0].base = chan_pi->userbuffer[1]; /* pointer to first sample for channel for buffer */
data->record_buffers[1][0].stride = 4; /* offset to next sample */ data->record_buffers[1][0].stride = 4; /* offset to next sample */
/* buffer 1, right channel */ /* buffer 1, right channel */
data->record_buffers[1][1].base = chan_pi->userbuffer[1] + 2; /* pointer to first sample for channel for buffer */ data->record_buffers[1][1].base = ((char*)chan_pi->userbuffer[1]) + 2; /* pointer to first sample for channel for buffer */
data->record_buffers[1][1].stride = 4; /* offset to next sample */ data->record_buffers[1][1].stride = 4; /* offset to next sample */
return B_OK; return B_OK;
} }
status_t buffer_exchange(multi_buffer_info *data) static status_t buffer_exchange(multi_buffer_info *data)
{ {
cpu_status status; cpu_status status;
void *backbuffer; void *backbuffer;
@@ -283,7 +289,7 @@ status_t buffer_exchange(multi_buffer_info *data)
*/ */
} }
status_t buffer_force_stop() static status_t buffer_force_stop()
{ {
return B_OK; return B_OK;
} }
@@ -29,6 +29,7 @@
#include <config_manager.h> #include <config_manager.h>
#include <PCI.h> #include <PCI.h>
#include <OS.h> #include <OS.h>
#include <malloc.h>
//#define DEBUG 2 //#define DEBUG 2
@@ -46,7 +47,7 @@ status_t find_pci_pin_irq(uint8 pin, uint8 *irq);
* XXX multiple controllers not supported * XXX multiple controllers not supported
*/ */
status_t probe_device() status_t probe_device(void)
{ {
pci_module_info *pcimodule; pci_module_info *pcimodule;
config_manager_for_driver_module_info *configmodule; config_manager_for_driver_module_info *configmodule;
@@ -47,7 +47,7 @@ typedef struct
extern device_config *config; extern device_config *config;
status_t probe_device(); status_t probe_device(void);
#define TYPE_ICH4 0x01 #define TYPE_ICH4 0x01
@@ -25,11 +25,14 @@
* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
* *
*/ */
#include <KernelExport.h>
#include <stdio.h> #include <stdio.h>
#include <OS.h> #include <OS.h>
#include "debug.h" #include "debug.h"
#include "ich.h" #include "ich.h"
void debug_printf(const char *text,...);
void debug_printf(const char *text,...) void debug_printf(const char *text,...)
{ {
char buf[1024]; char buf[1024];
+38 -35
View File
@@ -49,12 +49,15 @@ ich_chan * chan_pi = 0;
ich_chan * chan_po = 0; ich_chan * chan_po = 0;
ich_chan * chan_mc = 0; ich_chan * chan_mc = 0;
int32 ihc_int(void *data); int32 ich_int(void *data);
int32 ihc_test_int(void *check); int32 ich_test_int(void *check);
bool interrupt_test(); bool interrupt_test(void);
void init_chan(ich_chan *chan); void init_chan(ich_chan *chan);
void start_chan(ich_chan *chan);
void reset_chan(ich_chan *chan); void reset_chan(ich_chan *chan);
void chan_free_resources(void);
status_t map_io_memory(void);
status_t unmap_io_memory(void);
int32 int_thread(void *data);
#if DEBUG > 2 #if DEBUG > 2
void dump_chan(ich_chan *chan) void dump_chan(ich_chan *chan)
@@ -155,7 +158,7 @@ void reset_chan(ich_chan *chan)
TRACE(("channel reset failed after 10ms\n")); TRACE(("channel reset failed after 10ms\n"));
} }
bool interrupt_test() bool interrupt_test(void)
{ {
bool *testresult; bool *testresult;
bool result; bool result;
@@ -169,7 +172,7 @@ bool interrupt_test()
testresult = malloc(sizeof(bool)); testresult = malloc(sizeof(bool));
*testresult = false; // assume it's not working *testresult = false; // assume it's not working
install_io_interrupt_handler(config->irq, ihc_test_int, testresult, 0); install_io_interrupt_handler(config->irq, ich_test_int, testresult, 0);
// clear status bits // clear status bits
ich_reg_write_16(chan_po->regbase + ICH_REG_X_SR, SR_FIFOE | SR_BCIS | SR_LVBCI); ich_reg_write_16(chan_po->regbase + ICH_REG_X_SR, SR_FIFOE | SR_BCIS | SR_LVBCI);
@@ -193,7 +196,7 @@ bool interrupt_test()
snooze(25000); snooze(25000);
remove_io_interrupt_handler(config->irq, ihc_test_int, testresult); remove_io_interrupt_handler(config->irq, ich_test_int, testresult);
result = *testresult; result = *testresult;
free(testresult); free(testresult);
@@ -207,7 +210,7 @@ bool interrupt_test()
return result; return result;
} }
void chan_free_resources() void chan_free_resources(void)
{ {
if (chan_po) { if (chan_po) {
if (chan_po->buffer_ready_sem > B_OK) if (chan_po->buffer_ready_sem > B_OK)
@@ -244,7 +247,7 @@ void chan_free_resources()
} }
} }
status_t map_io_memory() status_t map_io_memory(void)
{ {
if ((config->type & TYPE_ICH4) == 0) if ((config->type & TYPE_ICH4) == 0)
return B_OK; return B_OK;
@@ -268,7 +271,7 @@ status_t map_io_memory()
} }
} }
status_t unmap_io_memory() status_t unmap_io_memory(void)
{ {
status_t rv; status_t rv;
if ((config->type & TYPE_ICH4) == 0) if ((config->type & TYPE_ICH4) == 0)
@@ -283,7 +286,7 @@ int32 int_thread(void *data)
cpu_status status; cpu_status status;
while (!int_thread_exit) { while (!int_thread_exit) {
status = disable_interrupts(); status = disable_interrupts();
ihc_int(data); ich_int(data);
restore_interrupts(status); restore_interrupts(status);
snooze(1500); snooze(1500);
} }
@@ -319,7 +322,7 @@ init_driver(void)
} }
dprintf("ich-ac97: " VERSION "\n"); dprintf("ich-ac97: " VERSION "\n");
dprintf("ich-ac97: found %s, IRQ = %d, NAMBAR = %#X, NABMBAR = %#X, MMBAR = %#X, MBBAR = %#X\n",config->name,config->irq,config->nambar,config->nabmbar,config->mmbar,config->mbbar); dprintf("ich-ac97: found %s, IRQ = %ld, NAMBAR = %#lX, NABMBAR = %#lX, MMBAR = %#lX, MBBAR = %#lX\n",config->name,config->irq,config->nambar,config->nabmbar,config->mmbar,config->mbbar);
/* before doing anything else, map the IO memory */ /* before doing anything else, map the IO memory */
rv = map_io_memory(); rv = map_io_memory();
@@ -367,7 +370,7 @@ init_driver(void)
} else { } else {
TRACE(("secondary codec not ready after %Ld us\n",(system_time() - start))); TRACE(("secondary codec not ready after %Ld us\n",(system_time() - start)));
} }
if ((rv & STA_PCR | STA_SCR) == 0) { if ((rv & (STA_PCR | STA_SCR)) == 0) {
dprintf("ich-ac97: compatible chipset found, but no codec ready!\n"); dprintf("ich-ac97: compatible chipset found, but no codec ready!\n");
unmap_io_memory(); unmap_io_memory();
return B_ERROR; return B_ERROR;
@@ -454,7 +457,7 @@ init_driver(void)
/* install interrupt or polling thread */ /* install interrupt or polling thread */
if (config->irq != 0) { if (config->irq != 0) {
install_io_interrupt_handler(config->irq,ihc_int,0,0); install_io_interrupt_handler(config->irq,ich_int,0,0);
} else { } else {
int_thread_id = spawn_kernel_thread(int_thread, "ich_ac97 interrupt poller", B_REAL_TIME_PRIORITY, 0); int_thread_id = spawn_kernel_thread(int_thread, "ich_ac97 interrupt poller", B_REAL_TIME_PRIORITY, 0);
resume_thread(int_thread_id); resume_thread(int_thread_id);
@@ -508,7 +511,7 @@ uninit_driver(void)
/* remove the interrupt handler or thread */ /* remove the interrupt handler or thread */
if (config->irq != 0) { if (config->irq != 0) {
remove_io_interrupt_handler(config->irq,ihc_int,0); remove_io_interrupt_handler(config->irq,ich_int,0);
} else if (int_thread_id != -1) { } else if (int_thread_id != -1) {
status_t exit_value; status_t exit_value;
int_thread_exit = true; int_thread_exit = true;
@@ -529,7 +532,7 @@ uninit_driver(void)
TRACE(("uninit_driver() finished\n")); TRACE(("uninit_driver() finished\n"));
} }
int32 ihc_test_int(void *check) int32 ich_test_int(void *check)
{ {
/* /*
* This interrupt handler is used once to test if interrupt handling is working. * This interrupt handler is used once to test if interrupt handling is working.
@@ -551,7 +554,7 @@ int32 ihc_test_int(void *check)
return B_HANDLED_INTERRUPT; return B_HANDLED_INTERRUPT;
} }
int32 ihc_int(void *unused) int32 ich_int(void *unused)
{ {
uint32 sta; uint32 sta;
sta = ich_reg_read_32(ICH_REG_GLOB_STA); sta = ich_reg_read_32(ICH_REG_GLOB_STA);
@@ -583,7 +586,7 @@ int32 ihc_int(void *unused)
count = civ - chan_po->lastindex; count = civ - chan_po->lastindex;
if (count != 1) if (count != 1)
dprintf(DRIVER_NAME ": lost %d po interrupts\n",count - 1); dprintf(DRIVER_NAME ": lost %ld po interrupts\n",count - 1);
acquire_spinlock(&slock); acquire_spinlock(&slock);
chan_po->played_real_time = system_time(); chan_po->played_real_time = system_time();
@@ -619,7 +622,7 @@ int32 ihc_int(void *unused)
count = civ - chan_pi->lastindex; count = civ - chan_pi->lastindex;
if (count != 1) if (count != 1)
dprintf(DRIVER_NAME ": lost %d pi interrupts\n",count - 1); dprintf(DRIVER_NAME ": lost %ld pi interrupts\n",count - 1);
acquire_spinlock(&slock); acquire_spinlock(&slock);
chan_pi->played_real_time = system_time(); chan_pi->played_real_time = system_time();
@@ -648,40 +651,40 @@ int32 ihc_int(void *unused)
} }
static status_t static status_t
ihc_open(const char *name, uint32 flags, void** cookie) ich_open(const char *name, uint32 flags, void** cookie)
{ {
TRACE(("open()\n")); TRACE(("open()\n"));
return B_OK; return B_OK;
} }
static status_t static status_t
ihc_close(void* cookie) ich_close(void* cookie)
{ {
TRACE(("close()\n")); TRACE(("close()\n"));
return B_OK; return B_OK;
} }
static status_t static status_t
ihc_free(void* cookie) ich_free(void* cookie)
{ {
return B_OK; return B_OK;
} }
static status_t static status_t
ihc_control(void* cookie, uint32 op, void* arg, size_t len) ich_control(void* cookie, uint32 op, void* arg, size_t len)
{ {
return multi_control(cookie,op,arg,len); return multi_control(cookie,op,arg,len);
} }
static status_t static status_t
ihc_read(void* cookie, off_t position, void *buf, size_t* num_bytes) ich_read(void* cookie, off_t position, void *buf, size_t* num_bytes)
{ {
*num_bytes = 0; /* tell caller nothing was read */ *num_bytes = 0; /* tell caller nothing was read */
return B_IO_ERROR; return B_IO_ERROR;
} }
static status_t static status_t
ihc_write(void* cookie, off_t position, const void* buffer, size_t* num_bytes) ich_write(void* cookie, off_t position, const void* buffer, size_t* num_bytes)
{ {
*num_bytes = 0; /* tell caller nothing was written */ *num_bytes = 0; /* tell caller nothing was written */
return B_IO_ERROR; return B_IO_ERROR;
@@ -692,7 +695,7 @@ ihc_write(void* cookie, off_t position, const void* buffer, size_t* num_bytes)
null-terminated array of device names supported by this driver null-terminated array of device names supported by this driver
----- */ ----- */
static const char *ihc_name[] = { static const char *ich_name[] = {
"audio/multi/ich_ac97/1", "audio/multi/ich_ac97/1",
NULL NULL
}; };
@@ -701,13 +704,13 @@ static const char *ihc_name[] = {
function pointers for the device hooks entry points function pointers for the device hooks entry points
----- */ ----- */
device_hooks ihc_hooks = { device_hooks ich_hooks = {
ihc_open, /* -> open entry point */ ich_open, /* -> open entry point */
ihc_close, /* -> close entry point */ ich_close, /* -> close entry point */
ihc_free, /* -> free cookie */ ich_free, /* -> free cookie */
ihc_control, /* -> control entry point */ ich_control, /* -> control entry point */
ihc_read, /* -> read entry point */ ich_read, /* -> read entry point */
ihc_write, /* -> write entry point */ ich_write, /* -> write entry point */
NULL, /* start select */ NULL, /* start select */
NULL, /* stop select */ NULL, /* stop select */
NULL, /* scatter-gather read from the device */ NULL, /* scatter-gather read from the device */
@@ -722,7 +725,7 @@ device_hooks ihc_hooks = {
const char** const char**
publish_devices() publish_devices()
{ {
return ihc_name; return ich_name;
} }
/* ---------- /* ----------
@@ -733,5 +736,5 @@ publish_devices()
device_hooks* device_hooks*
find_device(const char* name) find_device(const char* name)
{ {
return &ihc_hooks; return &ich_hooks;
} }
@@ -69,4 +69,6 @@ extern ich_chan * chan_pi;
extern ich_chan * chan_po; extern ich_chan * chan_po;
extern ich_chan * chan_mc; extern ich_chan * chan_mc;
void start_chan(ich_chan *chan);
#endif #endif
+14 -2
View File
@@ -32,7 +32,19 @@
#include "ich.h" #include "ich.h"
#include "config.h" #include "config.h"
status_t ich_codec_wait(); /*
* from BeOS R3 KernelExport.h
* should be replaced by PCI bus manager functions
*/
uint8 read_io_8(int mapped_io_addr);
void write_io_8(int mapped_io_addr, uint8 value);
uint16 read_io_16(int mapped_io_addr);
void write_io_16(int mapped_io_addr, uint16 value);
uint32 read_io_32(int mapped_io_addr);
void write_io_32(int mapped_io_addr, uint32 value);
status_t ich_codec_wait(void);
uint8 uint8
ich_reg_read_8(int regno) ich_reg_read_8(int regno)
@@ -101,7 +113,7 @@ ich_reg_write_32(int regno, uint32 value)
} }
status_t status_t
ich_codec_wait() ich_codec_wait(void)
{ {
int i; int i;
for (i = 0; i < 1100; i++) { for (i = 0; i < 1100; i++) {
@@ -36,7 +36,9 @@
spinlock slock = 0; spinlock slock = 0;
cpu_status lock() uint32 round_to_pagesize(uint32 size);
cpu_status lock(void)
{ {
cpu_status status = disable_interrupts(); cpu_status status = disable_interrupts();
acquire_spinlock(&slock); acquire_spinlock(&slock);
@@ -32,7 +32,7 @@
area_id alloc_mem(void **phy, void **log, size_t size, const char *name); area_id alloc_mem(void **phy, void **log, size_t size, const char *name);
cpu_status lock(); cpu_status lock(void);
void unlock(cpu_status status); void unlock(cpu_status status);
extern spinlock slock; extern spinlock slock;