亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? wavepdd.c

?? 基于AMD Au1200(MIPS32處理器)的AC97驅(qū)動源碼
?? C
?? 第 1 頁 / 共 2 頁
字號:
						return FALSE;
					}
					break;

				case D0:

					if (WaveDevice->CurrentPowerState != D1)
					{
						//
						// Coming back from a suspend, perform a cold reset
						// to re-init the codec.
						//
						if (WaveDevice->CurrentPowerState == D4)
						{
							InitializeRegisters(WaveDevice->AC97Ctrl);
							InitializeCodec(WaveDevice);
						}

						//
						// Coming back from standby, only have to warm reset
						// the codec to get the AC-Link back online.
						//
						else if (WaveDevice->CurrentPowerState == D2)
						{
							WRITE_REGISTER_ULONG((PULONG)&WaveDevice->AC97Ctrl->rst, 
												 PSC_AC97_RST_SNC);
							HalStallExecution(10);
							WRITE_REGISTER_ULONG((PULONG)&WaveDevice->AC97Ctrl->rst, 0);
						}

						if (!CodecPowerUp(WaveDevice->AC97Ctrl))
						{
							DEBUGMSG(ZONE_PDD,(TEXT("Codec did not power up\r\n")));
							return FALSE;
						}

						WaveInResource->DmaRunning = FALSE;
						WaveOutResource->DmaRunning = FALSE;

// Power up the amplifier if your platform has one
#ifdef PLATFORM_AMPLIFIER_POWERUP
	PLATFORM_AMPLIFIER_POWERUP
#endif
					}
					break;

				default:
					break;

			} //IOCTL_POWER_SET

			// Set up state variable.
			WaveDevice->CurrentPowerState = Param1;
			break;

	} //Message

    DEBUGMSG(ZONE_PDD, (TEXT("-Audio PDD_AudioMessage\r\n")));
	return TRUE;
}


BOOL 
PDD_AudioInitialize (
    ULONG Index
    )
{

    WaveDevice = LocalAlloc(LMEM_FIXED | LMEM_ZEROINIT,
                            sizeof(*WaveDevice));

    DEBUGMSG(ZONE_PDD,(L"+PDD_AudioInitialize\r\n"));
    if (WaveDevice == NULL) {
        DEBUGMSG(ZONE_PDD, (
                 TEXT("PDD_AudioInitialize: Failed to allocate configuration")
                 TEXT(" structure.\r\n")));

        SetLastError(ERROR_NOT_ENOUGH_MEMORY);
        goto ErrorReturn;
    }
    
    //
    // Read in the configuration values.
    //
    WaveDevice->DmaBufferSize = DMA_BUFFER_SIZE;

    //
    //  Grab a spinlock
    //
    InitializeCriticalSection(&WaveDevice->CriticalSection);

    if(!InitializePlatform(WaveDevice)) {
        DEBUGMSG(ZONE_PDD,(L"Failed to Initialize platform registers\r\n"));
        goto ErrorReturn;
    }

    if(!InitializeCodec(WaveDevice)) {
        DEBUGMSG(ZONE_PDD,(L"Failed to Initialize CODEC registers\r\n"));
        goto ErrorReturn;
    }
    
    if(!InitializeDMA(WaveDevice)) {
        DEBUGMSG(ZONE_PDD,(L"Failed to Initialize DMA\r\n"));
        goto ErrorReturn;
    }
    
    if(!InitializeInterrupt(WaveDevice)) {
        DEBUGMSG(ZONE_PDD,(L"Failed to Initialize Interrupt\r\n"));
        goto ErrorReturn;
    }

    WaveOutResource = LocalAlloc(LMEM_FIXED | LMEM_ZEROINIT,
                                 sizeof(*WaveOutResource));

    if(WaveOutResource==NULL) {
        DEBUGMSG(ZONE_PDD,(L"Failed to allocate Out Resouece\r\n"));
        goto ErrorReturn;
    }

    WaveOutResource->WaveDirection=WAPI_OUT;
    WaveOutResource->DmaBufferSize=WaveDevice->DmaBufferSize;
    WaveOutResource->DMAChannel=WaveDevice->DMAChannelOutput;
    WaveOutResource->AC97Ctrl=WaveDevice->AC97Ctrl;
	WaveOutResource->CriticalSection=WaveDevice->CriticalSection;


    WaveInResource = LocalAlloc(LMEM_FIXED | LMEM_ZEROINIT,
                                sizeof(*WaveInResource));

    if(WaveInResource==NULL) {
        DEBUGMSG(ZONE_PDD,(L"Failed to allocate Out Resource\r\n"));
        goto ErrorReturn;
    }

    WaveInResource->WaveDirection=WAPI_IN;
    WaveInResource->DmaBufferSize=WaveDevice->DmaBufferSize;
    WaveInResource->DMAChannel=WaveDevice->DMAChannelInput;
    WaveInResource->AC97Ctrl=WaveDevice->AC97Ctrl;
	WaveInResource->CriticalSection=WaveDevice->CriticalSection;

    
    DEBUGMSG(ZONE_PDD,(L"-PDD_AudioInitialize\r\n"));
    return TRUE;
ErrorReturn:
    DEBUGMSG(ZONE_PDD,(L"-PDD_AudioInitialize failed\r\n"));
    return FALSE;
}

