From 464efaf403323c5accae19049acd21a7c38e4af1 Mon Sep 17 00:00:00 2001 From: Muhamed Emad Date: Sat, 6 Apr 2024 14:06:12 +0200 Subject: [PATCH] auvia: enable -Werror, style fixes Move util.c from auich (the most up to date version) to the parent directory of ac97. Use it also for auvia. This means changing several physical addresses to use phys_addr_t instead of pointers, and declaring buffers allocated by alloc_mem to be user-accessible or not. Untested, I don't have the hardware. Change-Id: I2ababc713384cbf34174fbcecfb3595547a1fd97 Reviewed-on: https://review.haiku-os.org/c/haiku/+/7602 Tested-by: Commit checker robot Reviewed-by: Alexander von Gluck --- build/jam/ArchitectureRules | 2 +- .../kernel/drivers/audio/ac97/auvia/auvia.c | 69 ++++++------ .../kernel/drivers/audio/ac97/auvia/auvia.h | 50 ++++----- .../kernel/drivers/audio/ac97/auvia/multi.c | 32 +++--- .../kernel/drivers/audio/ac97/auvia/util.c | 100 ------------------ .../kernel/drivers/audio/ac97/auvia/util.h | 40 ------- .../drivers/audio/ac97/{auich => }/util.c | 0 .../drivers/audio/ac97/{auich => }/util.h | 0 8 files changed, 77 insertions(+), 216 deletions(-) delete mode 100644 src/add-ons/kernel/drivers/audio/ac97/auvia/util.c delete mode 100644 src/add-ons/kernel/drivers/audio/ac97/auvia/util.h rename src/add-ons/kernel/drivers/audio/ac97/{auich => }/util.c (100%) rename src/add-ons/kernel/drivers/audio/ac97/{auich => }/util.h (100%) diff --git a/build/jam/ArchitectureRules b/build/jam/ArchitectureRules index e4170febb5..1b316221ff 100644 --- a/build/jam/ArchitectureRules +++ b/build/jam/ArchitectureRules @@ -676,7 +676,7 @@ rule ArchitectureSetupWarnings architecture EnableWerror src add-ons kernel debugger ; # EnableWerror src add-ons kernel drivers audio ac97 ; EnableWerror src add-ons kernel drivers audio ac97 auich ; -# EnableWerror src add-ons kernel drivers audio ac97 auvia ; + EnableWerror src add-ons kernel drivers audio ac97 auvia ; # EnableWerror src add-ons kernel drivers audio ac97 es1370 ; # EnableWerror src add-ons kernel drivers audio ac97 geode ; # EnableWerror src add-ons kernel drivers audio ac97 ich ; diff --git a/src/add-ons/kernel/drivers/audio/ac97/auvia/auvia.c b/src/add-ons/kernel/drivers/audio/ac97/auvia/auvia.c index 3a698e561a..63bbec115b 100644 --- a/src/add-ons/kernel/drivers/audio/ac97/auvia/auvia.c +++ b/src/add-ons/kernel/drivers/audio/ac97/auvia/auvia.c @@ -73,7 +73,7 @@ auvia_mem_new(auvia_dev *card, size_t size) if ((mem = malloc(sizeof(*mem))) == NULL) return (NULL); - mem->area = alloc_mem(&mem->phy_base, &mem->log_base, size, "auvia buffer"); + mem->area = alloc_mem(&mem->phy_base, &mem->log_base, size, "auvia buffer", false); mem->size = size; if (mem->area < B_OK) { free(mem); @@ -145,14 +145,14 @@ auvia_stream_set_audioparms(auvia_stream *stream, uint8 channels, sample_size = stream->b16 + 1; frame_size = sample_size * stream->channels; - + stream->buffer = auvia_mem_alloc(stream->card, stream->bufframes * frame_size * stream->bufcount); - + stream->trigblk = 0; /* This shouldn't be needed */ stream->blkmod = stream->bufcount; stream->blksize = stream->bufframes * frame_size; - + return B_OK; } @@ -160,50 +160,49 @@ auvia_stream_set_audioparms(auvia_stream *stream, uint8 channels, status_t auvia_stream_commit_parms(auvia_stream *stream) { - int i; - uint32 *page; - uint32 value; + int i; + uint32* page; + uint32 value; LOG(("auvia_stream_commit_parms\n")); - + page = stream->dmaops_log_base; - + for(i = 0; i < stream->bufcount; i++) { - page[2*i] = ((uint32)stream->buffer->phy_base) + - i * stream->blksize; - page[2*i + 1] = AUVIA_DMAOP_FLAG | stream->blksize; + page[2 * i] = stream->buffer->phy_base + i * stream->blksize; + page[2 * i + 1] = AUVIA_DMAOP_FLAG | stream->blksize; } - - page[2*stream->bufcount - 1] &= ~AUVIA_DMAOP_FLAG; - page[2*stream->bufcount - 1] |= AUVIA_DMAOP_EOL; - - auvia_reg_write_32(&stream->card->config, stream->base + AUVIA_RP_DMAOPS_BASE, - (uint32)stream->dmaops_phy_base); - + + page[2 * stream->bufcount - 1] &= ~AUVIA_DMAOP_FLAG; + page[2 * stream->bufcount - 1] |= AUVIA_DMAOP_EOL; + + auvia_reg_write_32(&stream->card->config, stream->base + AUVIA_RP_DMAOPS_BASE, + stream->dmaops_phy_base); + if(stream->use & AUVIA_USE_RECORD) - auvia_codec_write(&stream->card->config, AC97_PCM_L_R_ADC_RATE, + auvia_codec_write(&stream->card->config, AC97_PCM_L_R_ADC_RATE, (uint16)stream->sample_rate); else - auvia_codec_write(&stream->card->config, AC97_PCM_FRONT_DAC_RATE, + auvia_codec_write(&stream->card->config, AC97_PCM_FRONT_DAC_RATE, (uint16)stream->sample_rate); - + if(IS_8233(&stream->card->config)) { if(stream->base != AUVIA_8233_MP_BASE) { - value = auvia_reg_read_32(&stream->card->config, stream->base + value = auvia_reg_read_32(&stream->card->config, stream->base + AUVIA_8233_RP_RATEFMT); - value &= ~(AUVIA_8233_RATEFMT_48K | AUVIA_8233_RATEFMT_STEREO + value &= ~(AUVIA_8233_RATEFMT_48K | AUVIA_8233_RATEFMT_STEREO | AUVIA_8233_RATEFMT_16BIT); if(stream->use & AUVIA_USE_PLAY) - value |= AUVIA_8233_RATEFMT_48K * (stream->sample_rate / 20) + value |= AUVIA_8233_RATEFMT_48K * (stream->sample_rate / 20) / (48000 / 20); value |= (stream->channels == 2 ? AUVIA_8233_RATEFMT_STEREO : 0) | (stream->b16 ? AUVIA_8233_RATEFMT_16BIT : 0); - auvia_reg_write_32(&stream->card->config, stream->base + auvia_reg_write_32(&stream->card->config, stream->base + AUVIA_8233_RP_RATEFMT, value); } else { - static const uint32 slottab[7] = {0, 0xff000011, 0xff000021, + static const uint32 slottab[7] = {0, 0xff000011, 0xff000021, 0xff000521, 0xff004321, 0xff054321, 0xff654321}; value = (stream->b16 ? AUVIA_8233_MP_FORMAT_16BIT : AUVIA_8233_MP_FORMAT_8BIT) - | ((stream->channels << 4) & AUVIA_8233_MP_FORMAT_CHANNEL_MASK) ; + | ((stream->channels << 4) & AUVIA_8233_MP_FORMAT_CHANNEL_MASK); auvia_reg_write_8(&stream->card->config, stream->base + AUVIA_8233_OFF_MP_FORMAT, value); auvia_reg_write_32(&stream->card->config, stream->base @@ -211,7 +210,7 @@ auvia_stream_commit_parms(auvia_stream *stream) } } //auvia_codec_write(&stream->card->config, AC97_SPDIF_CONTROL, (uint16)stream->sample_rate); - + return B_OK; } @@ -226,7 +225,7 @@ auvia_stream_get_nth_buffer(auvia_stream *stream, uint8 chan, uint8 buf, sample_size = stream->b16 + 1; frame_size = sample_size * stream->channels; - *buffer = stream->buffer->log_base + (buf * stream->bufframes * frame_size) + *buffer =(char *)((addr_t)stream->buffer->log_base + (uintptr_t)(buf * stream->bufframes * frame_size)) + chan * sample_size; *stride = frame_size; @@ -240,12 +239,12 @@ auvia_stream_curaddr(auvia_stream *stream) uint32 addr; if(IS_8233(&stream->card->config)) { addr = auvia_reg_read_32(&stream->card->config, stream->base + AUVIA_RP_DMAOPS_BASE); - TRACE(("stream_curaddr %p, phy_base %p\n", addr, (uint32)stream->dmaops_phy_base)); - return (addr - (uint32)stream->dmaops_phy_base - 4) / 8; + TRACE(("stream_curaddr %p, phy_base %p\n", addr, stream->dmaops_phy_base)); + return (addr - stream->dmaops_phy_base - 4) / 8; } else { addr = auvia_reg_read_32(&stream->card->config, stream->base + AUVIA_RP_DMAOPS_BASE); - TRACE(("stream_curaddr %p, phy_base %p\n", addr, (uint32)stream->dmaops_phy_base)); - return (addr - (uint32)stream->dmaops_phy_base - 8) / 8; + TRACE(("stream_curaddr %p, phy_base %p\n", addr, stream->dmaops_phy_base)); + return (addr - stream->dmaops_phy_base - 8) / 8; } } @@ -336,7 +335,7 @@ auvia_stream_new(auvia_dev *card, uint8 use, uint32 bufframes, uint8 bufcount) /* allocate memory for our dma ops */ stream->dmaops_area = alloc_mem(&stream->dmaops_phy_base, &stream->dmaops_log_base, - VIA_TABLE_SIZE, "auvia dmaops"); + VIA_TABLE_SIZE, "auvia dmaops", false); if (stream->dmaops_area < B_OK) { PRINT(("couldn't allocate memory\n")); diff --git a/src/add-ons/kernel/drivers/audio/ac97/auvia/auvia.h b/src/add-ons/kernel/drivers/audio/ac97/auvia/auvia.h index 3cc0138cdd..26b6b9090d 100644 --- a/src/add-ons/kernel/drivers/audio/ac97/auvia/auvia.h +++ b/src/add-ons/kernel/drivers/audio/ac97/auvia/auvia.h @@ -82,10 +82,10 @@ typedef struct _auvia_mem { LIST_ENTRY(_auvia_mem) next; - void *log_base; - void *phy_base; - area_id area; - size_t size; + void* log_base; + phys_addr_t phy_base; + area_id area; + size_t size; } auvia_mem; /* @@ -93,37 +93,37 @@ typedef struct _auvia_mem { */ typedef struct _auvia_stream { - struct _auvia_dev *card; - uint8 use; - uint8 state; - uint8 b16; - uint32 sample_rate; + struct _auvia_dev *card; + uint8 use; + uint8 state; + uint8 b16; + uint32 sample_rate; uint8 channels; - uint32 bufframes; - uint8 bufcount; + uint32 bufframes; + uint8 bufcount; uint32 base; LIST_ENTRY(_auvia_stream) next; - void (*inth) (void *); - void *inthparam; + void (*inth) (void *); + void *inthparam; - void *dmaops_log_base; - void *dmaops_phy_base; - area_id dmaops_area; + void* dmaops_log_base; + phys_addr_t dmaops_phy_base; + area_id dmaops_area; - auvia_mem *buffer; - uint16 blksize; /* in samples */ - uint16 trigblk; /* blk on which to trigger inth */ - uint16 blkmod; /* Modulo value to wrap trigblk */ + auvia_mem* buffer; + uint16 blksize; /* in samples */ + uint16 trigblk; /* blk on which to trigger inth */ + uint16 blkmod; /* Modulo value to wrap trigblk */ /* multi_audio */ - volatile int64 frames_count; // for play or record - volatile bigtime_t real_time; // for play or record - volatile int32 buffer_cycle; // for play or record - int32 first_channel; - bool update_needed; + volatile int64 frames_count; // for play or record + volatile bigtime_t real_time; // for play or record + volatile int32 buffer_cycle; // for play or record + int32 first_channel; + bool update_needed; } auvia_stream; /* diff --git a/src/add-ons/kernel/drivers/audio/ac97/auvia/multi.c b/src/add-ons/kernel/drivers/audio/ac97/auvia/multi.c index f5af596814..94b1c76dcb 100644 --- a/src/add-ons/kernel/drivers/audio/ac97/auvia/multi.c +++ b/src/add-ons/kernel/drivers/audio/ac97/auvia/multi.c @@ -176,8 +176,8 @@ auvia_ac97_set_mix(void *card, const void *cookie, int32 type, float *values) { static int32 -auvia_create_group_control(multi_dev *multi, int32 *index, int32 parent, - int32 string, const char* name) +auvia_create_group_control(multi_dev* multi, uint32* index, int32 parent, int32 string, + const char* name) { int32 i = *index; (*index)++; @@ -186,9 +186,10 @@ auvia_create_group_control(multi_dev *multi, int32 *index, int32 parent, multi->controls[i].mix_control.flags = B_MULTI_MIX_GROUP; multi->controls[i].mix_control.master = EMU_MULTI_CONTROL_MASTERID; multi->controls[i].mix_control.string = string; - if (name) + if (name) { strlcpy(multi->controls[i].mix_control.name, name, sizeof(multi->controls[i].mix_control.name)); + } return multi->controls[i].mix_control.id; } @@ -198,7 +199,6 @@ static status_t auvia_create_controls_list(multi_dev *multi) { uint32 i = 0, index = 0, count, id, parent, parent2, parent3; - auvia_dev *card = (auvia_dev*)multi->card; const ac97_source_info *info; parent = auvia_create_group_control(multi, &index, 0, 0, "Record"); @@ -402,7 +402,7 @@ auvia_get_mix(auvia_dev *card, multi_mix_value_info * mmvi) multi_mixer_control *control = NULL; for (i = 0; i < mmvi->item_count; i++) { id = mmvi->values[i].id - EMU_MULTI_CONTROL_FIRSTID; - if (id < 0 || id >= card->multi.control_count) { + if (id < 0 || (uint32)id >= card->multi.control_count) { PRINT(("auvia_get_mix : " "invalid control id requested : %" B_PRIi32 "\n", id)); continue; @@ -443,7 +443,7 @@ auvia_set_mix(auvia_dev *card, multi_mix_value_info * mmvi) multi_mixer_control *control = NULL; for (i = 0; i < mmvi->item_count; i++) { id = mmvi->values[i].id - EMU_MULTI_CONTROL_FIRSTID; - if (id < 0 || id >= card->multi.control_count) { + if (id < 0 || (uint32)id >= card->multi.control_count) { PRINT(("auvia_set_mix : " "invalid control id requested : %" B_PRIi32 "\n", id)); continue; @@ -454,7 +454,7 @@ auvia_set_mix(auvia_dev *card, multi_mix_value_info * mmvi) multi_mixer_control *control2 = NULL; if (i + 1 < mmvi->item_count) { id = mmvi->values[i + 1].id - EMU_MULTI_CONTROL_FIRSTID; - if (id < 0 || id >= card->multi.control_count) { + if (id < 0 || (uint32)id >= card->multi.control_count) { PRINT(("auvia_set_mix : " "invalid control id requested : %" B_PRIi32 "\n", id)); } else { @@ -506,7 +506,7 @@ static status_t auvia_list_mix_controls(auvia_dev *card, multi_mix_control_info * mmci) { multi_mix_control *mmc; - int32 i; + uint32 i; mmc = mmci->controls; if (mmci->control_count < 24) @@ -573,7 +573,8 @@ static void auvia_create_channels_list(multi_dev *multi) { auvia_stream *stream; - uint32 index, i, mode, designations; + uint32 index, i, designations; + int32 mode; multi_channel_info *chans; uint32 chan_designations[] = { B_CHANNEL_LEFT, @@ -600,7 +601,8 @@ auvia_create_channels_list(multi_dev *multi) for (i = 0; i < stream->channels; i++) { chans[index].channel_id = index; - chans[index].kind = (mode == AUVIA_USE_PLAY) ? B_MULTI_OUTPUT_CHANNEL : B_MULTI_INPUT_CHANNEL; + chans[index].kind = + (mode == AUVIA_USE_PLAY) ? B_MULTI_OUTPUT_CHANNEL : B_MULTI_INPUT_CHANNEL; chans[index].designations = designations | chan_designations[i]; chans[index].connectors = 0; index++; @@ -706,7 +708,7 @@ auvia_get_description(auvia_dev *card, multi_description *data) // channels and input bus channels and finally auxillary channels, LOG(("request_channel_count = %d\n",data->request_channel_count)); - if (data->request_channel_count >= size) { + if (data->request_channel_count >= (int32)size) { LOG(("copying data\n")); memcpy(data->channels, card->multi.chans, size * sizeof(card->multi.chans[0])); } @@ -799,10 +801,10 @@ auvia_get_buffers(auvia_dev *card, multi_buffer_list *data) pchannels = card->pstream->channels; rchannels = card->rstream->channels; - if (data->request_playback_buffers < BUFFER_COUNT || - data->request_playback_channels < (pchannels) || - data->request_record_buffers < BUFFER_COUNT || - data->request_record_channels < (rchannels)) { + if (data->request_playback_buffers < BUFFER_COUNT + || data->request_playback_channels < (int32)(pchannels) + || data->request_record_buffers < BUFFER_COUNT + || data->request_record_channels < (int32)(rchannels)) { LOG(("not enough channels/buffers\n")); } diff --git a/src/add-ons/kernel/drivers/audio/ac97/auvia/util.c b/src/add-ons/kernel/drivers/audio/ac97/auvia/util.c deleted file mode 100644 index 25394fd919..0000000000 --- a/src/add-ons/kernel/drivers/audio/ac97/auvia/util.c +++ /dev/null @@ -1,100 +0,0 @@ -/* - * BeOS Driver for Intel ICH AC'97 Link interface - * - * Copyright (c) 2002, Marcus Overhagen - * - * All rights reserved. - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * - Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * - Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR - * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, - * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - */ -#include -#include -#include - -//#define DEBUG 2 - -#include "debug.h" -#include "util.h" - -spinlock slock = B_SPINLOCK_INITIALIZER; - -uint32 round_to_pagesize(uint32 size); - - -cpu_status -lock(void) -{ - cpu_status status = disable_interrupts(); - acquire_spinlock(&slock); - return status; -} - - -void -unlock(cpu_status status) -{ - release_spinlock(&slock); - restore_interrupts(status); -} - - -uint32 -round_to_pagesize(uint32 size) -{ - return (size + B_PAGE_SIZE - 1) & ~(B_PAGE_SIZE - 1); -} - - -area_id -alloc_mem(void **phy, void **log, size_t size, const char *name) -{ -// TODO: phy should be phys_addr_t*! - physical_entry pe; - void * logadr; - area_id areaid; - status_t rv; - - LOG(("allocating %d bytes for %s\n",size,name)); - - size = round_to_pagesize(size); - areaid = create_area(name, &logadr, B_ANY_KERNEL_ADDRESS, size, - B_32_BIT_CONTIGUOUS, B_READ_AREA | B_WRITE_AREA); - // TODO: The rest of the code doesn't deal correctly with physical - // addresses > 4 GB, so we have to force 32 bit addresses here. - if (areaid < B_OK) { - PRINT(("couldn't allocate area %s\n",name)); - return B_ERROR; - } - rv = get_memory_map(logadr,size,&pe,1); - if (rv < B_OK) { - delete_area(areaid); - PRINT(("couldn't map %s\n",name)); - return B_ERROR; - } - memset(logadr,0,size); - if (log) - *log = logadr; - if (phy) - *phy = (void*)(addr_t)pe.address; - LOG(("area = %d, size = %d, log = %#08X, phy = %#08X\n",areaid,size,logadr,pe.address)); - return areaid; -} - diff --git a/src/add-ons/kernel/drivers/audio/ac97/auvia/util.h b/src/add-ons/kernel/drivers/audio/ac97/auvia/util.h deleted file mode 100644 index 7a367042ca..0000000000 --- a/src/add-ons/kernel/drivers/audio/ac97/auvia/util.h +++ /dev/null @@ -1,40 +0,0 @@ -/* - * BeOS Driver for Intel ICH AC'97 Link interface - * - * Copyright (c) 2002, Marcus Overhagen - * - * All rights reserved. - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * - Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * - Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR - * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, - * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - */ -#ifndef _UTIL_H_ -#define _UTIL_H_ - -#include - -area_id alloc_mem(void **phy, void **log, size_t size, const char *name); - -cpu_status lock(void); -void unlock(cpu_status status); - -extern spinlock slock; - -#endif diff --git a/src/add-ons/kernel/drivers/audio/ac97/auich/util.c b/src/add-ons/kernel/drivers/audio/ac97/util.c similarity index 100% rename from src/add-ons/kernel/drivers/audio/ac97/auich/util.c rename to src/add-ons/kernel/drivers/audio/ac97/util.c diff --git a/src/add-ons/kernel/drivers/audio/ac97/auich/util.h b/src/add-ons/kernel/drivers/audio/ac97/util.h similarity index 100% rename from src/add-ons/kernel/drivers/audio/ac97/auich/util.h rename to src/add-ons/kernel/drivers/audio/ac97/util.h