baseport/src/cedar/generic/base/syborg/fb/syborg_fb.cpp
changeset 2 d55eb581a87c
parent 1 2fb8b9db1c86
child 3 c2946f91d81f
--- a/baseport/src/cedar/generic/base/syborg/fb/syborg_fb.cpp	Fri Jul 31 15:01:17 2009 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,487 +0,0 @@
-/*
-* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of the License "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: Minimalistic frame buffer driver
-*
-*/
-
-#include <syborg_priv.h>
-#include "syborg_fb.h"
-
-TPhysAddr Syborg::VideoRamPhys;
-TPhysAddr Syborg::VideoRamPhysSecure;		// Secure display memory
-
-TPhysAddr TSyborg::VideoRamPhys()
-{
-  __KTRACE_OPT(KEXTENSION,Kern::Printf("TSyborg::VideoRamPhys: VideoRamPhys=0x%x", Syborg::VideoRamPhys));
-  return Syborg::VideoRamPhys;
-}
-
-TPhysAddr TSyborg::VideoRamPhysSecure()
-{
-  return Syborg::VideoRamPhysSecure;
-}
-
-LOCAL_C TInt DoHalFunction(TAny* aPtr, TInt aFunction, TAny* a1, TAny* a2)
-{
-  DLcdPowerHandler* pH=(DLcdPowerHandler*)aPtr;
-  return pH->HalFunction(aFunction,a1,a2);
-}
-
-static void rxMsg(TAny* aPtr)
-{
-  DLcdPowerHandler& h=*(DLcdPowerHandler*)aPtr;
-  TMessageBase* pM = h.iMsgQ.iMessage;
-  if(pM)
-	h.HandleMsg(pM);
-}
-
-static void power_up_dfc(TAny* aPtr)
-{
-  ((DLcdPowerHandler*)aPtr)->PowerUpDfc();
-}
-
-void power_down_dfc(TAny* aPtr)
-{
-  ((DLcdPowerHandler*)aPtr)->PowerDownDfc();
-}
-
-void DLcdPowerHandler::DisplayOn()
-{ 
-  PowerUpLcd(iSecureDisplay);
-  iDisplayOn = ETrue;
-}
-
-void DLcdPowerHandler::DisplayOff()
-{
-  PowerDownLcd();
-  iDisplayOn = EFalse;
-}
-
-void DLcdPowerHandler::SwitchDisplay(TBool aSecure)
- {
-   if(aSecure)
-	 {
-	   if(!iSecureDisplay)
-		 {
-		   DisplayOff();
-		   iSecureDisplay = ETrue;
-		   DisplayOn();
-		 }
-	 }
-   else
-	 {
-	   if(iSecureDisplay)
-		 {
-		   DisplayOff();
-		   iSecureDisplay = EFalse;
-		   DisplayOn();
-		 }
-	 }
- }
-
-void DLcdPowerHandler::PowerUpDfc()
-{
-  DisplayOn();
-  PowerUpDone();
-}
-
-void DLcdPowerHandler::PowerDownDfc()
-{
-  DisplayOff();
-  PowerDownDone();
-}
-
-void DLcdPowerHandler::PowerDown(TPowerState)
-{
-  iPowerDownDfc.Enque();
-}
-
-void DLcdPowerHandler::PowerUp()
-{
-  iPowerUpDfc.Enque();
-}
-
-void DLcdPowerHandler::PowerUpLcd(TBool aSecure)
-{
-#if 1
-  WriteReg(iPortAddr, FB_ENABLED, 0);
-  WriteReg(iPortAddr, FB_BASE, aSecure ? iSecurevRamPhys : ivRamPhys);
-  WriteReg(iPortAddr, FB_WIDTH, iVideoInfo.iSizeInPixels.iWidth);
-  WriteReg(iPortAddr, FB_BLANK, 0);
-  WriteReg(iPortAddr, FB_BPP, 32);
-  WriteReg(iPortAddr, FB_COLOR_ORDER, 0);
-  WriteReg(iPortAddr, FB_BYTE_ORDER, 0);
-  WriteReg(iPortAddr, FB_PIXEL_ORDER, 0);
-  WriteReg(iPortAddr, FB_INT_MASK, 0);
-  WriteReg(iPortAddr, FB_ENABLED, 1);
-  WriteReg(iPortAddr, FB_HEIGHT, iVideoInfo.iSizeInPixels.iHeight);
-#endif
-}
-
-void DLcdPowerHandler::PowerDownLcd()
-{
-  WriteReg(iPortAddr, FB_BLANK, 1);
-}
-
-DLcdPowerHandler::DLcdPowerHandler()
-	:	DPowerHandler(KLitLcd),
-		iMsgQ(rxMsg,this,NULL,1),
-		iPowerUpDfc(&power_up_dfc,this,6),
-		iPowerDownDfc(&power_down_dfc,this,7)
-{
-}
-
-void DLcdPowerHandler::ScreenInfo(TScreenInfoV01& anInfo)
-{
-  anInfo.iWindowHandleValid = EFalse;
-  anInfo.iWindowHandle = NULL;
-  anInfo.iScreenAddressValid = ETrue;
-  anInfo.iScreenAddress = (TAny *)(iChunk->LinearAddress());
-  anInfo.iScreenSize.iWidth = iVideoInfo.iSizeInPixels.iWidth;
-  anInfo.iScreenSize.iHeight = iVideoInfo.iSizeInPixels.iHeight;
-}
-
-void DLcdPowerHandler::HandleMsg(TMessageBase* aMsg)
-{
-  if(aMsg->iValue)
-	DisplayOn();
-  else
-	DisplayOff();
-  aMsg->Complete(KErrNone,ETrue);
-}
-
-void DLcdPowerHandler::WsSwitchOnScreen()
-{
-  TThreadMessage& m = Kern::Message();
-  m.iValue = ETrue;
-  m.SendReceive(&iMsgQ);
-}
-
-void DLcdPowerHandler::WsSwitchOffScreen()
-{
-  TThreadMessage& m = Kern::Message();
-  m.iValue = EFalse;
-  m.SendReceive(&iMsgQ);
-}
-
-TInt DLcdPowerHandler::GetCurrentDisplayModeInfo(TVideoInfoV01& aInfo, TBool aSecure)
-{
-  NKern::FMWait(&iLock);
-  if(aSecure)
-	aInfo = iSecureVideoInfo;
-  else
-	aInfo = iVideoInfo;
-  NKern::FMSignal(&iLock);
-  return KErrNone;
-}
-
-TInt DLcdPowerHandler::GetSpecifiedDisplayModeInfo(TInt aMode, TVideoInfoV01& aInfo)
-{
-  if(aMode < 0 || aMode >= KConfigLcdNumberOfDisplayModes)
-	return KErrArgument;
-  
-  NKern::FMWait(&iLock);
-  aInfo = iVideoInfo;
-  NKern::FMSignal(&iLock);
-
-  if(aMode != aInfo.iDisplayMode)
-	{
-	  aInfo.iOffsetToFirstPixel = KCOnfigOffsetToFirstPixel;
-	  aInfo.iIsPalettized       = KConfigIsPalettized;
-	  aInfo.iOffsetBetweenLines = KCOnfigOffsetBetweenLines;
-	  aInfo.iBitsPerPixel       = KConfigBitsPerPixel;
-	}
-  return KErrNone;
-}
-
-TInt DLcdPowerHandler::AllocateFrameBuffer()
-{
-	// Allocate physical RAM for video
-	TInt vSize = TSyborg::VideoRamSize();
-
-	NKern::ThreadEnterCS();
-	TInt r = Epoc::AllocPhysicalRam(vSize,Syborg::VideoRamPhys);
-	if (r != KErrNone)
-	{
-	        NKern::ThreadLeaveCS();
-		Kern::Fault("AllocVideoRam",r);
-	}
-
-	// Map the video RAM
-	ivRamPhys = TSyborg::VideoRamPhys();
-
-	r = DPlatChunkHw::New(iChunk,ivRamPhys,vSize,EMapAttrUserRw|EMapAttrBufferedC);
-
-	NKern::ThreadLeaveCS();
-
-	if(r != KErrNone)
-	  return r;
-
-	TUint* pV = (TUint*)iChunk->LinearAddress();
-
-	// Allocate physical RAM for secure display
-	NKern::ThreadEnterCS();
-	r = Epoc::AllocPhysicalRam(vSize,Syborg::VideoRamPhysSecure);
-	if (r != KErrNone)
-	{
-	        NKern::ThreadLeaveCS();
-		Kern::Fault("AllocVideoRam 2",r);
-	}
-	iSecurevRamPhys = ivRamPhys + vSize;
-	TInt r2 = DPlatChunkHw::New(iSecureChunk,iSecurevRamPhys,vSize,EMapAttrUserRw|EMapAttrBufferedC);
-
-	NKern::ThreadLeaveCS();
-
-	if(r2 != KErrNone)
-	  return r2;
-
-	TUint* pV2 = (TUint*)iSecureChunk->LinearAddress();
-
-	iVideoInfo.iSizeInPixels.iWidth  = KConfigLcdWidth;
-	iVideoInfo.iSizeInPixels.iHeight = KConfigLcdHeight;
-	iVideoInfo.iDisplayMode = KConfigLcdDisplayMode;
-	iVideoInfo.iOffsetToFirstPixel = KCOnfigOffsetToFirstPixel;
-	iVideoInfo.iOffsetBetweenLines = KCOnfigOffsetBetweenLines;
-	iVideoInfo.iIsPalettized = KConfigIsPalettized;
-	iVideoInfo.iBitsPerPixel = KConfigBitsPerPixel;
-	iVideoInfo.iSizeInTwips.iWidth = KConfigLcdWidthInTwips;
-	iVideoInfo.iSizeInTwips.iHeight = KConfigLcdHeightInTwips;
-	iVideoInfo.iIsMono = KConfigIsMono;
-	iVideoInfo.iVideoAddress = (TInt)pV;
-	iVideoInfo.iIsPixelOrderLandscape = KConfigPixelOrderLandscape;
-	iVideoInfo.iIsPixelOrderRGB = KConfigPixelOrderRGB;
-
-	iSecureVideoInfo = iVideoInfo;
-	iSecureVideoInfo.iVideoAddress = (TInt)pV2;
-
-#if 0
-	WriteReg(iPortAddr, FB_ENABLED, 0);
-	WriteReg(IPortAddr, FB_INT_MASK, 0);
-	WriteReg(iPortAddr, FB_BASE, iSecureDisplay ? iSecurevRamPhys : ivRamPhys);
-	WriteReg(iPortAddr, FB_WIDTH, iVideoInfo.iSizeInPixels.iWidth);
-	WriteReg(iPortAddr, FB_HEIGHT, iVideoInfo.iSizeInPixels.iHeight);
-	WriteReg(iPortAddr, FB_BLANK, 0);
-	WriteReg(iPortAddr, FB_ENABLED, 1);
-#endif
-	
-	return KErrNone;
-}
-
-
-TInt DLcdPowerHandler::SetDisplayMode(TInt aMode)
-{
-  if(aMode < 0 || aMode >= KConfigLcdNumberOfDisplayModes)
-	return KErrArgument;
-
-  // store the current mode
-  iVideoInfo.iDisplayMode = aMode;
-
-  // store the current mode for secure screen
-  iSecureVideoInfo.iDisplayMode = aMode;
-
-  return KErrNone;
-}
-
-TInt DLcdPowerHandler::HalFunction(TInt aFunction, TAny* a1, TAny* a2)
-{
-  TInt r=KErrNone;
-  switch(aFunction)
-	{
-	case EDisplayHalScreenInfo:
-	  {
-		TPckgBuf<TScreenInfoV01> vPckg;
-		ScreenInfo(vPckg());
-		Kern::InfoCopy(*(TDes8*)a1,vPckg);
-		break;
-	  }
-	case EDisplayHalWsRegisterSwitchOnScreenHandling:
-	  {
-		iWsSwitchOnScreen=(TBool)a1;
-		break;
-	  }
-	case EDisplayHalWsSwitchOnScreen:
-	  {
-		WsSwitchOnScreen();
-		break;
-	  }
-	case EDisplayHalModeCount:
-	  {
-		TInt ndm = KConfigLcdNumberOfDisplayModes;
-		kumemput32(a1, &ndm, sizeof(ndm));
-		break;
-	  }
-	case EDisplayHalSetMode:
-	  {
-		__KTRACE_OPT(KEXTENSION,Kern::Printf("EDisplayHalSetMode"));
-		__SECURE_KERNEL(
-						if(!Kern::CurrentThreadHasCapability(ECapabilityMultimediaDD,__PLATSEC_DIAGNOSTIC_STRING("Checked by Hal function EDisplayHalSetMode")))
-						return KErrPermissionDenied;
-						)
-		  r = SetDisplayMode((TInt)a1);
-		break;
-	  }
-	case EDisplayHalMode:
-	  {
-		kumemput32(a1, &iVideoInfo.iDisplayMode, sizeof(iVideoInfo.iDisplayMode));
-		r = KErrNone;
-		break;
-	  }
-	case EDisplayHalSetPaletteEntry:
-	  {
-		__SECURE_KERNEL(
-						if(!Kern::CurrentThreadHasCapability(ECapabilityMultimediaDD,__PLATSEC_DIAGNOSTIC_STRING("Checked by Hal function EDisplayHalSetPaletteEntry")))
-						return KErrPermissionDenied;
-						)
-		  r = KErrNotSupported;
-		break;
-	  }
-	case EDisplayHalPaletteEntry:
-	  {
-		TInt entry;
-		kumemget32(&entry, a1, sizeof(TInt));
-		r = KErrNotSupported;
-		break;
-	  }
-	case EDisplayHalSetState:
-	  {
-		__SECURE_KERNEL(
-						if(!Kern::CurrentThreadHasCapability(ECapabilityPowerMgmt,__PLATSEC_DIAGNOSTIC_STRING("Checked by Hal function EDisplayHalSetState")))
-						return KErrPermissionDenied;
-						)
-		  if((TBool)a1)
-			WsSwitchOnScreen();
-		  else
-			WsSwitchOffScreen();
-		break;
-	  }
-	case EDisplayHalState:
-	  {
-		kumemput32(a1, &iDisplayOn, sizeof(TBool));
-		break;
-	  }
-	case EDisplayHalColors:
-	  {
-		TInt mdc = 1<<24;
-		kumemput32(a1, &mdc, sizeof(mdc));
-		break;
-	  }
-	case EDisplayHalCurrentModeInfo:
-	  {
-		TPckgBuf<TVideoInfoV01> vPckg;
-		r = GetCurrentDisplayModeInfo(vPckg(), (TBool)a2);
-		if(KErrNone == r)
-		  Kern::InfoCopy(*(TDes8*)a1,vPckg);
-		break;
-	  }
-	case EDisplayHalSpecifiedModeInfo:
-	  {
-		TPckgBuf<TVideoInfoV01> vPckg;
-		TInt mode;
-		kumemget32(&mode, a1, sizeof(mode));
-		r = GetSpecifiedDisplayModeInfo(mode, vPckg());
-		if(KErrNone == r)
-		  Kern::InfoCopy(*(TDes8*)a2,vPckg);
-		break;
-	  }	
-	case EDisplayHalSecure:
-	  {
-		kumemput32(a1, &iSecureDisplay, sizeof(TBool));
-		break;
-	  }
-	case EDisplayHalSetSecure:
-	  {
-		__SECURE_KERNEL(
-						if(!Kern::CurrentThreadHasCapability(ECapabilityMultimediaDD,__PLATSEC_DIAGNOSTIC_STRING("Checked by Hal function EDisplayHalSetSecure")))
-						return KErrPermissionDenied;
-						)
-		  SwitchDisplay((TBool)a1);
-		break;
-	  }
-	default:
-	  {
-		r = KErrNotSupported;
-		break;
-	  }			
-	}
-  return r;
-}
-
-TInt DLcdPowerHandler::Create()
-{
-	iDfcQ = Kern::DfcQue0();	// use low priority DFC queue for this driver 
-
-	iPortAddr = KHwBaseClcd;
-
-	// !@!
-#if 0	
-	// Map the video RAM
-	TInt vSize = TSyborg::VideoRamSize();
-	ivRamPhys = TSyborg::VideoRamPhys();
-
-	TInt r = DPlatChunkHw::New(iChunk,ivRamPhys,vSize,EMapAttrUserRw|EMapAttrBufferedC);
-	if(r != KErrNone)
-	  return r;
-
-	TUint* pV = (TUint*)iChunk->LinearAddress();
-
-	iSecurevRamPhys = ivRamPhys + vSize;
-	TInt r2 = DPlatChunkHw::New(iSecureChunk,iSecurevRamPhys,vSize,EMapAttrUserRw|EMapAttrBufferedC);
-	if(r2 != KErrNone)
-	  return r2;
-
-	TUint* pV2 = (TUint*)iSecureChunk->LinearAddress();
-#endif
-
-	iVideoInfo.iSizeInPixels.iWidth  = KConfigLcdWidth;
-	iVideoInfo.iSizeInPixels.iHeight = KConfigLcdHeight;
-	iVideoInfo.iDisplayMode = KConfigLcdDisplayMode;
-	iVideoInfo.iOffsetToFirstPixel = KCOnfigOffsetToFirstPixel;
-	iVideoInfo.iOffsetBetweenLines = KCOnfigOffsetBetweenLines;
-	iVideoInfo.iIsPalettized = KConfigIsPalettized;
-	iVideoInfo.iBitsPerPixel = KConfigBitsPerPixel;
-	iVideoInfo.iSizeInTwips.iWidth = KConfigLcdWidthInTwips;
-	iVideoInfo.iSizeInTwips.iHeight = KConfigLcdHeightInTwips;
-	iVideoInfo.iIsMono = KConfigIsMono;
-	// !@!	iVideoInfo.iVideoAddress = (TInt)pV;
-	iVideoInfo.iIsPixelOrderLandscape = KConfigPixelOrderLandscape;
-	iVideoInfo.iIsPixelOrderRGB = KConfigPixelOrderRGB;
-
-	iSecureVideoInfo = iVideoInfo;
-	// !@! iSecureVideoInfo.iVideoAddress = (TInt)pV2;
-
-	AllocateFrameBuffer();
-	TInt r = Kern::AddHalEntry(EHalGroupDisplay,DoHalFunction,this);
-	if(r != KErrNone)
-	  return r;
-
-	iPowerUpDfc.SetDfcQ(iDfcQ);
-	iPowerDownDfc.SetDfcQ(iDfcQ);
-	iMsgQ.SetDfcQ(iDfcQ);
-	iMsgQ.Receive();
-
-	Add();
-	DisplayOn();
-
-	return KErrNone;
-}
-
-DECLARE_STANDARD_EXTENSION()
-{
-  TInt r = KErrNoMemory;
-  DLcdPowerHandler* pH=new DLcdPowerHandler;
-  if(pH)
-	r = pH->Create();
-  
-  return r;
-}