[haiku-commits] haiku: hrev46094 - src/add-ons/kernel/drivers/audio/hda src/add-ons/kernel/bus_managers/virtio headers/private/virtio

  • From: korli@xxxxxxxxxxxxxxxx
  • To: haiku-commits@xxxxxxxxxxxxx
  • Date: Wed, 18 Sep 2013 18:27:41 +0200 (CEST)

hrev46094 adds 2 changesets to branch 'master'
old head: 7416b5878f62ef0c1871e53607ccfebdc82f86b8
new head: bd3bcbe5d6f544a4c9ce93cf28c29fd9e88abbe9
overview: http://cgit.haiku-os.org/haiku/log/?qt=range&q=bd3bcbe+%5E7416b58

----------------------------------------------------------------------------

33f263c: virtio: add queue_is_full(), queue_is_empty(), queue_size() hooks.

bd3bcbe: hda: reorganized the code for sense checking.
  
  * should help with #9965

                                   [ Jerome Duval <jerome.duval@xxxxxxxxx> ]

----------------------------------------------------------------------------

4 files changed, 43 insertions(+), 10 deletions(-)
headers/private/virtio/virtio.h                  |  6 ++++
.../kernel/bus_managers/virtio/VirtioModule.cpp  | 30 +++++++++++++++++++-
.../kernel/bus_managers/virtio/VirtioPrivate.h   |  1 +
.../kernel/drivers/audio/hda/hda_codec.cpp       | 16 +++++------

############################################################################

Commit:      33f263cb01e82be571639584a3fe6a690b583467
URL:         http://cgit.haiku-os.org/haiku/commit/?id=33f263c
Author:      Jerome Duval <jerome.duval@xxxxxxxxx>
Date:        Mon Sep 16 15:09:00 2013 UTC

virtio: add queue_is_full(), queue_is_empty(), queue_size() hooks.

----------------------------------------------------------------------------

diff --git a/headers/private/virtio/virtio.h b/headers/private/virtio/virtio.h
index 0379242..12691a1 100644
--- a/headers/private/virtio/virtio.h
+++ b/headers/private/virtio/virtio.h
@@ -117,6 +117,12 @@ typedef struct {
                size_t readVectorCount, size_t writtenVectorCount,
                virtio_callback_func callback, void *callbackCookie);
 
+       bool (*queue_is_full)(virtio_queue queue);
+
+       bool (*queue_is_empty)(virtio_queue queue);
+
+       uint16 (*queue_size)(virtio_queue queue);
+
 } virtio_device_interface;
 
 
diff --git a/src/add-ons/kernel/bus_managers/virtio/VirtioModule.cpp 
b/src/add-ons/kernel/bus_managers/virtio/VirtioModule.cpp
index f2a284e..41b5860 100644
--- a/src/add-ons/kernel/bus_managers/virtio/VirtioModule.cpp
+++ b/src/add-ons/kernel/bus_managers/virtio/VirtioModule.cpp
@@ -134,6 +134,31 @@ virtio_queue_request(virtio_queue cookie, const 
physical_entry *readEntry,
 }
 
 
+bool
+virtio_queue_is_full(virtio_queue cookie)
+{
+       VirtioQueue *queue = (VirtioQueue *)cookie;
+       return queue->IsFull();
+}
+
+
+bool
+virtio_queue_is_empty(virtio_queue cookie)
+{
+       VirtioQueue *queue = (VirtioQueue *)cookie;
+       return queue->IsEmpty();
+}
+
+
+uint16
+virtio_queue_size(virtio_queue cookie)
+{
+       VirtioQueue *queue = (VirtioQueue *)cookie;
+       return queue->Size();
+}
+
+
+
 //     #pragma mark -
 
 
