📄 off.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>
#include <S3C2443REF_GPIO.h>
#ifdef DVS_EN
#include "bsp_cfg.h"
extern BOOL CurrStateIdle;
extern volatile int CurrentState;
extern void DVS_ON(void);
extern void DVS_OFF(void);
extern void ChangeVoltage(int);
extern int GetCurrentVoltage(void);
extern void CLKDIV124();
extern void CLKDIV136();
extern void CLKDIV148();
extern void CLKDIV144();
extern void CLKDIV166();
extern void CLKDIV188();
#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];
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);
// First do platform specific actions
BSPPowerOff();
#ifdef DVS_EN
{
volatile int i;
RETAILMSG(1,(TEXT("DVS OFF\r\n")));
#if (DVS_METHOD == 1 || DVS_METHOD == 3)
#if (DVS_METHOD == 1)
// CurrStateIdle = FALSE;
#endif
#if (DVS_METHOD == 3)
// CurrentState = Active;
// CurrStateIdle = FALSE;
#endif
ChangeVoltage(HIGHVOLTAGE);
for(i=0;i<VOLTAGEDELAY*2;i++)
{
INREG32(&pIOPort->GPFDAT); // for loop operation, just read.
}
switch ( HCLKDIV )
{
case 4:
CLKDIV124();
break;
case 6:
CLKDIV136();
break;
case 8:
CLKDIV148();
break;
}
DVS_OFF();
g_oalIoCtlClockSpeed = S3C2443_FCLK;
#endif //(DVS_METHOD == 1 || DVS_METHOD == 3)
}
#endif //DVS_EN
// Then save system registers
#ifdef EVT1
pIOPort->GPACDL = 0xFFFF;
pIOPort->GPACDH = 0x1FFFF;
#else
saveArea[0] = INPORT32(&pIOPort->GPACON);
saveArea[1] = INPORT32(&pIOPort->GPADAT);
#endif
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);
#ifdef EVT1
saveArea[26] = INPORT32(&pIOPort->GPKCON);
saveArea[27] = INPORT32(&pIOPort->GPKDAT);
saveArea[28] = INPORT32(&pIOPort->DATAPDEN);
#else
saveArea[26] = INPORT32(&pIOPort->GPKCON);
saveArea[27] = INPORT32(&pIOPort->GPKDAT);
saveArea[28] = INPORT32(&pIOPort->GPKUDP);
#endif
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);
#ifdef EVT1
saveArea[37] = READEXTINT0(pIOPort->EXTINT0);
saveArea[38] = READEXTINT1(pIOPort->EXTINT1);
saveArea[39] = READEXTINT2(pIOPort->EXTINT2);
#else
saveArea[37] = INPORT32(&pIOPort->EXTINT0);
saveArea[38] = INPORT32(&pIOPort->EXTINT1);
saveArea[39] = INPORT32(&pIOPort->EXTINT2);
#endif
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();
// Go to power off mode
OALCPUPowerOff();
// Switch on power for KITL device
OALKitlPowerOn();
/* Recover Process, Load CPU Regs */
#ifdef EVT1
#else
OUTPORT32(&pIOPort->GPACON, saveArea[0]);
OUTPORT32(&pIOPort->GPADAT, saveArea[1]);
#endif
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]);
#ifdef EVT1
OUTPORT32(&pIOPort->GPKCON, saveArea[26]);
OUTPORT32(&pIOPort->GPKDAT, saveArea[27]);
OUTPORT32(&pIOPort->DATAPDEN, saveArea[28]);
#else
OUTPORT32(&pIOPort->GPKCON, saveArea[26]);
OUTPORT32(&pIOPort->GPKDAT, saveArea[27]);
OUTPORT32(&pIOPort->GPKUDP, saveArea[28]);
#endif
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(&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];
/* Interrupt Clear */
//OUTPORT32(&pIOPort->EINTPEND, INPORT32(&pIOPort->EINTPEND));
//OUTPORT32(&pIntr->SUBSRCPND, INPORT32(&pIntr->SUBSRCPND));
// 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 + -