⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 off.c

📁 S3C2443 WINCE6.0 BSP
💻 C
字号:
//
// Copyright (c) Microsoft Corporation.  All rights reserved.
//
//
// Use of this source code is subject to the terms of the Microsoft end-user
// license agreement (EULA) under which you licensed this SOFTWARE PRODUCT.
// If you did not accept the terms of the EULA, you are not authorized to use
// this source code. For a copy of the EULA, please see the LICENSE.RTF on your
// install media.
//
// NOTE: stubs are being used - this isn't done

#include <windows.h>
#include <bsp.h>
#include <s3c2443.h>
#ifdef DVS_EN
#include "bsp_cfg.h"
	extern volatile int CurrentState;
	extern void DVS_ON(void);
	extern void DVS_OFF(void);
	extern void ChangeVoltage(int);
	extern	void HCLK_RECOVERYUP();
#endif

extern void ConfigStopGPIO(void);
//------------------------------------------------------------------------------
//
// Function:     OEMPowerOff
//
// Description:  Called when the system is to transition to it's lowest
//               power mode (off)
//

void OEMPowerOff()
{
	static UINT32 saveArea[85];
	BSP_ARGS *pBspArgs = (BSP_ARGS*)OALPAtoVA(IMAGE_SHARE_ARGS_PA_START, FALSE);
	S3C2443_INTR_REG *pIntr = (S3C2443_INTR_REG*)OALPAtoVA(S3C2443_BASE_REG_PA_INTR, FALSE);
	S3C2443_IOPORT_REG *pIOPort = (S3C2443_IOPORT_REG*)OALPAtoVA(S3C2443_BASE_REG_PA_IOPORT, FALSE);
	S3C2443_LCD_REG *pLCD = (S3C2443_LCD_REG*)OALPAtoVA(S3C2443_BASE_REG_PA_LCD, FALSE);
	volatile S3C2443_CLKPWR_REG *pCLKPWR = (S3C2443_CLKPWR_REG*)OALPAtoVA(S3C2443_BASE_REG_PA_CLOCK_POWER, FALSE);
	// First do platform specific actions
	// RETAILMSG(1,(TEXT("OEMPowerOff\n")));
	BSPPowerOff();
#ifdef DVS_EN
#if (DVS_METHOD == 2)
		RETAILMSG(1,(TEXT("DVS OFF\r\n")));		
#ifdef UNDERSHOOT_WORKAROUND
	{	
	 	volatile int i;
		for(i=0;i<VOLTAGEDELAY;i++);
	}
#endif		
		ChangeVoltage(HIGHVOLTAGE);
		for(i=0;i<VOLTAGEDELAY;i++);		
		DVS_OFF();
#elif (DVS_METHOD == 4 || DVS_METHOD == 5)
if (CurrentState == SlowActive || CurrentState == LazyActive)
	{
		volatile int i;
		RETAILMSG(1,(TEXT("DVS OFF\r\n")));		
#ifdef UNDERSHOOT_WORKAROUND
	{	
	 	volatile int i;
		for(i=0;i<VOLTAGEDELAY;i++);
	}
#endif
		ChangeVoltage(HIGHVOLTAGE);
		for(i=0;i<VOLTAGEDELAY;i++);

		HCLK_RECOVERYUP();

		DVS_OFF();
		g_oalIoCtlClockSpeed = S3C2443_FCLK;
	}					
#endif //(DVS_METHOD == 4 || DVS_METHOD == 5)
#endif //DVS_EN  
	// Then save system registers
	//saveArea[0]  = INPORT32(&pIOPort->GPACON);
	//saveArea[1]  = INPORT32(&pIOPort->GPADAT);
	pIOPort->GPACON = 0xFFFF;
	pIOPort->GPADAT = 0x1FFFF;	
	saveArea[2]  = INPORT32(&pIOPort->GPBCON);
	saveArea[3]  = INPORT32(&pIOPort->GPBDAT);
	saveArea[4]  = INPORT32(&pIOPort->GPBUDP);
	saveArea[5]  = INPORT32(&pIOPort->GPCCON);
	saveArea[6]  = INPORT32(&pIOPort->GPCDAT);
	saveArea[7]  = INPORT32(&pIOPort->GPCUDP);
	saveArea[8]  = INPORT32(&pIOPort->GPDCON);
	saveArea[9]  = INPORT32(&pIOPort->GPDDAT);
	saveArea[10] = INPORT32(&pIOPort->GPDUDP);
	saveArea[11] = INPORT32(&pIOPort->GPECON);
	saveArea[12] = INPORT32(&pIOPort->GPEDAT);
	saveArea[13] = INPORT32(&pIOPort->GPEUDP);
	saveArea[14] = INPORT32(&pIOPort->GPFCON);
	saveArea[15] = INPORT32(&pIOPort->GPFDAT);
	saveArea[16] = INPORT32(&pIOPort->GPFUDP);
	saveArea[17] = INPORT32(&pIOPort->GPGCON);
	saveArea[18] = INPORT32(&pIOPort->GPGDAT);
	saveArea[19] = INPORT32(&pIOPort->GPGUDP);
	saveArea[20] = INPORT32(&pIOPort->GPHCON);
	saveArea[21] = INPORT32(&pIOPort->GPHDAT);
	saveArea[22] = INPORT32(&pIOPort->GPHUDP);
	saveArea[23] = INPORT32(&pIOPort->GPJCON);
	saveArea[24] = INPORT32(&pIOPort->GPJDAT);
	saveArea[25] = INPORT32(&pIOPort->GPJUDP);
	saveArea[26] = INPORT32(&pIOPort->GPKCON);
	saveArea[27] = INPORT32(&pIOPort->GPKDAT);
	saveArea[28] = INPORT32(&pIOPort->GPKUDP);
	saveArea[29] = INPORT32(&pIOPort->GPLCON);
	saveArea[30] = INPORT32(&pIOPort->GPLDAT);
	saveArea[31] = INPORT32(&pIOPort->GPLUDP);
	saveArea[32] = INPORT32(&pIOPort->GPMCON);
	saveArea[33] = INPORT32(&pIOPort->GPMDAT);
	saveArea[34] = INPORT32(&pIOPort->GPMUDP);	

	saveArea[35] = INPORT32(&pIOPort->MISCCR);
	saveArea[36] = INPORT32(&pIOPort->DCLKCON);
	
	saveArea[37] = INPORT32(&pBspArgs->EXTINT0);
	saveArea[38] = INPORT32(&pBspArgs->EXTINT1);
	saveArea[39] = INPORT32(&pBspArgs->EXTINT2);
	
	saveArea[40] = INPORT32(&pIOPort->EINTFLT0);
	saveArea[41] = INPORT32(&pIOPort->EINTFLT1);
	saveArea[42] = INPORT32(&pIOPort->EINTFLT2);
	saveArea[43] = INPORT32(&pIOPort->EINTFLT3);
	saveArea[44] = INPORT32(&pIOPort->EINTMASK);

	saveArea[45] = INPORT32(&pIntr->INTMOD);
	saveArea[46] = INPORT32(&pIntr->INTMSK);
	saveArea[47] = INPORT32(&pIntr->INTSUBMSK);

	saveArea[48] = INPORT32(&pLCD->VIDCON0);
	saveArea[49] = INPORT32(&pLCD->VIDCON1);
	saveArea[50] = INPORT32(&pLCD->VIDTCON0);
	saveArea[51] = INPORT32(&pLCD->VIDTCON1);
	saveArea[52] = INPORT32(&pLCD->VIDTCON2);
	saveArea[53] = INPORT32(&pLCD->WINCON0);
	saveArea[54] = INPORT32(&pLCD->WINCON1);
	saveArea[55] = INPORT32(&pLCD->VIDOSD0A);
	saveArea[56] = INPORT32(&pLCD->VIDOSD0B);
	saveArea[57] = INPORT32(&pLCD->VIDOSD0C);
	saveArea[58] = INPORT32(&pLCD->VIDOSD1A);
	saveArea[59] = INPORT32(&pLCD->VIDOSD1B);
	saveArea[60] = INPORT32(&pLCD->VIDOSD1C);
	saveArea[61] = INPORT32(&pLCD->VIDW00ADD0B0);
	saveArea[62] = INPORT32(&pLCD->VIDW00ADD0B1);
	saveArea[63] = INPORT32(&pLCD->VIDW01ADD0);
	saveArea[64] = INPORT32(&pLCD->VIDW00ADD1B0);
	saveArea[65] = INPORT32(&pLCD->VIDW00ADD1B1);
	saveArea[66] = INPORT32(&pLCD->VIDW01ADD1);
	saveArea[67] = INPORT32(&pLCD->VIDW00ADD2B0);
	saveArea[68] = INPORT32(&pLCD->VIDW00ADD2B1);
	saveArea[69] = INPORT32(&pLCD->VIDW01ADD2);
	saveArea[70] = INPORT32(&pLCD->VIDINTCON);	
	saveArea[71] = INPORT32(&pLCD->W1KEYCON0);	
	saveArea[72] = INPORT32(&pLCD->W1KEYCON1);	
	saveArea[73] = INPORT32(&pLCD->W2KEYCON0);	
	saveArea[74] = INPORT32(&pLCD->W2KEYCON1);	
	saveArea[75] = INPORT32(&pLCD->W3KEYCON0);	
	saveArea[76] = INPORT32(&pLCD->W3KEYCON1);	
	saveArea[77] = INPORT32(&pLCD->W4KEYCON0);	
	saveArea[78] = INPORT32(&pLCD->W4KEYCON1);	
	saveArea[79] = INPORT32(&pLCD->WIN0MAP);	
	saveArea[80] = INPORT32(&pLCD->WIN1MAP);	
	saveArea[81] = INPORT32(&pLCD->WPALCON);		
	saveArea[82] = INPORT32(&pLCD->SYSIFCON0);	
	saveArea[83] = INPORT32(&pLCD->SYSIFCON1);	
	saveArea[84] = INPORT32(&pLCD->DITHMODE);		

	pLCD->VIDCON0   = 0;
	pLCD->VIDCON1   = 0;
	pLCD->VIDTCON0   = 0;
	pLCD->VIDTCON1   = 0;
	pLCD->VIDTCON2   = 0;
	pLCD->WINCON0 = 0;
	pLCD->WINCON1 = 0;
	pLCD->VIDOSD0A = 0;
	pLCD->VIDOSD0B    = 0;
	pLCD->VIDOSD0C      = 0;
	pLCD->VIDW00ADD0B0      = 0;
	pLCD->VIDW00ADD1B0      = 0;
	pLCD->VIDW00ADD2B0      = 0;	

	ConfigStopGPIO();

	// Switch off power for KITL device
	//OALKitlPowerOff();  // woo 1021

	// Go to power off mode
	OALCPUPowerOff();  // woo 1021

	// Switch on power for KITL device
	// OALKitlPowerOn();

	/* Recover Process, Load CPU Regs       */
	//OUTPORT32(&pIOPort->GPACON,   saveArea[0]);
	//OUTPORT32(&pIOPort->GPADAT,   saveArea[1]);
	OUTPORT32(&pIOPort->GPBCON,   saveArea[2]);
	OUTPORT32(&pIOPort->GPBDAT,   saveArea[3]);
	OUTPORT32(&pIOPort->GPBUDP,    saveArea[4]);
	OUTPORT32(&pIOPort->GPCCON,   saveArea[5]);
	OUTPORT32(&pIOPort->GPCDAT,   saveArea[6]);
	OUTPORT32(&pIOPort->GPCUDP,    saveArea[7]);
	OUTPORT32(&pIOPort->GPDCON,   saveArea[8]);
	OUTPORT32(&pIOPort->GPDDAT,   saveArea[9]);
	OUTPORT32(&pIOPort->GPDUDP,    saveArea[10]);
	OUTPORT32(&pIOPort->GPECON,   saveArea[11]);
	OUTPORT32(&pIOPort->GPEDAT,   saveArea[12]);
	OUTPORT32(&pIOPort->GPEUDP,    saveArea[13]);
	OUTPORT32(&pIOPort->GPFCON,   saveArea[14]);
	OUTPORT32(&pIOPort->GPFDAT,   saveArea[15]);
	OUTPORT32(&pIOPort->GPFUDP,    saveArea[16]);
	OUTPORT32(&pIOPort->GPGCON,   saveArea[17]);
	OUTPORT32(&pIOPort->GPGDAT,   saveArea[18]);
	OUTPORT32(&pIOPort->GPGUDP,    saveArea[19]);
	OUTPORT32(&pIOPort->GPHCON,   saveArea[20]);
	OUTPORT32(&pIOPort->GPHDAT,   saveArea[21]);
	OUTPORT32(&pIOPort->GPHUDP,    saveArea[22]);
	OUTPORT32(&pIOPort->GPJCON,   saveArea[23]);
	OUTPORT32(&pIOPort->GPJDAT,   saveArea[24]);
	OUTPORT32(&pIOPort->GPJUDP,    saveArea[25]);
	OUTPORT32(&pIOPort->GPKCON,   saveArea[26]);
	OUTPORT32(&pIOPort->GPKDAT,   saveArea[27]);
	OUTPORT32(&pIOPort->GPKUDP,    saveArea[28]);
	OUTPORT32(&pIOPort->GPLCON,   saveArea[29]);
	OUTPORT32(&pIOPort->GPLDAT,   saveArea[30]);
	OUTPORT32(&pIOPort->GPLUDP,    saveArea[31]);
	OUTPORT32(&pIOPort->GPMCON,   saveArea[32]);
	OUTPORT32(&pIOPort->GPMDAT,   saveArea[33]);
	OUTPORT32(&pIOPort->GPMUDP,    saveArea[34]);	
								
	OUTPORT32(&pIOPort->MISCCR,   saveArea[35]);
	OUTPORT32(&pIOPort->DCLKCON,   saveArea[36]);
	
	OUTPORT32(&pIOPort->EXTINT0,  saveArea[37]);
	OUTPORT32(&pIOPort->EXTINT1,  saveArea[38]);
	OUTPORT32(&pIOPort->EXTINT2,  saveArea[39]);
	OUTPORT32(&pBspArgs->EXTINT0,  saveArea[37]);
	OUTPORT32(&pBspArgs->EXTINT1,  saveArea[38]);
	OUTPORT32(&pBspArgs->EXTINT2,  saveArea[39]);	
	
	OUTPORT32(&pIOPort->EINTFLT0, saveArea[40]);
	OUTPORT32(&pIOPort->EINTFLT1, saveArea[41]);
	OUTPORT32(&pIOPort->EINTFLT2, saveArea[42]);
	OUTPORT32(&pIOPort->EINTFLT3, saveArea[43]);
	OUTPORT32(&pIOPort->EINTMASK, saveArea[44]);

	OUTPORT32(&pIntr->INTMOD,     saveArea[45]);
	OUTPORT32(&pIntr->INTMSK,     saveArea[46]); 
	OUTPORT32(&pIntr->INTSUBMSK,  saveArea[47]);
	

	pLCD->VIDCON0    		=  saveArea[48]; 
	pLCD->VIDCON1 			=  saveArea[49];
	pLCD->VIDTCON0      		=  saveArea[50]; 
	pLCD->VIDTCON1  		=  saveArea[51]; 
	pLCD->VIDTCON2   		=  saveArea[52]; 
	pLCD->WINCON0  		=  saveArea[53];
	pLCD->WINCON1    		=  saveArea[54]; 
	pLCD->VIDOSD0A 		=  saveArea[55]; 
	pLCD->VIDOSD0B 		=  saveArea[56]; 
	pLCD->VIDOSD0C 		=  saveArea[57]; 
	pLCD->VIDOSD1A  		=  saveArea[58]; 
	pLCD->VIDOSD1B   		=  saveArea[59]; 
	pLCD->VIDOSD1C			=  saveArea[60]; 
	pLCD->VIDW00ADD0B0   	=  saveArea[61]; 
	pLCD->VIDW00ADD0B1  	=  saveArea[62];
	pLCD->VIDW01ADD0		=  saveArea[63];
	pLCD->VIDW00ADD1B0	=  saveArea[64];
	pLCD->VIDW00ADD1B1	=  saveArea[65];
	pLCD->VIDW01ADD1		=  saveArea[66];
	pLCD->VIDW00ADD2B0	=  saveArea[67];
	pLCD->VIDW00ADD2B1	=  saveArea[68];
	pLCD->VIDW01ADD2		=  saveArea[69];
	pLCD->VIDINTCON		=  saveArea[70]; 
	pLCD->W1KEYCON0		=  saveArea[71];
	pLCD->W1KEYCON1		=  saveArea[72];
	pLCD->W2KEYCON0		=  saveArea[73];
	pLCD->W2KEYCON1		=  saveArea[74];
	pLCD->W3KEYCON0		=  saveArea[75];
	pLCD->W3KEYCON1		=  saveArea[76];
	pLCD->W4KEYCON0		=  saveArea[77];
	pLCD->W4KEYCON1		=  saveArea[78];
	pLCD->WIN0MAP			=  saveArea[79];
	pLCD->WIN1MAP			=  saveArea[80];
	pLCD->WPALCON			=  saveArea[81];
	pLCD->SYSIFCON0		=  saveArea[82];
	pLCD->SYSIFCON1		=  saveArea[83];
	pLCD->DITHMODE			=  saveArea[84];
	
	
	 
	
	
	pCLKPWR->RSTCON 	|= pCLKPWR->RSTCON;		// This is for control GPIO pads.	


	/* Interrupt Clear                      */
	OUTPORT32(&pIOPort->EINTPEND, INPORT32(&pIOPort->EINTPEND));
	OUTPORT32(&pIntr->SUBSRCPND, INPORT32(&pIntr->SUBSRCPND));
	//OUTPORT32(&pIntr->SRCPND, INPORT32(&pIntr->SRCPND));
	//OUTPORT32(&pIntr->INTPND, INPORT32(&pIntr->INTPND));

	//    pLCD->LCDSRCPND = pLCD->LCDSRCPND;
	//    pLCD->LCDINTPND = pLCD->LCDINTPND;

	// Do platform dependent power on actions
	
	BSPPowerOn();
}

//------------------------------------------------------------------------------
//
// Function:     OALIoCtlHalPresuspend
//
// Description:  
//

BOOL OALIoCtlHalPresuspend(
    UINT32 code, VOID* pInpBuffer, UINT32 inpSize, VOID* pOutBuffer, 
    UINT32 outSize, UINT32 *pOutSize
) {
    return TRUE;
}

#if 0
//------------------------------------------------------------------------------
//
// Function:     OALIoCtlHalEnableWake
//
// Description:  
//

BOOL OALIoCtlHalEnableWake(
    UINT32 code, VOID* pInpBuffer, UINT32 inpSize, VOID* pOutBuffer, 
    UINT32 outSize, UINT32 *pOutSize
) {
    return TRUE;
}

//------------------------------------------------------------------------------
//
// Function:     OALIoCtlHalDisableWake
//
// Description:  
//

BOOL OALIoCtlHalDisableWake(
    UINT32 code, VOID* pInpBuffer, UINT32 inpSize, VOID* pOutBuffer, 
    UINT32 outSize, UINT32 *pOutSize
) {
    return TRUE;
}

//------------------------------------------------------------------------------
//
// Function:     OALIoCtlHalDisableWake
//
// Description:  
//

BOOL OALIoCtlHalGetWakeSource(
    UINT32 code, VOID* pInpBuffer, UINT32 inpSize, VOID* pOutBuffer, 
    UINT32 outSize, UINT32 *pOutSize
) {
    return TRUE;
}
#endif //0.

//------------------------------------------------------------------------------

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -