提交 a55d1472 编写于 作者: G Goldfish64

AudioDxe: Fix controller cleanup

上级 d6e191d0
......@@ -741,10 +741,10 @@ HdaControllerCleanup(
}
}
// Cleanup streams.
HdaControllerCleanupStreams(HdaControllerDev);
// Stop and cleanup CORB and RIRB.
//
// Cleanup streams, CORB, and RIRB.
//
HdaControllerCleanupStreams (HdaControllerDev);
HdaControllerCleanupRingBuffer (&HdaControllerDev->Corb);
HdaControllerCleanupRingBuffer (&HdaControllerDev->Rirb);
......@@ -931,12 +931,8 @@ HdaControllerDriverBindingStart (
//
// Initialize CORB and RIRB.
//
HdaControllerDev->Corb.HdaDev = HdaControllerDev;
HdaControllerDev->Corb.Type = HDA_RING_BUFFER_TYPE_CORB;
HdaControllerDev->Rirb.HdaDev = HdaControllerDev;
HdaControllerDev->Rirb.Type = HDA_RING_BUFFER_TYPE_RIRB;
if (!HdaControllerInitRingBuffer (&HdaControllerDev->Corb) || !HdaControllerInitRingBuffer (&HdaControllerDev->Rirb)) {
if (!HdaControllerInitRingBuffer (&HdaControllerDev->Corb, HdaControllerDev, HDA_RING_BUFFER_TYPE_CORB)
|| !HdaControllerInitRingBuffer (&HdaControllerDev->Rirb, HdaControllerDev, HDA_RING_BUFFER_TYPE_RIRB)) {
goto FREE_CONTROLLER;
}
......
......@@ -483,7 +483,9 @@ HdaControllerDriverBindingStop(
BOOLEAN
HdaControllerInitRingBuffer (
IN HDA_RING_BUFFER *HdaRingBuffer
IN HDA_RING_BUFFER *HdaRingBuffer,
IN HDA_CONTROLLER_DEV *HdaDev,
IN HDA_RING_BUFFER_TYPE Type
);
VOID
......
......@@ -27,7 +27,9 @@
BOOLEAN
HdaControllerInitRingBuffer (
IN HDA_RING_BUFFER *HdaRingBuffer
IN HDA_RING_BUFFER *HdaRingBuffer,
IN HDA_CONTROLLER_DEV *HdaDev,
IN HDA_RING_BUFFER_TYPE Type
)
{
EFI_STATUS Status;
......@@ -41,18 +43,23 @@ HdaControllerInitRingBuffer (
UINTN BufferSizeActual;
PciIo = HdaRingBuffer->HdaDev->PciIo;
ASSERT (HdaRingBuffer != NULL);
ASSERT (HdaDev != NULL);
if (HdaRingBuffer->Type == HDA_RING_BUFFER_TYPE_CORB) {
if (Type == HDA_RING_BUFFER_TYPE_CORB) {
Offset = HDA_REG_CORB_BASE;
EntrySize = HDA_CORB_ENTRY_SIZE;
} else if (HdaRingBuffer->Type == HDA_RING_BUFFER_TYPE_RIRB) {
} else if (Type == HDA_RING_BUFFER_TYPE_RIRB) {
Offset = HDA_REG_RIRB_BASE;
EntrySize = HDA_RIRB_ENTRY_SIZE;
} else {
return FALSE;
}
HdaRingBuffer->HdaDev = HdaDev;
HdaRingBuffer->Type = Type;
PciIo = HdaDev->PciIo;
//
// Get current value of size register.
//
......@@ -156,6 +163,15 @@ HdaControllerCleanupRingBuffer (
{
EFI_PCI_IO_PROTOCOL *PciIo;
ASSERT (HdaRingBuffer != NULL);
//
// Already freed if NULL.
//
if (HdaRingBuffer->HdaDev == NULL) {
return;
}
PciIo = HdaRingBuffer->HdaDev->PciIo;
//
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册