36 SklHdAudBusPrint(DEBUG_LEVEL_ERROR, DBG_INIT,
"%s Error: unable to put controller in reset\n", __func__);
56 SklHdAudBusPrint(DEBUG_LEVEL_ERROR, DBG_INIT,
"%s Error: controller stuck in reset\n", __func__);
66 "codec mask = 0x%lx\n", fdoCtx->
codecMask);
75 "chipset global capabilities = 0x%x\n", gcap);
94 if (!(corbSize & 0x40)) {
99 if (!(rirbSize & 0x40)) {
204 return (
cmd >> 28) & 0xF;
208 WdfInterruptAcquireLock(fdoCtx->
Interrupt);
220 "%s: device not found\n", __func__);
221 WdfInterruptReleaseLock(fdoCtx->
Interrupt);
232 "%s: device busy\n", __func__);
233 WdfInterruptReleaseLock(fdoCtx->
Interrupt);
245 WdfInterruptReleaseLock(fdoCtx->
Interrupt);
254 "%s: Called. Command: 0x%x\n", __func__,
val);
269#define HDA_RIRB_EX_UNSOL_EV (1<<4)
280 if (wp == fdoCtx->
rirb.
wp)
284 while (fdoCtx->
rirb.
rp != wp) {
293 "Unexpected unsolicited response %x: %x\n",
306 "Unsol response on 0x%x: 0x%x\n",
addr, response.
Response);
320 if (codecXfer->
xfer[0]) {
330 "Got response 0x%x but no xfer!\n", rirb.
response);
342 "Unexpected unsolicited response from address %d %x\n",
addr,
357 handled |= 1 <<
stream->idx;
362 stream->isr.CallbackContext,
426 if (
stream->irqReceived) {
430 if (
stream->registeredCallbacks[
j].InUse) {
433 stream->registeredCallbacks[
j].NotificationCallback(
stream->registeredCallbacks[
j].CallbackContext, unknownVal);
438 if (
stream->registeredEvents[
j]) {
#define InterlockedIncrement
#define InterlockedDecrement
#define NT_SUCCESS(StatCode)
static void udelay(LONG usec)
NTSTATUS HDA_WaitForTransfer(PFDO_CONTEXT fdoCtx, UINT16 codecAddr, _In_ ULONG Count, _Inout_updates_(Count) PHDAUDIO_CODEC_TRANSFER CodecTransfer)
#define SklHdAudBusPrint(dbglevel, fmt,...)
#define KeSetEvent(pEvt, foo, foo2)
#define KeQuerySystemTime(t)
GLuint GLuint GLsizei count
GLenum const GLvoid * addr
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint GLint GLint j
#define HDA_INT_GLOBAL_EN
#define HDA_MAX_RIRB_ENTRIES
#define STATESTS_INT_MASK
#define HDA_MAX_CORB_ENTRIES
#define RIRB_INT_RESPONSE
void HDAInitRirb(PFDO_CONTEXT fdoCtx)
void HDAStartRirb(PFDO_CONTEXT fdoCtx)
void NTAPI hda_dpc(WDFINTERRUPT Interrupt, WDFOBJECT AssociatedObject)
NTSTATUS GetHDACapabilities(PFDO_CONTEXT fdoCtx)
NTSTATUS StopHDAController(PFDO_CONTEXT fdoCtx)
#define HDA_RIRB_EX_UNSOL_EV
NTSTATUS SendHDACmds(PFDO_CONTEXT fdoCtx, ULONG count, PHDAUDIO_CODEC_TRANSFER CodecTransfer)
static void HDAFlushRIRB(PFDO_CONTEXT fdoCtx)
NTSTATUS RunSingleHDACmd(PFDO_CONTEXT fdoCtx, ULONG val, ULONG *res)
BOOLEAN NTAPI hda_interrupt(WDFINTERRUPT Interrupt, ULONG MessageID)
void HDAStartCorb(PFDO_CONTEXT fdoCtx)
NTSTATUS ResetHDAController(PFDO_CONTEXT fdoCtx, BOOLEAN wakeup)
int hda_stream_interrupt(PFDO_CONTEXT fdoCtx, unsigned int status)
static UINT16 HDACommandAddr(UINT32 cmd)
NTSTATUS StartHDAController(PFDO_CONTEXT fdoCtx)
void HDAInitCorb(PFDO_CONTEXT fdoCtx)
void hdac_stream_stop(PHDAC_STREAM stream)
static IPrintDialogCallback callback
#define UNREFERENCED_PARAMETER(P)
PHYSICAL_ADDRESS NTAPI MmGetPhysicalAddress(IN PVOID Address)
#define STATUS_DEVICE_POWER_FAILURE
#define STATUS_DEVICE_FEATURE_NOT_SUPPORTED
#define STATUS_DEVICE_DOES_NOT_EXIST
#define hda_read8(ctx, reg)
#define hda_read32(ctx, reg)
#define hda_write8(ctx, reg, data)
#define hda_read16(ctx, reg)
#define hda_write16(ctx, reg, data)
#define stream_read8(ctx, reg)
#define hda_write32(ctx, reg, data)
#define stream_write8(ctx, reg, data)
PVOID dspInterruptContext
struct _PDO_DEVICE_DATA * codecs[HDA_MAX_CODECS]
BOOLEAN ControllerEnabled
PADSP_INTERRUPT_CALLBACK dspInterruptCallback
PHDAUDIO_CODEC_TRANSFER xfer[HDA_MAX_CORB_ENTRIES]
HDAC_CODEC_XFER xfer[HDA_MAX_CODECS]
LONG cmds[HDA_MAX_CODECS]
KEVENT xferEvent[HDA_MAX_CODECS]
ULONG IsUnsolicitedResponse
struct _HDAUDIO_CODEC_RESPONSE::@2194::@2196::@2198::@2200 Unsolicited
HDAUDIO_CODEC_RESPONSE Input
HDAUDIO_CODEC_COMMAND Output
CODEC_UNSOLICITED_CALLBACK unsolitCallbacks[MAX_UNSOLICIT_CALLBACKS]
#define RtlZeroMemory(Destination, Length)
#define RtlMoveMemory(Destination, Source, Length)
_Must_inspect_result_ _In_ WDFDEVICE Device
_Must_inspect_result_ _In_ WDFDEVICE _In_ BOOLEAN _In_opt_ PVOID Tag
FORCEINLINE WDFDEVICE WdfInterruptGetDevice(_In_ WDFINTERRUPT Interrupt)
_In_ WDFOBJECT AssociatedObject
FORCEINLINE BOOLEAN WdfInterruptQueueDpcForIsr(_In_ WDFINTERRUPT Interrupt)
_Must_inspect_result_ _In_ WDFDEVICE _In_ PWDF_INTERRUPT_CONFIG _In_opt_ PWDF_OBJECT_ATTRIBUTES _Out_ WDFINTERRUPT * Interrupt