VOID
PDD_AudioDeinitialize (
    VOID
    )
{

    DEBUGMSG(ZONE_PDD, (TEXT("+Audio PDD_AudioDeinitialize.\r\n")));

    // FIXME FIXME  need to free used resources
    
    if (WaveDevice != NULL) {
        LocalFree(WaveDevice);
        WaveDevice = NULL;
    }
    DEBUGMSG(ZONE_PDD, (TEXT("-Audio PDD_AudioDeinitialize.\r\n")));

    return;
}

VOID 
PDD_AudioPowerHandler (
    BOOL PowerDown
    )
{
    return;
}


MMRESULT
PDD_WaveProc(
    IN WAPI_INOUT ApiDirection,
    IN ULONG Code,
    IN OUT ULONG Param1,
    IN OUT ULONG Param2
    )

/*++

Routine Description:

    This routine is called to access various other functions in the driver
    It's similar to an I/O control in standard streams drivers.

Arguments:

    ApiDirection - Direction (input or output).

    Code - Code specifying which function to call.

    Param1 - Parameter 1.  Its usage is dependent on which function is called.

    Param2 - Parameter 2.  Its usage is dependent on which function is called.

Return Value:

    None.

--*/

{
    MMRESULT ReturnValue;

        
    DEBUGMSG(ZONE_PDD, (TEXT("+Audio PDD_WaveProc.\r\n")));

    ReturnValue = MMSYSERR_NOERROR;

    switch(Code) {

    case WPDM_CLOSE:

        DEBUGMSG(ZONE_PDD, (
                 TEXT("   PDD_WaveProc: WPDM_CLOSE(%s).\r\n"),
                 DIR_STR(ApiDirection)));

        if (ApiDirection == WAPI_IN) {

            ReturnValue = WaveClose(WaveInResource);
        }
        else {

            ReturnValue = WaveClose(WaveOutResource);
        }

        break;

    case WPDM_CONTINUE:

        DEBUGMSG(ZONE_PDD, (
                 TEXT("   PDD_WaveProc: WPDM_CONTINUE(%s).\r\n"),
                 DIR_STR(ApiDirection)));

        if (ApiDirection == WAPI_IN) {
            WaveInContinue(WaveInResource,
                           WaveOutResource,
                           (PWAVEHDR)Param1);
        }
        else  {
            WaveOutContinue(WaveOutResource,
                            (PWAVEHDR)Param1);
        }

        break;

    case WPDM_GETDEVCAPS:

        DEBUGMSG(ZONE_PDD, (
                 TEXT("   PDD_WaveProc: WPDM_GETDEVCAPS(%s).\r\n"),
                 DIR_STR(ApiDirection)));

        ReturnValue = WaveGetDeviceCapabilities(ApiDirection,
                                                (PVOID)Param1,
                                                (UINT)Param2);
        break;

    case WPDM_OPEN:

        DEBUGMSG(ZONE_PDD, (
                 TEXT("   PDD_WaveProc: WPDM_OPEN(%s).\r\n"),
                 DIR_STR(ApiDirection)));

        if (ApiDirection == WAPI_IN) {

            ReturnValue = WaveOpen((LPWAVEFORMATEX)Param1,
                                   (BOOL)Param2,
                                   WaveInResource);
        }
        else {

            ReturnValue = WaveOpen((LPWAVEFORMATEX)Param1,
                                   (BOOL)Param2,
                                   WaveOutResource);
        }

        break;

    case WPDM_STANDBY:

        DEBUGMSG(ZONE_PDD, (
                 TEXT("   PDD_WaveProc: WPDM_STANDBY(%s).\r\n"),
                 DIR_STR(ApiDirection)));

        if (ApiDirection == WAPI_IN) {

            WaveStandby(WaveInResource);
        }
        else {

            WaveStandby(WaveOutResource);
        }
        
        
        break;

    case WPDM_START:

        DEBUGMSG(ZONE_PDD, (
                 TEXT("   PDD_WaveProc: WPDM_START(%s).\r\n"),
                 DIR_STR(ApiDirection)));

        
        if (ApiDirection == WAPI_IN) {
            WaveInStart(WaveInResource,
                        WaveOutResource,
                        (PWAVEHDR)Param1);
        }
        else {
            WaveOutStart(WaveOutResource,
                         (PWAVEHDR)Param1);
        }

        break;

    case WPDM_STOP:

        DEBUGMSG(ZONE_PDD, (
                 TEXT("   PDD_WaveProc: WPDM_STOP(%s).\r\n"),
                 DIR_STR(ApiDirection)));

        if (ApiDirection == WAPI_IN) {
            WaveInStop(WaveInResource,WaveOutResource);
        }
        else {
            WaveOutEndOfData(WaveOutResource);
        }

        break;

    case WPDM_PAUSE:

        DEBUGMSG(ZONE_PDD, (
                 TEXT("   PDD_WaveProc: WPDM_PAUSE(%s).\r\n"),
                 DIR_STR(ApiDirection)));

        if (ApiDirection == WAPI_OUT) {

            //
            // Call end of data to halt transfer.
            //

            WaveOutEndOfData(WaveOutResource);
        }
        else {

            ReturnValue = MMSYSERR_NOTSUPPORTED;
        }

        break;

    case WPDM_ENDOFDATA:

        DEBUGMSG(ZONE_PDD, (
                 TEXT("   PDD_WaveProc: WPDM_ENDOFDATA(%s).\r\n"),
                 DIR_STR(ApiDirection)));

        if (ApiDirection == WAPI_OUT) {

            WaveOutEndOfData(WaveOutResource);
        }
        else {

            ReturnValue = MMSYSERR_NOTSUPPORTED;
        }

        break;

    case WPDM_RESTART:

        DEBUGMSG(ZONE_PDD, (
                 TEXT("   PDD_WaveProc: WPDM_RESTART(%s).\r\n"),
                 DIR_STR(ApiDirection)));

        if (ApiDirection == WAPI_OUT) {

            //
            // Call start to continue in stream where we left off.
            //

            WaveOutStart(WaveOutResource,
                         (PWAVEHDR)Param1);
        }
        else  {

            ReturnValue = MMSYSERR_NOTSUPPORTED;
        }

        break;

    case WPDM_GETVOLUME:

        DEBUGMSG(ZONE_PDD, (
                 TEXT("   PDD_WaveProc: WPDM_GETVOLUME.\r\n")));

        ReturnValue = GetOutputVolume(WaveDevice,
                                      (PULONG)Param1);


        break;

    case WPDM_SETVOLUME:


        ReturnValue = SetOutputVolume(WaveDevice,
                                      Param1);

        break;

    default:

        DEBUGMSG(ZONE_PDD, (
                 TEXT("   PDD_WaveProc: Unknown code %u.\r\n"),
                      Code));
        ReturnValue = MMSYSERR_NOTSUPPORTED;
        break;
    }
    DEBUGMSG(ZONE_PDD, (TEXT("-Audio PDD_WaveProc.\r\n")));

    return ReturnValue;
}

