📄 mintopo.cpp
字号:
/********************************************************************************
** Copyright (c) 1998-2000 Microsoft Corporation. All Rights Reserved.
**
** Portions Copyright (c) 1998-1999 Intel Corporation
**
********************************************************************************/
// Every debug output has "Modulname text".
static char STR_MODULENAME[] = "ICH Topology: ";
#include "mintopo.h"
/*****************************************************************************
* AC97 topology miniport tables
*/
/*****************************************************************************
* PinDataRangesBridge
*****************************************************************************
* Structures indicating range of valid format values for bridge pins.
*/
static KSDATARANGE PinDataRangesAnalogBridge[] =
{
{
sizeof(KSDATARANGE),
0,
0,
0,
STATICGUIDOF(KSDATAFORMAT_TYPE_AUDIO),
STATICGUIDOF(KSDATAFORMAT_SUBTYPE_ANALOG),
STATICGUIDOF(KSDATAFORMAT_SPECIFIER_NONE)
}
};
/*****************************************************************************
* PinDataRangePointersBridge
*****************************************************************************
* List of pointers to structures indicating range of valid format values
* for audio bridge pins.
*/
static PKSDATARANGE PinDataRangePointersAnalogBridge[] =
{
(PKSDATARANGE)&PinDataRangesAnalogBridge[0]
};
/*****************************************************************************
* PropertiesVolume
*****************************************************************************
* Properties for volume controls.
*/
static PCPROPERTY_ITEM PropertiesVolume[] =
{
{
&KSPROPSETID_Audio,
KSPROPERTY_AUDIO_VOLUMELEVEL,
KSPROPERTY_TYPE_GET | KSPROPERTY_TYPE_SET | KSPROPERTY_TYPE_BASICSUPPORT,
CMiniportTopologyICH::PropertyHandler_Level
},
{
&KSPROPSETID_Audio,
KSPROPERTY_AUDIO_CPU_RESOURCES,
KSPROPERTY_TYPE_GET,
CMiniportTopologyICH::PropertyHandler_CpuResources
}
};
/*****************************************************************************
* AutomationVolume
*****************************************************************************
* Automation table for volume controls.
*/
DEFINE_PCAUTOMATION_TABLE_PROP (AutomationVolume, PropertiesVolume);
/*****************************************************************************
* PropertiesMute
*****************************************************************************
* Properties for mute controls.
*/
static PCPROPERTY_ITEM PropertiesMute[] =
{
{
&KSPROPSETID_Audio,
KSPROPERTY_AUDIO_MUTE,
KSPROPERTY_TYPE_GET | KSPROPERTY_TYPE_SET,
CMiniportTopologyICH::PropertyHandler_OnOff
},
{
&KSPROPSETID_Audio,
KSPROPERTY_AUDIO_CPU_RESOURCES,
KSPROPERTY_TYPE_GET,
CMiniportTopologyICH::PropertyHandler_CpuResources
}
};
/*****************************************************************************
* AutomationMute
*****************************************************************************
* Automation table for mute controls.
*/
DEFINE_PCAUTOMATION_TABLE_PROP (AutomationMute, PropertiesMute);
/*****************************************************************************
* PropertiesMux
*****************************************************************************
* Properties for mux controls.
*/
static PCPROPERTY_ITEM PropertiesMux[] =
{
{
&KSPROPSETID_Audio,
KSPROPERTY_AUDIO_MUX_SOURCE,
KSPROPERTY_TYPE_GET | KSPROPERTY_TYPE_SET,
CMiniportTopologyICH::PropertyHandler_Ulong
},
{
&KSPROPSETID_Audio,
KSPROPERTY_AUDIO_CPU_RESOURCES,
KSPROPERTY_TYPE_GET,
CMiniportTopologyICH::PropertyHandler_CpuResources
}
};
/*****************************************************************************
* AutomationMux
*****************************************************************************
* Automation table for mux controls.
*/
DEFINE_PCAUTOMATION_TABLE_PROP (AutomationMux, PropertiesMux);
/*****************************************************************************
* PropertiesSpecial
*****************************************************************************
* Properties for Special controls like fake loudness and fake agc.
*/
static PCPROPERTY_ITEM PropertiesSpecial[] =
{
{
&KSPROPSETID_Audio,
KSPROPERTY_AUDIO_AGC,
KSPROPERTY_TYPE_GET | KSPROPERTY_TYPE_SET,
CMiniportTopologyICH::PropertyHandler_OnOff
},
{
&KSPROPSETID_Audio,
KSPROPERTY_AUDIO_LOUDNESS,
KSPROPERTY_TYPE_GET | KSPROPERTY_TYPE_SET,
CMiniportTopologyICH::PropertyHandler_OnOff
},
{
&KSPROPSETID_Audio,
KSPROPERTY_AUDIO_CPU_RESOURCES,
KSPROPERTY_TYPE_GET,
CMiniportTopologyICH::PropertyHandler_CpuResources
}
};
/*****************************************************************************
* AutomationAgc
*****************************************************************************
* Automation table for agc controls.
*/
DEFINE_PCAUTOMATION_TABLE_PROP (AutomationSpecial, PropertiesSpecial);
/*****************************************************************************
* PropertiesTone
*****************************************************************************
* Properties for tone controls.
*/
static PCPROPERTY_ITEM PropertiesTone[] =
{
{
&KSPROPSETID_Audio,
KSPROPERTY_AUDIO_BASS,
KSPROPERTY_TYPE_GET | KSPROPERTY_TYPE_SET | KSPROPERTY_TYPE_BASICSUPPORT,
CMiniportTopologyICH::PropertyHandler_Tone
},
{
&KSPROPSETID_Audio,
KSPROPERTY_AUDIO_TREBLE,
KSPROPERTY_TYPE_GET | KSPROPERTY_TYPE_SET | KSPROPERTY_TYPE_BASICSUPPORT,
CMiniportTopologyICH::PropertyHandler_Tone
},
{
&KSPROPSETID_Audio,
KSPROPERTY_AUDIO_CPU_RESOURCES,
KSPROPERTY_TYPE_GET,
CMiniportTopologyICH::PropertyHandler_CpuResources
}
};
/*****************************************************************************
* AutomationTone
*****************************************************************************
* Automation table for tone controls.
*/
DEFINE_PCAUTOMATION_TABLE_PROP (AutomationTone, PropertiesTone);
/*****************************************************************************
* Properties3D
*****************************************************************************
* Properties for 3D controls.
*/
static PCPROPERTY_ITEM Properties3D[] =
{
// are faky volume controls.
{
&KSPROPSETID_Audio,
KSPROPERTY_AUDIO_VOLUMELEVEL,
KSPROPERTY_TYPE_GET | KSPROPERTY_TYPE_SET | KSPROPERTY_TYPE_BASICSUPPORT,
CMiniportTopologyICH::PropertyHandler_Tone
},
{
&KSPROPSETID_Audio,
KSPROPERTY_AUDIO_CPU_RESOURCES,
KSPROPERTY_TYPE_GET,
CMiniportTopologyICH::PropertyHandler_CpuResources
}
};
/*****************************************************************************
* Automation3D
*****************************************************************************
* Automation table for 3D controls.
*/
DEFINE_PCAUTOMATION_TABLE_PROP (Automation3D, Properties3D);
#ifdef INCLUDE_PRIVATE_PROPERTY
/*****************************************************************************
* FilterPropertiesPrivate
*****************************************************************************
* Properties for AC97 features.
*/
static PCPROPERTY_ITEM FilterPropertiesPrivate[] =
{
// This is a private property for getting the AC97 codec features.
{
&KSPROPSETID_Private,
KSPROPERTY_AC97_FEATURES,
KSPROPERTY_TYPE_GET,
CMiniportTopologyICH::PropertyHandler_Private
}
#ifdef PROPERTY_SHOW_SET
,
// This is a private property for getting the AC97 codec features.
{
&KSPROPSETID_Private,
KSPROPERTY_AC97_SAMPLE_SET,
KSPROPERTY_TYPE_SET,
CMiniportTopologyICH::PropertyHandler_Private
}
#endif
};
/*****************************************************************************
* FilterAutomationPrivate
*****************************************************************************
* Filter's automation table for private property controls.
*/
DEFINE_PCAUTOMATION_TABLE_PROP (FilterAutomationPrivate, FilterPropertiesPrivate);
#endif
#pragma code_seg("PAGE")
/*****************************************************************************
* CreateMiniportTopologyICH
*****************************************************************************
* Creates a topology miniport object for the ICH audio adapter. This uses a
* macro from STDUNK.H to do all the work.
*/
NTSTATUS CreateMiniportTopologyICH
(
OUT PUNKNOWN * Unknown,
IN REFCLSID,
IN PUNKNOWN UnknownOuter OPTIONAL,
IN POOL_TYPE PoolType
)
{
PAGED_CODE ();
ASSERT (Unknown);
STD_CREATE_BODY (CMiniportTopologyICH, Unknown, UnknownOuter, PoolType);
}
/*****************************************************************************
* CMiniportTopologyICH::NonDelegatingQueryInterface
*****************************************************************************
* Obtains an interface. This function works just like a COM QueryInterface
* call and is used if the object is not being aggregated.
* We basically just check any GUID we know and return this object in case we
* know it.
*/
STDMETHODIMP_(NTSTATUS) CMiniportTopologyICH::NonDelegatingQueryInterface
(
IN REFIID Interface,
OUT PVOID * Object
)
{
PAGED_CODE ();
ASSERT (Object);
DOUT (DBG_PRINT, ("[CMiniportTopologyICH::NonDelegatingQueryInterface]"));
// Is it IID_IUnknown?
if (IsEqualGUIDAligned (Interface, IID_IUnknown))
{
*Object = (PVOID)(PUNKNOWN)this;
}
else
// or IID_IMiniport ...
if (IsEqualGUIDAligned (Interface, IID_IMiniport))
{
*Object = (PVOID)(PMINIPORT)this;
}
else
// or IID_IMiniportTopology ...
if (IsEqualGUIDAligned (Interface, IID_IMiniportTopology))
{
*Object = (PVOID)(PMINIPORTTOPOLOGY)this;
}
else
// or maybe our IID_IMiniportTopologyICH ...
if (IsEqualGUIDAligned (Interface, IID_IMiniportTopologyICH))
{
*Object = (PVOID)(PMINIPORTTOPOLOGYICH)this;
}
else
{
// nothing found, must be an unknown interface.
*Object = NULL;
return STATUS_INVALID_PARAMETER;
}
//
// We reference the interface for the caller.
//
((PUNKNOWN)(*Object))->AddRef ();
return STATUS_SUCCESS;
}
/*****************************************************************************
* CMiniportTopologyICH::~CMiniportTopologyICH
*****************************************************************************
* Destructor.
*/
CMiniportTopologyICH::~CMiniportTopologyICH ()
{
PAGED_CODE ();
DOUT (DBG_PRINT, ("[CMiniportTopologyICH::~CMiniportTopologyICH]"));
// release all the stuff that we had referenced or allocated.
if (AdapterCommon)
{
// Notify the AdapterCommon that we go away.
AdapterCommon->SetMiniportTopology (NULL);
AdapterCommon->Release ();
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -