[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

xserver-xorg-video-radeonhd: Changes to 'upstream-experimental'



 .gitignore                              |    3 
 configure.ac                            |   12 
 src/AtomBios/CD_Operations.c            |  954 +++++++++++++++++++++++++++++++
 src/AtomBios/Decoder.c                  |  235 +++++++
 src/AtomBios/hwserv_drv.c               |  348 +++++++++++
 src/AtomBios/includes/CD_Common_Types.h |  150 +++++
 src/AtomBios/includes/CD_Definitions.h  |   49 +
 src/AtomBios/includes/CD_Opcodes.h      |  181 ++++++
 src/AtomBios/includes/CD_Structs.h      |  464 +++++++++++++++
 src/AtomBios/includes/CD_binding.h      |   46 +
 src/AtomBios/includes/CD_hw_services.h  |  318 ++++++++++
 src/AtomBios/includes/Decoder.h         |   86 ++
 src/AtomBios/includes/regsdef.h         |   25 
 src/Makefile.am                         |   24 
 src/rhd.h                               |    2 
 src/rhd_atombios.c                      |    2 
 src/rhd_driver.c                        |   23 
 src/rhd_id.c                            |   73 +-
 utils/conntest/Makefile                 |    9 
 utils/conntest/README                   |  112 +++
 utils/conntest/rhd_conntest.c           |  958 ++++++++++++++++++++++++++++++++
 21 files changed, 3991 insertions(+), 83 deletions(-)

New commits:
commit 3fb794a2a5b6981a8cb17198ab06f1077b286c4c
Author: Yanko Kaneti <yaneti@declera.com>
Date:   Thu Sep 20 22:50:30 2007 +0200

    Fix paths to include files ('make distcheck' works now).

diff --git a/src/Makefile.am b/src/Makefile.am
index 52cc76d..60c7a59 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -40,7 +40,7 @@ radeonhd_drv_la_SOURCES = \
 
 if ATOM_BIOS
 radeonhd_drv_la_SOURCES += \
-	atombios.h
+	AtomBios/includes/atombios.h
 
 INCLUDES = -I$(srcdir)/AtomBios/includes
 

commit 561c8f7488e8621593a6f0473b384235f97745ca
Author: Hans Ulrich Niedermann <hun@n-dimensional.de>
Date:   Thu Sep 20 22:47:52 2007 +0200

    Fix builds with srcdir != builddir.

diff --git a/configure.ac b/configure.ac
index db38e13..f67aed6 100644
--- a/configure.ac
+++ b/configure.ac
@@ -73,10 +73,10 @@ AC_ARG_ENABLE(atombios-parser, AC_HELP_STRING([--disable-atombios-parser],
               [do_atombios_parser="$enableval"],
               [do_atombios_parser=yes])
 
-AC_CHECK_FILE([src/AtomBios/includes/atombios.h],
+AC_CHECK_FILE([${srcdir}/src/AtomBios/includes/atombios.h],
               [have_atombios_h="yes"], [have_atombios_h="no"])
 
-AC_CHECK_FILE([src/AtomBios/includes/Decoder.h],
+AC_CHECK_FILE([${srcdir}/src/AtomBios/includes/Decoder.h],
               [have_atombios_parser="yes"], [have_atombios_parser="no"])
 
 AC_MSG_CHECKING([whether to include AtomBIOS])
diff --git a/src/Makefile.am b/src/Makefile.am
index 5877b01..52cc76d 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -42,7 +42,7 @@ if ATOM_BIOS
 radeonhd_drv_la_SOURCES += \
 	atombios.h
 
-INCLUDES = -I./AtomBios/includes
+INCLUDES = -I$(srcdir)/AtomBios/includes
 
 endif
 
@@ -75,4 +75,4 @@ libatom_la_SOURCES = \
 
 radeonhd_drv_la_LIBADD = libatom.la
 
-endif
\ No newline at end of file
+endif

commit abff1af7e330183fddb0fd7ae6319bd2e3644c0c
Author: Evgeni Golov <sargentd@die-welt.net>
Date:   Thu Sep 20 22:43:26 2007 +0200

    Fixed message string for AtomBIOS parser disable.

diff --git a/configure.ac b/configure.ac
index 96942e1..db38e13 100644
--- a/configure.ac
+++ b/configure.ac
@@ -69,7 +69,7 @@ AC_ARG_ENABLE(atombios, AC_HELP_STRING([--disable-atombios],
               [do_atombios=yes])
 
 AC_ARG_ENABLE(atombios-parser, AC_HELP_STRING([--disable-atombios-parser],
-                                  [Disable AtomBIOS support [[default=no]]]),
+                                  [Disable AtomBIOS parser support [[default=no]]]),
               [do_atombios_parser="$enableval"],
               [do_atombios_parser=yes])
 

commit 0f9988796e1d964f8bac4bf302bac7d78b70a388
Author: Egbert Eich <eich@freedesktop.org>
Date:   Thu Sep 20 22:35:22 2007 +0200

    Removed some test code, restored original version.

diff --git a/src/AtomBios/includes/CD_Common_Types.h b/src/AtomBios/includes/CD_Common_Types.h
index 57a9b6b..7a0f27f 100644
--- a/src/AtomBios/includes/CD_Common_Types.h
+++ b/src/AtomBios/includes/CD_Common_Types.h
@@ -51,8 +51,7 @@ Revision History:
 		typedef unsigned int uint32_t;
 		typedef int int32_t;
 	#else
-#error
-typedef unsigned long	    uint32_t;
+		typedef unsigned long	    uint32_t;
 		typedef signed long         int32_t;
 	#endif
 		typedef unsigned char       uint8_t;

commit 5f2c77bd79d5eee4d2d5c04902d660d69e4861fa
Author: Matt Kraai <kraai@ftbfs.org>
Date:   Thu Sep 20 21:28:57 2007 +0200

    Fixed a wrongly applied patch. Sorry Matt.

diff --git a/configure.ac b/configure.ac
index 6bcb7c0..96942e1 100644
--- a/configure.ac
+++ b/configure.ac
@@ -63,12 +63,12 @@ if test "x$MONREC_HAS_BANDWIDTH" = xyes; then
         AC_DEFINE(MONREC_HAS_BANDWIDTH, 1, [MonRec has member maxPixClock])
 fi
 
-AC_ARG_ENABLE(atombios-parser, AC_HELP_STRING([--disable-atombios],
+AC_ARG_ENABLE(atombios, AC_HELP_STRING([--disable-atombios],
                                   [Disable AtomBIOS support [[default=no]]]),
               [do_atombios="$enableval"],
               [do_atombios=yes])
 
-AC_ARG_ENABLE(atombios, AC_HELP_STRING([--disable-atombios-parser],
+AC_ARG_ENABLE(atombios-parser, AC_HELP_STRING([--disable-atombios-parser],
                                   [Disable AtomBIOS support [[default=no]]]),
               [do_atombios_parser="$enableval"],
               [do_atombios_parser=yes])

commit cc0942d22afbdb98f6e8facab248664300111690
Author: Egbert Eich <eich@freedesktop.org>
Date:   Thu Sep 20 21:21:23 2007 +0200

    Fixed a type conflict when building with AtomBIOS parser.
    
    The AtomBIOS header files use types that are also used by X.
    They most likely conflict. Since CD_Common_Types.h tries to
    be 'nice' it wraps all typedefs with an #ifdef TYPE_NAME ...

diff --git a/src/rhd_atombios.c b/src/rhd_atombios.c
index 91b329f..9b7f28a 100644
--- a/src/rhd_atombios.c
+++ b/src/rhd_atombios.c
@@ -63,6 +63,8 @@ char *AtomBIOSFuncStr[] = {
 # include "rhd_atomwrapper.h"
 # include "xf86int10.h"
 # ifdef ATOM_BIOS_PARSER
+#  define INT8 INT8
+#  define INT16 INT16
 #  define INT32 INT32
 #  include "CD_Common_Types.h"
 # else

commit 602916db0b97a35346e8b3f52f1443c623368823
Author: Egbert Eich <eich@freedesktop.org>
Date:   Thu Sep 20 20:45:16 2007 +0200

    Added test for NetBSD.

diff --git a/src/AtomBios/includes/CD_Common_Types.h b/src/AtomBios/includes/CD_Common_Types.h
index 9e3de5c..57a9b6b 100644
--- a/src/AtomBios/includes/CD_Common_Types.h
+++ b/src/AtomBios/includes/CD_Common_Types.h
@@ -47,11 +47,12 @@ Revision History:
 	//    typedef __int64             int64_t;
 		typedef unsigned __int32    uint32_t;
 		typedef __int32             int32_t;
-#elif defined (linux)
+#elif defined (linux) || defined (__NetBSD__)
 		typedef unsigned int uint32_t;
 		typedef int int32_t;
 	#else
-		typedef unsigned long	    uint32_t;
+#error
+typedef unsigned long	    uint32_t;
 		typedef signed long         int32_t;
 	#endif
 		typedef unsigned char       uint8_t;

commit 4bb2741a8fcfc87541c9f02248144b6bd39320ee
Author: Egbert Eich <eich@freedesktop.org>
Date:   Thu Sep 20 20:06:38 2007 +0200

    Fixed AtomBios/include -> AtomBios/includes.

diff --git a/src/Makefile.am b/src/Makefile.am
index 91719dd..5877b01 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -63,15 +63,15 @@ libatom_la_SOURCES = \
 	AtomBios/CD_Operations.c \
 	AtomBios/Decoder.c \
 	AtomBios/hwserv_drv.c \
-	AtomBios/include/atombios.h \
-	AtomBios/include/CD_binding.h \
-	AtomBios/include/CD_Common_Types.h \
-	AtomBios/include/CD_Definitions.h \
-	AtomBios/include/CD_hw_services.h \
-	AtomBios/include/CD_Opcodes.h \
-	AtomBios/include/CD_Structs.h \
-	AtomBios/include/Decoder.h \
-	AtomBios/include/regsdef.h
+	AtomBios/includes/atombios.h \
+	AtomBios/includes/CD_binding.h \
+	AtomBios/includes/CD_Common_Types.h \
+	AtomBios/includes/CD_Definitions.h \
+	AtomBios/includes/CD_hw_services.h \
+	AtomBios/includes/CD_Opcodes.h \
+	AtomBios/includes/CD_Structs.h \
+	AtomBios/includes/Decoder.h \
+	AtomBios/includes/regsdef.h
 
 radeonhd_drv_la_LIBADD = libatom.la
 

commit bc40519279a18bd7c2e534e8c52893a403796eed
Author: Egbert Eich <eich@freedesktop.org>
Date:   Thu Sep 20 20:00:09 2007 +0200

    Fixed another missing \n.

diff --git a/src/rhd_driver.c b/src/rhd_driver.c
index 3354d53..7ae3ea8 100644
--- a/src/rhd_driver.c
+++ b/src/rhd_driver.c
@@ -444,7 +444,7 @@ RHDPreInit(ScrnInfoPtr pScrn, int flags)
 		   "To help rectify this, please send your X log to\n\t\t"
 		   "radeonhd_at_opensuse.org.\n\t"
 		   "or file a bug for the radeonhd component\n\t"
-		   "of the X.Org product at bugs.freedesktop.org."
+		   "of the X.Org product at bugs.freedesktop.org.\n"
 	    );
 	goto error0;
     }

commit 7005ba671ae63247fd3cf6a6d491674326508d69
Author: Matt Kraai <kraai@ftbfs.org>
Date:   Thu Sep 20 19:45:23 2007 +0200

    Fixed the atombios-parser option.

diff --git a/configure.ac b/configure.ac
index f51770c..6bcb7c0 100644
--- a/configure.ac
+++ b/configure.ac
@@ -63,7 +63,7 @@ if test "x$MONREC_HAS_BANDWIDTH" = xyes; then
         AC_DEFINE(MONREC_HAS_BANDWIDTH, 1, [MonRec has member maxPixClock])
 fi
 
-AC_ARG_ENABLE(atombios, AC_HELP_STRING([--disable-atombios],
+AC_ARG_ENABLE(atombios-parser, AC_HELP_STRING([--disable-atombios],
                                   [Disable AtomBIOS support [[default=no]]]),
               [do_atombios="$enableval"],
               [do_atombios=yes])

commit 10f25c76b9b526c3bc40a1ba222d6dd8bcba4e64
Author: Luc Verhaegen <libv@skynet.be>
Date:   Thu Sep 20 18:24:56 2007 +0200

    Fix missing \n in rhdModeLayoutSelect

diff --git a/src/rhd_driver.c b/src/rhd_driver.c
index 1da6faa..3354d53 100644
--- a/src/rhd_driver.c
+++ b/src/rhd_driver.c
@@ -1267,7 +1267,7 @@ rhdModeLayoutSelect(RHDPtr rhdPtr, char *ignore)
 						  rhdPtr->Card->Lvds.VDisplay);
 		if (!Monitor) {
 		    xf86DrvMsg(rhdPtr->scrnIndex, X_WARNING, "Unable to attach"
-			       " monitor to connector \"%s\"", Connector->Name);
+			       " monitor to connector \"%s\"\n", Connector->Name);
 		    Output->Active = FALSE;
 		}
 	    }

commit d9ef45828d99a70db31baf6de2fa54a7960c121e
Author: Egbert Eich <eich@freedesktop.org>
Date:   Thu Sep 20 17:38:31 2007 +0200

    Adding AMD's AtomBIOS parser.

diff --git a/src/AtomBios/CD_Operations.c b/src/AtomBios/CD_Operations.c
new file mode 100644
index 0000000..1e48f81
--- /dev/null
+++ b/src/AtomBios/CD_Operations.c
@@ -0,0 +1,954 @@
+/*
+ * Copyright 2006-2007 Advanced Micro Devices, Inc.  
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
+ * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
+ * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ */
+
+/**
+
+Module Name:
+
+    CD_Operations.c
+
+Abstract:
+
+		Functions Implementing Command Operations and other common functions
+
+Revision History:
+
+	NEG:27.09.2002	Initiated.
+--*/
+#define __SW_4
+
+#include "Decoder.h"
+#include	"atombios.h"
+
+
+
+VOID PutDataRegister(PARSER_TEMP_DATA STACK_BASED * pParserTempData);
+VOID PutDataPS(PARSER_TEMP_DATA STACK_BASED * pParserTempData);
+VOID PutDataWS(PARSER_TEMP_DATA STACK_BASED * pParserTempData);
+VOID PutDataFB(PARSER_TEMP_DATA STACK_BASED * pParserTempData);
+VOID PutDataPLL(PARSER_TEMP_DATA STACK_BASED * pParserTempData);
+VOID PutDataMC(PARSER_TEMP_DATA STACK_BASED * pParserTempData);
+
+UINT32 GetParametersDirect32(PARSER_TEMP_DATA STACK_BASED *	pParserTempData);
+UINT32 GetParametersDirect16(PARSER_TEMP_DATA STACK_BASED *	pParserTempData);
+UINT32 GetParametersDirect8(PARSER_TEMP_DATA STACK_BASED *	pParserTempData);
+
+UINT32 GetParametersRegister(PARSER_TEMP_DATA STACK_BASED *	pParserTempData);
+UINT32 GetParametersPS(PARSER_TEMP_DATA STACK_BASED *	pParserTempData);
+UINT32 GetParametersWS(PARSER_TEMP_DATA STACK_BASED *	pParserTempData);
+UINT32 GetParametersFB(PARSER_TEMP_DATA STACK_BASED *	pParserTempData);
+UINT32 GetParametersPLL(PARSER_TEMP_DATA STACK_BASED *	pParserTempData);
+UINT32 GetParametersMC(PARSER_TEMP_DATA STACK_BASED *	pParserTempData);
+
+VOID SkipParameters16(PARSER_TEMP_DATA STACK_BASED *	pParserTempData);
+VOID SkipParameters8(PARSER_TEMP_DATA STACK_BASED *	pParserTempData);
+
+UINT32 GetParametersIndirect(PARSER_TEMP_DATA STACK_BASED *	pParserTempData);
+UINT32 GetParametersDirect(PARSER_TEMP_DATA STACK_BASED *	pParserTempData);
+
+UINT16* GetDataMasterTablePointer(DEVICE_DATA STACK_BASED*  pDeviceData);
+UINT8 GetTrueIndexInMasterTable(PARSER_TEMP_DATA STACK_BASED * pParserTempData, UINT8 IndexInMasterTable);
+
+
+WRITE_IO_FUNCTION WritePCIFunctions[8] =   {
+    WritePCIReg32,
+    WritePCIReg16, WritePCIReg16, WritePCIReg16,
+    WritePCIReg8,WritePCIReg8,WritePCIReg8,WritePCIReg8
+};
+WRITE_IO_FUNCTION WriteIOFunctions[8] =    {
+    WriteSysIOReg32,
+    WriteSysIOReg16,WriteSysIOReg16,WriteSysIOReg16,
+    WriteSysIOReg8,WriteSysIOReg8,WriteSysIOReg8,WriteSysIOReg8
+};
+READ_IO_FUNCTION ReadPCIFunctions[8] =      {
+    (READ_IO_FUNCTION)ReadPCIReg32,
+    (READ_IO_FUNCTION)ReadPCIReg16,
+    (READ_IO_FUNCTION)ReadPCIReg16,
+    (READ_IO_FUNCTION)ReadPCIReg16,
+    (READ_IO_FUNCTION)ReadPCIReg8,
+    (READ_IO_FUNCTION)ReadPCIReg8,
+    (READ_IO_FUNCTION)ReadPCIReg8,
+    (READ_IO_FUNCTION)ReadPCIReg8
+};
+READ_IO_FUNCTION ReadIOFunctions[8] =       {
+    (READ_IO_FUNCTION)ReadSysIOReg32,
+    (READ_IO_FUNCTION)ReadSysIOReg16,
+    (READ_IO_FUNCTION)ReadSysIOReg16,
+    (READ_IO_FUNCTION)ReadSysIOReg16,
+    (READ_IO_FUNCTION)ReadSysIOReg8,
+    (READ_IO_FUNCTION)ReadSysIOReg8,
+    (READ_IO_FUNCTION)ReadSysIOReg8,
+    (READ_IO_FUNCTION)ReadSysIOReg8
+};
+READ_IO_FUNCTION GetParametersDirectArray[8]={
+    GetParametersDirect32,
+    GetParametersDirect16,GetParametersDirect16,GetParametersDirect16,
+    GetParametersDirect8,GetParametersDirect8,GetParametersDirect8,
+    GetParametersDirect8
+};
+
+COMMANDS_DECODER PutDataFunctions[6]   =     {
+    PutDataRegister,
+    PutDataPS,
+    PutDataWS,
+    PutDataFB,
+    PutDataPLL,
+    PutDataMC
+};
+CD_GET_PARAMETERS GetDestination[6]   =     {
+    GetParametersRegister,
+    GetParametersPS,
+    GetParametersWS,
+    GetParametersFB,
+    GetParametersPLL,
+    GetParametersMC
+};
+
+COMMANDS_DECODER SkipDestination[6]   =     {
+    SkipParameters16,
+    SkipParameters8,
+    SkipParameters8,
+    SkipParameters8,
+    SkipParameters8,
+    SkipParameters8
+};
+
+CD_GET_PARAMETERS GetSource[8]   =          {
+    GetParametersRegister,
+    GetParametersPS,
+    GetParametersWS,
+    GetParametersFB,
+    GetParametersIndirect,
+    GetParametersDirect,
+    GetParametersPLL,
+    GetParametersMC
+};
+
+UINT32 AlignmentMask[8] =                   {0xFFFFFFFF,0xFFFF,0xFFFF,0xFFFF,0xFF,0xFF,0xFF,0xFF};
+UINT8  SourceAlignmentShift[8] =            {0,0,8,16,0,8,16,24};
+UINT8  DestinationAlignmentShift[4] =       {0,8,16,24};
+
+#define INDIRECTIO_ID         1
+#define INDIRECTIO_END_OF_ID  9
+
+VOID IndirectIOCommand(PARSER_TEMP_DATA STACK_BASED * pParserTempData);
+VOID IndirectIOCommand_MOVE(PARSER_TEMP_DATA STACK_BASED * pParserTempData, UINT32 temp);
+VOID IndirectIOCommand_MOVE_INDEX(PARSER_TEMP_DATA STACK_BASED * pParserTempData);
+VOID IndirectIOCommand_MOVE_ATTR(PARSER_TEMP_DATA STACK_BASED * pParserTempData);
+VOID IndirectIOCommand_MOVE_DATA(PARSER_TEMP_DATA STACK_BASED * pParserTempData);
+VOID IndirectIOCommand_SET(PARSER_TEMP_DATA STACK_BASED * pParserTempData);
+VOID IndirectIOCommand_CLEAR(PARSER_TEMP_DATA STACK_BASED * pParserTempData);
+
+
+INDIRECT_IO_PARSER_COMMANDS  IndirectIOParserCommands[10]={
+    {IndirectIOCommand,1},
+    {IndirectIOCommand,2},
+    {ReadIndReg32,3},
+    {WriteIndReg32,3},
+    {IndirectIOCommand_CLEAR,3},
+    {IndirectIOCommand_SET,3},
+    {IndirectIOCommand_MOVE_INDEX,4},
+    {IndirectIOCommand_MOVE_ATTR,4},
+    {IndirectIOCommand_MOVE_DATA,4},
+    {IndirectIOCommand,3}
+};
+
+
+VOID IndirectIOCommand(PARSER_TEMP_DATA STACK_BASED * pParserTempData)
+{
+}
+
+
+VOID IndirectIOCommand_MOVE_INDEX(PARSER_TEMP_DATA STACK_BASED * pParserTempData)
+{
+    pParserTempData->IndirectData &= ~((0xFFFFFFFF >> (32-pParserTempData->IndirectIOTablePointer[1])) << pParserTempData->IndirectIOTablePointer[3]);
+    pParserTempData->IndirectData |=(((pParserTempData->Index >> pParserTempData->IndirectIOTablePointer[2]) &
+				      (0xFFFFFFFF >> (32-pParserTempData->IndirectIOTablePointer[1]))) << pParserTempData->IndirectIOTablePointer[3]);
+}
+
+VOID IndirectIOCommand_MOVE_ATTR(PARSER_TEMP_DATA STACK_BASED * pParserTempData)
+{
+    pParserTempData->IndirectData &= ~((0xFFFFFFFF >> (32-pParserTempData->IndirectIOTablePointer[1])) << pParserTempData->IndirectIOTablePointer[3]);
+    pParserTempData->IndirectData |=(((pParserTempData->AttributesData >> pParserTempData->IndirectIOTablePointer[2])
+				      & (0xFFFFFFFF >> (32-pParserTempData->IndirectIOTablePointer[1]))) << pParserTempData->IndirectIOTablePointer[3]);
+}
+
+VOID IndirectIOCommand_MOVE_DATA(PARSER_TEMP_DATA STACK_BASED * pParserTempData)
+{
+    pParserTempData->IndirectData &= ~((0xFFFFFFFF >> (32-pParserTempData->IndirectIOTablePointer[1])) << pParserTempData->IndirectIOTablePointer[3]);
+    pParserTempData->IndirectData |=(((pParserTempData->DestData32 >> pParserTempData->IndirectIOTablePointer[2])
+				      & (0xFFFFFFFF >> (32-pParserTempData->IndirectIOTablePointer[1]))) << pParserTempData->IndirectIOTablePointer[3]);
+}
+
+
+VOID IndirectIOCommand_SET(PARSER_TEMP_DATA STACK_BASED * pParserTempData)
+{
+    pParserTempData->IndirectData |= ((0xFFFFFFFF >> (32-pParserTempData->IndirectIOTablePointer[1])) << pParserTempData->IndirectIOTablePointer[2]);
+}
+
+VOID IndirectIOCommand_CLEAR(PARSER_TEMP_DATA STACK_BASED * pParserTempData)
+{
+    pParserTempData->IndirectData &= ~((0xFFFFFFFF >> (32-pParserTempData->IndirectIOTablePointer[1])) << pParserTempData->IndirectIOTablePointer[2]);
+}
+
+
+UINT32 IndirectInputOutput(PARSER_TEMP_DATA STACK_BASED * pParserTempData)
+{
+    // if ((pParserTempData->IndirectData & 0x7f)==INDIRECT_IO_MM) pParserTempData->IndirectData|=pParserTempData->CurrentPortID;
+//  pParserTempData->IndirectIOTablePointer=pParserTempData->IndirectIOTable;
+    while (*pParserTempData->IndirectIOTablePointer)
+    {
+	if ((pParserTempData->IndirectIOTablePointer[0] == INDIRECTIO_ID) &&
+            (pParserTempData->IndirectIOTablePointer[1] == pParserTempData->IndirectData))
+	{
+	    pParserTempData->IndirectIOTablePointer+=IndirectIOParserCommands[*pParserTempData->IndirectIOTablePointer].csize;
+	    while (*pParserTempData->IndirectIOTablePointer != INDIRECTIO_END_OF_ID)
+	    {
+		IndirectIOParserCommands[*pParserTempData->IndirectIOTablePointer].func(pParserTempData);
+		pParserTempData->IndirectIOTablePointer+=IndirectIOParserCommands[*pParserTempData->IndirectIOTablePointer].csize;
+	    }
+	    pParserTempData->IndirectIOTablePointer-=*(UINT16*)(pParserTempData->IndirectIOTablePointer+1);
+	    pParserTempData->IndirectIOTablePointer++;
+	    return pParserTempData->IndirectData;
+	} else pParserTempData->IndirectIOTablePointer+=IndirectIOParserCommands[*pParserTempData->IndirectIOTablePointer].csize;
+    }
+    return 0;
+}
+
+
+
+VOID PutDataRegister(PARSER_TEMP_DATA STACK_BASED * pParserTempData)
+{
+    pParserTempData->Index=(UINT32)pParserTempData->pCmd->Parameters.WordXX.PA_Destination;
+    pParserTempData->Index+=pParserTempData->CurrentRegBlock;
+    switch(pParserTempData->Multipurpose.CurrentPort){
+	case ATI_RegsPort:
+	    if (pParserTempData->CurrentPortID == INDIRECT_IO_MM)
+	    {
+		if (pParserTempData->Index==0) pParserTempData->DestData32 <<= 2;
+		WriteReg32( pParserTempData);
+	    } else
+	    {
+		pParserTempData->IndirectData=pParserTempData->CurrentPortID+INDIRECT_IO_WRITE;
+		IndirectInputOutput(pParserTempData);
+	    }
+	    break;
+	case PCI_Port:
+	    WritePCIFunctions[pParserTempData->pCmd->Header.Attribute.SourceAlignment](pParserTempData);
+	    break;
+	case SystemIO_Port:
+	    WriteIOFunctions[pParserTempData->pCmd->Header.Attribute.SourceAlignment](pParserTempData);
+	    break;
+    }
+}
+
+VOID PutDataPS(PARSER_TEMP_DATA STACK_BASED * pParserTempData)
+{
+    *(pParserTempData->pDeviceData->pParameterSpace+pParserTempData->pCmd->Parameters.ByteXX.PA_Destination)=
+	pParserTempData->DestData32;
+}
+
+VOID PutDataWS(PARSER_TEMP_DATA STACK_BASED * pParserTempData)
+{
+    if (pParserTempData->pCmd->Parameters.ByteXX.PA_Destination < WS_QUOTIENT_C)
+	*(pParserTempData->pWorkingTableData->pWorkSpace+pParserTempData->pCmd->Parameters.ByteXX.PA_Destination) = pParserTempData->DestData32;
+    else
+	switch (pParserTempData->pCmd->Parameters.ByteXX.PA_Destination)
+	{
+	    case WS_REMINDER_C:
+		pParserTempData->MultiplicationOrDivision.Division.Reminder32=pParserTempData->DestData32;
+		break;
+	    case WS_QUOTIENT_C:
+		pParserTempData->MultiplicationOrDivision.Division.Quotient32=pParserTempData->DestData32;
+		break;
+	    case WS_DATAPTR_C:
+#ifndef		UEFI_BUILD
+		pParserTempData->CurrentDataBlock=(UINT16)pParserTempData->DestData32;
+#else
+		pParserTempData->CurrentDataBlock=(UINTN)pParserTempData->DestData32;
+#endif
+		break;
+	    case WS_SHIFT_C:
+		pParserTempData->Shift2MaskConverter=(UINT8)pParserTempData->DestData32;
+		break;
+	    case WS_FB_WINDOW_C:
+		pParserTempData->CurrentFB_Window=pParserTempData->DestData32;
+		break;
+	    case WS_ATTRIBUTES_C:
+		pParserTempData->AttributesData=(UINT16)pParserTempData->DestData32;
+		break;
+	}
+
+}
+
+VOID PutDataFB(PARSER_TEMP_DATA STACK_BASED * pParserTempData)
+{
+    pParserTempData->Index=(UINT32)pParserTempData->pCmd->Parameters.ByteXX.PA_Destination;
+    //Make an Index from address first, then add to the Index
+    pParserTempData->Index+=(pParserTempData->CurrentFB_Window>>2);
+    WriteFrameBuffer32(pParserTempData);
+}
+
+VOID PutDataPLL(PARSER_TEMP_DATA STACK_BASED * pParserTempData)
+{
+    pParserTempData->Index=(UINT32)pParserTempData->pCmd->Parameters.ByteXX.PA_Destination;
+    WritePLL32( pParserTempData );
+}
+
+VOID PutDataMC(PARSER_TEMP_DATA STACK_BASED * pParserTempData)
+{
+    pParserTempData->Index=(UINT32)pParserTempData->pCmd->Parameters.ByteXX.PA_Destination;
+    WriteMC32( pParserTempData );
+}
+
+
+VOID SkipParameters8(PARSER_TEMP_DATA STACK_BASED *	pParserTempData)
+{
+    pParserTempData->pWorkingTableData->IP+=sizeof(UINT8);
+}
+
+VOID SkipParameters16(PARSER_TEMP_DATA STACK_BASED *	pParserTempData)
+{
+    pParserTempData->pWorkingTableData->IP+=sizeof(UINT16);
+}
+
+
+UINT32 GetParametersRegister(PARSER_TEMP_DATA STACK_BASED *	pParserTempData)
+{
+    pParserTempData->Index=*(UINT16*)pParserTempData->pWorkingTableData->IP;
+    pParserTempData->pWorkingTableData->IP+=sizeof(UINT16);
+    pParserTempData->Index+=pParserTempData->CurrentRegBlock;
+    switch(pParserTempData->Multipurpose.CurrentPort)
+    {
+	case PCI_Port:
+	    return ReadPCIFunctions[pParserTempData->pCmd->Header.Attribute.SourceAlignment](pParserTempData);
+	case SystemIO_Port:
+	    return ReadIOFunctions[pParserTempData->pCmd->Header.Attribute.SourceAlignment](pParserTempData);
+	case ATI_RegsPort:
+	default:
+	    if (pParserTempData->CurrentPortID == INDIRECT_IO_MM) return ReadReg32( pParserTempData );
+	    else
+	    {
+		pParserTempData->IndirectData=pParserTempData->CurrentPortID+INDIRECT_IO_READ;
+		return IndirectInputOutput(pParserTempData);
+	    }
+    }
+}
+
+UINT32 GetParametersPS(PARSER_TEMP_DATA STACK_BASED *	pParserTempData)
+{
+    pParserTempData->Index=*pParserTempData->pWorkingTableData->IP;
+    pParserTempData->pWorkingTableData->IP+=sizeof(UINT8);
+    return *(pParserTempData->pDeviceData->pParameterSpace+pParserTempData->Index);
+}
+
+UINT32 GetParametersWS(PARSER_TEMP_DATA STACK_BASED *	pParserTempData)
+{
+    pParserTempData->Index=*pParserTempData->pWorkingTableData->IP;
+    pParserTempData->pWorkingTableData->IP+=sizeof(UINT8);
+    if (pParserTempData->Index < WS_QUOTIENT_C)
+	return *(pParserTempData->pWorkingTableData->pWorkSpace+pParserTempData->Index);
+    else
+	switch (pParserTempData->Index)
+	{
+	    case WS_REMINDER_C:
+		return pParserTempData->MultiplicationOrDivision.Division.Reminder32;
+	    case WS_QUOTIENT_C:
+		return pParserTempData->MultiplicationOrDivision.Division.Quotient32;
+	    case WS_DATAPTR_C:
+		return (UINT32)pParserTempData->CurrentDataBlock;
+	    case WS_OR_MASK_C:
+		return ((UINT32)1) << pParserTempData->Shift2MaskConverter;
+	    case WS_AND_MASK_C:
+		return ~(((UINT32)1) << pParserTempData->Shift2MaskConverter);
+	    case WS_FB_WINDOW_C:
+		return pParserTempData->CurrentFB_Window;
+	    case WS_ATTRIBUTES_C:
+		return pParserTempData->AttributesData;
+	}
+    return 0;
+
+}
+
+UINT32 GetParametersFB(PARSER_TEMP_DATA STACK_BASED *	pParserTempData)
+{
+    pParserTempData->Index=*pParserTempData->pWorkingTableData->IP;
+    pParserTempData->pWorkingTableData->IP+=sizeof(UINT8);
+    pParserTempData->Index+=(pParserTempData->CurrentFB_Window>>2);
+    return ReadFrameBuffer32(pParserTempData);
+}
+
+UINT32 GetParametersPLL(PARSER_TEMP_DATA STACK_BASED *	pParserTempData)
+{
+    pParserTempData->Index=*pParserTempData->pWorkingTableData->IP;
+    pParserTempData->pWorkingTableData->IP+=sizeof(UINT8);
+    return ReadPLL32( pParserTempData );
+}
+
+UINT32 GetParametersMC(PARSER_TEMP_DATA STACK_BASED *	pParserTempData)
+{
+    pParserTempData->Index=*pParserTempData->pWorkingTableData->IP;
+    pParserTempData->pWorkingTableData->IP+=sizeof(UINT8);
+    return ReadMC32( pParserTempData );
+}
+
+
+UINT32 GetParametersIndirect(PARSER_TEMP_DATA STACK_BASED *	pParserTempData)
+{
+    pParserTempData->Index=*(UINT16*)pParserTempData->pWorkingTableData->IP;
+    pParserTempData->pWorkingTableData->IP+=sizeof(UINT16);
+    return *(UINT32*)(RELATIVE_TO_BIOS_IMAGE(pParserTempData->Index)+pParserTempData->CurrentDataBlock);
+}
+
+UINT32 GetParametersDirect8(PARSER_TEMP_DATA STACK_BASED *	pParserTempData)
+{
+    pParserTempData->CD_Mask.SrcAlignment=alignmentByte0;
+    pParserTempData->Index=*(UINT8*)pParserTempData->pWorkingTableData->IP;
+    pParserTempData->pWorkingTableData->IP+=sizeof(UINT8);
+    return pParserTempData->Index;
+}
+
+UINT32 GetParametersDirect16(PARSER_TEMP_DATA STACK_BASED *	pParserTempData)
+{
+    pParserTempData->CD_Mask.SrcAlignment=alignmentLowerWord;
+    pParserTempData->Index=*(UINT16*)pParserTempData->pWorkingTableData->IP;
+    pParserTempData->pWorkingTableData->IP+=sizeof(UINT16);
+    return pParserTempData->Index;
+}
+
+UINT32 GetParametersDirect32(PARSER_TEMP_DATA STACK_BASED *	pParserTempData)
+{
+    pParserTempData->CD_Mask.SrcAlignment=alignmentDword;
+    pParserTempData->Index=*(UINT32*)pParserTempData->pWorkingTableData->IP;
+    pParserTempData->pWorkingTableData->IP+=sizeof(UINT32);
+    return pParserTempData->Index;
+}
+
+
+UINT32 GetParametersDirect(PARSER_TEMP_DATA STACK_BASED *	pParserTempData)
+{
+    return GetParametersDirectArray[pParserTempData->pCmd->Header.Attribute.SourceAlignment](pParserTempData);
+}
+
+
+VOID CommonSourceDataTransformation(PARSER_TEMP_DATA STACK_BASED * pParserTempData)
+{
+    pParserTempData->SourceData32 >>= SourceAlignmentShift[pParserTempData->CD_Mask.SrcAlignment];
+    pParserTempData->SourceData32 &=  AlignmentMask[pParserTempData->CD_Mask.SrcAlignment];
+    pParserTempData->SourceData32 <<= DestinationAlignmentShift[pParserTempData->CD_Mask.DestAlignment];
+}
+
+VOID CommonOperationDataTransformation(PARSER_TEMP_DATA STACK_BASED * pParserTempData)
+{
+    pParserTempData->SourceData32 >>= SourceAlignmentShift[pParserTempData->CD_Mask.SrcAlignment];
+    pParserTempData->SourceData32 &= AlignmentMask[pParserTempData->CD_Mask.SrcAlignment];
+    pParserTempData->DestData32   >>= DestinationAlignmentShift[pParserTempData->CD_Mask.DestAlignment];
+    pParserTempData->DestData32   &= AlignmentMask[pParserTempData->CD_Mask.SrcAlignment];
+}
+
+VOID ProcessMove(PARSER_TEMP_DATA STACK_BASED * pParserTempData)
+{
+    if (pParserTempData->CD_Mask.SrcAlignment!=alignmentDword)
+    {
+	pParserTempData->DestData32=GetDestination[pParserTempData->ParametersType.Destination](pParserTempData);
+    } else
+    {
+	SkipDestination[pParserTempData->ParametersType.Destination](pParserTempData);
+    }
+    pParserTempData->SourceData32=GetSource[pParserTempData->ParametersType.Source](pParserTempData);
+
+    if (pParserTempData->CD_Mask.SrcAlignment!=alignmentDword)
+    {
+	pParserTempData->DestData32 &= ~(AlignmentMask[pParserTempData->CD_Mask.SrcAlignment] << DestinationAlignmentShift[pParserTempData->CD_Mask.DestAlignment]);
+	CommonSourceDataTransformation(pParserTempData);
+	pParserTempData->DestData32 |= pParserTempData->SourceData32;
+    } else
+    {
+	pParserTempData->DestData32=pParserTempData->SourceData32;
+    }
+    PutDataFunctions[pParserTempData->ParametersType.Destination](pParserTempData);
+}
+
+VOID ProcessMask(PARSER_TEMP_DATA STACK_BASED * pParserTempData)
+{
+
+    pParserTempData->DestData32=GetDestination[pParserTempData->ParametersType.Destination](pParserTempData);
+    pParserTempData->SourceData32=GetParametersDirect(pParserTempData);
+    pParserTempData->Index=GetParametersDirect(pParserTempData);
+    pParserTempData->SourceData32 <<= DestinationAlignmentShift[pParserTempData->CD_Mask.DestAlignment];
+    pParserTempData->SourceData32 |= ~(AlignmentMask[pParserTempData->CD_Mask.SrcAlignment] << DestinationAlignmentShift[pParserTempData->CD_Mask.DestAlignment]);
+    pParserTempData->DestData32   &= pParserTempData->SourceData32;
+    pParserTempData->Index        &= AlignmentMask[pParserTempData->CD_Mask.SrcAlignment];
+    pParserTempData->Index        <<= DestinationAlignmentShift[pParserTempData->CD_Mask.DestAlignment];
+    pParserTempData->DestData32   |= pParserTempData->Index;
+    PutDataFunctions[pParserTempData->ParametersType.Destination](pParserTempData);
+}
+
+VOID ProcessAnd(PARSER_TEMP_DATA STACK_BASED * pParserTempData)
+{
+    pParserTempData->DestData32=GetDestination[pParserTempData->ParametersType.Destination](pParserTempData);
+    pParserTempData->SourceData32=GetSource[pParserTempData->ParametersType.Source](pParserTempData);
+    pParserTempData->SourceData32 >>= SourceAlignmentShift[pParserTempData->CD_Mask.SrcAlignment];
+    pParserTempData->SourceData32 <<= DestinationAlignmentShift[pParserTempData->CD_Mask.DestAlignment];
+    pParserTempData->SourceData32 |= ~(AlignmentMask[pParserTempData->CD_Mask.SrcAlignment] << DestinationAlignmentShift[pParserTempData->CD_Mask.DestAlignment]);
+    pParserTempData->DestData32   &= pParserTempData->SourceData32;
+    PutDataFunctions[pParserTempData->ParametersType.Destination](pParserTempData);
+}
+
+VOID ProcessOr(PARSER_TEMP_DATA STACK_BASED * pParserTempData)
+{
+    pParserTempData->DestData32=GetDestination[pParserTempData->ParametersType.Destination](pParserTempData);
+    pParserTempData->SourceData32=GetSource[pParserTempData->ParametersType.Source](pParserTempData);
+    CommonSourceDataTransformation(pParserTempData);
+    pParserTempData->DestData32 |= pParserTempData->SourceData32;
+    PutDataFunctions[pParserTempData->ParametersType.Destination](pParserTempData);
+}
+
+VOID ProcessXor(PARSER_TEMP_DATA STACK_BASED * pParserTempData)
+{
+    pParserTempData->DestData32=GetDestination[pParserTempData->ParametersType.Destination](pParserTempData);
+    pParserTempData->SourceData32=GetSource[pParserTempData->ParametersType.Source](pParserTempData);
+    CommonSourceDataTransformation(pParserTempData);
+    pParserTempData->DestData32 ^= pParserTempData->SourceData32;
+    PutDataFunctions[pParserTempData->ParametersType.Destination](pParserTempData);
+}
+
+VOID ProcessShl(PARSER_TEMP_DATA STACK_BASED * pParserTempData)
+{
+    pParserTempData->DestData32=GetDestination[pParserTempData->ParametersType.Destination](pParserTempData);
+    pParserTempData->SourceData32=GetSource[pParserTempData->ParametersType.Source](pParserTempData);
+    CommonSourceDataTransformation(pParserTempData);
+    pParserTempData->DestData32 <<= pParserTempData->SourceData32;
+    PutDataFunctions[pParserTempData->ParametersType.Destination](pParserTempData);
+}
+
+VOID ProcessShr(PARSER_TEMP_DATA STACK_BASED * pParserTempData)
+{
+    pParserTempData->DestData32=GetDestination[pParserTempData->ParametersType.Destination](pParserTempData);
+    pParserTempData->SourceData32=GetSource[pParserTempData->ParametersType.Source](pParserTempData);
+    CommonSourceDataTransformation(pParserTempData);
+    pParserTempData->DestData32 >>= pParserTempData->SourceData32;
+    PutDataFunctions[pParserTempData->ParametersType.Destination](pParserTempData);
+}
+
+
+VOID ProcessADD(PARSER_TEMP_DATA STACK_BASED * pParserTempData)
+{
+    pParserTempData->DestData32=GetDestination[pParserTempData->ParametersType.Destination](pParserTempData);
+    pParserTempData->SourceData32=GetSource[pParserTempData->ParametersType.Source](pParserTempData);
+    CommonSourceDataTransformation(pParserTempData);
+    pParserTempData->DestData32 += pParserTempData->SourceData32;
+    PutDataFunctions[pParserTempData->ParametersType.Destination](pParserTempData);
+}
+
+VOID ProcessSUB(PARSER_TEMP_DATA STACK_BASED * pParserTempData)
+{
+    pParserTempData->DestData32=GetDestination[pParserTempData->ParametersType.Destination](pParserTempData);
+    pParserTempData->SourceData32=GetSource[pParserTempData->ParametersType.Source](pParserTempData);
+    CommonSourceDataTransformation(pParserTempData);
+    pParserTempData->DestData32 -= pParserTempData->SourceData32;
+    PutDataFunctions[pParserTempData->ParametersType.Destination](pParserTempData);
+}
+
+VOID ProcessMUL(PARSER_TEMP_DATA STACK_BASED * pParserTempData)
+{
+    pParserTempData->DestData32=GetDestination[pParserTempData->ParametersType.Destination](pParserTempData);
+    pParserTempData->SourceData32=GetSource[pParserTempData->ParametersType.Source](pParserTempData);
+    CommonOperationDataTransformation(pParserTempData);
+    pParserTempData->MultiplicationOrDivision.Multiplication.Low32Bit=pParserTempData->DestData32 * pParserTempData->SourceData32;
+}
+
+VOID ProcessDIV(PARSER_TEMP_DATA STACK_BASED * pParserTempData)
+{
+    pParserTempData->DestData32=GetDestination[pParserTempData->ParametersType.Destination](pParserTempData);
+    pParserTempData->SourceData32=GetSource[pParserTempData->ParametersType.Source](pParserTempData);
+
+    CommonOperationDataTransformation(pParserTempData);
+    pParserTempData->MultiplicationOrDivision.Division.Quotient32=
+	pParserTempData->DestData32 / pParserTempData->SourceData32;
+    pParserTempData->MultiplicationOrDivision.Division.Reminder32=
+	pParserTempData->DestData32 % pParserTempData->SourceData32;
+}
+
+
+VOID ProcessCompare(PARSER_TEMP_DATA STACK_BASED * pParserTempData)
+{
+    pParserTempData->DestData32=GetDestination[pParserTempData->ParametersType.Destination](pParserTempData);
+    pParserTempData->SourceData32=GetSource[pParserTempData->ParametersType.Source](pParserTempData);
+
+    CommonOperationDataTransformation(pParserTempData);
+
+    // Here we just set flags based on evaluation
+    if (pParserTempData->DestData32==pParserTempData->SourceData32)
+	pParserTempData->CompareFlags = Equal;
+    else
+	pParserTempData->CompareFlags =
+	    (UINT8)((pParserTempData->DestData32<pParserTempData->SourceData32) ? Below : Above);
+
+}
+
+VOID ProcessClear(PARSER_TEMP_DATA STACK_BASED * pParserTempData)
+{
+    pParserTempData->DestData32=GetDestination[pParserTempData->ParametersType.Destination](pParserTempData);
+    pParserTempData->DestData32 &= ~(AlignmentMask[pParserTempData->CD_Mask.SrcAlignment] << SourceAlignmentShift[pParserTempData->CD_Mask.SrcAlignment]);
+    PutDataFunctions[pParserTempData->ParametersType.Destination](pParserTempData);
+
+}
+
+VOID ProcessShift(PARSER_TEMP_DATA STACK_BASED * pParserTempData)
+{
+    UINT32 mask = AlignmentMask[pParserTempData->CD_Mask.SrcAlignment] << SourceAlignmentShift[pParserTempData->CD_Mask.SrcAlignment];
+    pParserTempData->DestData32=GetDestination[pParserTempData->ParametersType.Destination](pParserTempData);
+    pParserTempData->SourceData32=GetParametersDirect8(pParserTempData);
+
+    // save original value of the destination
+    pParserTempData->Index = pParserTempData->DestData32 & ~mask;
+    pParserTempData->DestData32 &= mask;
+
+    if (pParserTempData->pCmd->Header.Opcode < SHIFT_RIGHT_REG_OPCODE)
+	pParserTempData->DestData32 <<= pParserTempData->SourceData32; else
+	    pParserTempData->DestData32 >>= pParserTempData->SourceData32;
+
+    // Clear any bits shifted out of masked area...
+    pParserTempData->DestData32 &= mask;
+    // ... and restore the area outside of masked with original values
+    pParserTempData->DestData32 |= pParserTempData->Index;
+
+    // write data back
+    PutDataFunctions[pParserTempData->ParametersType.Destination](pParserTempData);
+}
+
+VOID ProcessTest(PARSER_TEMP_DATA STACK_BASED * pParserTempData)
+{
+    pParserTempData->DestData32=GetDestination[pParserTempData->ParametersType.Destination](pParserTempData);
+    pParserTempData->SourceData32=GetSource[pParserTempData->ParametersType.Source](pParserTempData);
+    CommonOperationDataTransformation(pParserTempData);
+    pParserTempData->CompareFlags =
+	(UINT8)((pParserTempData->DestData32 & pParserTempData->SourceData32) ? NotEqual : Equal);
+
+}
+
+VOID ProcessSetFB_Base(PARSER_TEMP_DATA STACK_BASED * pParserTempData)
+{
+    pParserTempData->SourceData32=GetSource[pParserTempData->ParametersType.Source](pParserTempData);
+    pParserTempData->SourceData32 >>= SourceAlignmentShift[pParserTempData->CD_Mask.SrcAlignment];
+    pParserTempData->SourceData32 &= AlignmentMask[pParserTempData->CD_Mask.SrcAlignment];
+    pParserTempData->CurrentFB_Window=pParserTempData->SourceData32;
+}
+
+VOID ProcessSwitch(PARSER_TEMP_DATA STACK_BASED * pParserTempData){
+    pParserTempData->SourceData32=GetSource[pParserTempData->ParametersType.Source](pParserTempData);
+    pParserTempData->SourceData32 >>= SourceAlignmentShift[pParserTempData->CD_Mask.SrcAlignment];
+    pParserTempData->SourceData32 &= AlignmentMask[pParserTempData->CD_Mask.SrcAlignment];
+    while ( *(UINT16*)pParserTempData->pWorkingTableData->IP != (((UINT16)NOP_OPCODE << 8)+NOP_OPCODE))
+    {
+	if (*pParserTempData->pWorkingTableData->IP == 'c')
+	{
+	    pParserTempData->pWorkingTableData->IP++;
+	    pParserTempData->DestData32=GetParametersDirect(pParserTempData);
+	    pParserTempData->Index=GetParametersDirect16(pParserTempData);
+	    if (pParserTempData->SourceData32 == pParserTempData->DestData32)
+	    {
+		pParserTempData->pWorkingTableData->IP= RELATIVE_TO_TABLE(pParserTempData->Index);
+		return;
+	    }
+	}
+    }
+    pParserTempData->pWorkingTableData->IP+=sizeof(UINT16);
+}
+
+
+VOID	cmdSetDataBlock(PARSER_TEMP_DATA STACK_BASED * pParserTempData)
+{
+    UINT8 value;
+    UINT16* pMasterDataTable;
+    value=((COMMAND_TYPE_1*)pParserTempData->pWorkingTableData->IP)->Parameters.ByteXX.PA_Destination;
+    if (value == 0) pParserTempData->CurrentDataBlock=0; else
+    {
+	if (value == DB_CURRENT_COMMAND_TABLE)



Reply to: