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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? sboot.c

?? i.Mx31 bootloader(for WinCE6.0)
?? C
?? 第 1 頁 / 共 2 頁
字號:
    return TRUE;
}

//-----------------------------------------------------------------------------
//
//  Function:  SerialSendBlockAck
//
//  This function sends Boot requests through serial interface. 
//
//  Parameters:
//      uBlockNumber
//           [in] Serial Block data
//
//  Returns:
//      TRUE for success/FALSE for failure.
//-----------------------------------------------------------------------------
BOOL SerialSendBlockAck(DWORD uBlockNumber)
{
    BYTE buffer[sizeof(SERIAL_PACKET_HEADER) + sizeof(SERIAL_BLOCK_HEADER)];
    PSERIAL_PACKET_HEADER pHeader = (PSERIAL_PACKET_HEADER)buffer;
    PSERIAL_BLOCK_HEADER pBlockAck = (PSERIAL_BLOCK_HEADER)(buffer + sizeof(SERIAL_PACKET_HEADER));

    // create block ack
    pBlockAck->uBlockNum = uBlockNumber;

    // create header
    memcpy(pHeader->headerSig, packetHeaderSig, HEADER_SIG_BYTES);
    pHeader->pktType = KS_PKT_DLACK;
    pHeader->payloadSize = sizeof(SERIAL_BLOCK_HEADER);
    pHeader->crcData = CalcChksum((PBYTE)pBlockAck, sizeof(SERIAL_BLOCK_HEADER));
    pHeader->crcHdr = CalcChksum((PBYTE)pHeader,
        sizeof(SERIAL_PACKET_HEADER) - sizeof(pHeader->crcHdr));

    OEMSerialSendRaw(buffer, sizeof(SERIAL_PACKET_HEADER) + sizeof(SERIAL_BLOCK_HEADER));

    return TRUE;
}

//-----------------------------------------------------------------------------
//
//  Function:  WaitForBootAck
//
//  This function will fail if a boot ack is not received in a timely manner
//  so that another boot request can be sent
//
//  Parameters:
//      pfJump
//           [out] TRUE if recvd boot ack
//
//  Returns:
//      TRUE for success/FALSE for failure.
//-----------------------------------------------------------------------------
BOOL WaitForBootAck(BOOL *pfJump)
{
    BOOL fRet = FALSE;
    USHORT cbBuffer = KITL_MTU;
    SERIAL_PACKET_HEADER header = {0};
    PSERIAL_BOOT_ACK pBootAck = (PSERIAL_BOOT_ACK)g_buffer;

    EdbgOutputDebugString("Waiting for sboot ack...\r\n");
    if(RecvPacket(&header, g_buffer, &cbBuffer, FALSE))
    {
        // header checksum already verified
        if(KS_PKT_DLACK == header.pktType && 
            sizeof(SERIAL_BOOT_ACK) == header.payloadSize)
        {
            EdbgOutputDebugString("Received sboot ack\r\n");
            *pfJump = pBootAck->fJumping;
            fRet = TRUE;
        }
    }

    return fRet;
}

//-----------------------------------------------------------------------------
//
//  Function:  WaitForBootAck
//
//  This function waits indefinitely for jump command
//
//  Parameters:
//      None
//
//  Returns:
//      TRUE for success/FALSE for failure.
//-----------------------------------------------------------------------------
BOOL WaitForJump(VOID)
{
    USHORT cbBuffer = KITL_MTU;
    SERIAL_PACKET_HEADER header = {0};
    PSERIAL_JUMP_REQUEST pJumpReq = (PSERIAL_JUMP_REQUEST)g_buffer;

    // wait indefinitely for a jump request
    for (;;)
    {
        if(RecvPacket(&header, g_buffer, &cbBuffer, TRUE))
        {
            // header & checksum already verified
            if(KS_PKT_JUMP == header.pktType && 
                sizeof(SERIAL_JUMP_REQUEST) == header.payloadSize)
            { 
				if (pJumpReq->dwKitlTransport == KTS_SERIAL)
					g_pBSPArgs->kitl.devLoc.PhysicalLoc = (PVOID)(BSP_BASE_REG_PA_SERIALKITL);

				if (pJumpReq->dwKitlTransport & KTS_PASSIVE_MODE)
					g_pBSPArgs->kitl.flags = OAL_KITL_FLAGS_PASSIVE;

                SerialSendBlockAck(0);

				if (pJumpReq->dwKitlTransport == KTS_SERIAL)
				{
					CHAR cLoop = 5;
					// Keep sending ACK till Platform Builder stops sending JUMP packets
					// Retry for a maximum of 5 times
					do 
					{
						if ( !((RecvPacket(&header, g_buffer, &cbBuffer, TRUE)) &&
							(KS_PKT_JUMP == header.pktType)) )
						{
							cLoop = 0;
						}
						SerialSendBlockAck(0);
						cLoop--;
					} while (cLoop > 0);
				}
				else if (pJumpReq->dwKitlTransport == KTS_ETHER)
				{
				        UINT32 EthDevice = InitSpecifiedEthDevice(&g_pBSPArgs->kitl,  ETH_DEVICE_CS8900A);
				        if (EthDevice == -1)
				        {
				            // No device was found ... 
				            //
				            KITLOutputDebugString("ERROR: Failed to detect and initialize Ethernet controller for KITL.\r\n");
				            return FALSE;
				        }
						else
						{
							// Make sure MAC address has been programmed.
							//
							if (!g_pBSPArgs->kitl.mac[0] && !g_pBSPArgs->kitl.mac[1] && !g_pBSPArgs->kitl.mac[2])
							{
								KITLOutputDebugString("ERROR: Invalid Ethernet address read from Ethernet controller.\n");
								return(FALSE);
							}

							KITLOutputDebugString("INFO: MAC address: %x-%x-%x-%x-%x-%x\r\n",
								g_pBSPArgs->kitl.mac[0] & 0x00FF, g_pBSPArgs->kitl.mac[0] >> 8,
								g_pBSPArgs->kitl.mac[1] & 0x00FF, g_pBSPArgs->kitl.mac[1] >> 8,
								g_pBSPArgs->kitl.mac[2] & 0x00FF, g_pBSPArgs->kitl.mac[2] >> 8);
						}
				}
                return TRUE;
            }
        }
    }

#if 0 // Remove-W4: Warning C4702 workaround
    // never reached
    return FALSE;    
#endif
}

//-----------------------------------------------------------------------------
//
//  Function:  RecvPacket
//
//  This function receives serial packet
//
//  Parameters:
//      pHeader
//          [in] Serial packet header
//
//      pbFrame
//          [in] Serial frame data
//
//      pcbFrame
//          [in] Length of frame
//
//      bWaitInfinite
//          [in] Time to wait in secs
//
//  Returns:
//      TRUE for success/FALSE for failure.
//-----------------------------------------------------------------------------
BOOL RecvPacket(PSERIAL_PACKET_HEADER pHeader, PBYTE pbFrame, PUSHORT pcbFrame, BOOLEAN bWaitInfinite)
{
    // receive header
    if(!RecvHeader(pHeader, bWaitInfinite))
    {
        EdbgOutputDebugString("failed to receive header\r\n");
        return FALSE;
    }

    // verify packet checksum
    if(pHeader->crcHdr != CalcChksum((PBYTE)pHeader, 
        sizeof(SERIAL_PACKET_HEADER) - sizeof(pHeader->crcHdr)))
    {
        EdbgOutputDebugString("header checksum failure\r\n");
        return FALSE;
    }

    // make sure sufficient buffer is provided
    if(*pcbFrame < pHeader->payloadSize)
    {
        EdbgOutputDebugString("insufficient buffer size; ignoring packet\r\n");
        return FALSE;
    }

    // receive data
    *pcbFrame = pHeader->payloadSize;
    if(!OEMSerialRecvRaw(pbFrame, pcbFrame, bWaitInfinite))
    {
        //EdbgOutputDebugString("failed to read packet data\r\n");
        return FALSE;
    }

    // verify data checksum
    if(pHeader->crcData != CalcChksum(pbFrame, *pcbFrame))
    {
        EdbgOutputDebugString("data checksum failure\r\n");
        return FALSE;
    }

    // verify packet type -- don't return any packet that is not
    // a type the bootloader expects to receive
    if(KS_PKT_DLPKT != pHeader->pktType &&
       KS_PKT_DLACK != pHeader->pktType &&
       KS_PKT_JUMP != pHeader->pktType)
    {
        EdbgOutputDebugString("received non-download packet type %x\r\n", pHeader->pktType);
        return FALSE;
    }

    return TRUE;
}

//-----------------------------------------------------------------------------
//
//  Function:  RecvHeader
//
//  This function receives serial header packet
//
//  Parameters:
//      pHeader
//          [in] Serial packet header
//
//      bWaitInfinite
//          [in] Time to wait in secs
//
//  Returns:
//      TRUE for success/FALSE for failure.
//-----------------------------------------------------------------------------
BOOL RecvHeader(PSERIAL_PACKET_HEADER pHeader, BOOLEAN bWaitInfinite)
{
    USHORT cbRead;
    UINT i = 0;
    cbRead = sizeof(UCHAR);
    // read the header bytes
    while(i < HEADER_SIG_BYTES)
    {
        if(!OEMSerialRecvRaw((PBYTE)&(pHeader->headerSig[i]), &cbRead, bWaitInfinite) || sizeof(UCHAR) != cbRead)
        {
            EdbgOutputDebugString("failed to receive header signature\r\n");
            return FALSE;
        }

        if(pHeader->headerSig[i] == packetHeaderSig[i])
        {
            i++;
        }

        else
        {
            i = 0;
        }
    }

    // read the remaining header
    cbRead = sizeof(SERIAL_PACKET_HEADER) - HEADER_SIG_BYTES;
    if(!OEMSerialRecvRaw((PUCHAR)pHeader + HEADER_SIG_BYTES, &cbRead, bWaitInfinite) ||
        sizeof(SERIAL_PACKET_HEADER) - HEADER_SIG_BYTES != cbRead)
    {
        EdbgOutputDebugString("failed to receive header data\r\n");
        return FALSE;
    }
    
    // verify the header checksum
    if(pHeader->crcHdr != CalcChksum((PUCHAR)pHeader, 
        sizeof(SERIAL_PACKET_HEADER) - sizeof(pHeader->crcHdr)))
    {
        EdbgOutputDebugString("header checksum fail\r\n");
        return FALSE;
    }

    return TRUE;
}

//-----------------------------------------------------------------------------
//
//  Function:  OEMSerialRecvRaw
//
//  This is platform specific function to receive data
//
//  Parameters:
//      pbFrame
//          [in] Serial frame data
//
//      pcbFrame
//          [in] Length of frame
//
//      bWaitInfinite
//          [in] Time to wait in secs
//
//  Returns:
//      TRUE for success/FALSE for failure.
//-----------------------------------------------------------------------------
BOOL OEMSerialRecvRaw(LPBYTE pbFrame, PUSHORT pcbFrame, BOOLEAN bWaitInfinite)
{
	USHORT ct = 0;
    DWORD tStart = 0;
#if 0 // Remove-W4: Warning C4189 workaround
    UCHAR uStatus = 0;
#endif
	UINT32 urxd;
	
	INSREG32BF(&g_pUART->UCR2, UART_UCR2_IRTS, UART_UCR2_IRTS_IGNORERTS);	
	INSREG32BF(&g_pUART->UCR2, UART_UCR2_CTS, UART_UCR2_CTS_LOW);
    
	for(ct = 0; ct < *pcbFrame; ct++)
    {
		if (!bWaitInfinite)
		{
			tStart = OEMEthGetSecs();
		}

		while (!(INREG32(&g_pUART->USR2) & CSP_BITFMASK(UART_USR2_RDR)))
        {
            if(!bWaitInfinite && (OEMEthGetSecs() - tStart > TIMEOUT_RECV))
            {
                *pcbFrame = 0;
				OUTREG32(&g_pUART->UCR2, 
					INREG32(&g_pUART->UCR2)&~CSP_BITFMASK(UART_UCR2_CTS));
				OUTREG32(&g_pUART->UCR2, 
						INREG32(&g_pUART->UCR2)&~CSP_BITFMASK(UART_UCR2_IRTS));
				
                return FALSE;
            }            
        }

		// read char from FIFO
        urxd = INREG32(&g_pUART->URXD);

        // check and clear comm errors
        // If error detected in current character
		if (urxd & UART_RX_ERRORS)
        {
            // clear the queue
            EdbgOutputDebugString("Comm errors have occurred; status = 0x%x\r\n", urxd);
			OUTREG32(&g_pUART->UCR2, 
					INREG32(&g_pUART->UCR2)&~CSP_BITFMASK(UART_UCR2_CTS));
			OUTREG32(&g_pUART->UCR2, 
						INREG32(&g_pUART->UCR2)&~CSP_BITFMASK(UART_UCR2_IRTS));
			return FALSE;
        }

        *(pbFrame + ct) = (BYTE)(urxd & 0xFF);
    }

	OUTREG32(&g_pUART->UCR2, 
            INREG32(&g_pUART->UCR2)&~CSP_BITFMASK(UART_UCR2_CTS));
	OUTREG32(&g_pUART->UCR2, 
                INREG32(&g_pUART->UCR2)&~CSP_BITFMASK(UART_UCR2_IRTS));
	
  return TRUE;
}

//-----------------------------------------------------------------------------
//
//  Function:  OEMSerialSendRaw
//
//  This is platform specific function to send data
//
//  Parameters:
//      pbFrame
//          [in] Serial frame data
//
//      pcbFrame
//          [in] Length of frame
//
//  Returns:
//      TRUE for success/FALSE for failure.
//-----------------------------------------------------------------------------
BOOL OEMSerialSendRaw(LPBYTE pbFrame, USHORT cbFrame)
{
	UINT ct;

    // block until send is complete; no timeout
    for(ct = 0; ct < cbFrame; ct++)
    {            
        // check that send transmitter holding register is not full
        while(INREG32(&g_pUART->UTS) & CSP_BITFMASK(UART_UTS_TXFULL));

        // write character to port
        OUTREG32(&g_pUART->UTXD, (UCHAR)*(pbFrame+ct));
    }
    return TRUE;
}


//------------------------------------------------------------------------------
//
//  Function:  ResetDefaultBootCFG
//
//  Resets the debug bootloader configuration information (menu settings, etc.).
//
//  Parameters:
//      BootCfg 
//          [out] Points to bootloader configuration that will be filled with
//          default data. 
//
//  Returns:
//      TRUE indicates success. FALSE indicates failure.
//
//-----------------------------------------------------------------------------
void ResetDefaultBootCFG(BOOT_CFG *pBootCFG)
{
#ifdef DEBUG // Remove-W4: Warning C4189 workaround
    BOOT_CFG BootCfg = {0};
#endif

    KITLOutputDebugString("\r\nResetting factory default configuration...\r\n");

    pBootCFG->autoDownloadImage			= BOOT_CFG_AUTODOWNLOAD_NONE;
    pBootCFG->dwLaunchAddr				= (DWORD)OALPAtoCA(IMAGE_BOOT_NKIMAGE_RAM_PA_START);
    pBootCFG->dwPhysStart				= 0;
    pBootCFG->dwPhysLen					= 0;
    pBootCFG->mac[0]					= 0x0000;
    pBootCFG->mac[1]					= 0x0000;
    pBootCFG->mac[2]					= 0x0000; 
    pBootCFG->ConfigMagicNumber			= SBOOT_CFG_MAGIC_NUMBER;
	pBootCFG->numBootMe					= 50;
    pBootCFG->delay						= 3;

	pBootCFG->Channel			= DEFAULT_SBOOT_CHANNEL;
	pBootCFG->dwSerPhysAddr	= DEFAULT_SBOOT_BASE_REG;
    pBootCFG->BaudRate			= DEFAULT_SBOOT_BAUDRATE; 
    pBootCFG->DataBits			= SBOOT_DATABITS_8;
    pBootCFG->Parity           = SBOOT_PARITY_NONE;
	pBootCFG->StopBit			= SBOOT_STOPBITS_1;
	pBootCFG->FlowCtrl			= SBOOT_FLOWCTRL_OFF;
	
    // save it back to flash
    if (!FlashStoreBootCFG((BYTE*) pBootCFG, sizeof(BOOT_CFG))) 
    {
        KITLOutputDebugString("ERROR: ResetDefaultBootCFG: failed to store configuration to flash.\r\n");
    }
#ifdef DEBUG
    else
    {
        KITLOutputDebugString("INFO: ResetDefaultBootCFG: factory default configuration saved to flash.\r\n");

        // DEBUG
        // read it back to verify
        if (!FlashLoadBootCFG((BYTE*) &BootCfg, sizeof(BOOT_CFG))) 
        {
            KITLOutputDebugString("WARNING: ResetDefaultBootCFG: failed to load configuration for double check.\r\n");
        }
        else
        {
            if (0 != memcmp((const void *)&BootCfg, (const void*)pBootCFG, sizeof(BOOT_CFG)))
            {
                KITLOutputDebugString("WARNING: ResetDefaultBootCFG: saved and retrieved data not equal.\r\n");
            }
            else
            {
                KITLOutputDebugString("INFO: ResetDefaultBootCFG: factory default configuration verified in flash.\r\n");
            }
        }
        // END DEBUG
    }
#endif    
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日本色综合中文字幕| 日本三级韩国三级欧美三级| 国产成人av影院| 亚洲精品一区二区精华| 理论片日本一区| 91精品国产乱| 偷拍与自拍一区| 91精品国产乱| 蜜桃免费网站一区二区三区| 日韩一级二级三级| 日本sm残虐另类| 欧美精品一区二区三区四区 | 国产一区二区成人久久免费影院| 制服视频三区第一页精品| 亚洲国产一区在线观看| 91福利在线免费观看| 最近中文字幕一区二区三区| 国产成人福利片| 日本一区二区免费在线| 成人激情图片网| 亚洲欧美日韩精品久久久久| 91麻豆精品国产自产在线| 激情综合网av| 亚洲最新在线观看| 日韩欧美久久一区| 97aⅴ精品视频一二三区| 亚洲欧美日韩在线| 在线成人av网站| 成人国产在线观看| 午夜私人影院久久久久| 久久精品水蜜桃av综合天堂| 欧美日韩亚洲综合一区| 国产91精品欧美| 午夜欧美一区二区三区在线播放| 久久久精品国产免大香伊| 在线观看视频一区| 国产福利一区在线| 视频一区视频二区中文| 中文字幕在线观看一区| 欧美一区在线视频| 91福利资源站| 成人v精品蜜桃久久一区| 日本不卡免费在线视频| 自拍偷拍亚洲激情| 欧美成人一级视频| 色婷婷久久久综合中文字幕| 日韩精品91亚洲二区在线观看 | 在线播放91灌醉迷j高跟美女| 精品在线播放免费| 亚洲一级二级在线| 国产精品无码永久免费888| 91精品国产免费| 色88888久久久久久影院野外 | 亚洲精品一区二区三区精华液 | 555夜色666亚洲国产免| 国产精品亚洲视频| 日本免费在线视频不卡一不卡二| 欧美国产综合色视频| 精品福利一区二区三区免费视频| 在线观看视频一区二区| 国产91精品免费| 日韩福利电影在线| 中文字幕一区二区不卡| 精品福利一二区| 777亚洲妇女| 欧美伦理电影网| 91小视频免费观看| 精品一区免费av| 亚洲国产成人高清精品| 国产精品视频在线看| 国产午夜一区二区三区| 欧美日产在线观看| 色婷婷精品大在线视频| 丰满放荡岳乱妇91ww| 蜜臀av在线播放一区二区三区| 夜夜夜精品看看| 亚洲综合免费观看高清完整版| 亚洲免费大片在线观看| 成人欧美一区二区三区1314| 中文字幕在线视频一区| 国产精品传媒视频| 亚洲欧美一区二区三区极速播放| 最新不卡av在线| 亚洲激情中文1区| 亚洲欧美电影一区二区| 亚洲国产成人精品视频| 天天综合日日夜夜精品| 免费成人av在线| 精品在线一区二区三区| 丰满少妇久久久久久久| 91老师片黄在线观看| 在线精品视频免费观看| 欧美年轻男男videosbes| 日韩三级.com| 久久精品一区二区三区不卡牛牛| 国产精品视频免费看| 亚洲免费观看高清完整版在线 | 图片区日韩欧美亚洲| 日本亚洲三级在线| 狠狠色狠狠色综合系列| 国产jizzjizz一区二区| 91麻豆国产自产在线观看| 欧美影院一区二区三区| 91精品国产全国免费观看| 精品欧美一区二区久久| 久久精品一区二区三区四区| 亚洲视频一区二区在线| 日本不卡视频在线| 成人毛片在线观看| 欧美日韩国产成人在线免费| 欧美精品一区二区三区在线| 亚洲欧洲国产专区| 三级欧美韩日大片在线看| 国内欧美视频一区二区| 97se亚洲国产综合自在线观| 欧美探花视频资源| 久久综合九色综合欧美就去吻| 一区在线中文字幕| 青青草97国产精品免费观看无弹窗版| 国产精品888| 欧美喷潮久久久xxxxx| 久久久影院官网| 天天影视涩香欲综合网| 成人综合在线观看| 欧美高清你懂得| 国产精品激情偷乱一区二区∴| 视频一区二区欧美| 99国产一区二区三精品乱码| 日韩美女主播在线视频一区二区三区| 亚洲综合色区另类av| 精彩视频一区二区| 在线91免费看| 夜夜嗨av一区二区三区四季av | av不卡免费电影| 日韩一区国产二区欧美三区| 亚洲欧美日韩中文播放| 国产一区二区三区久久久 | 久久99精品一区二区三区三区| 91麻豆文化传媒在线观看| 久久久久久久久久美女| 秋霞午夜鲁丝一区二区老狼| 色婷婷精品久久二区二区蜜臀av| 国产日韩欧美激情| 美腿丝袜亚洲综合| 在线不卡免费欧美| 亚洲国产一区二区a毛片| 成人精品亚洲人成在线| 久久久亚洲欧洲日产国码αv| 日韩精品三区四区| 欧美日韩第一区日日骚| 亚洲综合色成人| 日本久久一区二区| 中文字幕在线观看不卡视频| 福利电影一区二区| 国产欧美一区二区三区鸳鸯浴 | 日韩av在线发布| 欧洲一区二区三区在线| 综合av第一页| 99re在线精品| 亚洲色图色小说| 波多野结衣精品在线| 国产欧美一区在线| 福利91精品一区二区三区| 国产色婷婷亚洲99精品小说| 国模少妇一区二区三区| 日韩精品一区二区三区swag| 免费成人美女在线观看| 日韩亚洲欧美高清| 国产在线精品一区二区三区不卡| 精品国产麻豆免费人成网站| 精品一二三四区| 久久久午夜精品理论片中文字幕| 六月丁香综合在线视频| 久久久久久久精| 菠萝蜜视频在线观看一区| 国产精品美日韩| 91在线视频观看| 亚洲午夜羞羞片| 欧美一二三四区在线| 国产一区在线精品| 国产精品久久久久7777按摩 | 欧美日韩视频在线观看一区二区三区 | 日韩不卡一区二区三区| 日韩一区二区免费电影| 国产精品正在播放| 国产精品久久99| 欧美午夜宅男影院| 欧美a级一区二区| 久久嫩草精品久久久精品| 成人avav在线| 亚洲一区电影777| 日韩欧美一二三| 成人免费高清在线| 一区二区三区四区在线免费观看 | 在线不卡中文字幕| 国产美女精品在线| 亚洲视频一区在线观看| 欧美日韩激情在线| 国产电影精品久久禁18| 亚洲激情在线播放|