@@ -222,7 +247,10 @@ virtio_device_interface virtio_device_module = {
        virtio_alloc_queues,
        virtio_setup_interrupt,
        virtio_queue_request,
-       virtio_queue_request_v
+       virtio_queue_request_v,
+       virtio_queue_is_full,
+       virtio_queue_is_empty,
+       virtio_queue_size
 };
 
 virtio_for_controller_interface virtio_for_controller_module = {
diff --git a/src/add-ons/kernel/bus_managers/virtio/VirtioPrivate.h 
b/src/add-ons/kernel/bus_managers/virtio/VirtioPrivate.h
index a83eaf8..4e0e0d1 100644
--- a/src/add-ons/kernel/bus_managers/virtio/VirtioPrivate.h
+++ b/src/add-ons/kernel/bus_managers/virtio/VirtioPrivate.h
@@ -107,6 +107,7 @@ public:
 
                        bool                            IsFull() const { return 
fRingFree == 0; }
                        bool                            IsEmpty() const { 
return fRingFree == fRingSize; }
+                       uint16                          Size() const { return 
fRingSize; }
 
                        VirtioDevice*           Device() { return fDevice; }
 

############################################################################

Revision:    hrev46094
Commit:      bd3bcbe5d6f544a4c9ce93cf28c29fd9e88abbe9
URL:         http://cgit.haiku-os.org/haiku/commit/?id=bd3bcbe
Author:      Jerome Duval <jerome.duval@xxxxxxxxx>
Date:        Wed Sep 18 16:26:26 2013 UTC

Ticket:      https://dev.haiku-os.org/ticket/9965

hda: reorganized the code for sense checking.

* should help with #9965

----------------------------------------------------------------------------

diff --git a/src/add-ons/kernel/drivers/audio/hda/hda_codec.cpp 
b/src/add-ons/kernel/drivers/audio/hda/hda_codec.cpp
index b8ff560..4cdd222 100644
--- a/src/add-ons/kernel/drivers/audio/hda/hda_codec.cpp
+++ b/src/add-ons/kernel/drivers/audio/hda/hda_codec.cpp
@@ -1154,7 +1154,7 @@ TRACE("build tree!\n");
 
 
 static void
-hda_codec_switch_init(hda_audio_group* audioGroup)
+hda_audio_group_switch_init(hda_audio_group* audioGroup)
 {
        for (uint32 i = 0; i < audioGroup->widget_count; i++) {
                hda_widget& widget = audioGroup->widgets[i];
@@ -1175,10 +1175,8 @@ hda_codec_switch_init(hda_audio_group* audioGroup)
 
 
 static void
-hda_codec_check_sense(hda_codec* codec, bool disable)
+hda_audio_group_check_sense(hda_audio_group* audioGroup, bool disable)
 {
-       hda_audio_group* audioGroup = codec->audio_groups[0];
-
        for (uint32 i = 0; i < audioGroup->widget_count; i++) {
                hda_widget& widget = audioGroup->widgets[i];
 
@@ -1233,7 +1231,8 @@ hda_codec_switch_handler(hda_codec* codec)
                codec->unsol_response_read %= MAX_CODEC_UNSOL_RESPONSES;
 
                bool disable = response & 1;
-               hda_codec_check_sense(codec, disable);
+               hda_audio_group* audioGroup = codec->audio_groups[0];
+               hda_audio_group_check_sense(audioGroup, disable);
        }
        return B_OK;
 }
@@ -1285,8 +1284,8 @@ hda_codec_new_audio_group(hda_codec* codec, uint32 
audioGroupNodeID)
 
        if (hda_audio_group_build_tree(audioGroup) != B_OK)
                goto err;
-       hda_codec_switch_init(audioGroup);
-
+       hda_audio_group_switch_init(audioGroup);
+       
        audioGroup->playback_stream = hda_stream_new(audioGroup, 
STREAM_PLAYBACK);
        audioGroup->record_stream = hda_stream_new(audioGroup, STREAM_RECORD);
        TRACE("hda: streams playback %p, record %p\n", 
audioGroup->playback_stream,
@@ -1295,6 +1294,7 @@ hda_codec_new_audio_group(hda_codec* codec, uint32 
audioGroupNodeID)
        if (audioGroup->playback_stream != NULL
                || audioGroup->record_stream != NULL) {
                codec->audio_groups[codec->num_audio_groups++] = audioGroup;
+               hda_audio_group_check_sense(audioGroup, false);
                return B_OK;
        }
 
@@ -1527,8 +1527,6 @@ hda_codec_new(hda_controller* controller, uint32 
codecAddress)
                }
        }
 
-       hda_codec_check_sense(codec, false);
-
        codec->unsol_response_thread = spawn_kernel_thread(
                (status_t(*)(void*))hda_codec_switch_handler,
                "hda_codec_unsol_thread", B_LOW_PRIORITY, codec);


Other related posts:

  • » [haiku-commits] haiku: hrev46094 - src/add-ons/kernel/drivers/audio/hda src/add-ons/kernel/bus_managers/virtio headers/private/virtio - korli