From c95f35ce9de5f9e8ed86142b19beca3ce6cc3eea Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Axel=20D=C3=B6rfler?= Date: Thu, 9 Aug 2012 13:57:34 +0200 Subject: [PATCH] Fixed 64 bit issue for the buffer descriptor base. --- src/add-ons/kernel/drivers/audio/hda/driver.h | 4 ++-- .../kernel/drivers/audio/hda/hda_controller.cpp | 14 +++++++------- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/src/add-ons/kernel/drivers/audio/hda/driver.h b/src/add-ons/kernel/drivers/audio/hda/driver.h index 7996768626..c4799b27f3 100644 --- a/src/add-ons/kernel/drivers/audio/hda/driver.h +++ b/src/add-ons/kernel/drivers/audio/hda/driver.h @@ -1,5 +1,5 @@ /* - * Copyright 2007-2008, Haiku, Inc. All Rights Reserved. + * Copyright 2007-2012, Haiku, Inc. All Rights Reserved. * Distributed under the terms of the MIT License. * * Authors: @@ -161,7 +161,7 @@ struct hda_stream { area_id buffer_area; area_id buffer_descriptors_area; - uint32 physical_buffer_descriptors; /* BDL physical address */ + phys_addr_t physical_buffer_descriptors; /* BDL physical address */ int32 incorrect_position_count; bool use_dma_position; diff --git a/src/add-ons/kernel/drivers/audio/hda/hda_controller.cpp b/src/add-ons/kernel/drivers/audio/hda/hda_controller.cpp index f3a689146c..350e36a994 100644 --- a/src/add-ons/kernel/drivers/audio/hda/hda_controller.cpp +++ b/src/add-ons/kernel/drivers/audio/hda/hda_controller.cpp @@ -1,5 +1,5 @@ /* - * Copyright 2007-2010, Haiku, Inc. All Rights Reserved. + * Copyright 2007-2012, Haiku, Inc. All Rights Reserved. * Distributed under the terms of the MIT License. * * Authors: @@ -670,12 +670,11 @@ hda_stream_setup_buffers(hda_audio_group* audioGroup, hda_stream* stream, return rc; } - stream->physical_buffer_descriptors = (uint32)pe.address; + stream->physical_buffer_descriptors = pe.address; dprintf("%s(%s): Allocated %ld bytes for %ld BDLEs\n", __func__, desc, alloc, bdlCount); - /* Setup buffer descriptor list (BDL) entries */ uint32 fragments = 0; for (uint32 index = 0; index < stream->num_buffers; @@ -689,13 +688,14 @@ hda_stream_setup_buffers(hda_audio_group* audioGroup, hda_stream* stream, // we want an interrupt after every buffer } - /* Configure stream registers */ + // Configure stream registers stream->Write16(HDAC_STREAM_FORMAT, format); stream->Write32(HDAC_STREAM_BUFFERS_BASE_LOWER, - stream->physical_buffer_descriptors); - stream->Write32(HDAC_STREAM_BUFFERS_BASE_UPPER, 0); + (uint32)stream->physical_buffer_descriptors); + stream->Write32(HDAC_STREAM_BUFFERS_BASE_UPPER, + (uint32)(stream->physical_buffer_descriptors >> 32)); stream->Write16(HDAC_STREAM_LAST_VALID, fragments - 1); - /* total cyclic buffer size in _bytes_ */ + // total cyclic buffer size in _bytes_ stream->Write32(HDAC_STREAM_BUFFER_SIZE, stream->buffer_size * stream->num_buffers); stream->Write8(HDAC_STREAM_CONTROL2, stream->id << CONTROL2_STREAM_SHIFT);