AUDIO_STATE 
PDD_AudioGetInterruptType(
    VOID
    )
{
    AUDIO_STATE PendingInterrupts;
	ULONG Mask;

    PendingInterrupts = 0;
    DEBUGMSG(ZONE_PDD, (TEXT("+Audio PDD_AudioGetInterruptType.\r\n")));

    //
    // For each of input and output, read the DMA status registers to see if
    // there is a pending interrupt.  Depending on whether or not there is a
    // pending interrupt and if there is more data to play/record, various
    // flags are ORed into the audio state to be returned to the MDD.
    //
	Mask = HalCheckForDMAInterrupt(WaveDevice->DMAChannelInput);

	if( Mask )
	{
		if( WaveInResource->MoreData )
		{
			DEBUGMSG(ZONE_PDD, (
                     TEXT("PDD_AudioGetInterruptType: %s more data.\r\n"),
                     DIR_STR(WAPI_IN)));

			PendingInterrupts |= AUDIO_STATE_IN_RECORDING;

		}
		else
		{
			DEBUGMSG(ZONE_PDD, (
                     TEXT("PDD_AudioGetInterruptType: %s stopped.\r\n"),
                     DIR_STR(WAPI_IN)));

			PendingInterrupts |= AUDIO_STATE_IN_STOPPED;
            SetEvent(hAudioInterrupt);
		}
		HalAckDMAInterrupt(WaveDevice->DMAChannelInput,Mask);
        goto ReturnWaveStatus;
	}
    
    //
    // Wave output.
    //
	Mask = HalCheckForDMAInterrupt(WaveDevice->DMAChannelOutput);
    if (Mask)
	{
		if (WaveOutResource->MoreData) 
        {
		    PendingInterrupts |=  AUDIO_STATE_OUT_PLAYING;
	    }
	    else 
	    {
		    PendingInterrupts |=  AUDIO_STATE_OUT_STOPPED;
	    }
		HalAckDMAInterrupt(WaveDevice->DMAChannelOutput,Mask);
    }

ReturnWaveStatus:
    DEBUGMSG(ZONE_PDD, (TEXT("-Audio PDD_AudioGetInterruptType.\r\n")));
    return PendingInterrupts;
}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美猛男男办公室激情| 欧美日韩精品一区二区三区四区 | 91丨porny丨中文| 久久成人综合网| 亚洲午夜精品网| 国产精品国产自产拍在线| 91精品国产入口在线| 日本高清视频一区二区| 韩国精品在线观看| 日韩高清一区二区| 一区二区三区 在线观看视频| 欧美国产精品一区| 日韩精品一区二区在线| 欧美精品在线观看播放| 在线视频综合导航| av亚洲精华国产精华精华| 国内精品伊人久久久久av一坑 | 国产一区二区三区免费看| 亚洲国产成人va在线观看天堂 | 久久99热这里只有精品| 午夜精品一区在线观看| 亚洲精品自拍动漫在线| 欧美zozozo| 久热成人在线视频| 樱桃视频在线观看一区| 国产欧美日韩卡一| xnxx国产精品| 26uuu国产日韩综合| 欧美tk丨vk视频| 欧美一区二区三区免费| 欧美片在线播放| 欧美日韩国产免费一区二区| 欧日韩精品视频| 在线观看日韩一区| 欧美三级午夜理伦三级中视频| 91麻豆精东视频| 一本一本大道香蕉久在线精品| 成年人午夜久久久| 99精品国产99久久久久久白柏 | 夜夜嗨av一区二区三区网页| 亚洲色欲色欲www| 婷婷久久综合九色国产成人 | 97aⅴ精品视频一二三区| 国产精品一二三| 国产成人在线视频网站| 国产精品一区二区在线看| 国产在线精品一区二区| 国产精品自拍网站| 国产盗摄精品一区二区三区在线| 国产91精品久久久久久久网曝门| 成人高清免费观看| 日本乱码高清不卡字幕| 欧美日韩国产a| 欧美大片在线观看一区| 日本一区二区三区dvd视频在线| 国产精品无人区| 一区二区三区美女| 天天影视网天天综合色在线播放 | 91激情五月电影| 欧美三级日本三级少妇99| 91精品国产综合久久久久久久| 欧美一级黄色片| 中文字幕精品三区| 亚洲精品ww久久久久久p站| 午夜伦理一区二区| 国产一区二区三区精品视频| 不卡的av在线| 欧美久久久久久久久久| 国产亚洲成av人在线观看导航| 亚洲日本va午夜在线电影| 午夜精品福利一区二区三区av| 麻豆91免费看| www.日本不卡| 欧美高清视频一二三区| 国产亚洲污的网站| 亚洲国产三级在线| 欧美日韩不卡一区| 久久午夜电影网| 亚洲精品视频观看| 国产在线精品一区二区不卡了| 97se亚洲国产综合在线| 欧美大片国产精品| 亚洲精品一二三区| 国产另类ts人妖一区二区| 欧美色综合网站| 国产欧美一区二区三区网站| 色哦色哦哦色天天综合| 精品久久人人做人人爽| 亚洲欧美日韩中文播放| 国产揄拍国内精品对白| 欧美影片第一页| 国产精品美女久久久久aⅴ国产馆 国产精品美女久久久久av爽李琼 国产精品美女久久久久高潮 | 成人v精品蜜桃久久一区| 欧美日韩成人激情| 亚洲天堂成人网| 国产一区免费电影| 欧美色精品天天在线观看视频| 国产日产精品1区| 麻豆精品国产传媒mv男同| 日本道在线观看一区二区| 国产亚洲成aⅴ人片在线观看| 日韩国产欧美三级| 在线一区二区观看| 中文无字幕一区二区三区 | 国产精品私人自拍| 国内一区二区视频| 91麻豆精品91久久久久同性| 亚洲欧洲中文日韩久久av乱码| 国产精品正在播放| 欧美v亚洲v综合ⅴ国产v| 亚洲国产精品一区二区久久| av电影天堂一区二区在线观看| 精品国产凹凸成av人导航| 午夜精品成人在线| 欧美性做爰猛烈叫床潮| 日韩美女视频一区二区| 成人av在线播放网址| 国产视频视频一区| 狠狠狠色丁香婷婷综合激情| 欧美一区二区三区在| 亚洲成人一区二区| 在线看不卡av| 亚洲专区一二三| 色国产精品一区在线观看| 亚洲欧美日本在线| 色综合色狠狠综合色| 国产精品伦理在线| 粉嫩av一区二区三区| 欧美激情综合五月色丁香小说| 欧美一区二区免费| 日本欧美一区二区三区| 91精品国产综合久久久久| 三级久久三级久久久| 69久久99精品久久久久婷婷| 视频一区视频二区中文字幕| 欧美久久久久免费| 日本视频免费一区| 精品国产乱码久久久久久老虎| 看国产成人h片视频| 久久久天堂av| 成人毛片视频在线观看| 亚洲国产高清aⅴ视频| 不卡的电视剧免费网站有什么| 亚洲欧洲日韩av| 欧洲亚洲精品在线| 奇米在线7777在线精品| 日韩亚洲欧美综合| 国产伦精品一区二区三区免费| 国产午夜精品久久久久久免费视| 国产成人啪免费观看软件| 亚洲国产精品99久久久久久久久| 成人av集中营| 一区二区三区av电影| 7777精品伊人久久久大香线蕉最新版| 日韩avvvv在线播放| 欧美不卡123| 不卡一区二区三区四区| 曰韩精品一区二区| 日韩一区二区三区四区| 国产一区二区三区免费| 亚洲丝袜精品丝袜在线| 欧美精品日韩综合在线| 激情偷乱视频一区二区三区| 亚洲观看高清完整版在线观看 | 91麻豆6部合集magnet| 亚洲综合在线免费观看| 日韩欧美一级二级三级久久久| 韩国欧美一区二区| 最近中文字幕一区二区三区| 777午夜精品视频在线播放| 国产精品91xxx| 怡红院av一区二区三区| 精品国产一区二区在线观看| 成人免费观看视频| 午夜伦理一区二区| 亚洲国产精品成人久久综合一区 | 欧美日韩午夜在线| 国产激情视频一区二区三区欧美| 亚洲蜜臀av乱码久久精品蜜桃| 91麻豆精品国产91久久久资源速度 | 欧美天天综合网| 国产一区二区福利视频| 亚洲同性同志一二三专区| 日韩欧美久久久| 色狠狠一区二区| 国产成人夜色高潮福利影视| 五月综合激情网| 中文字幕第一区二区| 日韩视频在线你懂得| 福利一区二区在线观看| 国产精品成人在线观看| 欧美一区二区在线免费播放| 不卡一区在线观看| 久久狠狠亚洲综合| 亚洲乱码国产乱码精品精98午夜 | 日韩黄色小视频| 中文字幕亚洲视频| 久久久久久日产精品| 欧美理论片在线| 日本精品一区二区三区高清 |