11#define STR_MODULENAME "AC97 Property handler: "
24#pragma code_seg("PAGE")
51 that->stNodeCache[Mute].bLeftValid)
56 that->stNodeCache[Mute].lLeft;
58 ntStatus = that->AdapterCommon->WriteCodecRegister (
59 that->AdapterCommon->GetNodeReg (Mute),
61 that->AdapterCommon->GetNodeMask (Mute));
96 that->stNodeCache[
Volume].bLeftValid &&
97 that->stNodeCache[
Volume].bRightValid)
102 lLevel = that->stNodeCache[
Volume].lLeft +
118 wRegister = (
WORD)(((
lMaximum + uStep / 2) - lLevel) / uStep) << 8;
121 lLevel = that->stNodeCache[
Volume].lRight +
129 wRegister += (
WORD)(((
lMaximum + uStep / 2) - lLevel) / uStep);
132 ntStatus = that->AdapterCommon->WriteCodecRegister (
133 that->AdapterCommon->GetNodeReg (
Volume),
135 that->AdapterCommon->GetNodeMask (
Volume));
138 that->stNodeCache[
Volume].lLeft +
200 *plMinimum = 0xFFA18000;
201 *puStep = 0x00018000;
207 *plMinimum = 0xFFD18000;
208 *puStep = 0x00018000;
216 *plMinimum = 0xFFD18000;
217 *puStep = 0x00018000;
222 *plMinimum = 0xFFD30000;
223 *puStep = 0x00030000;
233 *plMaximum = 0x000C0000;
234 *plMinimum = 0xFFDD8000;
235 *puStep = 0x00018000;
248 *plMaximum = 0x00168000;
250 *puStep = 0x00018000;
255 *plMaximum = 0x000A8000;
256 *plMinimum = 0xFFF58000;
257 *puStep = 0x00018000;
269 *plMaximum = 0x000F0000;
270 *plMinimum = 0x00000000;
271 *puStep = 0x00010000;
277 *plMaximum = 0x000F0000;
278 *plMinimum = 0x00000000;
279 *puStep = 0x00010000;
298 *plMaximum = (
DWORD)(-wRegister) << 16;
299 *plMinimum = (
DWORD)(-wRegister) << 16;
300 *puStep = 0x00010000;
344 DOUT (
DBG_PRINT, (
"[CAC97MiniportTopology::PropertyHandler_OnOff]"));
347 if (PropertyRequest->Node == (
ULONG)-1)
357 if ((PropertyRequest->InstanceSize <
sizeof(
LONG)) ||
358 (PropertyRequest->ValueSize <
sizeof(
BOOL)))
362 channel = *(
PLONG)PropertyRequest->Instance;
455 DOUT (
DBG_ERROR, (
"PropertyHandler_OnOff: Invalid node requested."));
495 PropertyRequest->ValueSize =
sizeof(
BOOL);
581 DOUT (
DBG_PRINT, (
"[CAC97MiniportTopology::BasicSupportHandler]"));
626 &
Range->Bounds.SignedMinimum,
627 &
Range->Bounds.SignedMaximum,
628 &
Range->SteppingDelta);
639 Range->Bounds.SignedMaximum,
Range->Bounds.SignedMinimum,
640 Range->SteppingDelta));
650 else if (PropertyRequest->ValueSize >=
sizeof(
ULONG))
660 PropertyRequest->ValueSize =
sizeof(
ULONG);
690 DOUT (
DBG_PRINT, (
"[CAC97MiniportTopology::PropertyHandler_Level]"));
704 if (PropertyRequest->Node == (
ULONG)-1)
714 if ((PropertyRequest->InstanceSize <
sizeof(
LONG)) ||
715 (PropertyRequest->ValueSize <
sizeof(
LONG)))
719 channel = *((
PLONG)PropertyRequest->Instance);
800 DOUT (
DBG_ERROR, (
"PropertyHandler_Level: Invalid node requested."));
830 wRegister = (wRegister & (that->
AdapterCommon->GetNodeMask (NodeDef)
920 PropertyRequest->ValueSize =
sizeof(
LONG);
1033 wRegister = (
WORD)(((lLevel + uStep / 2) -
lMinimum) / uStep);
1057 wRegister = (
WORD)(((
lMaximum + uStep / 2) - lLevel) / uStep);
1175 ASSERT (PropertyRequest);
1177 DOUT (
DBG_PRINT, (
"[CAC97MiniportTopology::PropertyHandler_Tone]"));
1190 if (PropertyRequest->Node == (
ULONG)-1)
1200 if ((PropertyRequest->InstanceSize <
sizeof(
LONG)) ||
1201 (PropertyRequest->ValueSize <
sizeof(
LONG)))
1244 DOUT (
DBG_ERROR, (
"PropertyHandler_Tone: Invalid node requested."));
1283 if (wRegister == 0x000F)
1302 PropertyRequest->ValueSize =
sizeof(
LONG);
1325 wRegister = (
WORD)(((lLevel + uStep / 2) -
lMinimum) / uStep);
1330 wRegister = (
WORD)(((
lMaximum + uStep / 2) - lLevel) / uStep);
1379 ASSERT (PropertyRequest);
1381 DOUT (
DBG_PRINT, (
"[CAC97MiniportTopology::PropertyHandler_Ulong]"));
1395 if (PropertyRequest->Node == (
ULONG)-1)
1403 if (PropertyRequest->ValueSize <
sizeof(
ULONG))
1424 DOUT (
DBG_ERROR, (
"PropertyHandler_Tone: Invalid node requested."));
1461 PropertyRequest->ValueSize =
sizeof(
LONG);
1470 ULONG ulSelect = *PropValue;
1476 if ((ulSelect < 1) || (ulSelect > 2))
1481 if ((ulSelect < 1) || (ulSelect > 8))
1499 wRegister = (
WORD)(ulSelect - 1) * 257;
1541 wRegister = (
WORD)(((
lMaximum + uStep / 2) - lLevel) / uStep);
1543 wRegister = (
WORD)(((lLevel + uStep / 2) -
lMinimum) / uStep);
1556 wRegister = (
WORD)(((
lMaximum + uStep / 2) - lLevel) / uStep);
1558 wRegister = (
WORD)(((lLevel + uStep / 2) -
lMinimum) / uStep);
1631 ASSERT (PropertyRequest);
1633 DOUT (
DBG_PRINT, (
"[CAC97MiniportTopology::PropertyHandler_CpuResources]"));
1642 if (PropertyRequest->Node == (
ULONG)-1)
1653 if (PropertyRequest->ValueSize >=
sizeof(
LONG))
1656 PropertyRequest->ValueSize =
sizeof(
LONG);
1668#ifdef INCLUDE_PRIVATE_PROPERTY
1677NTSTATUS CAC97MiniportTopology::PropertyHandler_Private
1684 ASSERT (PropertyRequest);
1686 DOUT (
DBG_PRINT, (
"[CAC97MiniportTopology::PropertyHandler_Private]"));
1701 if (PropertyRequest->PropertyItem->Id != KSPROPERTY_AC97_FEATURES)
1705 if (PropertyRequest->ValueSize <
sizeof (tAC97Features))
1709 tAC97Features *pAC97Features = (tAC97Features *) PropertyRequest->Value;
1720 pAC97Features->MasterVolume = Volume5bit;
1722 pAC97Features->MasterVolume = Volume6bit;
1724 pAC97Features->HeadphoneVolume = Volume5bit;
1726 pAC97Features->HeadphoneVolume = VolumeDisabled;
1728 pAC97Features->HeadphoneVolume = Volume6bit;
1730 pAC97Features->MonoOutVolume = Volume5bit;
1732 pAC97Features->MonoOutVolume = VolumeDisabled;
1734 pAC97Features->MonoOutVolume = Volume6bit;
1749 pAC97Features->DAC = Resolution16bit;
1750 if (wCodecID & 0x0040)
1751 pAC97Features->DAC = Resolution18bit;
1752 if (wCodecID & 0x0080)
1753 pAC97Features->DAC = Resolution20bit;
1756 pAC97Features->ADC = Resolution16bit;
1757 if (wCodecID & 0x0100)
1758 pAC97Features->ADC = Resolution18bit;
1759 if (wCodecID & 0x0200)
1760 pAC97Features->ADC = Resolution20bit;
1763 pAC97Features->n3DTechnique = ((wCodecID & 0x7C00) >> 10);
1787 PropertyRequest->ValueSize =
sizeof (tAC97Features);
1792#ifdef PROPERTY_SHOW_SET
1799 if (PropertyRequest->PropertyItem->Id != KSPROPERTY_AC97_SAMPLE_SET)
1807 DWORD *pTimerTick = (
DWORD *)PropertyRequest->Value;
1814 DOUT (
DBG_ALL, (
"This computer is already %d ms running Windows!", *pTimerTick));
tNodeCache stNodeCache[NODE_TOP_ELEMENT]
static NTSTATUS GetDBValues(IN PADAPTERCOMMON, IN TopoNodes Node, OUT LONG *plMinimum, OUT LONG *plMaximum, OUT ULONG *puStep)
TopoNodes TransNodeNrToNodeDef(IN int Node)
static NTSTATUS SetMultichannelMute(IN CAC97MiniportTopology *that, IN TopoNodes Mute)
PADAPTERCOMMON AdapterCommon
static NTSTATUS NTAPI PropertyHandler_Ulong(IN PPCPROPERTY_REQUEST PropertyRequest)
static NTSTATUS BasicSupportHandler(IN PPCPROPERTY_REQUEST PropertyRequest)
static NTSTATUS NTAPI PropertyHandler_Level(IN PPCPROPERTY_REQUEST PropertyRequest)
static NTSTATUS SetMultichannelVolume(IN CAC97MiniportTopology *that, IN TopoNodes Volume)
void UpdateRecordMute(void)
static NTSTATUS NTAPI PropertyHandler_Tone(IN PPCPROPERTY_REQUEST PropertyRequest)
static NTSTATUS NTAPI PropertyHandler_OnOff(IN PPCPROPERTY_REQUEST PropertyRequest)
static NTSTATUS NTAPI PropertyHandler_CpuResources(IN PPCPROPERTY_REQUEST PropertyRequest)
#define NT_SUCCESS(StatCode)
#define DOUT(lvl, strings)
@ PINC_CENTER_LFE_PRESENT
@ NODE_VIRT_MASTER_INPUT_VOLUME1
@ NODE_VIRT_MONOOUT_VOLUME1
@ NODE_VIRT_MONOOUT_VOLUME2
@ NODE_VIRT_MASTER_INPUT_VOLUME3
@ NODE_VIRT_MASTER_INPUT_VOLUME8
@ NODE_VIRT_MASTERMONO_MUTE
@ NODE_VIRT_WAVEOUT_3D_BYPASS
@ NODE_VIRT_MASTER_INPUT_VOLUME2
@ NODE_VIRT_MASTER_INPUT_VOLUME6
@ NODE_VIRT_MASTER_INPUT_VOLUME5
@ NODE_VIRT_MASTER_INPUT_VOLUME7
@ NODE_VIRT_MASTERMONO_VOLUME
@ NODE_VIRT_MASTER_INPUT_VOLUME4
@ NODEC_6BIT_CENTER_LFE_VOLUME
@ NODEC_3D_DEPTH_ADJUSTABLE
@ NODEC_PCM_DOUBLERATE_SUPPORTED
@ NODEC_MIC_VARIABLERATE_SUPPORTED
@ NODEC_6BIT_HPOUT_VOLUME
@ NODEC_SURROUND_DAC_PRESENT
@ NODEC_CENTER_DAC_PRESENT
@ NODEC_PCM_VARIABLERATE_SUPPORTED
@ NODEC_3D_CENTER_ADJUSTABLE
@ NODEC_6BIT_SURROUND_VOLUME
@ NODEC_6BIT_MONOOUT_VOLUME
@ NODEC_6BIT_MASTER_VOLUME
IAC97AdapterCommon * PADAPTERCOMMON
#define KSPROPERTY_TYPE_SET
#define KSPROPERTY_TYPE_BASICSUPPORT
#define KSPROPERTY_TYPE_GET
#define KSPROPERTY_MEMBER_STEPPEDRANGES
#define KSPROPTYPESETID_General
struct KSPROPERTY_STEPPING_LONG * PKSPROPERTY_STEPPING_LONG
struct KSPROPERTY_DESCRIPTION * PKSPROPERTY_DESCRIPTION
struct KSPROPERTY_MEMBERSHEADER * PKSPROPERTY_MEMBERSHEADER
const WORD AC97REG_MASK_RIGHT
const WORD AC97REG_MASK_MUTE
const WORD AC97REG_MASK_LEFT
const long PROP_MOST_NEGATIVE
#define STATUS_BUFFER_TOO_SMALL
#define STATUS_INVALID_DEVICE_REQUEST
#define STATUS_INVALID_PARAMETER
#define DBG_PRINT(ppi, ch, level)
_IRQL_requires_same_ typedef _In_ ULONG _In_ UCHAR Level
ActualNumberDriverObjects * sizeof(PDRIVER_OBJECT)) PDRIVER_OBJECT *DriverObjectList