mirror of
				git://git.openwrt.org/openwrt/openwrt.git
				synced 2025-10-26 03:24:26 -04:00 
			
		
		
		
	
		
			
				
	
	
		
			3727 lines
		
	
	
		
			174 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
			
		
		
	
	
			3727 lines
		
	
	
		
			174 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
| From 6c9df5dff79b6d09d1a31681067e7fbd85285f80 Mon Sep 17 00:00:00 2001
 | |
| From: Kurt Mahan <kmahan@freescale.com>
 | |
| Date: Wed, 30 Apr 2008 12:22:03 -0600
 | |
| Subject: [PATCH] Update MultiChannel DMA to code version 1.0.
 | |
| 
 | |
| Changes since previous:
 | |
| - Updated FEC RX task to work around bug where it would not update
 | |
|   the RX buffer descriptors correctly and adjusted size accordingly.
 | |
| - Added flag MCD_TT_FLAGS_PI for use with DSPI on MCD547x/8x.
 | |
| - Fixed cleanup of paused tasks in MCD_killDma.
 | |
| - Cosmetic changes to cleanup MCD_dmaApi.c.
 | |
| 
 | |
| LTIBName: m547x-8x-mcdma-1.0
 | |
| Signed-off-by: Kurt Mahan <kmahan@freescale.com>
 | |
| ---
 | |
|  arch/m68k/coldfire/Makefile       |    3 +-
 | |
|  arch/m68k/coldfire/dma.c          |  532 ----
 | |
|  arch/m68k/coldfire/m547x_8x-dma.c |  516 ++++
 | |
|  drivers/dma/MCD_dma.h             |  786 +++---
 | |
|  drivers/dma/MCD_dmaApi.c          |  417 ++--
 | |
|  drivers/dma/MCD_progCheck.h       |   45 +-
 | |
|  drivers/dma/MCD_tasks.c           | 4917 +++++++++++++++++++------------------
 | |
|  drivers/dma/MCD_tasksInit.c       |  402 ++--
 | |
|  drivers/dma/MCD_tasksInit.h       |   49 +-
 | |
|  9 files changed, 3785 insertions(+), 3882 deletions(-)
 | |
|  delete mode 100644 arch/m68k/coldfire/dma.c
 | |
|  create mode 100644 arch/m68k/coldfire/m547x_8x-dma.c
 | |
| 
 | |
| --- a/arch/m68k/coldfire/Makefile
 | |
| +++ b/arch/m68k/coldfire/Makefile
 | |
| @@ -10,5 +10,4 @@ endif
 | |
|  
 | |
|  obj-$(CONFIG_PCI)	+= pci.o mcf5445x-pci.o iomap.o
 | |
|  obj-$(CONFIG_M54455)	+= mcf5445x-devices.o
 | |
| -
 | |
| -obj-$(CONFIG_MCD_DMA)	+= dma.o
 | |
| +obj-$(CONFIG_MCD_DMA)	+= m547x_8x-dma.o
 | |
| --- a/arch/m68k/coldfire/dma.c
 | |
| +++ /dev/null
 | |
| @@ -1,532 +0,0 @@
 | |
| -#include <linux/kernel.h>
 | |
| -#include <linux/sched.h>
 | |
| -#include <linux/mm.h>
 | |
| -#include <linux/init.h>
 | |
| -#include <linux/interrupt.h>
 | |
| -#include <asm/io.h>
 | |
| -#include <asm/irq.h>
 | |
| -#include <asm/dma.h>
 | |
| -#include <asm/coldfire.h>
 | |
| -#include <asm/m5485sram.h>
 | |
| -#include <asm/mcfsim.h>
 | |
| -
 | |
| -
 | |
| -
 | |
| -void dma_interrupt_handler(int irq, void *dev_id, struct pt_regs *regs);
 | |
| -
 | |
| -/* 
 | |
| - * This global keeps track of which initiators have been
 | |
| - * used of the available assignments.  Initiators 0-15 are
 | |
| - * hardwired.  Initiators 16-31 are multiplexed and controlled
 | |
| - * via the Initiatior Mux Control Registe (IMCR).  The
 | |
| - * assigned requestor is stored with the associated initiator
 | |
| - * number.
 | |
| - */
 | |
| -static int used_reqs[32] = {
 | |
| -	DMA_ALWAYS, DMA_DSPI_RX, DMA_DSPI_TX, DMA_DREQ0,
 | |
| -	DMA_PSC0_RX, DMA_PSC0_TX, DMA_USBEP0, DMA_USBEP1,
 | |
| -	DMA_USBEP2, DMA_USBEP3, DMA_PCI_TX, DMA_PCI_RX,
 | |
| -	DMA_PSC1_RX, DMA_PSC1_TX, DMA_I2C_RX, DMA_I2C_TX,
 | |
| -	0, 0, 0, 0,
 | |
| -	0, 0, 0, 0,
 | |
| -	0, 0, 0, 0,
 | |
| -	0, 0, 0, 0
 | |
| -};
 | |
| -
 | |
| -/*
 | |
| - * This global keeps track of which channels have been assigned
 | |
| - * to tasks.  This methology assumes that no single initiator
 | |
| - * will be tied to more than one task/channel
 | |
| - */
 | |
| -static char used_channel[16] = {
 | |
| -	-1, -1, -1, -1, -1, -1, -1, -1,
 | |
| -	-1, -1, -1, -1, -1, -1, -1, -1
 | |
| -};
 | |
| -
 | |
| -unsigned int connected_channel[16] = {
 | |
| -	0, 0, 0, 0, 0, 0, 0, 0,
 | |
| -	0, 0, 0, 0, 0, 0, 0, 0
 | |
| -};
 | |
| -
 | |
| -/********************************************************************/
 | |
| -/*
 | |
| - * Attempt to enable the provided Initiator in the Initiator
 | |
| - * Mux Control Register
 | |
| - *
 | |
| - * Parameters:
 | |
| - *  initiator   Initiator identifier
 | |
| - *
 | |
| - * Return Value:
 | |
| - *  1   if unable to make the assignment
 | |
| - *  0   successful
 | |
| - */
 | |
| -int
 | |
| -dma_set_initiator(int initiator)
 | |
| -{
 | |
| -	switch (initiator) {	/*
 | |
| -				 * These initiators are always active 
 | |
| -				 */
 | |
| -	case DMA_ALWAYS:
 | |
| -	case DMA_DSPI_RX:
 | |
| -	case DMA_DSPI_TX:
 | |
| -	case DMA_DREQ0:
 | |
| -	case DMA_PSC0_RX:
 | |
| -	case DMA_PSC0_TX:
 | |
| -	case DMA_USBEP0:
 | |
| -	case DMA_USBEP1:
 | |
| -	case DMA_USBEP2:
 | |
| -	case DMA_USBEP3:
 | |
| -	case DMA_PCI_TX:
 | |
| -	case DMA_PCI_RX:
 | |
| -	case DMA_PSC1_RX:
 | |
| -	case DMA_PSC1_TX:
 | |
| -	case DMA_I2C_RX:
 | |
| -	case DMA_I2C_TX:
 | |
| -		break;
 | |
| -
 | |
| -	case DMA_FEC0_RX:
 | |
| -		MCF_DMA_IMCR = (MCF_DMA_IMCR & ~MCF_DMA_IMCR_SRC16(3))
 | |
| -		    | MCF_DMA_IMCR_SRC16_FEC0RX;
 | |
| -		used_reqs[16] = DMA_FEC0_RX;
 | |
| -		break;
 | |
| -
 | |
| -	case DMA_FEC0_TX:
 | |
| -		MCF_DMA_IMCR = (MCF_DMA_IMCR & ~MCF_DMA_IMCR_SRC17(3))
 | |
| -		    | MCF_DMA_IMCR_SRC17_FEC0TX;
 | |
| -		used_reqs[17] = DMA_FEC0_TX;
 | |
| -		break;
 | |
| -
 | |
| -	case DMA_FEC1_RX:
 | |
| -		MCF_DMA_IMCR = (MCF_DMA_IMCR & ~MCF_DMA_IMCR_SRC20(3))
 | |
| -		    | MCF_DMA_IMCR_SRC20_FEC1RX;
 | |
| -		used_reqs[20] = DMA_FEC1_RX;
 | |
| -		break;
 | |
| -
 | |
| -	case DMA_FEC1_TX:
 | |
| -		if (used_reqs[21] == 0) {
 | |
| -			MCF_DMA_IMCR = (MCF_DMA_IMCR & ~MCF_DMA_IMCR_SRC21(3))
 | |
| -			    | MCF_DMA_IMCR_SRC21_FEC1TX;
 | |
| -			used_reqs[21] = DMA_FEC1_TX;
 | |
| -		} else if (used_reqs[25] == 0) {
 | |
| -			MCF_DMA_IMCR = (MCF_DMA_IMCR & ~MCF_DMA_IMCR_SRC25(3))
 | |
| -			    | MCF_DMA_IMCR_SRC25_FEC1TX;
 | |
| -			used_reqs[25] = DMA_FEC1_TX;
 | |
| -		} else if (used_reqs[31] == 0) {
 | |
| -			MCF_DMA_IMCR = (MCF_DMA_IMCR & ~MCF_DMA_IMCR_SRC31(3))
 | |
| -			    | MCF_DMA_IMCR_SRC31_FEC1TX;
 | |
| -			used_reqs[31] = DMA_FEC1_TX;
 | |
| -		} else		/* No empty slots */
 | |
| -			return 1;
 | |
| -		break;
 | |
| -
 | |
| -	case DMA_DREQ1:
 | |
| -		if (used_reqs[29] == 0) {
 | |
| -			MCF_DMA_IMCR = (MCF_DMA_IMCR & ~MCF_DMA_IMCR_SRC29(3))
 | |
| -			    | MCF_DMA_IMCR_SRC29_DREQ1;
 | |
| -			used_reqs[29] = DMA_DREQ1;
 | |
| -		} else if (used_reqs[21] == 0) {
 | |
| -			MCF_DMA_IMCR = (MCF_DMA_IMCR & ~MCF_DMA_IMCR_SRC21(3))
 | |
| -			    | MCF_DMA_IMCR_SRC21_DREQ1;
 | |
| -			used_reqs[21] = DMA_DREQ1;
 | |
| -		} else		/* No empty slots */
 | |
| -			return 1;
 | |
| -		break;
 | |
| -
 | |
| -	case DMA_CTM0:
 | |
| -		if (used_reqs[24] == 0) {
 | |
| -			MCF_DMA_IMCR = (MCF_DMA_IMCR & ~MCF_DMA_IMCR_SRC24(3))
 | |
| -			    | MCF_DMA_IMCR_SRC24_CTM0;
 | |
| -			used_reqs[24] = DMA_CTM0;
 | |
| -		} else		/* No empty slots */
 | |
| -			return 1;
 | |
| -		break;
 | |
| -
 | |
| -	case DMA_CTM1:
 | |
| -		if (used_reqs[25] == 0) {
 | |
| -			MCF_DMA_IMCR = (MCF_DMA_IMCR & ~MCF_DMA_IMCR_SRC25(3))
 | |
| -			    | MCF_DMA_IMCR_SRC25_CTM1;
 | |
| -			used_reqs[25] = DMA_CTM1;
 | |
| -		} else		/* No empty slots */
 | |
| -			return 1;
 | |
| -		break;
 | |
| -
 | |
| -	case DMA_CTM2:
 | |
| -		if (used_reqs[26] == 0) {
 | |
| -			MCF_DMA_IMCR = (MCF_DMA_IMCR & ~MCF_DMA_IMCR_SRC26(3))
 | |
| -			    | MCF_DMA_IMCR_SRC26_CTM2;
 | |
| -			used_reqs[26] = DMA_CTM2;
 | |
| -		} else		/* No empty slots */
 | |
| -			return 1;
 | |
| -		break;
 | |
| -
 | |
| -	case DMA_CTM3:
 | |
| -		if (used_reqs[27] == 0) {
 | |
| -			MCF_DMA_IMCR = (MCF_DMA_IMCR & ~MCF_DMA_IMCR_SRC27(3))
 | |
| -			    | MCF_DMA_IMCR_SRC27_CTM3;
 | |
| -			used_reqs[27] = DMA_CTM3;
 | |
| -		} else		/* No empty slots */
 | |
| -			return 1;
 | |
| -		break;
 | |
| -
 | |
| -	case DMA_CTM4:
 | |
| -		if (used_reqs[28] == 0) {
 | |
| -			MCF_DMA_IMCR = (MCF_DMA_IMCR & ~MCF_DMA_IMCR_SRC28(3))
 | |
| -			    | MCF_DMA_IMCR_SRC28_CTM4;
 | |
| -			used_reqs[28] = DMA_CTM4;
 | |
| -		} else		/* No empty slots */
 | |
| -			return 1;
 | |
| -		break;
 | |
| -
 | |
| -	case DMA_CTM5:
 | |
| -		if (used_reqs[29] == 0) {
 | |
| -			MCF_DMA_IMCR = (MCF_DMA_IMCR & ~MCF_DMA_IMCR_SRC29(3))
 | |
| -			    | MCF_DMA_IMCR_SRC29_CTM5;
 | |
| -			used_reqs[29] = DMA_CTM5;
 | |
| -		} else		/* No empty slots */
 | |
| -			return 1;
 | |
| -		break;
 | |
| -
 | |
| -	case DMA_CTM6:
 | |
| -		if (used_reqs[30] == 0) {
 | |
| -			MCF_DMA_IMCR = (MCF_DMA_IMCR & ~MCF_DMA_IMCR_SRC30(3))
 | |
| -			    | MCF_DMA_IMCR_SRC30_CTM6;
 | |
| -			used_reqs[30] = DMA_CTM6;
 | |
| -		} else		/* No empty slots */
 | |
| -			return 1;
 | |
| -		break;
 | |
| -
 | |
| -	case DMA_CTM7:
 | |
| -		if (used_reqs[31] == 0) {
 | |
| -			MCF_DMA_IMCR = (MCF_DMA_IMCR & ~MCF_DMA_IMCR_SRC31(3))
 | |
| -			    | MCF_DMA_IMCR_SRC31_CTM7;
 | |
| -			used_reqs[31] = DMA_CTM7;
 | |
| -		} else		/* No empty slots */
 | |
| -			return 1;
 | |
| -		break;
 | |
| -
 | |
| -	case DMA_USBEP4:
 | |
| -		if (used_reqs[26] == 0) {
 | |
| -			MCF_DMA_IMCR = (MCF_DMA_IMCR & ~MCF_DMA_IMCR_SRC26(3))
 | |
| -			    | MCF_DMA_IMCR_SRC26_USBEP4;
 | |
| -			used_reqs[26] = DMA_USBEP4;
 | |
| -		} else		/* No empty slots */
 | |
| -			return 1;
 | |
| -		break;
 | |
| -
 | |
| -	case DMA_USBEP5:
 | |
| -		if (used_reqs[27] == 0) {
 | |
| -			MCF_DMA_IMCR = (MCF_DMA_IMCR & ~MCF_DMA_IMCR_SRC27(3))
 | |
| -			    | MCF_DMA_IMCR_SRC27_USBEP5;
 | |
| -			used_reqs[27] = DMA_USBEP5;
 | |
| -		} else		/* No empty slots */
 | |
| -			return 1;
 | |
| -		break;
 | |
| -
 | |
| -	case DMA_USBEP6:
 | |
| -		if (used_reqs[28] == 0) {
 | |
| -			MCF_DMA_IMCR = (MCF_DMA_IMCR & ~MCF_DMA_IMCR_SRC28(3))
 | |
| -			    | MCF_DMA_IMCR_SRC28_USBEP6;
 | |
| -			used_reqs[28] = DMA_USBEP6;
 | |
| -		} else		/* No empty slots */
 | |
| -			return 1;
 | |
| -		break;
 | |
| -
 | |
| -	case DMA_PSC2_RX:
 | |
| -		if (used_reqs[28] == 0) {
 | |
| -			MCF_DMA_IMCR = (MCF_DMA_IMCR & ~MCF_DMA_IMCR_SRC28(3))
 | |
| -			    | MCF_DMA_IMCR_SRC28_PSC2RX;
 | |
| -			used_reqs[28] = DMA_PSC2_RX;
 | |
| -		} else		/* No empty slots */
 | |
| -			return 1;
 | |
| -		break;
 | |
| -
 | |
| -	case DMA_PSC2_TX:
 | |
| -		if (used_reqs[29] == 0) {
 | |
| -			MCF_DMA_IMCR = (MCF_DMA_IMCR & ~MCF_DMA_IMCR_SRC29(3))
 | |
| -			    | MCF_DMA_IMCR_SRC29_PSC2TX;
 | |
| -			used_reqs[29] = DMA_PSC2_TX;
 | |
| -		} else		/* No empty slots */
 | |
| -			return 1;
 | |
| -		break;
 | |
| -
 | |
| -	case DMA_PSC3_RX:
 | |
| -		if (used_reqs[30] == 0) {
 | |
| -			MCF_DMA_IMCR = (MCF_DMA_IMCR & ~MCF_DMA_IMCR_SRC30(3))
 | |
| -			    | MCF_DMA_IMCR_SRC30_PSC3RX;
 | |
| -			used_reqs[30] = DMA_PSC3_RX;
 | |
| -		} else		/* No empty slots */
 | |
| -			return 1;
 | |
| -		break;
 | |
| -
 | |
| -	case DMA_PSC3_TX:
 | |
| -		if (used_reqs[31] == 0) {
 | |
| -			MCF_DMA_IMCR = (MCF_DMA_IMCR & ~MCF_DMA_IMCR_SRC31(3))
 | |
| -			    | MCF_DMA_IMCR_SRC31_PSC3TX;
 | |
| -			used_reqs[31] = DMA_PSC3_TX;
 | |
| -		} else		/* No empty slots */
 | |
| -			return 1;
 | |
| -		break;
 | |
| -
 | |
| -	default:
 | |
| -		return 1;
 | |
| -	}
 | |
| -	return 0;
 | |
| -}
 | |
| -
 | |
| -/********************************************************************/
 | |
| -/*
 | |
| - * Return the initiator number for the given requestor
 | |
| - *
 | |
| - * Parameters:
 | |
| - *  requestor   Initiator/Requestor identifier
 | |
| - *
 | |
| - * Return Value:
 | |
| - *  The initiator number (0-31) if initiator has been assigned
 | |
| - *  0 (always initiator) otherwise
 | |
| - */
 | |
| -unsigned int
 | |
| -dma_get_initiator(int requestor)
 | |
| -{
 | |
| -	u32 i;
 | |
| -
 | |
| -	for (i = 0; i < sizeof (used_reqs); ++i) {
 | |
| -		if (used_reqs[i] == requestor)
 | |
| -			return i;
 | |
| -	}
 | |
| -	return 0;
 | |
| -}
 | |
| -
 | |
| -/********************************************************************/
 | |
| -/*
 | |
| - * Remove the given initiator from the active list
 | |
| - *
 | |
| - * Parameters:
 | |
| - *  requestor   Initiator/Requestor identifier
 | |
| - */
 | |
| -void
 | |
| -dma_remove_initiator(int requestor)
 | |
| -{
 | |
| -	u32 i;
 | |
| -
 | |
| -	for (i = 0; i < sizeof (used_reqs); ++i) {
 | |
| -		if (used_reqs[i] == requestor) {
 | |
| -			used_reqs[i] = -1;
 | |
| -			break;
 | |
| -		}
 | |
| -	}
 | |
| -}
 | |
| -
 | |
| -/********************************************************************/
 | |
| -/*
 | |
| - * Attempt to find an available channel for FEC and mark is as used
 | |
| - *
 | |
| - * Parameters:
 | |
| - *  requestor   Initiator/Requestor identifier
 | |
| - *
 | |
| - * Return Value:
 | |
| - *  First available channel (from 0 to 5) or -1 if they are all occupied
 | |
| - */
 | |
| -int
 | |
| -dma_set_channel_fec(int requestor)
 | |
| -{
 | |
| -	u32 i, t;
 | |
| -
 | |
| -#ifdef CONFIG_FEC_548x_ENABLE_FEC2
 | |
| -	t = 4;
 | |
| -#else
 | |
| -	t = 2;
 | |
| -#endif
 | |
| -
 | |
| -
 | |
| -
 | |
| -	for (i = 0; i < t ; ++i)
 | |
| -		if (used_channel[i] == -1) {
 | |
| -			used_channel[i] = requestor;
 | |
| -			return i;
 | |
| -		}
 | |
| -	/* All channels taken */
 | |
| -	return -1;
 | |
| -}
 | |
| -
 | |
| -/********************************************************************/
 | |
| -/*
 | |
| - * Attempt to find an available channel and mark is as used
 | |
| - *
 | |
| - * Parameters:
 | |
| - *  requestor   Initiator/Requestor identifier
 | |
| - *
 | |
| - * Return Value:
 | |
| - *  First available channel (from 6 to 15) or -1 if they are all occupied
 | |
| - */
 | |
| -int
 | |
| -dma_set_channel(int requestor)
 | |
| -{
 | |
| -	u32 i;
 | |
| -#ifdef CONFIG_NET_FEC2
 | |
| -	i = 4;
 | |
| -#else
 | |
| -	i = 2;
 | |
| -#endif				
 | |
| -
 | |
| -	for (; i < 16; ++i)
 | |
| -		if (used_channel[i] == -1) {
 | |
| -			used_channel[i] = requestor;
 | |
| -			return i;
 | |
| -		}
 | |
| -
 | |
| -	/* All channels taken */
 | |
| -	return -1;
 | |
| -}
 | |
| -
 | |
| -/********************************************************************/
 | |
| -/*
 | |
| - * Return the channel being initiated by the given requestor
 | |
| - *
 | |
| - * Parameters:
 | |
| - *  requestor   Initiator/Requestor identifier
 | |
| - */
 | |
| -int
 | |
| -dma_get_channel(int requestor)
 | |
| -{
 | |
| -	u32 i;
 | |
| -
 | |
| -	for (i = 0; i < sizeof (used_channel); ++i) {
 | |
| -		if (used_channel[i] == requestor)
 | |
| -			return i;
 | |
| -	}
 | |
| -	return -1;
 | |
| -}
 | |
| -
 | |
| -/********************************************************************/
 | |
| -/*
 | |
| - * Connects a channel with reference on your data 
 | |
| - *
 | |
| - * Parameters:
 | |
| - *  channel   channel number
 | |
| - *  reference addres of your data
 | |
| -  */
 | |
| -int
 | |
| -dma_connect(int channel, int address)
 | |
| -{
 | |
| -	if ((channel < 16) && (channel >= 0))
 | |
| -		connected_channel[channel] = address;
 | |
| -	else
 | |
| -		return -1;
 | |
| -	return 0;
 | |
| -}
 | |
| -
 | |
| -/********************************************************************/
 | |
| -/*
 | |
| - * Disconnects a channel with reference on your data 
 | |
| - *
 | |
| - * Parameters:
 | |
| - *  channel   channel number
 | |
| -*/
 | |
| -int
 | |
| -dma_disconnect(int channel)
 | |
| -{
 | |
| -	if ((channel < 16) && (channel >= 0))
 | |
| -		connected_channel[channel] = 0;
 | |
| -	else
 | |
| -		return -1;
 | |
| -	return 0;
 | |
| -}
 | |
| -
 | |
| -/********************************************************************/
 | |
| -/*
 | |
| - * Remove the channel being initiated by the given requestor from 
 | |
| - * the active list
 | |
| - *
 | |
| - * Parameters:
 | |
| - *  requestor   Initiator/Requestor identifier
 | |
| - */
 | |
| -void
 | |
| -dma_remove_channel(int requestor)
 | |
| -{
 | |
| -	u32 i;
 | |
| -
 | |
| -	for (i = 0; i < sizeof (used_channel); ++i) {
 | |
| -		if (used_channel[i] == requestor) {
 | |
| -			used_channel[i] = -1;
 | |
| -			break;
 | |
| -		}
 | |
| -	}
 | |
| -}
 | |
| -
 | |
| -/********************************************************************/
 | |
| -/* 
 | |
| - * This is the catch-all interrupt handler for the mult-channel DMA 
 | |
| - */
 | |
| -volatile u8 dma_iflag[16];
 | |
| -u32 tx = 0;
 | |
| -
 | |
| -void
 | |
| -dma_interrupt_handler(int irq, void *dev_id, struct pt_regs *regs)
 | |
| -{
 | |
| -	u32 i, interrupts/*, mask, temp*/;
 | |
| -
 | |
| -	/*
 | |
| -	 * Determine which interrupt(s) triggered by AND'ing the 
 | |
| -	 * pending interrupts with those that aren't masked.            
 | |
| -	 */
 | |
| -/*	mask = MCF_DMA_DIMR;
 | |
| -	MCF_DMA_DIMR = 0xffffffff;
 | |
| -*/
 | |
| -	interrupts = MCF_DMA_DIPR;
 | |
| -	MCF_DMA_DIPR |= interrupts;
 | |
| -//	temp = interrupts;
 | |
| -
 | |
| -	//MCF_DMA_DIPR = interrupts;
 | |
| -	for (i = 0; i < 16; ++i, interrupts >>= 1)
 | |
| -		if (interrupts & 0x1)
 | |
| -			if (connected_channel[i] != 0)
 | |
| -				((void (*)(void)) (connected_channel[i])) ();
 | |
| -
 | |
| -/*	MCF_DMA_DIPR |= temp;
 | |
| -	MCF_DMA_DIMR = mask;*/
 | |
| -}
 | |
| -
 | |
| -void
 | |
| -dma_remove_channel_by_number(int channel)
 | |
| -{
 | |
| -	if (channel < sizeof (used_channel) && channel >= 0)
 | |
| -		used_channel[channel] = -1;
 | |
| -}
 | |
| -
 | |
| -int __devinit
 | |
| -dma_init()
 | |
| -{
 | |
| -	int result;
 | |
| -	char *dma_version_str;
 | |
| -
 | |
| -	MCD_getVersion(&dma_version_str);
 | |
| -	printk("Initialize %s\n", dma_version_str);
 | |
| -
 | |
| -	if (request_irq
 | |
| -	    (64 + ISC_DMA, 
 | |
| -	     dma_interrupt_handler, 
 | |
| -	     IRQF_DISABLED, 
 | |
| -	     "MCD-DMA", 
 | |
| -	     NULL)) {
 | |
| -		printk("Cannot allocate the DMA IRQ(48)\n");
 | |
| -		return 1;
 | |
| -	}
 | |
| -
 | |
| -	MCF_DMA_DIMR = 0;
 | |
| -	MCF_DMA_DIPR = 0xFFFFFFFF;
 | |
| -
 | |
| -	MCF_ICR(ISC_DMA) = ILP_DMA;
 | |
| -
 | |
| -	result = MCD_initDma((dmaRegs *) (MCF_MBAR + 0x8000),
 | |
| -			(void *) SYS_SRAM_DMA_START, MCD_RELOC_TASKS);
 | |
| -	if (result != MCD_OK) {
 | |
| -		printk("Cannot perform DMA initialization\n");
 | |
| -		free_irq(64 + ISC_DMA, NULL);
 | |
| -		return 1;
 | |
| -	}
 | |
| -
 | |
| -	return 0;
 | |
| -}
 | |
| -
 | |
| -device_initcall(dma_init);
 | |
| -
 | |
| --- /dev/null
 | |
| +++ b/arch/m68k/coldfire/m547x_8x-dma.c
 | |
| @@ -0,0 +1,516 @@
 | |
| +/*
 | |
| + * arch/m68k/coldfire/m547x_8x-dma.c
 | |
| + *
 | |
| + * Coldfire M547x/M548x DMA
 | |
| + *
 | |
| + * Copyright (c) 2008 Freescale Semiconductor, Inc.
 | |
| + *	Kurt Mahan <kmahan@freescale.com>
 | |
| + *
 | |
| + * This code is based on patches from the Freescale M547x_8x BSP
 | |
| + * release mcf547x_8x-20070107-ltib.iso
 | |
| + *
 | |
| + * This program is free software; you can redistribute it and/or modify
 | |
| + * it under the terms of the GNU General Public License as published by
 | |
| + * the Free Software Foundation; either version 2 of the License, or
 | |
| + * (at your option) any later version.
 | |
| + *
 | |
| + * This program is distributed in the hope that it will be useful,
 | |
| + * but WITHOUT ANY WARRANTY; without even the implied warranty of
 | |
| + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | |
| + * GNU General Public License for more details.
 | |
| + *
 | |
| + * You should have received a copy of the GNU General Public License
 | |
| + * along with this program; if not, write to the Free Software
 | |
| + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 | |
| + */
 | |
| +#include <linux/kernel.h>
 | |
| +#include <linux/sched.h>
 | |
| +#include <linux/mm.h>
 | |
| +#include <linux/init.h>
 | |
| +#include <linux/interrupt.h>
 | |
| +#include <asm/io.h>
 | |
| +#include <asm/irq.h>
 | |
| +#include <asm/dma.h>
 | |
| +#include <asm/coldfire.h>
 | |
| +#include <asm/m5485sram.h>
 | |
| +#include <asm/mcfsim.h>
 | |
| +
 | |
| +/*
 | |
| + * This global keeps track of which initiators have been
 | |
| + * used of the available assignments.  Initiators 0-15 are
 | |
| + * hardwired.  Initiators 16-31 are multiplexed and controlled
 | |
| + * via the Initiatior Mux Control Registe (IMCR).  The
 | |
| + * assigned requestor is stored with the associated initiator
 | |
| + * number.
 | |
| + */
 | |
| +static int used_reqs[32] = {
 | |
| +	DMA_ALWAYS, DMA_DSPI_RX, DMA_DSPI_TX, DMA_DREQ0,
 | |
| +	DMA_PSC0_RX, DMA_PSC0_TX, DMA_USBEP0, DMA_USBEP1,
 | |
| +	DMA_USBEP2, DMA_USBEP3, DMA_PCI_TX, DMA_PCI_RX,
 | |
| +	DMA_PSC1_RX, DMA_PSC1_TX, DMA_I2C_RX, DMA_I2C_TX,
 | |
| +	0, 0, 0, 0,
 | |
| +	0, 0, 0, 0,
 | |
| +	0, 0, 0, 0,
 | |
| +	0, 0, 0, 0
 | |
| +};
 | |
| +
 | |
| +/*
 | |
| + * This global keeps track of which channels have been assigned
 | |
| + * to tasks.  This methology assumes that no single initiator
 | |
| + * will be tied to more than one task/channel
 | |
| + */
 | |
| +static char used_channel[16] = {
 | |
| +	-1, -1, -1, -1, -1, -1, -1, -1,
 | |
| +	-1, -1, -1, -1, -1, -1, -1, -1
 | |
| +};
 | |
| +
 | |
| +unsigned int connected_channel[16] = {
 | |
| +	0, 0, 0, 0, 0, 0, 0, 0,
 | |
| +	0, 0, 0, 0, 0, 0, 0, 0
 | |
| +};
 | |
| +
 | |
| +/**
 | |
| + * dma_set_initiator - enable initiator
 | |
| + * @initiator: initiator identifier
 | |
| + *
 | |
| + * Returns 0 of successful, non-zero otherwise
 | |
| + *
 | |
| + * Attempt to enable the provided Initiator in the Initiator
 | |
| + * Mux Control Register.
 | |
| + */
 | |
| +int dma_set_initiator(int initiator)
 | |
| +{
 | |
| +	switch (initiator) {
 | |
| +	case DMA_ALWAYS:
 | |
| +	case DMA_DSPI_RX:
 | |
| +	case DMA_DSPI_TX:
 | |
| +	case DMA_DREQ0:
 | |
| +	case DMA_PSC0_RX:
 | |
| +	case DMA_PSC0_TX:
 | |
| +	case DMA_USBEP0:
 | |
| +	case DMA_USBEP1:
 | |
| +	case DMA_USBEP2:
 | |
| +	case DMA_USBEP3:
 | |
| +	case DMA_PCI_TX:
 | |
| +	case DMA_PCI_RX:
 | |
| +	case DMA_PSC1_RX:
 | |
| +	case DMA_PSC1_TX:
 | |
| +	case DMA_I2C_RX:
 | |
| +	case DMA_I2C_TX:
 | |
| +		/*
 | |
| +		 * These initiators are always active
 | |
| +		 */
 | |
| +		break;
 | |
| +
 | |
| +	case DMA_FEC0_RX:
 | |
| +		MCF_DMA_IMCR = (MCF_DMA_IMCR & ~MCF_DMA_IMCR_SRC16(3))
 | |
| +		    | MCF_DMA_IMCR_SRC16_FEC0RX;
 | |
| +		used_reqs[16] = DMA_FEC0_RX;
 | |
| +		break;
 | |
| +
 | |
| +	case DMA_FEC0_TX:
 | |
| +		MCF_DMA_IMCR = (MCF_DMA_IMCR & ~MCF_DMA_IMCR_SRC17(3))
 | |
| +		    | MCF_DMA_IMCR_SRC17_FEC0TX;
 | |
| +		used_reqs[17] = DMA_FEC0_TX;
 | |
| +		break;
 | |
| +
 | |
| +	case DMA_FEC1_RX:
 | |
| +		MCF_DMA_IMCR = (MCF_DMA_IMCR & ~MCF_DMA_IMCR_SRC20(3))
 | |
| +		    | MCF_DMA_IMCR_SRC20_FEC1RX;
 | |
| +		used_reqs[20] = DMA_FEC1_RX;
 | |
| +		break;
 | |
| +
 | |
| +	case DMA_FEC1_TX:
 | |
| +		if (used_reqs[21] == 0) {
 | |
| +			MCF_DMA_IMCR = (MCF_DMA_IMCR & ~MCF_DMA_IMCR_SRC21(3))
 | |
| +			    | MCF_DMA_IMCR_SRC21_FEC1TX;
 | |
| +			used_reqs[21] = DMA_FEC1_TX;
 | |
| +		} else if (used_reqs[25] == 0) {
 | |
| +			MCF_DMA_IMCR = (MCF_DMA_IMCR & ~MCF_DMA_IMCR_SRC25(3))
 | |
| +			    | MCF_DMA_IMCR_SRC25_FEC1TX;
 | |
| +			used_reqs[25] = DMA_FEC1_TX;
 | |
| +		} else if (used_reqs[31] == 0) {
 | |
| +			MCF_DMA_IMCR = (MCF_DMA_IMCR & ~MCF_DMA_IMCR_SRC31(3))
 | |
| +			    | MCF_DMA_IMCR_SRC31_FEC1TX;
 | |
| +			used_reqs[31] = DMA_FEC1_TX;
 | |
| +		} else		/* No empty slots */
 | |
| +			return 1;
 | |
| +		break;
 | |
| +
 | |
| +	case DMA_DREQ1:
 | |
| +		if (used_reqs[29] == 0) {
 | |
| +			MCF_DMA_IMCR = (MCF_DMA_IMCR & ~MCF_DMA_IMCR_SRC29(3))
 | |
| +			    | MCF_DMA_IMCR_SRC29_DREQ1;
 | |
| +			used_reqs[29] = DMA_DREQ1;
 | |
| +		} else if (used_reqs[21] == 0) {
 | |
| +			MCF_DMA_IMCR = (MCF_DMA_IMCR & ~MCF_DMA_IMCR_SRC21(3))
 | |
| +			    | MCF_DMA_IMCR_SRC21_DREQ1;
 | |
| +			used_reqs[21] = DMA_DREQ1;
 | |
| +		} else		/* No empty slots */
 | |
| +			return 1;
 | |
| +		break;
 | |
| +
 | |
| +	case DMA_CTM0:
 | |
| +		if (used_reqs[24] == 0) {
 | |
| +			MCF_DMA_IMCR = (MCF_DMA_IMCR & ~MCF_DMA_IMCR_SRC24(3))
 | |
| +			    | MCF_DMA_IMCR_SRC24_CTM0;
 | |
| +			used_reqs[24] = DMA_CTM0;
 | |
| +		} else		/* No empty slots */
 | |
| +			return 1;
 | |
| +		break;
 | |
| +
 | |
| +	case DMA_CTM1:
 | |
| +		if (used_reqs[25] == 0) {
 | |
| +			MCF_DMA_IMCR = (MCF_DMA_IMCR & ~MCF_DMA_IMCR_SRC25(3))
 | |
| +			    | MCF_DMA_IMCR_SRC25_CTM1;
 | |
| +			used_reqs[25] = DMA_CTM1;
 | |
| +		} else		/* No empty slots */
 | |
| +			return 1;
 | |
| +		break;
 | |
| +
 | |
| +	case DMA_CTM2:
 | |
| +		if (used_reqs[26] == 0) {
 | |
| +			MCF_DMA_IMCR = (MCF_DMA_IMCR & ~MCF_DMA_IMCR_SRC26(3))
 | |
| +			    | MCF_DMA_IMCR_SRC26_CTM2;
 | |
| +			used_reqs[26] = DMA_CTM2;
 | |
| +		} else		/* No empty slots */
 | |
| +			return 1;
 | |
| +		break;
 | |
| +
 | |
| +	case DMA_CTM3:
 | |
| +		if (used_reqs[27] == 0) {
 | |
| +			MCF_DMA_IMCR = (MCF_DMA_IMCR & ~MCF_DMA_IMCR_SRC27(3))
 | |
| +			    | MCF_DMA_IMCR_SRC27_CTM3;
 | |
| +			used_reqs[27] = DMA_CTM3;
 | |
| +		} else		/* No empty slots */
 | |
| +			return 1;
 | |
| +		break;
 | |
| +
 | |
| +	case DMA_CTM4:
 | |
| +		if (used_reqs[28] == 0) {
 | |
| +			MCF_DMA_IMCR = (MCF_DMA_IMCR & ~MCF_DMA_IMCR_SRC28(3))
 | |
| +			    | MCF_DMA_IMCR_SRC28_CTM4;
 | |
| +			used_reqs[28] = DMA_CTM4;
 | |
| +		} else		/* No empty slots */
 | |
| +			return 1;
 | |
| +		break;
 | |
| +
 | |
| +	case DMA_CTM5:
 | |
| +		if (used_reqs[29] == 0) {
 | |
| +			MCF_DMA_IMCR = (MCF_DMA_IMCR & ~MCF_DMA_IMCR_SRC29(3))
 | |
| +			    | MCF_DMA_IMCR_SRC29_CTM5;
 | |
| +			used_reqs[29] = DMA_CTM5;
 | |
| +		} else		/* No empty slots */
 | |
| +			return 1;
 | |
| +		break;
 | |
| +
 | |
| +	case DMA_CTM6:
 | |
| +		if (used_reqs[30] == 0) {
 | |
| +			MCF_DMA_IMCR = (MCF_DMA_IMCR & ~MCF_DMA_IMCR_SRC30(3))
 | |
| +			    | MCF_DMA_IMCR_SRC30_CTM6;
 | |
| +			used_reqs[30] = DMA_CTM6;
 | |
| +		} else		/* No empty slots */
 | |
| +			return 1;
 | |
| +		break;
 | |
| +
 | |
| +	case DMA_CTM7:
 | |
| +		if (used_reqs[31] == 0) {
 | |
| +			MCF_DMA_IMCR = (MCF_DMA_IMCR & ~MCF_DMA_IMCR_SRC31(3))
 | |
| +			    | MCF_DMA_IMCR_SRC31_CTM7;
 | |
| +			used_reqs[31] = DMA_CTM7;
 | |
| +		} else		/* No empty slots */
 | |
| +			return 1;
 | |
| +		break;
 | |
| +
 | |
| +	case DMA_USBEP4:
 | |
| +		if (used_reqs[26] == 0) {
 | |
| +			MCF_DMA_IMCR = (MCF_DMA_IMCR & ~MCF_DMA_IMCR_SRC26(3))
 | |
| +			    | MCF_DMA_IMCR_SRC26_USBEP4;
 | |
| +			used_reqs[26] = DMA_USBEP4;
 | |
| +		} else		/* No empty slots */
 | |
| +			return 1;
 | |
| +		break;
 | |
| +
 | |
| +	case DMA_USBEP5:
 | |
| +		if (used_reqs[27] == 0) {
 | |
| +			MCF_DMA_IMCR = (MCF_DMA_IMCR & ~MCF_DMA_IMCR_SRC27(3))
 | |
| +			    | MCF_DMA_IMCR_SRC27_USBEP5;
 | |
| +			used_reqs[27] = DMA_USBEP5;
 | |
| +		} else		/* No empty slots */
 | |
| +			return 1;
 | |
| +		break;
 | |
| +
 | |
| +	case DMA_USBEP6:
 | |
| +		if (used_reqs[28] == 0) {
 | |
| +			MCF_DMA_IMCR = (MCF_DMA_IMCR & ~MCF_DMA_IMCR_SRC28(3))
 | |
| +			    | MCF_DMA_IMCR_SRC28_USBEP6;
 | |
| +			used_reqs[28] = DMA_USBEP6;
 | |
| +		} else		/* No empty slots */
 | |
| +			return 1;
 | |
| +		break;
 | |
| +
 | |
| +	case DMA_PSC2_RX:
 | |
| +		if (used_reqs[28] == 0) {
 | |
| +			MCF_DMA_IMCR = (MCF_DMA_IMCR & ~MCF_DMA_IMCR_SRC28(3))
 | |
| +			    | MCF_DMA_IMCR_SRC28_PSC2RX;
 | |
| +			used_reqs[28] = DMA_PSC2_RX;
 | |
| +		} else		/* No empty slots */
 | |
| +			return 1;
 | |
| +		break;
 | |
| +
 | |
| +	case DMA_PSC2_TX:
 | |
| +		if (used_reqs[29] == 0) {
 | |
| +			MCF_DMA_IMCR = (MCF_DMA_IMCR & ~MCF_DMA_IMCR_SRC29(3))
 | |
| +			    | MCF_DMA_IMCR_SRC29_PSC2TX;
 | |
| +			used_reqs[29] = DMA_PSC2_TX;
 | |
| +		} else		/* No empty slots */
 | |
| +			return 1;
 | |
| +		break;
 | |
| +
 | |
| +	case DMA_PSC3_RX:
 | |
| +		if (used_reqs[30] == 0) {
 | |
| +			MCF_DMA_IMCR = (MCF_DMA_IMCR & ~MCF_DMA_IMCR_SRC30(3))
 | |
| +			    | MCF_DMA_IMCR_SRC30_PSC3RX;
 | |
| +			used_reqs[30] = DMA_PSC3_RX;
 | |
| +		} else		/* No empty slots */
 | |
| +			return 1;
 | |
| +		break;
 | |
| +
 | |
| +	case DMA_PSC3_TX:
 | |
| +		if (used_reqs[31] == 0) {
 | |
| +			MCF_DMA_IMCR = (MCF_DMA_IMCR & ~MCF_DMA_IMCR_SRC31(3))
 | |
| +			    | MCF_DMA_IMCR_SRC31_PSC3TX;
 | |
| +			used_reqs[31] = DMA_PSC3_TX;
 | |
| +		} else		/* No empty slots */
 | |
| +			return 1;
 | |
| +		break;
 | |
| +
 | |
| +	default:
 | |
| +		return 1;
 | |
| +	}
 | |
| +	return 0;
 | |
| +}
 | |
| +
 | |
| +/**
 | |
| + * dma_get_initiator - get the initiator for the given requestor
 | |
| + * @requestor: initiator identifier
 | |
| + *
 | |
| + * Returns initiator number (0-31) if assigned or just 0
 | |
| + */
 | |
| +unsigned int dma_get_initiator(int requestor)
 | |
| +{
 | |
| +	u32 i;
 | |
| +
 | |
| +	for (i = 0; i < sizeof(used_reqs); ++i) {
 | |
| +		if (used_reqs[i] == requestor)
 | |
| +			return i;
 | |
| +	}
 | |
| +	return 0;
 | |
| +}
 | |
| +
 | |
| +/**
 | |
| + * dma_remove_initiator - remove the given initiator from active list
 | |
| + * @requestor: requestor to remove
 | |
| + */
 | |
| +void dma_remove_initiator(int requestor)
 | |
| +{
 | |
| +	u32 i;
 | |
| +
 | |
| +	for (i = 0; i < sizeof(used_reqs); ++i) {
 | |
| +		if (used_reqs[i] == requestor) {
 | |
| +			used_reqs[i] = -1;
 | |
| +			break;
 | |
| +		}
 | |
| +	}
 | |
| +}
 | |
| +
 | |
| +/**
 | |
| + * dma_set_channel_fec: find available channel for fec and mark
 | |
| + * @requestor: initiator/requestor identifier
 | |
| + *
 | |
| + * Returns first avaialble channel (0-5) or -1 if all occupied
 | |
| + */
 | |
| +int dma_set_channel_fec(int requestor)
 | |
| +{
 | |
| +	u32 i, t;
 | |
| +
 | |
| +#ifdef CONFIG_FEC_548x_ENABLE_FEC2
 | |
| +	t = 4;
 | |
| +#else
 | |
| +	t = 2;
 | |
| +#endif
 | |
| +
 | |
| +	for (i = 0; i < t ; ++i) {
 | |
| +		if (used_channel[i] == -1) {
 | |
| +			used_channel[i] = requestor;
 | |
| +			return i;
 | |
| +		}
 | |
| +	}
 | |
| +	/* All channels taken */
 | |
| +	return -1;
 | |
| +}
 | |
| +
 | |
| +/**
 | |
| + * dma_set_channel - find an available channel and mark as used
 | |
| + * @requestor: initiator/requestor identifier
 | |
| + *
 | |
| + * Returns first available channel (6-15) or -1 if all occupied
 | |
| + */
 | |
| +int dma_set_channel(int requestor)
 | |
| +{
 | |
| +	u32 i;
 | |
| +#ifdef CONFIG_NET_FEC2
 | |
| +	i = 4;
 | |
| +#else
 | |
| +	i = 2;
 | |
| +#endif
 | |
| +
 | |
| +	for (; i < 16; ++i)
 | |
| +		if (used_channel[i] == -1) {
 | |
| +			used_channel[i] = requestor;
 | |
| +			return i;
 | |
| +		}
 | |
| +
 | |
| +	/* All channels taken */
 | |
| +	return -1;
 | |
| +}
 | |
| +
 | |
| +/**
 | |
| + * dma_get_channel - get the channel being initiated by the requestor
 | |
| + * @requestor: initiator/requestor identifier
 | |
| + *
 | |
| + * Returns Initiator for requestor or -1 if not found
 | |
| + */
 | |
| +int dma_get_channel(int requestor)
 | |
| +{
 | |
| +	u32 i;
 | |
| +
 | |
| +	for (i = 0; i < sizeof(used_channel); ++i) {
 | |
| +		if (used_channel[i] == requestor)
 | |
| +			return i;
 | |
| +	}
 | |
| +	return -1;
 | |
| +}
 | |
| +
 | |
| +/**
 | |
| + * dma_connect - connect a channel with reference on data
 | |
| + * @channel: channel number
 | |
| + * @address: reference address of data
 | |
| + *
 | |
| + * Returns 0 if success or -1 if invalid channel
 | |
| + */
 | |
| +int dma_connect(int channel, int address)
 | |
| +{
 | |
| +	if ((channel < 16) && (channel >= 0)) {
 | |
| +		connected_channel[channel] = address;
 | |
| +		return 0;
 | |
| +	}
 | |
| +	return -1;
 | |
| +}
 | |
| +
 | |
| +/**
 | |
| + * dma_disconnect - disconnect a channel
 | |
| + * @channel: channel number
 | |
| + *
 | |
| + * Returns 0 if success or -1 if invalid channel
 | |
| + */
 | |
| +int dma_disconnect(int channel)
 | |
| +{
 | |
| +	if ((channel < 16) && (channel >= 0)) {
 | |
| +		connected_channel[channel] = 0;
 | |
| +		return 0;
 | |
| +	}
 | |
| +	return -1;
 | |
| +}
 | |
| +
 | |
| +/**
 | |
| + * dma_remove_channel - remove channel from the active list
 | |
| + * @requestor: initiator/requestor identifier
 | |
| + */
 | |
| +void dma_remove_channel(int requestor)
 | |
| +{
 | |
| +	u32 i;
 | |
| +
 | |
| +	for (i = 0; i < sizeof(used_channel); ++i) {
 | |
| +		if (used_channel[i] == requestor) {
 | |
| +			used_channel[i] = -1;
 | |
| +			break;
 | |
| +		}
 | |
| +	}
 | |
| +}
 | |
| +
 | |
| +/**
 | |
| + * dma_interrupt_handler - dma interrupt handler
 | |
| + * @irq: interrupt number
 | |
| + * @dev_id: data
 | |
| + *
 | |
| + * Returns IRQ_HANDLED
 | |
| + */
 | |
| +irqreturn_t dma_interrupt_handler(int irq, void *dev_id)
 | |
| +{
 | |
| +	u32 i, interrupts;
 | |
| +
 | |
| +	/*
 | |
| +	 * Determine which interrupt(s) triggered by AND'ing the
 | |
| +	 * pending interrupts with those that aren't masked.
 | |
| +	 */
 | |
| +	interrupts = MCF_DMA_DIPR;
 | |
| +	MCF_DMA_DIPR |= interrupts;
 | |
| +
 | |
| +	for (i = 0; i < 16; ++i, interrupts >>= 1) {
 | |
| +		if (interrupts & 0x1)
 | |
| +			if (connected_channel[i] != 0)
 | |
| +				((void (*)(void)) (connected_channel[i])) ();
 | |
| +	}
 | |
| +
 | |
| +	return IRQ_HANDLED;
 | |
| +}
 | |
| +
 | |
| +/**
 | |
| + * dma_remove_channel_by_number - clear dma channel
 | |
| + * @channel: channel number to clear
 | |
| + */
 | |
| +void dma_remove_channel_by_number(int channel)
 | |
| +{
 | |
| +	if ((channel < sizeof(used_channel)) && (channel >= 0))
 | |
| +		used_channel[channel] = -1;
 | |
| +}
 | |
| +
 | |
| +/**
 | |
| + * dma_init - initialize the dma subsystem
 | |
| + *
 | |
| + * Returns 0 if success non-zero if failure
 | |
| + *
 | |
| + * Handles the DMA initialization during device setup.
 | |
| + */
 | |
| +int __devinit dma_init()
 | |
| +{
 | |
| +	int result;
 | |
| +	char *dma_version_str;
 | |
| +
 | |
| +	MCD_getVersion(&dma_version_str);
 | |
| +	printk(KERN_INFO "m547x_8x DMA: Initialize %s\n", dma_version_str);
 | |
| +
 | |
| +	/* attempt to setup dma interrupt handler */
 | |
| +	if (request_irq(64 + ISC_DMA, dma_interrupt_handler, IRQF_DISABLED,
 | |
| +			"MCD-DMA", NULL)) {
 | |
| +		printk(KERN_ERR "MCD-DMA: Cannot allocate the DMA IRQ(48)\n");
 | |
| +		return 1;
 | |
| +	}
 | |
| +
 | |
| +	MCF_DMA_DIMR = 0;
 | |
| +	MCF_DMA_DIPR = 0xFFFFFFFF;
 | |
| +
 | |
| +	MCF_ICR(ISC_DMA) = ILP_DMA;
 | |
| +
 | |
| +	result = MCD_initDma((dmaRegs *) (MCF_MBAR + 0x8000),
 | |
| +			(void *) SYS_SRAM_DMA_START, MCD_RELOC_TASKS);
 | |
| +	if (result != MCD_OK) {
 | |
| +		printk(KERN_ERR "MCD-DMA: Cannot perform DMA initialization\n");
 | |
| +		free_irq(64 + ISC_DMA, NULL);
 | |
| +		return 1;
 | |
| +	}
 | |
| +
 | |
| +	return 0;
 | |
| +}
 | |
| +device_initcall(dma_init);
 | |
| --- a/drivers/dma/MCD_dma.h
 | |
| +++ b/drivers/dma/MCD_dma.h
 | |
| @@ -1,45 +1,27 @@
 | |
| -/*********************************************************************
 | |
| - *
 | |
| - * Copyright (C) 2004  Motorola, Inc.
 | |
| - *  MOTOROLA, INC. All Rights Reserved.
 | |
| - *  You are hereby granted a copyright license to use
 | |
| - *  the SOFTWARE so long as this entire notice is
 | |
| - *  retained without alteration in any modified and/or redistributed
 | |
| - *  versions, and that such modified versions are clearly identified
 | |
| - *  as such. No licenses are granted by implication, estoppel or
 | |
| - *  otherwise under any patents or trademarks of Motorola, Inc. This
 | |
| - *  software is provided on an "AS IS" basis and without warranty.
 | |
| +/*
 | |
| + * drivers/dma/MCD_dma.h
 | |
|   *
 | |
| - *  To the maximum extent permitted by applicable law, MOTOROLA
 | |
| - *  DISCLAIMS ALL WARRANTIES WHETHER EXPRESS OR IMPLIED, INCLUDING
 | |
| - *  IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR
 | |
| - *  PURPOSE AND ANY WARRANTY AGAINST INFRINGEMENT WITH REGARD TO THE
 | |
| - *  SOFTWARE (INCLUDING ANY MODIFIED VERSIONS THEREOF) AND ANY
 | |
| - *  ACCOMPANYING WRITTEN MATERIALS.
 | |
| + * Copyright (C) 2004-2008 Freescale Semiconductor, Inc.
 | |
| + *     Kurt Mahan <kmahan@freescale.com>
 | |
|   *
 | |
| - *  To the maximum extent permitted by applicable law, IN NO EVENT
 | |
| - *  SHALL MOTOROLA BE LIABLE FOR ANY DAMAGES WHATSOEVER (INCLUDING
 | |
| - *  WITHOUT LIMITATION, DAMAGES FOR LOSS OF BUSINESS PROFITS, BUSINESS
 | |
| - *  INTERRUPTION, LOSS OF BUSINESS INFORMATION, OR OTHER PECUNIARY
 | |
| - *  LOSS) ARISING OF THE USE OR INABILITY TO USE THE SOFTWARE.
 | |
| + * This program is free software; you can redistribute it and/or
 | |
| + * modify it under the terms of the GNU General Public License as
 | |
| + * published by the Free Software Foundation; either version 2 of
 | |
| + * the License, or (at your option) any later version.
 | |
|   *
 | |
| - *  Motorola assumes no responsibility for the maintenance and support
 | |
| - *  of this software
 | |
| - ********************************************************************/
 | |
| -
 | |
| -/*
 | |
| - * File:        MCD_dma.h
 | |
| - * Purpose:     Main header file for multi-channel DMA API.
 | |
| + * This program is distributed in the hope that it will be useful,
 | |
| + * but WITHOUT ANY WARRANTY; without even the implied warranty of
 | |
| + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | |
| + * GNU General Public License for more details.
 | |
|   *
 | |
| - * Notes:
 | |
| - *
 | |
| - * Modifications:
 | |
| + * You should have received a copy of the GNU General Public License
 | |
| + * along with this program; if not, write to the Free Software
 | |
| + * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
 | |
| + * MA 02111-1307 USA
 | |
|   */
 | |
|  #ifndef _MCD_API_H
 | |
|  #define _MCD_API_H
 | |
|  
 | |
| -#include <asm/types.h>
 | |
| -
 | |
|  /*
 | |
|   * Turn Execution Unit tasks ON (#define) or OFF (#undef)
 | |
|   */
 | |
| @@ -79,26 +61,13 @@
 | |
|  /*
 | |
|   * Portability typedefs
 | |
|   */
 | |
| - /*
 | |
| -#ifndef s32
 | |
|  typedef int s32;
 | |
| -#endif
 | |
| -#ifndef u32
 | |
|  typedef unsigned int u32;
 | |
| -#endif
 | |
| -#ifndef s16
 | |
|  typedef short s16;
 | |
| -#endif
 | |
| -#ifndef u16
 | |
|  typedef unsigned short u16;
 | |
| -#endif
 | |
| -#ifndef s8
 | |
|  typedef char s8;
 | |
| -#endif
 | |
| -#ifndef u8
 | |
|  typedef unsigned char u8;
 | |
| -#endif
 | |
| -*/
 | |
| +
 | |
|  /*
 | |
|   * These structures represent the internal registers of the
 | |
|   * multi-channel DMA
 | |
| @@ -233,6 +202,7 @@ typedef volatile struct dmaRegs_s dmaReg
 | |
|  #define MCD_TT_FLAGS_RL   0x00000001 /* Read line */
 | |
|  #define MCD_TT_FLAGS_CW   0x00000002 /* Combine Writes */
 | |
|  #define MCD_TT_FLAGS_SP   0x00000004 /* Speculative prefetch(XLB) MCF547x/548x ONLY  */
 | |
| +#define MCD_TT_FLAGS_PI   0x00000040 /* Precise Increment */
 | |
|  #define MCD_TT_FLAGS_MASK 0x000000ff
 | |
|  #define MCD_TT_FLAGS_DEF  (MCD_TT_FLAGS_RL | MCD_TT_FLAGS_CW)
 | |
|  
 | |
| --- a/drivers/dma/MCD_dmaApi.c
 | |
| +++ b/drivers/dma/MCD_dmaApi.c
 | |
| @@ -1,46 +1,26 @@
 | |
| -/*********************************************************************
 | |
| - *
 | |
| - * Copyright (C) 2004  Motorola, Inc.
 | |
| - *  MOTOROLA, INC. All Rights Reserved.
 | |
| - *  You are hereby granted a copyright license to use
 | |
| - *  the SOFTWARE so long as this entire notice is
 | |
| - *  retained without alteration in any modified and/or redistributed
 | |
| - *  versions, and that such modified versions are clearly identified
 | |
| - *  as such. No licenses are granted by implication, estoppel or
 | |
| - *  otherwise under any patents or trademarks of Motorola, Inc. This
 | |
| - *  software is provided on an "AS IS" basis and without warranty.
 | |
| - *
 | |
| - *  To the maximum extent permitted by applicable law, MOTOROLA
 | |
| - *  DISCLAIMS ALL WARRANTIES WHETHER EXPRESS OR IMPLIED, INCLUDING
 | |
| - *  IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR
 | |
| - *  PURPOSE AND ANY WARRANTY AGAINST INFRINGEMENT WITH REGARD TO THE
 | |
| - *  SOFTWARE (INCLUDING ANY MODIFIED VERSIONS THEREOF) AND ANY
 | |
| - *  ACCOMPANYING WRITTEN MATERIALS.
 | |
| - *
 | |
| - *  To the maximum extent permitted by applicable law, IN NO EVENT
 | |
| - *  SHALL MOTOROLA BE LIABLE FOR ANY DAMAGES WHATSOEVER (INCLUDING
 | |
| - *  WITHOUT LIMITATION, DAMAGES FOR LOSS OF BUSINESS PROFITS, BUSINESS
 | |
| - *  INTERRUPTION, LOSS OF BUSINESS INFORMATION, OR OTHER PECUNIARY
 | |
| - *  LOSS) ARISING OF THE USE OR INABILITY TO USE THE SOFTWARE.
 | |
| - *
 | |
| - *  Motorola assumes no responsibility for the maintenance and support
 | |
| - *  of this software
 | |
| - ********************************************************************/
 | |
| -
 | |
|  /*
 | |
| - * File:        MCD_dmaApi.c
 | |
| - * Purpose:     Main C file for multi-channel DMA API.
 | |
| - *
 | |
| - * Notes:
 | |
| + * drivers/dma/MCD_dmaApi.c
 | |
|   *
 | |
| + * Copyright (C) 2004-2008 Freescale Semiconductor, Inc.
 | |
| + *     Kurt Mahan <kmahan@freescale.com>
 | |
|   *
 | |
| - * Modifications:
 | |
| + * This program is free software; you can redistribute it and/or
 | |
| + * modify it under the terms of the GNU General Public License as
 | |
| + * published by the Free Software Foundation; either version 2 of
 | |
| + * the License, or (at your option) any later version.
 | |
|   *
 | |
| + * This program is distributed in the hope that it will be useful,
 | |
| + * but WITHOUT ANY WARRANTY; without even the implied warranty of
 | |
| + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | |
| + * GNU General Public License for more details.
 | |
|   *
 | |
| + * You should have received a copy of the GNU General Public License
 | |
| + * along with this program; if not, write to the Free Software
 | |
| + * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
 | |
| + * MA 02111-1307 USA
 | |
|   */
 | |
| -#include <asm/types.h>
 | |
| -#include <asm/MCD_dma.h>
 | |
| -#include <asm/virtconvert.h>
 | |
| +
 | |
| +#include "MCD_dma.h"
 | |
|  #include "MCD_tasksInit.h"
 | |
|  #include "MCD_progCheck.h"
 | |
|  
 | |
| @@ -148,7 +128,6 @@ MCD_bufDesc *MCD_relocBuffDesc;
 | |
|  
 | |
|  /*
 | |
|   * Structure to remember which variant is on which channel
 | |
| - * TBD- need this?
 | |
|   */
 | |
|  typedef struct MCD_remVariants_struct MCD_remVariant;
 | |
|  struct MCD_remVariants_struct
 | |
| @@ -164,6 +143,7 @@ struct MCD_remVariants_struct
 | |
|   * Structure to remember the startDma parameters for each channel
 | |
|   */
 | |
|  MCD_remVariant MCD_remVariants;
 | |
| +
 | |
|  /********************************************************************/
 | |
|  /*
 | |
|   * Function: MCD_initDma
 | |
| @@ -185,15 +165,14 @@ int MCD_initDma (dmaRegs *dmaBarAddr, vo
 | |
|      int i;
 | |
|      TaskTableEntry *entryPtr;
 | |
|  
 | |
| -    /* setup the local pointer to register set */
 | |
| +    /* Setup the local pointer to register set */
 | |
|      MCD_dmaBar = dmaBarAddr;
 | |
|  
 | |
| -    /* do we need to move/create a task table */
 | |
| +    /* Do we need to move/create a task table */
 | |
|      if ((flags & MCD_RELOC_TASKS) != 0)
 | |
|      {
 | |
|          int fixedSize;
 | |
|          u32 *fixedPtr;
 | |
| -        /*int *tablePtr = taskTableDest;TBD*/
 | |
|          int varTabsOffset, funcDescTabsOffset, contextSavesOffset;
 | |
|          int taskDescTabsOffset;
 | |
|          int taskTableSize, varTabsSize, funcDescTabsSize, contextSavesSize;
 | |
| @@ -201,7 +180,7 @@ int MCD_initDma (dmaRegs *dmaBarAddr, vo
 | |
|  
 | |
|          int i;
 | |
|  
 | |
| -        /* check if physical address is aligned on 512 byte boundary */
 | |
| +        /* Check if physical address is aligned on 512 byte boundary */
 | |
|          if (((u32)taskTableDest & 0x000001ff) != 0)
 | |
|              return(MCD_TABLE_UNALIGNED);
 | |
|  
 | |
| @@ -215,13 +194,12 @@ int MCD_initDma (dmaRegs *dmaBarAddr, vo
 | |
|           * - copy over model task table with the the actual task descriptor
 | |
|           *   tables
 | |
|           */
 | |
| -
 | |
|          taskTableSize = NCHANNELS * sizeof(TaskTableEntry);
 | |
| -        /* align variable tables to size */
 | |
| +        /* Align variable tables to size */
 | |
|          varTabsOffset = taskTableSize + (u32)taskTableDest;
 | |
|          if ((varTabsOffset & (VAR_TAB_SIZE - 1)) != 0)
 | |
|              varTabsOffset = (varTabsOffset + VAR_TAB_SIZE) & (~VAR_TAB_SIZE);
 | |
| -        /* align function descriptor tables */
 | |
| +        /* Align function descriptor tables */
 | |
|          varTabsSize = NCHANNELS * VAR_TAB_SIZE;
 | |
|          funcDescTabsOffset = varTabsOffset + varTabsSize;
 | |
|  
 | |
| @@ -235,13 +213,13 @@ int MCD_initDma (dmaRegs *dmaBarAddr, vo
 | |
|          fixedSize = taskTableSize + varTabsSize + funcDescTabsSize +
 | |
|                      contextSavesSize;
 | |
|  
 | |
| -        /* zero the thing out */
 | |
| +        /* Zero the thing out */
 | |
|          fixedPtr = (u32 *)taskTableDest;
 | |
|          for (i = 0;i<(fixedSize/4);i++)
 | |
|              fixedPtr[i] = 0;
 | |
|  
 | |
|          entryPtr = (TaskTableEntry*)MCD_taskTable;
 | |
| -        /* set up fixed pointers */
 | |
| +        /* Set up fixed pointers */
 | |
|          for (i = 0; i < NCHANNELS; i++)
 | |
|          {
 | |
|              entryPtr[i].varTab = (u32)varTabsOffset; /* update ptr to local value */
 | |
| @@ -253,25 +231,25 @@ int MCD_initDma (dmaRegs *dmaBarAddr, vo
 | |
|  #endif
 | |
|              contextSavesOffset += CONTEXT_SAVE_SIZE;
 | |
|          }
 | |
| -        /* copy over the function descriptor table */
 | |
| +        /* Copy over the function descriptor table */
 | |
|          for ( i = 0; i < FUNCDESC_TAB_NUM; i++)
 | |
|          {
 | |
|              MCD_memcpy((void*)(entryPtr[i].FDTandFlags & ~MCD_TT_FLAGS_MASK),
 | |
|                         (void*)MCD_funcDescTab0, FUNCDESC_TAB_SIZE);
 | |
|          }
 | |
|  
 | |
| -        /* copy model task table to where the context saves stuff leaves off*/
 | |
| +        /* Copy model task table to where the context save stuff leaves off */
 | |
|          MCD_modelTaskTable = (TaskTableEntry*)contextSavesOffset;
 | |
|  
 | |
|          MCD_memcpy ((void*)MCD_modelTaskTable, (void*)MCD_modelTaskTableSrc,
 | |
|                      NUMOFVARIANTS * sizeof(TaskTableEntry));
 | |
|  
 | |
| -        entryPtr = MCD_modelTaskTable; /* point to local version of
 | |
| -                                                            model task table */
 | |
| +        /* Point to local version of model task table */
 | |
| +        entryPtr = MCD_modelTaskTable;
 | |
|          taskDescTabsOffset = (u32)MCD_modelTaskTable +
 | |
|                              (NUMOFVARIANTS * sizeof(TaskTableEntry));
 | |
|  
 | |
| -        /* copy actual task code and update TDT ptrs in local model task table */
 | |
| +        /* Copy actual task code and update TDT ptrs in local model task table */
 | |
|          for (i = 0; i < NUMOFVARIANTS; i++)
 | |
|          {
 | |
|              taskDescTabSize = entryPtr[i].TDTend - entryPtr[i].TDTstart + 4;
 | |
| @@ -280,25 +258,29 @@ int MCD_initDma (dmaRegs *dmaBarAddr, vo
 | |
|              taskDescTabsOffset += taskDescTabSize;
 | |
|              entryPtr[i].TDTend = (u32)taskDescTabsOffset - 4;
 | |
|          }
 | |
| -#ifdef MCD_INCLUDE_EU /* Tack single DMA BDs onto end of code so API controls
 | |
| -                         where they are since DMA might write to them */        
 | |
| +#ifdef MCD_INCLUDE_EU 
 | |
| +        /* 
 | |
| +         * Tack single DMA BDs onto end of code so API controls where
 | |
| +         * they are since DMA might write to them 
 | |
| +         */
 | |
|          MCD_relocBuffDesc = (MCD_bufDesc*)(entryPtr[NUMOFVARIANTS - 1].TDTend + 4);
 | |
| -#else /* DMA does not touch them so they can be wherever and we don't need to 
 | |
| -         waste SRAM on them */
 | |
| +#else 
 | |
| +        /* 
 | |
| +         * DMA does not touch them so they can be wherever and we don't need to
 | |
| +         * waste SRAM on them 
 | |
| +         */
 | |
|          MCD_relocBuffDesc = MCD_singleBufDescs;
 | |
|  #endif
 | |
|      }
 | |
|      else
 | |
|      {
 | |
| -        /* point the would-be relocated task tables and the
 | |
| -        buffer descriptors to the ones the linker generated */
 | |
| -
 | |
| +        /* 
 | |
| +         * Point the would-be relocated task tables and the buffer descriptors
 | |
| +         * to the ones the linker generated
 | |
| +         */
 | |
|          if (((u32)MCD_realTaskTableSrc & 0x000001ff) != 0)
 | |
|              return(MCD_TABLE_UNALIGNED);
 | |
|  
 | |
| -        /* need to add code to make sure that every thing else is aligned properly TBD*/
 | |
| -        /* this is problematic if we init more than once or after running tasks,
 | |
| -            need to add variable to see if we have aleady init'd */
 | |
|          entryPtr = MCD_realTaskTableSrc;
 | |
|          for (i = 0; i < NCHANNELS; i++)
 | |
|          {
 | |
| @@ -312,9 +294,7 @@ int MCD_initDma (dmaRegs *dmaBarAddr, vo
 | |
|          MCD_relocBuffDesc = MCD_singleBufDescs;
 | |
|      }
 | |
|  
 | |
| -
 | |
| -    /* Make all channels as totally inactive, and remember them as such: */
 | |
| -
 | |
| +    /* Make all channels inactive, and remember them as such: */
 | |
|      MCD_dmaBar->taskbar = (u32) MCD_taskTable;
 | |
|      for (i = 0;  i < NCHANNELS;  i++)
 | |
|      {
 | |
| @@ -323,13 +303,12 @@ int MCD_initDma (dmaRegs *dmaBarAddr, vo
 | |
|      }
 | |
|  
 | |
|     /* Set up pausing mechanism to inactive state: */
 | |
| -    MCD_dmaBar->debugComp1 = 0;  /* no particular values yet for either comparator registers */
 | |
| +    MCD_dmaBar->debugComp1 = 0;
 | |
|      MCD_dmaBar->debugComp2 = 0;
 | |
|      MCD_dmaBar->debugControl = DBG_CTL_DISABLE;
 | |
|      MCD_dmaBar->debugStatus = DBG_KILL_ALL_STAT;
 | |
|  
 | |
| -    /* enable or disable commbus prefetch, really need an ifdef or
 | |
| -       something to keep from trying to set this in the 8220 */
 | |
| +    /* Enable or disable commbus prefetch */
 | |
|      if ((flags & MCD_COMM_PREFETCH_EN) != 0)
 | |
|          MCD_dmaBar->ptdControl &= ~PTD_CTL_COMM_PREFETCH;
 | |
|      else
 | |
| @@ -354,8 +333,7 @@ int MCD_dmaStatus (int channel)
 | |
|  
 | |
|      tcrValue = MCD_dmaBar->taskControl[channel];
 | |
|      if ((tcrValue & TASK_CTL_EN) == 0)
 | |
| -    {  /* nothing running */
 | |
| -        /* if last reported with task enabled */
 | |
| +    {   /* Nothing running if last reported with task enabled */
 | |
|          if (   MCD_chStatus[channel] == MCD_RUNNING
 | |
|              || MCD_chStatus[channel] == MCD_IDLE)
 | |
|              MCD_chStatus[channel] = MCD_DONE;
 | |
| @@ -367,13 +345,12 @@ int MCD_dmaStatus (int channel)
 | |
|              || MCD_chStatus[channel] == MCD_IDLE)
 | |
|          {
 | |
|              MCD_dmaBar->ptdDebug = PTD_DBG_TSK_VLD_INIT;
 | |
| -            /* This register is selected to know which initiator is
 | |
| -            actually asserted. */
 | |
| +            /* Determine which initiator is asserted. */
 | |
|              if ((MCD_dmaBar->ptdDebug >> channel ) & 0x1 )
 | |
|                  MCD_chStatus[channel] = MCD_RUNNING;
 | |
|              else
 | |
|                  MCD_chStatus[channel] = MCD_IDLE;
 | |
| -        /* do not change the status if it is already paused. */
 | |
| +            /* Do not change the status if it is already paused */
 | |
|          }
 | |
|      }
 | |
|      return MCD_chStatus[channel];
 | |
| @@ -414,67 +391,86 @@ int MCD_startDma (
 | |
|  
 | |
|      if((channel < 0) || (channel >= NCHANNELS))
 | |
|          return(MCD_CHANNEL_INVALID);
 | |
| -        
 | |
| -    /* tbd - need to determine the proper response to a bad funcDesc when not 
 | |
| -       including EU functions, for now, assign a benign funcDesc, but maybe
 | |
| -       should return an error */
 | |
| +
 | |
|  #ifndef MCD_INCLUDE_EU
 | |
|      funcDesc = MCD_FUNC_NOEU1;
 | |
|  #endif
 | |
| -        
 | |
| +
 | |
|  #ifdef MCD_DEBUG
 | |
|  printf("startDma:Setting up params\n");
 | |
|  #endif
 | |
| -   /* Set us up for task-wise priority.  We don't technically need to do this on every start, but
 | |
| -      since the register involved is in the same longword as other registers that users are in control
 | |
| -      of, setting it more than once is probably preferable.  That since the documentation doesn't seem
 | |
| -      to be completely consistent about the nature of the PTD control register. */
 | |
| +
 | |
| +   /* Enable task-wise priority */
 | |
|      MCD_dmaBar->ptdControl |= (u16) 0x8000;
 | |
| -#if 1 /* Not sure what we need to keep here rtm TBD */
 | |
| +
 | |
|      /* Calculate additional parameters to the regular DMA calls. */
 | |
|      srcRsdIncr = srcIncr < 0 ? -1 : (srcIncr > 0 ? 1 : 0);
 | |
|      destRsdIncr = destIncr < 0 ? -1 : (destIncr > 0 ? 1 : 0);
 | |
| -
 | |
|      xferSizeIncr = (xferSize & 0xffff) | 0x20000000;
 | |
|  
 | |
| -    /* Remember for each channel which variant is running. */
 | |
| +    /* Remember which variant is running for each channel */
 | |
|      MCD_remVariants.remSrcRsdIncr[channel] = srcRsdIncr;
 | |
|      MCD_remVariants.remDestRsdIncr[channel] = destRsdIncr;
 | |
|      MCD_remVariants.remDestIncr[channel] = destIncr;
 | |
|      MCD_remVariants.remSrcIncr[channel] = srcIncr;
 | |
|      MCD_remVariants.remXferSize[channel] = xferSize;
 | |
| -#endif
 | |
|  
 | |
| -    cSave = (int*)(MCD_taskTable[channel].contextSaveSpace) + CSAVE_OFFSET + CURRBD;
 | |
| +    cSave = (int*)(MCD_taskTable[channel].contextSaveSpace) 
 | |
| +            + CSAVE_OFFSET 
 | |
| +            + CURRBD;
 | |
|  
 | |
| -#ifdef MCD_INCLUDE_EU /* may move this to EU specific calls */
 | |
| +#ifdef MCD_INCLUDE_EU
 | |
|      realFuncArray = (u32 *) (MCD_taskTable[channel].FDTandFlags & 0xffffff00);
 | |
| -    /* Modify the LURC's normal and byte-residue-loop functions according to parameter. */
 | |
| -    realFuncArray[(LURC*16)] = xferSize == 4 ?
 | |
| -                                 funcDesc : xferSize == 2 ?
 | |
| -                                     funcDesc & 0xfffff00f : funcDesc & 0xffff000f;
 | |
| -    realFuncArray[(LURC*16+1)] = (funcDesc & MCD_BYTE_SWAP_KILLER) | MCD_NO_BYTE_SWAP_ATALL;
 | |
| -#endif
 | |
| -   /* Write the initiator field in the TCR, and also set the initiator-hold
 | |
| -      bit.  Note that,due to a hardware quirk, this could collide with an
 | |
| -      MDE access to the initiator-register file, so we have to verify that the write
 | |
| -      reads back correctly. */
 | |
|  
 | |
| -    MCD_dmaBar->taskControl[channel] =
 | |
| -        (initiator << 8) | TASK_CTL_HIPRITSKEN | TASK_CTL_HLDINITNUM;
 | |
| +    /* 
 | |
| +     * Modify the LURC's normal and byte-residue-loop functions 
 | |
| +     * according to parameter. 
 | |
| +     */
 | |
| +    switch (xferSize)
 | |
| +    {
 | |
| +        case 4:
 | |
| +            realFuncArray[(LURC*16)] = funcDesc;
 | |
| +            break;
 | |
| +        case 2:
 | |
| +            realFuncArray[(LURC*16)] = funcDesc & 0xfffff00f;
 | |
| +            break;
 | |
| +        case 1:
 | |
| +        default:
 | |
| +            realFuncArray[(LURC*16)] = funcDesc & 0xffff000f;
 | |
| +            break;
 | |
| +    }
 | |
|  
 | |
| +    realFuncArray[(LURC*16+1)] = 0
 | |
| +        | (funcDesc & MCD_BYTE_SWAP_KILLER) 
 | |
| +        | MCD_NO_BYTE_SWAP_ATALL;
 | |
| +#endif
 | |
| +
 | |
| +   /* Write the initiator field in the TCR and set the initiator-hold bit*/
 | |
| +    MCD_dmaBar->taskControl[channel] = 0
 | |
| +        | (initiator << 8)
 | |
| +        | TASK_CTL_HIPRITSKEN
 | |
| +        | TASK_CTL_HLDINITNUM;
 | |
| +
 | |
| +    /* 
 | |
| +     * Current versions of the MPC8220 MCD have a hardware quirk that could
 | |
| +     * cause the write to the TCR to collide with an MDE access to the 
 | |
| +     * initiator-register file, so we have to verify that the write occurred
 | |
| +     * correctly by reading back the value.  On MCF547x/8x devices and any
 | |
| +     * future revisions of the MPC8220, this loop will not be entered.
 | |
| +     */
 | |
|      while(((MCD_dmaBar->taskControl[channel] & 0x1fff) !=
 | |
|            ((initiator << 8) | TASK_CTL_HIPRITSKEN | TASK_CTL_HLDINITNUM)) &&
 | |
|              (tcrCount < 1000))
 | |
|      {
 | |
|          tcrCount++;
 | |
| -        /*MCD_dmaBar->ptd_tcr[channel] = (initiator << 8) | 0x0020;*/
 | |
| -        MCD_dmaBar->taskControl[channel] =
 | |
| -            (initiator << 8) | TASK_CTL_HIPRITSKEN | TASK_CTL_HLDINITNUM;
 | |
| +        MCD_dmaBar->taskControl[channel] = 0
 | |
| +            | (initiator << 8)
 | |
| +            | TASK_CTL_HIPRITSKEN
 | |
| +            | TASK_CTL_HLDINITNUM;
 | |
|      }
 | |
|  
 | |
|      MCD_dmaBar->priority[channel] = (u8)priority & PRIORITY_PRI_MASK;
 | |
| -    /* should be albe to handle this stuff with only one write to ts reg - tbd */
 | |
| +
 | |
|      if (channel < 8 && channel >= 0)
 | |
|      {
 | |
|          MCD_dmaBar->taskSize0 &= ~(0xf << (7-channel)*4);
 | |
| @@ -488,7 +484,7 @@ printf("startDma:Setting up params\n");
 | |
|          MCD_dmaBar->taskSize1 |= (xferSize & 3) << ((15 - channel)*4);
 | |
|      }
 | |
|  
 | |
| -    /* setup task table flags/options which mostly control the line buffers */
 | |
| +    /* Setup task table flags/options */
 | |
|      MCD_taskTable[channel].FDTandFlags &= ~MCD_TT_FLAGS_MASK;
 | |
|      MCD_taskTable[channel].FDTandFlags |= (MCD_TT_FLAGS_MASK & flags);
 | |
|  
 | |
| @@ -508,79 +504,86 @@ printf("startDma:Setting up params\n");
 | |
|      }
 | |
|      else if(flags & MCD_SINGLE_DMA)
 | |
|      {
 | |
| -        /* this buffer descriptor is used for storing off initial parameters for later
 | |
| -           progress query calculation and for the DMA to write the resulting checksum
 | |
| -           The DMA does not use this to determine how to operate, that info is passed
 | |
| -           with the init routine*/
 | |
| +        /* 
 | |
| +         * This buffer descriptor is used for storing off initial parameters 
 | |
| +         * for later progress query calculation and for the DMA to write the 
 | |
| +         * resulting checksum. The DMA does not use this to determine how to 
 | |
| +         * operate, that info is passed with the init routine
 | |
| +         */
 | |
|          MCD_relocBuffDesc[channel].srcAddr = srcAddr;
 | |
|          MCD_relocBuffDesc[channel].destAddr = destAddr;
 | |
| -        MCD_relocBuffDesc[channel].lastDestAddr = destAddr;  /* definitely not its final value */
 | |
| +        MCD_relocBuffDesc[channel].lastDestAddr = destAddr;
 | |
|          MCD_relocBuffDesc[channel].dmaSize = dmaSize;
 | |
|          MCD_relocBuffDesc[channel].flags = 0;       /* not used */
 | |
|          MCD_relocBuffDesc[channel].csumResult = 0;  /* not used */
 | |
|          MCD_relocBuffDesc[channel].next = 0;        /* not used */
 | |
|  
 | |
|          /* Initialize the progress-querying stuff to show no progress:*/
 | |
| -        ((volatile int *)MCD_taskTable[channel].contextSaveSpace)[SRCPTR + CSAVE_OFFSET] = (int)srcAddr;
 | |
| -        ((volatile int *)MCD_taskTable[channel].contextSaveSpace)[DESTPTR + CSAVE_OFFSET] = (int)destAddr;
 | |
| -        ((volatile int *)MCD_taskTable[channel].contextSaveSpace)[DCOUNT + CSAVE_OFFSET] = 0;
 | |
| -        ((volatile int *)MCD_taskTable[channel].contextSaveSpace)[CURRBD + CSAVE_OFFSET] =
 | |
| -                                             (u32) &(MCD_relocBuffDesc[channel]);
 | |
| -        /* tbd - need to keep the user from trying to call the EU routine
 | |
| -           when MCD_INCLUDE_EU is not defined */
 | |
| +        ((volatile int *)MCD_taskTable[channel].contextSaveSpace)[SRCPTR + CSAVE_OFFSET] 
 | |
| +            = (int)srcAddr;
 | |
| +        ((volatile int *)MCD_taskTable[channel].contextSaveSpace)[DESTPTR + CSAVE_OFFSET] 
 | |
| +            = (int)destAddr;
 | |
| +        ((volatile int *)MCD_taskTable[channel].contextSaveSpace)[DCOUNT + CSAVE_OFFSET] 
 | |
| +            = 0;
 | |
| +        ((volatile int *)MCD_taskTable[channel].contextSaveSpace)[CURRBD + CSAVE_OFFSET] 
 | |
| +            = (u32) &(MCD_relocBuffDesc[channel]);
 | |
| +
 | |
|          if( funcDesc == MCD_FUNC_NOEU1 || funcDesc == MCD_FUNC_NOEU2)
 | |
|          {
 | |
| -           /* TDTStart and TDTEnd */
 | |
| -           MCD_taskTable[channel].TDTstart = MCD_modelTaskTable[TASK_SINGLENOEU].TDTstart;
 | |
| -           MCD_taskTable[channel].TDTend = MCD_modelTaskTable[TASK_SINGLENOEU].TDTend;
 | |
| -           MCD_startDmaSingleNoEu(srcAddr, srcIncr, destAddr, destIncr, dmaSize, dmaSize,
 | |
| -                                xferSizeIncr, flags, (int *)&(MCD_relocBuffDesc[channel]), cSave,
 | |
| -                                MCD_taskTable, channel);
 | |
| +            /* TDTStart and TDTEnd */
 | |
| +            MCD_taskTable[channel].TDTstart = MCD_modelTaskTable[TASK_SINGLENOEU].TDTstart;
 | |
| +            MCD_taskTable[channel].TDTend = MCD_modelTaskTable[TASK_SINGLENOEU].TDTend;
 | |
| +            MCD_startDmaSingleNoEu(srcAddr, srcIncr, destAddr, destIncr, dmaSize,
 | |
| +                                xferSizeIncr, flags, (int *)&(MCD_relocBuffDesc[channel]), 
 | |
| +                                cSave, MCD_taskTable, channel);
 | |
|          }
 | |
|          else
 | |
|          {
 | |
| -           /* TDTStart and TDTEnd */
 | |
| -           MCD_taskTable[channel].TDTstart = MCD_modelTaskTable[TASK_SINGLEEU].TDTstart;
 | |
| -           MCD_taskTable[channel].TDTend = MCD_modelTaskTable[TASK_SINGLEEU].TDTend;
 | |
| -           MCD_startDmaSingleEu(srcAddr, srcIncr, destAddr, destIncr, dmaSize, dmaSize,
 | |
| -                              xferSizeIncr, flags, (int *)&(MCD_relocBuffDesc[channel]), cSave,
 | |
| -                              MCD_taskTable, channel);
 | |
| +            /* TDTStart and TDTEnd */
 | |
| +            MCD_taskTable[channel].TDTstart = MCD_modelTaskTable[TASK_SINGLEEU].TDTstart;
 | |
| +            MCD_taskTable[channel].TDTend = MCD_modelTaskTable[TASK_SINGLEEU].TDTend;
 | |
| +            MCD_startDmaSingleEu(srcAddr, srcIncr, destAddr, destIncr, dmaSize,
 | |
| +                                xferSizeIncr, flags, (int *)&(MCD_relocBuffDesc[channel]), 
 | |
| +                                cSave, MCD_taskTable, channel);
 | |
|          }
 | |
|      }
 | |
| -    else
 | |
| -    { /* chained DMAS */
 | |
| +    else /* Chained DMA */
 | |
| +    {
 | |
|          /* Initialize the progress-querying stuff to show no progress:*/
 | |
|  #if 1 /* (!defined(MCD_NEED_ADDR_TRANS)) */
 | |
|          ((volatile int *)MCD_taskTable[channel].contextSaveSpace)[SRCPTR + CSAVE_OFFSET]
 | |
| -          = (int)((MCD_bufDesc*) phys_to_virt(srcAddr))->srcAddr;
 | |
| +            = (int)((MCD_bufDesc*) srcAddr)->srcAddr;
 | |
|          ((volatile int *)MCD_taskTable[channel].contextSaveSpace)[DESTPTR + CSAVE_OFFSET]
 | |
| -          = (int)((MCD_bufDesc*) phys_to_virt(srcAddr))->destAddr;
 | |
| +            = (int)((MCD_bufDesc*) srcAddr)->destAddr;
 | |
|  #else /* if using address translation, need the virtual addr of the first buffdesc */
 | |
|          ((volatile int *)MCD_taskTable[channel].contextSaveSpace)[SRCPTR + CSAVE_OFFSET]
 | |
|            = (int)((MCD_bufDesc*) srcAddrVirt)->srcAddr;
 | |
|          ((volatile int *)MCD_taskTable[channel].contextSaveSpace)[DESTPTR + CSAVE_OFFSET]
 | |
|            = (int)((MCD_bufDesc*) srcAddrVirt)->destAddr;
 | |
|  #endif
 | |
| -        ((volatile int *)MCD_taskTable[channel].contextSaveSpace)[DCOUNT + CSAVE_OFFSET] = 0;
 | |
| -        ((volatile int *)MCD_taskTable[channel].contextSaveSpace)[CURRBD + CSAVE_OFFSET] = (u32) srcAddr;
 | |
| +        ((volatile int *)MCD_taskTable[channel].contextSaveSpace)[DCOUNT + CSAVE_OFFSET] 
 | |
| +          = 0;
 | |
| +        ((volatile int *)MCD_taskTable[channel].contextSaveSpace)[CURRBD + CSAVE_OFFSET] 
 | |
| +          = (u32) srcAddr;
 | |
|  
 | |
|          if( funcDesc == MCD_FUNC_NOEU1 || funcDesc == MCD_FUNC_NOEU2)
 | |
|          {
 | |
| -          /*TDTStart and TDTEnd*/
 | |
| -          MCD_taskTable[channel].TDTstart = MCD_modelTaskTable[TASK_CHAINNOEU].TDTstart;
 | |
| -          MCD_taskTable[channel].TDTend = MCD_modelTaskTable[TASK_CHAINNOEU].TDTend;
 | |
| -          MCD_startDmaChainNoEu((int *)srcAddr, srcIncr, destIncr, xferSize,
 | |
| +            /* TDTStart and TDTEnd */
 | |
| +            MCD_taskTable[channel].TDTstart = MCD_modelTaskTable[TASK_CHAINNOEU].TDTstart;
 | |
| +            MCD_taskTable[channel].TDTend = MCD_modelTaskTable[TASK_CHAINNOEU].TDTend;
 | |
| +            MCD_startDmaChainNoEu((int *)srcAddr, srcIncr, destIncr, xferSize,
 | |
|                                      xferSizeIncr, cSave, MCD_taskTable, channel);
 | |
|          }
 | |
|          else
 | |
|          {
 | |
| -          /*TDTStart and TDTEnd*/
 | |
| -          MCD_taskTable[channel].TDTstart = MCD_modelTaskTable[TASK_CHAINEU].TDTstart;
 | |
| -          MCD_taskTable[channel].TDTend = MCD_modelTaskTable[TASK_CHAINEU].TDTend;
 | |
| -          MCD_startDmaChainEu((int *)srcAddr, srcIncr, destIncr, xferSize,
 | |
| +            /* TDTStart and TDTEnd */
 | |
| +            MCD_taskTable[channel].TDTstart = MCD_modelTaskTable[TASK_CHAINEU].TDTstart;
 | |
| +            MCD_taskTable[channel].TDTend = MCD_modelTaskTable[TASK_CHAINEU].TDTend;
 | |
| +            MCD_startDmaChainEu((int *)srcAddr, srcIncr, destIncr, xferSize,
 | |
|                                   xferSizeIncr, cSave, MCD_taskTable, channel);
 | |
|          }
 | |
|      }
 | |
| +
 | |
|      MCD_chStatus[channel] = MCD_IDLE;
 | |
|      return(MCD_OK);
 | |
|  }
 | |
| @@ -597,7 +600,7 @@ printf("startDma:Setting up params\n");
 | |
|   * Notes:
 | |
|   *  MCD_XferProgrQuery() upon completing or after aborting a DMA, or
 | |
|   *  while the DMA is in progress, this function returns the first
 | |
| - *  DMA-destination address not (or not yet) used in the DMA. When 
 | |
| + *  DMA-destination address not (or not yet) used in the DMA. When
 | |
|   *  encountering a non-ready buffer descriptor, the information for
 | |
|   *  the last completed descriptor is returned.
 | |
|   *
 | |
| @@ -642,11 +645,13 @@ int MCD_XferProgrQuery (int channel, MCD
 | |
|      prevRep.dmaSize = ((volatile int*) MCD_taskTable[channel].contextSaveSpace)[DCOUNT + CSAVE_OFFSET];
 | |
|      prevRep.currBufDesc =
 | |
|            (MCD_bufDesc*) ((volatile int*) MCD_taskTable[channel].contextSaveSpace)[CURRBD + CSAVE_OFFSET];
 | |
| +
 | |
|      /* Repeatedly reread those values until they match previous values: */
 | |
|      do {
 | |
| -        /* Waste a little bit of time to ensure stability: */
 | |
| +        /* Take a little bit of time to ensure stability: */
 | |
|          for (i = 0;  i < STABTIME;  i++)
 | |
| -            i += i >> 2;  /* make sure this loop does something so that it doesn't get optimized out */
 | |
| +            i += i >> 2;  /* make sure this loop does something so that it 
 | |
| +                             doesn't get optimized out */
 | |
|          /* Check them again: */
 | |
|          progRep->lastSrcAddr =
 | |
|              (s8 *) ((volatile int*) MCD_taskTable[channel].contextSaveSpace)[SRCPTR + CSAVE_OFFSET];
 | |
| @@ -655,31 +660,33 @@ int MCD_XferProgrQuery (int channel, MCD
 | |
|          progRep->dmaSize = ((volatile int*) MCD_taskTable[channel].contextSaveSpace)[DCOUNT + CSAVE_OFFSET];
 | |
|          progRep->currBufDesc =
 | |
|              (MCD_bufDesc*) ((volatile int*) MCD_taskTable[channel].contextSaveSpace)[CURRBD + CSAVE_OFFSET];
 | |
| -       /* See if they match: */
 | |
| -       if (   prevRep.lastSrcAddr != progRep->lastSrcAddr
 | |
| -           || prevRep.lastDestAddr != progRep->lastDestAddr
 | |
| -           || prevRep.dmaSize != progRep->dmaSize
 | |
| -           || prevRep.currBufDesc != progRep->currBufDesc)
 | |
| -       {
 | |
| -          /* If they don't match, remember previous values and try again:*/
 | |
| -          prevRep.lastSrcAddr = progRep->lastSrcAddr;
 | |
| -          prevRep.lastDestAddr = progRep->lastDestAddr;
 | |
| -          prevRep.dmaSize = progRep->dmaSize;
 | |
| -          prevRep.currBufDesc = progRep->currBufDesc;
 | |
| -          again = MCD_TRUE;
 | |
| -       }
 | |
| -       else
 | |
| +
 | |
| +        /* See if they match: */
 | |
| +        if (   prevRep.lastSrcAddr  != progRep->lastSrcAddr
 | |
| +            || prevRep.lastDestAddr != progRep->lastDestAddr
 | |
| +            || prevRep.dmaSize      != progRep->dmaSize
 | |
| +            || prevRep.currBufDesc  != progRep->currBufDesc)
 | |
| +        {
 | |
| +            /* If they don't match, remember previous values and try again:*/
 | |
| +            prevRep.lastSrcAddr = progRep->lastSrcAddr;
 | |
| +            prevRep.lastDestAddr = progRep->lastDestAddr;
 | |
| +            prevRep.dmaSize = progRep->dmaSize;
 | |
| +            prevRep.currBufDesc = progRep->currBufDesc;
 | |
| +            again = MCD_TRUE;
 | |
| +        }
 | |
| +        else
 | |
|            again = MCD_FALSE;
 | |
|      } while (again == MCD_TRUE);
 | |
|  
 | |
|  
 | |
| -    /* Update the dCount, srcAddr and destAddr */
 | |
| -    /* To calculate dmaCount, we consider destination address. C
 | |
| -       overs M1,P1,Z for destination */
 | |
| -    switch(MCD_remVariants.remDestRsdIncr[channel]) {
 | |
| +    /* Update dmaSize and lastDestAddr */
 | |
| +    switch(MCD_remVariants.remDestRsdIncr[channel]) 
 | |
| +    {
 | |
|          case MINUS1:
 | |
| -           subModVal = ((int)progRep->lastDestAddr) & ((MCD_remVariants.remXferSize[channel]) - 1);
 | |
| -           addModVal = ((int)progRep->currBufDesc->destAddr) & ((MCD_remVariants.remXferSize[channel]) - 1);
 | |
| +           subModVal = ((int)progRep->lastDestAddr) 
 | |
| +                        & ((MCD_remVariants.remXferSize[channel]) - 1);
 | |
| +           addModVal = ((int)progRep->currBufDesc->destAddr) 
 | |
| +                        & ((MCD_remVariants.remXferSize[channel]) - 1);
 | |
|             LWAlignedInitDestAddr = (progRep->currBufDesc->destAddr) - addModVal;
 | |
|             LWAlignedCurrDestAddr = (progRep->lastDestAddr) - subModVal;
 | |
|             destDiffBytes = LWAlignedInitDestAddr - LWAlignedCurrDestAddr;
 | |
| @@ -692,25 +699,28 @@ int MCD_XferProgrQuery (int channel, MCD
 | |
|             progRep->lastDestAddr = progRep->currBufDesc->destAddr;
 | |
|             break;
 | |
|          case PLUS1:
 | |
| -           /* This value has to be subtracted from the final calculated dCount. */
 | |
| -           subModVal = ((int)progRep->currBufDesc->destAddr) & ((MCD_remVariants.remXferSize[channel]) - 1);
 | |
| +           /* This value has to be subtracted from the final calculated dmaSize. */
 | |
| +            subModVal = ((int)progRep->currBufDesc->destAddr) 
 | |
| +                        & ((MCD_remVariants.remXferSize[channel]) - 1);
 | |
|             /* These bytes are already in lastDestAddr. */
 | |
| -            addModVal = ((int)progRep->lastDestAddr) & ((MCD_remVariants.remXferSize[channel]) - 1);
 | |
| +            addModVal = ((int)progRep->lastDestAddr) 
 | |
| +                        & ((MCD_remVariants.remXferSize[channel]) - 1);
 | |
|              LWAlignedInitDestAddr = (progRep->currBufDesc->destAddr) - subModVal;
 | |
|              LWAlignedCurrDestAddr = (progRep->lastDestAddr) - addModVal;
 | |
|              destDiffBytes = (progRep->lastDestAddr - LWAlignedInitDestAddr);
 | |
|              numIterations = ( LWAlignedCurrDestAddr - LWAlignedInitDestAddr)/MCD_remVariants.remDestIncr[channel];
 | |
|              bytesNotXfered =  numIterations *
 | |
| -                ( MCD_remVariants.remDestIncr[channel]
 | |
| -                  - MCD_remVariants.remXferSize[channel]);
 | |
| -           progRep->dmaSize = destDiffBytes - bytesNotXfered - subModVal;
 | |
| -           break;
 | |
| +                              (MCD_remVariants.remDestIncr[channel]
 | |
| +                             - MCD_remVariants.remXferSize[channel]);
 | |
| +            progRep->dmaSize = destDiffBytes - bytesNotXfered - subModVal;
 | |
| +            break;
 | |
|          default:
 | |
| -           break;
 | |
| +            break;
 | |
|      }
 | |
|  
 | |
|      /* This covers M1,P1,Z for source */
 | |
| -    switch(MCD_remVariants.remSrcRsdIncr[channel]) {
 | |
| +    switch(MCD_remVariants.remSrcRsdIncr[channel]) 
 | |
| +    {
 | |
|          case MINUS1:
 | |
|              progRep->lastSrcAddr =
 | |
|                  progRep->currBufDesc->srcAddr +
 | |
| @@ -720,13 +730,14 @@ int MCD_XferProgrQuery (int channel, MCD
 | |
|          case ZERO:
 | |
|              progRep->lastSrcAddr = progRep->currBufDesc->srcAddr;
 | |
|              break;
 | |
| -       case PLUS1:
 | |
| +        case PLUS1:
 | |
|              progRep->lastSrcAddr =
 | |
|                  progRep->currBufDesc->srcAddr +
 | |
|                   ( MCD_remVariants.remSrcIncr[channel] *
 | |
|                     (progRep->dmaSize/MCD_remVariants.remXferSize[channel]));
 | |
| -          break;
 | |
| -       default: break;
 | |
| +            break;
 | |
| +        default: 
 | |
| +            break;
 | |
|      }
 | |
|  
 | |
|      return(MCD_OK);
 | |
| @@ -744,8 +755,10 @@ static void MCD_resmActions (int channel
 | |
|  {
 | |
|     MCD_dmaBar->debugControl = DBG_CTL_DISABLE;
 | |
|     MCD_dmaBar->debugStatus = MCD_dmaBar->debugStatus;
 | |
| -   MCD_dmaBar->ptdDebug = PTD_DBG_TSK_VLD_INIT; /* This register is selected to know
 | |
| -                                        which initiator is actually asserted. */
 | |
| +
 | |
| +   /* Determine which initiators are asserted */
 | |
| +   MCD_dmaBar->ptdDebug = PTD_DBG_TSK_VLD_INIT; 
 | |
| +
 | |
|     if((MCD_dmaBar->ptdDebug >> channel ) & 0x1)
 | |
|         MCD_chStatus[channel] = MCD_RUNNING;
 | |
|     else
 | |
| @@ -767,27 +780,20 @@ static void MCD_resmActions (int channel
 | |
|   */
 | |
|  int MCD_killDma (int channel)
 | |
|  {
 | |
| -   /* MCD_XferProg progRep; */
 | |
| -
 | |
|      if((channel < 0) || (channel >= NCHANNELS))
 | |
|          return(MCD_CHANNEL_INVALID);
 | |
|  
 | |
|      MCD_dmaBar->taskControl[channel] = 0x0;
 | |
| -    MCD_resumeDma (channel);
 | |
| -    /*
 | |
| -     * This must be after the write to the TCR so that the task doesn't
 | |
| -     * start up again momentarily, and before the status assignment so
 | |
| -     * as to override whatever MCD_resumeDma() may do to the channel
 | |
| -     * status.
 | |
| -     */
 | |
| +    
 | |
| +    /* Clean up after a paused task */
 | |
| +    if (MCD_chStatus[channel] == MCD_PAUSED)
 | |
| +    {
 | |
| +        MCD_dmaBar->debugControl = DBG_CTL_DISABLE;
 | |
| +        MCD_dmaBar->debugStatus = MCD_dmaBar->debugStatus;        
 | |
| +    }
 | |
| +     
 | |
|      MCD_chStatus[channel] = MCD_HALTED;
 | |
|  
 | |
| -    /*
 | |
| -     * Update the current buffer descriptor's lastDestAddr field
 | |
| -     *
 | |
| -     * MCD_XferProgrQuery (channel, &progRep);
 | |
| -     * progRep.currBufDesc->lastDestAddr = progRep.lastDestAddr;
 | |
| -     */
 | |
|      return(MCD_OK);
 | |
|  }
 | |
|  /************************ End of MCD_killDma() **********************/
 | |
| @@ -843,7 +849,7 @@ int MCD_continDma (int channel)
 | |
|   * this means that bits 14 and 0 must enable debug functions before
 | |
|   * bits 1 and 2, respectively, have any effect.
 | |
|   *
 | |
| - * NOTE: It's extremely important to not pause more than one DMA channel 
 | |
| + * NOTE: It's extremely important to not pause more than one DMA channel
 | |
|   *  at a time.
 | |
|   ********************************************************************/
 | |
|  
 | |
| @@ -856,8 +862,6 @@ int MCD_continDma (int channel)
 | |
|   */
 | |
|  int MCD_pauseDma (int channel)
 | |
|  {
 | |
| -    /* MCD_XferProg progRep; */
 | |
| -
 | |
|      if((channel < 0) || (channel >= NCHANNELS))
 | |
|          return(MCD_CHANNEL_INVALID);
 | |
|  
 | |
| @@ -866,13 +870,6 @@ int MCD_pauseDma (int channel)
 | |
|          MCD_dmaBar->debugComp1 = channel;
 | |
|          MCD_dmaBar->debugControl = DBG_CTL_ENABLE | (1 << (channel + 16));
 | |
|          MCD_chStatus[channel] = MCD_PAUSED;
 | |
| -
 | |
| -        /*
 | |
| -         * Update the current buffer descriptor's lastDestAddr field
 | |
| -         *
 | |
| -         * MCD_XferProgrQuery (channel, &progRep);
 | |
| -         * progRep.currBufDesc->lastDestAddr = progRep.lastDestAddr;
 | |
| -         */
 | |
|      }
 | |
|      return(MCD_OK);
 | |
|  }
 | |
| @@ -929,9 +926,9 @@ int MCD_csumQuery (int channel, u32 *csu
 | |
|  int MCD_getCodeSize(void)
 | |
|  {
 | |
|  #ifdef MCD_INCLUDE_EU
 | |
| -    return(0x2b5c);
 | |
| +    return(0x2b64);
 | |
|  #else
 | |
| -    return(0x173c);
 | |
| +    return(0x1744);
 | |
|  #endif
 | |
|  }
 | |
|  /********************** End of MCD_getCodeSize() ********************/
 | |
| @@ -943,9 +940,9 @@ int MCD_getCodeSize(void)
 | |
|   *                    which points to the version string
 | |
|   * Returns:     Version number and version string (by reference)
 | |
|   */
 | |
| -char MCD_versionString[] = "Multi-channel DMA API Alpha v0.3 (2004-04-26)";
 | |
| -#define MCD_REV_MAJOR   0x00
 | |
| -#define MCD_REV_MINOR   0x03
 | |
| +char MCD_versionString[] = "Multi-channel DMA API v1.0";
 | |
| +#define MCD_REV_MAJOR   0x01
 | |
| +#define MCD_REV_MINOR   0x00
 | |
|  
 | |
|  int MCD_getVersion(char **longVersion)
 | |
|  {
 | |
| --- a/drivers/dma/MCD_progCheck.h
 | |
| +++ b/drivers/dma/MCD_progCheck.h
 | |
| @@ -1,32 +1,27 @@
 | |
| -/*********************************************************************
 | |
| +/*
 | |
| + * drivers/dma/MCD_progCheck.h
 | |
|   *
 | |
| - * Copyright (C) 2004  Motorola, Inc.
 | |
| - *  MOTOROLA, INC. All Rights Reserved.
 | |
| - *  You are hereby granted a copyright license to use
 | |
| - *  the SOFTWARE so long as this entire notice is
 | |
| - *  retained without alteration in any modified and/or redistributed
 | |
| - *  versions, and that such modified versions are clearly identified
 | |
| - *  as such. No licenses are granted by implication, estoppel or
 | |
| - *  otherwise under any patents or trademarks of Motorola, Inc. This
 | |
| - *  software is provided on an "AS IS" basis and without warranty.
 | |
| + * Copyright (C) 2004-2008 Freescale Semiconductor, Inc.
 | |
| + *     Kurt Mahan <kmahan@freescale.com>
 | |
|   *
 | |
| - *  To the maximum extent permitted by applicable law, MOTOROLA
 | |
| - *  DISCLAIMS ALL WARRANTIES WHETHER EXPRESS OR IMPLIED, INCLUDING
 | |
| - *  IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR
 | |
| - *  PURPOSE AND ANY WARRANTY AGAINST INFRINGEMENT WITH REGARD TO THE
 | |
| - *  SOFTWARE (INCLUDING ANY MODIFIED VERSIONS THEREOF) AND ANY
 | |
| - *  ACCOMPANYING WRITTEN MATERIALS.
 | |
| + * This program is free software; you can redistribute it and/or
 | |
| + * modify it under the terms of the GNU General Public License as
 | |
| + * published by the Free Software Foundation; either version 2 of
 | |
| + * the License, or (at your option) any later version.
 | |
|   *
 | |
| - *  To the maximum extent permitted by applicable law, IN NO EVENT
 | |
| - *  SHALL MOTOROLA BE LIABLE FOR ANY DAMAGES WHATSOEVER (INCLUDING
 | |
| - *  WITHOUT LIMITATION, DAMAGES FOR LOSS OF BUSINESS PROFITS, BUSINESS
 | |
| - *  INTERRUPTION, LOSS OF BUSINESS INFORMATION, OR OTHER PECUNIARY
 | |
| - *  LOSS) ARISING OF THE USE OR INABILITY TO USE THE SOFTWARE.
 | |
| + * This program is distributed in the hope that it will be useful,
 | |
| + * but WITHOUT ANY WARRANTY; without even the implied warranty of
 | |
| + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | |
| + * GNU General Public License for more details.
 | |
|   *
 | |
| - *  Motorola assumes no responsibility for the maintenance and support
 | |
| - *  of this software
 | |
| - ********************************************************************/
 | |
| - /* This file is autogenerated. Do not change */
 | |
| + * You should have received a copy of the GNU General Public License
 | |
| + * along with this program; if not, write to the Free Software
 | |
| + * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
 | |
| + * MA 02111-1307 USA
 | |
| + */
 | |
| +
 | |
| +/* This file is autogenerated. Do not change */
 | |
| +
 | |
|  #define CURRBD 4
 | |
|  #define DCOUNT 6
 | |
|  #define DESTPTR 5
 | |
| --- a/drivers/dma/MCD_tasks.c
 | |
| +++ b/drivers/dma/MCD_tasks.c
 | |
| @@ -1,44 +1,26 @@
 | |
| -/*********************************************************************
 | |
| - *
 | |
| - * Copyright (C) 2004  Motorola, Inc.
 | |
| - *  MOTOROLA, INC. All Rights Reserved.
 | |
| - *  You are hereby granted a copyright license to use
 | |
| - *  the SOFTWARE so long as this entire notice is
 | |
| - *  retained without alteration in any modified and/or redistributed
 | |
| - *  versions, and that such modified versions are clearly identified
 | |
| - *  as such. No licenses are granted by implication, estoppel or
 | |
| - *  otherwise under any patents or trademarks of Motorola, Inc. This
 | |
| - *  software is provided on an "AS IS" basis and without warranty.
 | |
| - *
 | |
| - *  To the maximum extent permitted by applicable law, MOTOROLA
 | |
| - *  DISCLAIMS ALL WARRANTIES WHETHER EXPRESS OR IMPLIED, INCLUDING
 | |
| - *  IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR
 | |
| - *  PURPOSE AND ANY WARRANTY AGAINST INFRINGEMENT WITH REGARD TO THE
 | |
| - *  SOFTWARE (INCLUDING ANY MODIFIED VERSIONS THEREOF) AND ANY
 | |
| - *  ACCOMPANYING WRITTEN MATERIALS.
 | |
| - *
 | |
| - *  To the maximum extent permitted by applicable law, IN NO EVENT
 | |
| - *  SHALL MOTOROLA BE LIABLE FOR ANY DAMAGES WHATSOEVER (INCLUDING
 | |
| - *  WITHOUT LIMITATION, DAMAGES FOR LOSS OF BUSINESS PROFITS, BUSINESS
 | |
| - *  INTERRUPTION, LOSS OF BUSINESS INFORMATION, OR OTHER PECUNIARY
 | |
| - *  LOSS) ARISING OF THE USE OR INABILITY TO USE THE SOFTWARE.
 | |
| - *
 | |
| - *  Motorola assumes no responsibility for the maintenance and support
 | |
| - *  of this software
 | |
| - ********************************************************************/
 | |
|  /*
 | |
| - * File:        MCD_tasks.c
 | |
| - * Purpose:     Contains task code and structures for Multi-channel DMA
 | |
| - *
 | |
| - * Notes:
 | |
| + * drivers/dma/MCD_tasks.c
 | |
|   *
 | |
| + * Copyright (C) 2004-2008 Freescale Semiconductor, Inc.
 | |
| + *     Kurt Mahan <kmahan@freescale.com>
 | |
|   *
 | |
| - * Modifications:
 | |
| + * This program is free software; you can redistribute it and/or
 | |
| + * modify it under the terms of the GNU General Public License as
 | |
| + * published by the Free Software Foundation; either version 2 of
 | |
| + * the License, or (at your option) any later version.
 | |
|   *
 | |
| + * This program is distributed in the hope that it will be useful,
 | |
| + * but WITHOUT ANY WARRANTY; without even the implied warranty of
 | |
| + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | |
| + * GNU General Public License for more details.
 | |
|   *
 | |
| + * You should have received a copy of the GNU General Public License
 | |
| + * along with this program; if not, write to the Free Software
 | |
| + * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
 | |
| + * MA 02111-1307 USA
 | |
|   */
 | |
|  
 | |
| -#include <asm/MCD_dma.h>
 | |
| +#include "MCD_dma.h"
 | |
|  
 | |
|  u32 MCD_varTab0[];
 | |
|  u32 MCD_varTab1[];
 | |
| @@ -922,13 +904,13 @@ u32 MCD_funcDescTab0[]=
 | |
|      0x20400000, /* add(), EU# 3 */
 | |
|      0x20500000, /* sub(), EU# 3 */
 | |
|      0x205a0000, /* andNot(), EU# 3 */
 | |
| +    0x20a00000, /* shiftR(), EU# 3 */
 | |
|      0x202fa000, /* andReadyBit(), EU# 3 */
 | |
|      0x202f9000, /* andNotReadyBit(), EU# 3 */
 | |
|      0x202ea000, /* andWrapBit(), EU# 3 */
 | |
| -    0x202da000, /* andEndFrameBit(), EU# 3 */
 | |
| +    0x202da000, /* andLastBit(), EU# 3 */
 | |
|      0x202e2000, /* andInterruptBit(), EU# 3 */
 | |
| -    0x202f2000, /* andLoopBit(), EU# 3 */
 | |
| -    0x2020a000, /* andCrcRestartBit(), EU# 3 */
 | |
| +    0x202f2000, /* andCrcRestartBit(), EU# 3 */
 | |
|  };
 | |
|  
 | |
|  #ifdef MCD_INCLUDE_EU
 | |
| @@ -991,13 +973,13 @@ u32 MCD_funcDescTab1[]=
 | |
|      0x20400000, /* add(), EU# 3 */
 | |
|      0x20500000, /* sub(), EU# 3 */
 | |
|      0x205a0000, /* andNot(), EU# 3 */
 | |
| +    0x20a00000, /* shiftR(), EU# 3 */
 | |
|      0x202fa000, /* andReadyBit(), EU# 3 */
 | |
|      0x202f9000, /* andNotReadyBit(), EU# 3 */
 | |
|      0x202ea000, /* andWrapBit(), EU# 3 */
 | |
| -    0x202da000, /* andEndFrameBit(), EU# 3 */
 | |
| +    0x202da000, /* andLastBit(), EU# 3 */
 | |
|      0x202e2000, /* andInterruptBit(), EU# 3 */
 | |
| -    0x202f2000, /* andLoopBit(), EU# 3 */
 | |
| -    0x2020a000, /* andCrcRestartBit(), EU# 3 */
 | |
| +    0x202f2000, /* andCrcRestartBit(), EU# 3 */
 | |
|  };
 | |
|  
 | |
|  u32 MCD_funcDescTab2[]=
 | |
| @@ -1059,13 +1041,13 @@ u32 MCD_funcDescTab2[]=
 | |
|      0x20400000, /* add(), EU# 3 */
 | |
|      0x20500000, /* sub(), EU# 3 */
 | |
|      0x205a0000, /* andNot(), EU# 3 */
 | |
| +    0x20a00000, /* shiftR(), EU# 3 */
 | |
|      0x202fa000, /* andReadyBit(), EU# 3 */
 | |
|      0x202f9000, /* andNotReadyBit(), EU# 3 */
 | |
|      0x202ea000, /* andWrapBit(), EU# 3 */
 | |
| -    0x202da000, /* andEndFrameBit(), EU# 3 */
 | |
| +    0x202da000, /* andLastBit(), EU# 3 */
 | |
|      0x202e2000, /* andInterruptBit(), EU# 3 */
 | |
| -    0x202f2000, /* andLoopBit(), EU# 3 */
 | |
| -    0x2020a000, /* andCrcRestartBit(), EU# 3 */
 | |
| +    0x202f2000, /* andCrcRestartBit(), EU# 3 */
 | |
|  };
 | |
|  
 | |
|  u32 MCD_funcDescTab3[]=
 | |
| @@ -1127,13 +1109,13 @@ u32 MCD_funcDescTab3[]=
 | |
|      0x20400000, /* add(), EU# 3 */
 | |
|      0x20500000, /* sub(), EU# 3 */
 | |
|      0x205a0000, /* andNot(), EU# 3 */
 | |
| +    0x20a00000, /* shiftR(), EU# 3 */
 | |
|      0x202fa000, /* andReadyBit(), EU# 3 */
 | |
|      0x202f9000, /* andNotReadyBit(), EU# 3 */
 | |
|      0x202ea000, /* andWrapBit(), EU# 3 */
 | |
| -    0x202da000, /* andEndFrameBit(), EU# 3 */
 | |
| +    0x202da000, /* andLastBit(), EU# 3 */
 | |
|      0x202e2000, /* andInterruptBit(), EU# 3 */
 | |
| -    0x202f2000, /* andLoopBit(), EU# 3 */
 | |
| -    0x2020a000, /* andCrcRestartBit(), EU# 3 */
 | |
| +    0x202f2000, /* andCrcRestartBit(), EU# 3 */
 | |
|  };
 | |
|  
 | |
|  u32 MCD_funcDescTab4[]=
 | |
| @@ -1195,13 +1177,13 @@ u32 MCD_funcDescTab4[]=
 | |
|      0x20400000, /* add(), EU# 3 */
 | |
|      0x20500000, /* sub(), EU# 3 */
 | |
|      0x205a0000, /* andNot(), EU# 3 */
 | |
| +    0x20a00000, /* shiftR(), EU# 3 */
 | |
|      0x202fa000, /* andReadyBit(), EU# 3 */
 | |
|      0x202f9000, /* andNotReadyBit(), EU# 3 */
 | |
|      0x202ea000, /* andWrapBit(), EU# 3 */
 | |
| -    0x202da000, /* andEndFrameBit(), EU# 3 */
 | |
| +    0x202da000, /* andLastBit(), EU# 3 */
 | |
|      0x202e2000, /* andInterruptBit(), EU# 3 */
 | |
| -    0x202f2000, /* andLoopBit(), EU# 3 */
 | |
| -    0x2020a000, /* andCrcRestartBit(), EU# 3 */
 | |
| +    0x202f2000, /* andCrcRestartBit(), EU# 3 */
 | |
|  };
 | |
|  
 | |
|  u32 MCD_funcDescTab5[]=
 | |
| @@ -1263,13 +1245,13 @@ u32 MCD_funcDescTab5[]=
 | |
|      0x20400000, /* add(), EU# 3 */
 | |
|      0x20500000, /* sub(), EU# 3 */
 | |
|      0x205a0000, /* andNot(), EU# 3 */
 | |
| +    0x20a00000, /* shiftR(), EU# 3 */
 | |
|      0x202fa000, /* andReadyBit(), EU# 3 */
 | |
|      0x202f9000, /* andNotReadyBit(), EU# 3 */
 | |
|      0x202ea000, /* andWrapBit(), EU# 3 */
 | |
| -    0x202da000, /* andEndFrameBit(), EU# 3 */
 | |
| +    0x202da000, /* andLastBit(), EU# 3 */
 | |
|      0x202e2000, /* andInterruptBit(), EU# 3 */
 | |
| -    0x202f2000, /* andLoopBit(), EU# 3 */
 | |
| -    0x2020a000, /* andCrcRestartBit(), EU# 3 */
 | |
| +    0x202f2000, /* andCrcRestartBit(), EU# 3 */
 | |
|  };
 | |
|  
 | |
|  u32 MCD_funcDescTab6[]=
 | |
| @@ -1331,13 +1313,13 @@ u32 MCD_funcDescTab6[]=
 | |
|      0x20400000, /* add(), EU# 3 */
 | |
|      0x20500000, /* sub(), EU# 3 */
 | |
|      0x205a0000, /* andNot(), EU# 3 */
 | |
| +    0x20a00000, /* shiftR(), EU# 3 */
 | |
|      0x202fa000, /* andReadyBit(), EU# 3 */
 | |
|      0x202f9000, /* andNotReadyBit(), EU# 3 */
 | |
|      0x202ea000, /* andWrapBit(), EU# 3 */
 | |
| -    0x202da000, /* andEndFrameBit(), EU# 3 */
 | |
| +    0x202da000, /* andLastBit(), EU# 3 */
 | |
|      0x202e2000, /* andInterruptBit(), EU# 3 */
 | |
| -    0x202f2000, /* andLoopBit(), EU# 3 */
 | |
| -    0x2020a000, /* andCrcRestartBit(), EU# 3 */
 | |
| +    0x202f2000, /* andCrcRestartBit(), EU# 3 */
 | |
|  };
 | |
|  
 | |
|  u32 MCD_funcDescTab7[]=
 | |
| @@ -1399,13 +1381,13 @@ u32 MCD_funcDescTab7[]=
 | |
|      0x20400000, /* add(), EU# 3 */
 | |
|      0x20500000, /* sub(), EU# 3 */
 | |
|      0x205a0000, /* andNot(), EU# 3 */
 | |
| +    0x20a00000, /* shiftR(), EU# 3 */
 | |
|      0x202fa000, /* andReadyBit(), EU# 3 */
 | |
|      0x202f9000, /* andNotReadyBit(), EU# 3 */
 | |
|      0x202ea000, /* andWrapBit(), EU# 3 */
 | |
| -    0x202da000, /* andEndFrameBit(), EU# 3 */
 | |
| +    0x202da000, /* andLastBit(), EU# 3 */
 | |
|      0x202e2000, /* andInterruptBit(), EU# 3 */
 | |
| -    0x202f2000, /* andLoopBit(), EU# 3 */
 | |
| -    0x2020a000, /* andCrcRestartBit(), EU# 3 */
 | |
| +    0x202f2000, /* andCrcRestartBit(), EU# 3 */
 | |
|  };
 | |
|  
 | |
|  u32 MCD_funcDescTab8[]=
 | |
| @@ -1467,13 +1449,13 @@ u32 MCD_funcDescTab8[]=
 | |
|      0x20400000, /* add(), EU# 3 */
 | |
|      0x20500000, /* sub(), EU# 3 */
 | |
|      0x205a0000, /* andNot(), EU# 3 */
 | |
| +    0x20a00000, /* shiftR(), EU# 3 */
 | |
|      0x202fa000, /* andReadyBit(), EU# 3 */
 | |
|      0x202f9000, /* andNotReadyBit(), EU# 3 */
 | |
|      0x202ea000, /* andWrapBit(), EU# 3 */
 | |
| -    0x202da000, /* andEndFrameBit(), EU# 3 */
 | |
| +    0x202da000, /* andLastBit(), EU# 3 */
 | |
|      0x202e2000, /* andInterruptBit(), EU# 3 */
 | |
| -    0x202f2000, /* andLoopBit(), EU# 3 */
 | |
| -    0x2020a000, /* andCrcRestartBit(), EU# 3 */
 | |
| +    0x202f2000, /* andCrcRestartBit(), EU# 3 */
 | |
|  };
 | |
|  
 | |
|  u32 MCD_funcDescTab9[]=
 | |
| @@ -1535,13 +1517,13 @@ u32 MCD_funcDescTab9[]=
 | |
|      0x20400000, /* add(), EU# 3 */
 | |
|      0x20500000, /* sub(), EU# 3 */
 | |
|      0x205a0000, /* andNot(), EU# 3 */
 | |
| +    0x20a00000, /* shiftR(), EU# 3 */
 | |
|      0x202fa000, /* andReadyBit(), EU# 3 */
 | |
|      0x202f9000, /* andNotReadyBit(), EU# 3 */
 | |
|      0x202ea000, /* andWrapBit(), EU# 3 */
 | |
| -    0x202da000, /* andEndFrameBit(), EU# 3 */
 | |
| +    0x202da000, /* andLastBit(), EU# 3 */
 | |
|      0x202e2000, /* andInterruptBit(), EU# 3 */
 | |
| -    0x202f2000, /* andLoopBit(), EU# 3 */
 | |
| -    0x2020a000, /* andCrcRestartBit(), EU# 3 */
 | |
| +    0x202f2000, /* andCrcRestartBit(), EU# 3 */
 | |
|  };
 | |
|  
 | |
|  u32 MCD_funcDescTab10[]=
 | |
| @@ -1603,13 +1585,13 @@ u32 MCD_funcDescTab10[]=
 | |
|      0x20400000, /* add(), EU# 3 */
 | |
|      0x20500000, /* sub(), EU# 3 */
 | |
|      0x205a0000, /* andNot(), EU# 3 */
 | |
| +    0x20a00000, /* shiftR(), EU# 3 */
 | |
|      0x202fa000, /* andReadyBit(), EU# 3 */
 | |
|      0x202f9000, /* andNotReadyBit(), EU# 3 */
 | |
|      0x202ea000, /* andWrapBit(), EU# 3 */
 | |
| -    0x202da000, /* andEndFrameBit(), EU# 3 */
 | |
| +    0x202da000, /* andLastBit(), EU# 3 */
 | |
|      0x202e2000, /* andInterruptBit(), EU# 3 */
 | |
| -    0x202f2000, /* andLoopBit(), EU# 3 */
 | |
| -    0x2020a000, /* andCrcRestartBit(), EU# 3 */
 | |
| +    0x202f2000, /* andCrcRestartBit(), EU# 3 */
 | |
|  };
 | |
|  
 | |
|  u32 MCD_funcDescTab11[]=
 | |
| @@ -1671,13 +1653,13 @@ u32 MCD_funcDescTab11[]=
 | |
|      0x20400000, /* add(), EU# 3 */
 | |
|      0x20500000, /* sub(), EU# 3 */
 | |
|      0x205a0000, /* andNot(), EU# 3 */
 | |
| +    0x20a00000, /* shiftR(), EU# 3 */
 | |
|      0x202fa000, /* andReadyBit(), EU# 3 */
 | |
|      0x202f9000, /* andNotReadyBit(), EU# 3 */
 | |
|      0x202ea000, /* andWrapBit(), EU# 3 */
 | |
| -    0x202da000, /* andEndFrameBit(), EU# 3 */
 | |
| +    0x202da000, /* andLastBit(), EU# 3 */
 | |
|      0x202e2000, /* andInterruptBit(), EU# 3 */
 | |
| -    0x202f2000, /* andLoopBit(), EU# 3 */
 | |
| -    0x2020a000, /* andCrcRestartBit(), EU# 3 */
 | |
| +    0x202f2000, /* andCrcRestartBit(), EU# 3 */
 | |
|  };
 | |
|  
 | |
|  u32 MCD_funcDescTab12[]=
 | |
| @@ -1739,13 +1721,13 @@ u32 MCD_funcDescTab12[]=
 | |
|      0x20400000, /* add(), EU# 3 */
 | |
|      0x20500000, /* sub(), EU# 3 */
 | |
|      0x205a0000, /* andNot(), EU# 3 */
 | |
| +    0x20a00000, /* shiftR(), EU# 3 */
 | |
|      0x202fa000, /* andReadyBit(), EU# 3 */
 | |
|      0x202f9000, /* andNotReadyBit(), EU# 3 */
 | |
|      0x202ea000, /* andWrapBit(), EU# 3 */
 | |
| -    0x202da000, /* andEndFrameBit(), EU# 3 */
 | |
| +    0x202da000, /* andLastBit(), EU# 3 */
 | |
|      0x202e2000, /* andInterruptBit(), EU# 3 */
 | |
| -    0x202f2000, /* andLoopBit(), EU# 3 */
 | |
| -    0x2020a000, /* andCrcRestartBit(), EU# 3 */
 | |
| +    0x202f2000, /* andCrcRestartBit(), EU# 3 */
 | |
|  };
 | |
|  
 | |
|  u32 MCD_funcDescTab13[]=
 | |
| @@ -1807,13 +1789,13 @@ u32 MCD_funcDescTab13[]=
 | |
|      0x20400000, /* add(), EU# 3 */
 | |
|      0x20500000, /* sub(), EU# 3 */
 | |
|      0x205a0000, /* andNot(), EU# 3 */
 | |
| +    0x20a00000, /* shiftR(), EU# 3 */
 | |
|      0x202fa000, /* andReadyBit(), EU# 3 */
 | |
|      0x202f9000, /* andNotReadyBit(), EU# 3 */
 | |
|      0x202ea000, /* andWrapBit(), EU# 3 */
 | |
| -    0x202da000, /* andEndFrameBit(), EU# 3 */
 | |
| +    0x202da000, /* andLastBit(), EU# 3 */
 | |
|      0x202e2000, /* andInterruptBit(), EU# 3 */
 | |
| -    0x202f2000, /* andLoopBit(), EU# 3 */
 | |
| -    0x2020a000, /* andCrcRestartBit(), EU# 3 */
 | |
| +    0x202f2000, /* andCrcRestartBit(), EU# 3 */
 | |
|  };
 | |
|  
 | |
|  u32 MCD_funcDescTab14[]=
 | |
| @@ -1875,13 +1857,13 @@ u32 MCD_funcDescTab14[]=
 | |
|      0x20400000, /* add(), EU# 3 */
 | |
|      0x20500000, /* sub(), EU# 3 */
 | |
|      0x205a0000, /* andNot(), EU# 3 */
 | |
| +    0x20a00000, /* shiftR(), EU# 3 */
 | |
|      0x202fa000, /* andReadyBit(), EU# 3 */
 | |
|      0x202f9000, /* andNotReadyBit(), EU# 3 */
 | |
|      0x202ea000, /* andWrapBit(), EU# 3 */
 | |
| -    0x202da000, /* andEndFrameBit(), EU# 3 */
 | |
| +    0x202da000, /* andLastBit(), EU# 3 */
 | |
|      0x202e2000, /* andInterruptBit(), EU# 3 */
 | |
| -    0x202f2000, /* andLoopBit(), EU# 3 */
 | |
| -    0x2020a000, /* andCrcRestartBit(), EU# 3 */
 | |
| +    0x202f2000, /* andCrcRestartBit(), EU# 3 */
 | |
|  };
 | |
|  
 | |
|  u32 MCD_funcDescTab15[]=
 | |
| @@ -1943,13 +1925,13 @@ u32 MCD_funcDescTab15[]=
 | |
|      0x20400000, /* add(), EU# 3 */
 | |
|      0x20500000, /* sub(), EU# 3 */
 | |
|      0x205a0000, /* andNot(), EU# 3 */
 | |
| +    0x20a00000, /* shiftR(), EU# 3 */
 | |
|      0x202fa000, /* andReadyBit(), EU# 3 */
 | |
|      0x202f9000, /* andNotReadyBit(), EU# 3 */
 | |
|      0x202ea000, /* andWrapBit(), EU# 3 */
 | |
| -    0x202da000, /* andEndFrameBit(), EU# 3 */
 | |
| +    0x202da000, /* andLastBit(), EU# 3 */
 | |
|      0x202e2000, /* andInterruptBit(), EU# 3 */
 | |
| -    0x202f2000, /* andLoopBit(), EU# 3 */
 | |
| -    0x2020a000, /* andCrcRestartBit(), EU# 3 */
 | |
| +    0x202f2000, /* andCrcRestartBit(), EU# 3 */
 | |
|  };
 | |
|  #endif /*MCD_INCLUDE_EU*/
 | |
|  
 | |
| @@ -1970,7 +1952,6 @@ u32 MCD_contextSave13[128]; /* Task 13 c
 | |
|  u32 MCD_contextSave14[128]; /* Task 14 context save space */
 | |
|  u32 MCD_contextSave15[128]; /* Task 15 context save space */
 | |
|  
 | |
| -/* Task Descriptor Tables - the guts */
 | |
|  u32 MCD_ChainNoEu_TDT[];
 | |
|  u32 MCD_SingleNoEu_TDT[];
 | |
|  #ifdef MCD_INCLUDE_EU
 | |
| @@ -1983,7 +1964,7 @@ u32 MCD_ENetXmit_TDT[];
 | |
|  u32 MCD_modelTaskTableSrc[]=
 | |
|  {
 | |
|      (u32)MCD_ChainNoEu_TDT,
 | |
| -    (u32)&((u8*)MCD_ChainNoEu_TDT)[0x00000178],
 | |
| +    (u32)&((u8*)MCD_ChainNoEu_TDT)[0x0000016c],
 | |
|      0x00000000,
 | |
|      0x00000000,
 | |
|      0x00000000,
 | |
| @@ -2000,7 +1981,7 @@ u32 MCD_modelTaskTableSrc[]=
 | |
|      0x00000000,
 | |
|  #ifdef MCD_INCLUDE_EU
 | |
|      (u32)MCD_ChainEu_TDT,
 | |
| -    (u32)&((u8*)MCD_ChainEu_TDT)[0x00000180],
 | |
| +    (u32)&((u8*)MCD_ChainEu_TDT)[0x000001b4],
 | |
|      0x00000000,
 | |
|      0x00000000,
 | |
|      0x00000000,
 | |
| @@ -2008,7 +1989,7 @@ u32 MCD_modelTaskTableSrc[]=
 | |
|      0x00000000,
 | |
|      0x00000000,
 | |
|      (u32)MCD_SingleEu_TDT,
 | |
| -    (u32)&((u8*)MCD_SingleEu_TDT)[0x000000dc],
 | |
| +    (u32)&((u8*)MCD_SingleEu_TDT)[0x00000124],
 | |
|      0x00000000,
 | |
|      0x00000000,
 | |
|      0x00000000,
 | |
| @@ -2017,7 +1998,7 @@ u32 MCD_modelTaskTableSrc[]=
 | |
|      0x00000000,
 | |
|  #endif
 | |
|      (u32)MCD_ENetRcv_TDT,
 | |
| -    (u32)&((u8*)MCD_ENetRcv_TDT)[0x0000009C],
 | |
| +    (u32)&((u8*)MCD_ENetRcv_TDT)[0x000000a4],
 | |
|      0x00000000,
 | |
|      0x00000000,
 | |
|      0x00000000,
 | |
| @@ -2033,420 +2014,452 @@ u32 MCD_modelTaskTableSrc[]=
 | |
|      0x00000000,
 | |
|      0x00000000,
 | |
|  };
 | |
| -
 | |
|  u32 MCD_ChainNoEu_TDT[]=
 | |
|  {
 | |
|      0x80004000, /* 0000(:370):  LCDEXT: idx0 = 0x00000000; ; */
 | |
|      0x8118801b, /* 0004(:370):  LCD: idx1 = var2; idx1 once var0; idx1 += inc3 */
 | |
| -    0xb8ca0018, /* 0008(:371):    LCD: idx2 = *(idx1 + var20); idx2 once var0; idx2 += inc3 */
 | |
| -    0x10004b10, /* 000C(:372):      DRD1A: var18 = idx2; FN=0 MORE init=0 WS=0 RS=0 */
 | |
| -    0x7000000c, /* 0010(:373):      DRD2A: EU0=0 EU1=0 EU2=0 EU3=12 EXT MORE init=0 WS=0 RS=0 */
 | |
| -    0x024cf89f, /* 0014(:373):      DRD2B1: var9 = EU3(); EU3(idx2)  */
 | |
| -    0x60000009, /* 0018(:374):      DRD2A: EU0=0 EU1=0 EU2=0 EU3=9 EXT init=0 WS=0 RS=0 */
 | |
| +    0xb8c60018, /* 0008(:371):    LCD: idx2 = *(idx1 + var12); idx2 once var0; idx2 += inc3 */
 | |
| +    0x10002b10, /* 000C(:372):      DRD1A: var10 = idx2; FN=0 MORE init=0 WS=0 RS=0 */
 | |
| +    0x7000000d, /* 0010(:373):      DRD2A: EU0=0 EU1=0 EU2=0 EU3=13 EXT MORE init=0 WS=0 RS=0 */
 | |
| +    0x018cf89f, /* 0014(:373):      DRD2B1: var6 = EU3(); EU3(idx2)  */
 | |
| +    0x6000000a, /* 0018(:374):      DRD2A: EU0=0 EU1=0 EU2=0 EU3=10 EXT init=0 WS=0 RS=0 */
 | |
|      0x080cf89f, /* 001C(:374):      DRD2B1: idx0 = EU3(); EU3(idx2)  */
 | |
|      0x000001f8, /* 0020(:0):    NOP */
 | |
| -    0x98180524, /* 0024(:378):  LCD: idx0 = idx0; idx0 != var20; idx0 += inc4 */
 | |
| +    0x98180364, /* 0024(:378):  LCD: idx0 = idx0; idx0 == var13; idx0 += inc4 */
 | |
|      0x8118801b, /* 0028(:380):    LCD: idx1 = var2; idx1 once var0; idx1 += inc3 */
 | |
| -    0xf8ca001a, /* 002C(:381):      LCDEXT: idx2 = *(idx1 + var20 + 8); idx2 once var0; idx2 += inc3 */
 | |
| -    0xb8ca601b, /* 0030(:382):      LCD: idx3 = *(idx1 + var20 + 12); ; idx3 += inc3 */
 | |
| -    0x10004310, /* 0034(:384):        DRD1A: var16 = idx2; FN=0 MORE init=0 WS=0 RS=0 */
 | |
| -    0x00001718, /* 0038(:385):        DRD1A: var5 = idx3; FN=0 init=0 WS=0 RS=0 */
 | |
| -    0xb8ca001d, /* 003C(:387):      LCD: idx2 = *(idx1 + var20 + 20); idx2 once var0; idx2 += inc3 */
 | |
| -    0x10001f10, /* 0040(:388):        DRD1A: var7 = idx2; FN=0 MORE init=0 WS=0 RS=0 */
 | |
| +    0xf8c6001a, /* 002C(:381):      LCDEXT: idx2 = *(idx1 + var12 + 8); idx2 once var0; idx2 += inc3 */
 | |
| +    0xb8c6601b, /* 0030(:382):      LCD: idx3 = *(idx1 + var12 + 12); ; idx3 += inc3 */
 | |
| +    0x10002710, /* 0034(:384):        DRD1A: var9 = idx2; FN=0 MORE init=0 WS=0 RS=0 */
 | |
| +    0x00000f18, /* 0038(:385):        DRD1A: var3 = idx3; FN=0 init=0 WS=0 RS=0 */
 | |
| +    0xb8c6001d, /* 003C(:387):      LCD: idx2 = *(idx1 + var12 + 20); idx2 once var0; idx2 += inc3 */
 | |
| +    0x10001310, /* 0040(:388):        DRD1A: var4 = idx2; FN=0 MORE init=0 WS=0 RS=0 */
 | |
|      0x60000007, /* 0044(:389):        DRD2A: EU0=0 EU1=0 EU2=0 EU3=7 EXT init=0 WS=0 RS=0 */
 | |
| -    0x020cf893, /* 0048(:389):        DRD2B1: var8 = EU3(); EU3(idx2,var19)  */
 | |
| -    0x98ca001c, /* 004C(:391):      LCD: idx2 = idx1 + var20 + 4; idx2 once var0; idx2 += inc3 */
 | |
| +    0x014cf88b, /* 0048(:389):        DRD2B1: var5 = EU3(); EU3(idx2,var11)  */
 | |
| +    0x98c6001c, /* 004C(:391):      LCD: idx2 = idx1 + var12 + 4; idx2 once var0; idx2 += inc3 */
 | |
|      0x00000710, /* 0050(:392):        DRD1A: var1 = idx2; FN=0 init=0 WS=0 RS=0 */
 | |
| -    0x98ca8018, /* 0054(:393):      LCD: idx2 = idx1 + var21; idx2 once var0; idx2 += inc3 */
 | |
| -    0x10002b10, /* 0058(:394):        DRD1A: var10 = idx2; FN=0 MORE init=0 WS=0 RS=0 */
 | |
| -    0x0000c828, /* 005C(:395):        DRD1A: *idx2 = var5; FN=0 init=0 WS=0 RS=0 */
 | |
| +    0x98c70018, /* 0054(:393):      LCD: idx2 = idx1 + var14; idx2 once var0; idx2 += inc3 */
 | |
| +    0x10001f10, /* 0058(:394):        DRD1A: var7 = idx2; FN=0 MORE init=0 WS=0 RS=0 */
 | |
| +    0x0000c818, /* 005C(:395):        DRD1A: *idx2 = var3; FN=0 init=0 WS=0 RS=0 */
 | |
|      0x000001f8, /* 0060(:0):      NOP */
 | |
| -    0xc14ae018, /* 0064(:399):    LCDEXT: idx1 = var2 + var21; ; idx1 += inc3 */
 | |
| -    0xc004a51d, /* 0068(:399):    LCDEXT: idx2 = var0, idx3 = var9; idx3 == var20; idx2 += inc3, idx3 += inc5 */
 | |
| +    0xc1476018, /* 0064(:399):    LCDEXT: idx1 = var2 + var14; ; idx1 += inc3 */
 | |
| +    0xc003231d, /* 0068(:399):    LCDEXT: idx2 = var0, idx3 = var6; idx3 == var12; idx2 += inc3, idx3 += inc5 */
 | |
|      0x811a601b, /* 006C(:400):    LCD: idx4 = var2; ; idx4 += inc3 */
 | |
| -    0xc28a21c2, /* 0070(:403):      LCDEXT: idx5 = var5, idx6 = var20; idx6 < var7; idx5 += inc0, idx6 += inc2 */
 | |
| -    0x881be009, /* 0074(:403):      LCD: idx7 = var16; ; idx7 += inc1 */
 | |
| +    0xc1862102, /* 0070(:403):      LCDEXT: idx5 = var3, idx6 = var12; idx6 < var4; idx5 += inc0, idx6 += inc2 */
 | |
| +    0x849be009, /* 0074(:403):      LCD: idx7 = var9; ; idx7 += inc1 */
 | |
|      0x03fed7b8, /* 0078(:406):        DRD1A: *idx7; FN=0 init=31 WS=3 RS=3 */
 | |
|      0xda9b001b, /* 007C(:408):      LCDEXT: idx5 = idx5, idx6 = idx6; idx5 once var0; idx5 += inc3, idx6 += inc3 */
 | |
|      0x9b9be01b, /* 0080(:408):      LCD: idx7 = idx7; ; idx7 += inc3 */
 | |
|      0x1000cb20, /* 0084(:409):        DRD1A: *idx2 = idx4; FN=0 MORE init=0 WS=0 RS=0 */
 | |
|      0x70000006, /* 0088(:410):        DRD2A: EU0=0 EU1=0 EU2=0 EU3=6 EXT MORE init=0 WS=0 RS=0 */
 | |
| -    0x088cf896, /* 008C(:410):        DRD2B1: idx2 = EU3(); EU3(idx2,var22)  */
 | |
| +    0x088cf88f, /* 008C(:410):        DRD2B1: idx2 = EU3(); EU3(idx2,var15)  */
 | |
|      0x1000cb28, /* 0090(:411):        DRD1A: *idx2 = idx5; FN=0 MORE init=0 WS=0 RS=0 */
 | |
|      0x70000006, /* 0094(:412):        DRD2A: EU0=0 EU1=0 EU2=0 EU3=6 EXT MORE init=0 WS=0 RS=0 */
 | |
| -    0x088cf896, /* 0098(:412):        DRD2B1: idx2 = EU3(); EU3(idx2,var22)  */
 | |
| +    0x088cf88f, /* 0098(:412):        DRD2B1: idx2 = EU3(); EU3(idx2,var15)  */
 | |
|      0x1000cb30, /* 009C(:413):        DRD1A: *idx2 = idx6; FN=0 MORE init=0 WS=0 RS=0 */
 | |
|      0x70000006, /* 00A0(:414):        DRD2A: EU0=0 EU1=0 EU2=0 EU3=6 EXT MORE init=0 WS=0 RS=0 */
 | |
| -    0x088cf896, /* 00A4(:414):        DRD2B1: idx2 = EU3(); EU3(idx2,var22)  */
 | |
| +    0x088cf88f, /* 00A4(:414):        DRD2B1: idx2 = EU3(); EU3(idx2,var15)  */
 | |
|      0x1000cb38, /* 00A8(:415):        DRD1A: *idx2 = idx7; FN=0 MORE init=0 WS=0 RS=0 */
 | |
|      0x0000c728, /* 00AC(:416):        DRD1A: *idx1 = idx5; FN=0 init=0 WS=0 RS=0 */
 | |
|      0x000001f8, /* 00B0(:0):      NOP */
 | |
| -    0xc14ae018, /* 00B4(:420):    LCDEXT: idx1 = var2 + var21; ; idx1 += inc3 */
 | |
| -    0xc004a5dd, /* 00B8(:420):    LCDEXT: idx2 = var0, idx3 = var9; idx3 == var23; idx2 += inc3, idx3 += inc5 */
 | |
| +    0xc1476018, /* 00B4(:420):    LCDEXT: idx1 = var2 + var14; ; idx1 += inc3 */
 | |
| +    0xc003241d, /* 00B8(:420):    LCDEXT: idx2 = var0, idx3 = var6; idx3 == var16; idx2 += inc3, idx3 += inc5 */
 | |
|      0x811a601b, /* 00BC(:421):    LCD: idx4 = var2; ; idx4 += inc3 */
 | |
|      0xda9b001b, /* 00C0(:424):      LCDEXT: idx5 = idx5, idx6 = idx6; idx5 once var0; idx5 += inc3, idx6 += inc3 */
 | |
|      0x9b9be01b, /* 00C4(:424):      LCD: idx7 = idx7; ; idx7 += inc3 */
 | |
|      0x0000d3a0, /* 00C8(:425):        DRD1A: *idx4; FN=0 init=0 WS=0 RS=0 */
 | |
| -    0xc28a21c2, /* 00CC(:427):      LCDEXT: idx5 = var5, idx6 = var20; idx6 < var7; idx5 += inc0, idx6 += inc2 */
 | |
| -    0x881be009, /* 00D0(:427):      LCD: idx7 = var16; ; idx7 += inc1 */
 | |
| +    0xc1862102, /* 00CC(:427):      LCDEXT: idx5 = var3, idx6 = var12; idx6 < var4; idx5 += inc0, idx6 += inc2 */
 | |
| +    0x849be009, /* 00D0(:427):      LCD: idx7 = var9; ; idx7 += inc1 */
 | |
|      0x0bfed7b8, /* 00D4(:430):        DRD1A: *idx7; FN=0 TFD init=31 WS=3 RS=3 */
 | |
|      0xda9b001b, /* 00D8(:432):      LCDEXT: idx5 = idx5, idx6 = idx6; idx5 once var0; idx5 += inc3, idx6 += inc3 */
 | |
|      0x9b9be01b, /* 00DC(:432):      LCD: idx7 = idx7; ; idx7 += inc3 */
 | |
|      0x1000cb20, /* 00E0(:433):        DRD1A: *idx2 = idx4; FN=0 MORE init=0 WS=0 RS=0 */
 | |
|      0x70000006, /* 00E4(:434):        DRD2A: EU0=0 EU1=0 EU2=0 EU3=6 EXT MORE init=0 WS=0 RS=0 */
 | |
| -    0x088cf896, /* 00E8(:434):        DRD2B1: idx2 = EU3(); EU3(idx2,var22)  */
 | |
| +    0x088cf88f, /* 00E8(:434):        DRD2B1: idx2 = EU3(); EU3(idx2,var15)  */
 | |
|      0x1000cb28, /* 00EC(:435):        DRD1A: *idx2 = idx5; FN=0 MORE init=0 WS=0 RS=0 */
 | |
|      0x70000006, /* 00F0(:436):        DRD2A: EU0=0 EU1=0 EU2=0 EU3=6 EXT MORE init=0 WS=0 RS=0 */
 | |
| -    0x088cf896, /* 00F4(:436):        DRD2B1: idx2 = EU3(); EU3(idx2,var22)  */
 | |
| +    0x088cf88f, /* 00F4(:436):        DRD2B1: idx2 = EU3(); EU3(idx2,var15)  */
 | |
|      0x1000cb30, /* 00F8(:437):        DRD1A: *idx2 = idx6; FN=0 MORE init=0 WS=0 RS=0 */
 | |
|      0x70000006, /* 00FC(:438):        DRD2A: EU0=0 EU1=0 EU2=0 EU3=6 EXT MORE init=0 WS=0 RS=0 */
 | |
| -    0x088cf896, /* 0100(:438):        DRD2B1: idx2 = EU3(); EU3(idx2,var22)  */
 | |
| +    0x088cf88f, /* 0100(:438):        DRD2B1: idx2 = EU3(); EU3(idx2,var15)  */
 | |
|      0x1000cb38, /* 0104(:439):        DRD1A: *idx2 = idx7; FN=0 MORE init=0 WS=0 RS=0 */
 | |
|      0x0000c728, /* 0108(:440):        DRD1A: *idx1 = idx5; FN=0 init=0 WS=0 RS=0 */
 | |
|      0x000001f8, /* 010C(:0):      NOP */
 | |
|      0x8118801b, /* 0110(:444):    LCD: idx1 = var2; idx1 once var0; idx1 += inc3 */
 | |
| -    0x8a19001b, /* 0114(:446):      LCD: idx2 = var20; idx2 once var0; idx2 += inc3 */
 | |
| -    0x6000000e, /* 0118(:447):        DRD2A: EU0=0 EU1=0 EU2=0 EU3=14 EXT init=0 WS=0 RS=0 */
 | |
| -    0x088cf49f, /* 011C(:447):        DRD2B1: idx2 = EU3(); EU3(var18)  */
 | |
| -    0xd9190536, /* 0120(:448):      LCDEXT: idx2 = idx2; idx2 == var20; idx2 += inc6 */
 | |
| -    0x98ca0018, /* 0124(:448):      LCD: idx3 = idx1 + var20; idx3 once var0; idx3 += inc3 */
 | |
| -    0x6000000a, /* 0128(:450):        DRD2A: EU0=0 EU1=0 EU2=0 EU3=10 EXT init=0 WS=0 RS=0 */
 | |
| -    0x0cccfcdf, /* 012C(:450):        DRD2B1: *idx3 = EU3(); EU3(*idx3)  */
 | |
| -    0x000001f8, /* 0130(:0):      NOP */
 | |
| -    0xa14a001e, /* 0134(:453):    LCD: idx1 = *(var2 + var20 + 24); idx1 once var0; idx1 += inc3 */
 | |
| -    0x10000b08, /* 0138(:454):      DRD1A: var2 = idx1; FN=0 MORE init=0 WS=0 RS=0 */
 | |
| -    0x10002c90, /* 013C(:455):      DRD1A: var11 = var18; FN=0 MORE init=0 WS=0 RS=0 */
 | |
| -    0xb8ca0018, /* 0140(:456):      LCD: idx2 = *(idx1 + var20); idx2 once var0; idx2 += inc3 */
 | |
| -    0x10004b10, /* 0144(:457):        DRD1A: var18 = idx2; FN=0 MORE init=0 WS=0 RS=0 */
 | |
| -    0x70000009, /* 0148(:458):        DRD2A: EU0=0 EU1=0 EU2=0 EU3=9 EXT MORE init=0 WS=0 RS=0 */
 | |
| -    0x080cf89f, /* 014C(:458):        DRD2B1: idx0 = EU3(); EU3(idx2)  */
 | |
| -    0x6000000c, /* 0150(:459):        DRD2A: EU0=0 EU1=0 EU2=0 EU3=12 EXT init=0 WS=0 RS=0 */
 | |
| -    0x024cf89f, /* 0154(:459):        DRD2B1: var9 = EU3(); EU3(idx2)  */
 | |
| -    0x000001f8, /* 0158(:0):      NOP */
 | |
| -    0x8a18801b, /* 015C(:465):    LCD: idx1 = var20; idx1 once var0; idx1 += inc3 */
 | |
| -    0x7000000d, /* 0160(:466):      DRD2A: EU0=0 EU1=0 EU2=0 EU3=13 EXT MORE init=0 WS=0 RS=0 */
 | |
| -    0x084cf2df, /* 0164(:466):      DRD2B1: idx1 = EU3(); EU3(var11)  */
 | |
| -    0xd899053f, /* 0168(:467):      LCDEXT: idx2 = idx1; idx2 > var20; idx2 += inc7 */
 | |
| -    0x8019801b, /* 016C(:467):      LCD: idx3 = var0; idx3 once var0; idx3 += inc3 */
 | |
| -    0x040001f8, /* 0170(:468):        DRD1A: FN=0 INT init=0 WS=0 RS=0 */
 | |
| -    0x000001f8, /* 0174(:0):      NOP */
 | |
| -    0x000001f8, /* 0178(:0):    NOP */
 | |
| +    0xd8c60018, /* 0114(:446):      LCDEXT: idx2 = idx1 + var12; idx2 once var0; idx2 += inc3 */
 | |
| +    0x98c6601c, /* 0118(:446):      LCD: idx3 = idx1 + var12 + 4; ; idx3 += inc3 */
 | |
| +    0x6000000b, /* 011C(:447):        DRD2A: EU0=0 EU1=0 EU2=0 EU3=11 EXT init=0 WS=0 RS=0 */
 | |
| +    0x0c8cfc9f, /* 0120(:447):        DRD2B1: *idx2 = EU3(); EU3(*idx2)  */
 | |
| +    0x000001f8, /* 0124(:0):      NOP */
 | |
| +    0xa146001e, /* 0128(:450):    LCD: idx1 = *(var2 + var12 + 24); idx1 once var0; idx1 += inc3 */
 | |
| +    0x10000b08, /* 012C(:451):      DRD1A: var2 = idx1; FN=0 MORE init=0 WS=0 RS=0 */
 | |
| +    0x10002050, /* 0130(:452):      DRD1A: var8 = var10; FN=0 MORE init=0 WS=0 RS=0 */
 | |
| +    0xb8c60018, /* 0134(:453):      LCD: idx2 = *(idx1 + var12); idx2 once var0; idx2 += inc3 */
 | |
| +    0x10002b10, /* 0138(:454):        DRD1A: var10 = idx2; FN=0 MORE init=0 WS=0 RS=0 */
 | |
| +    0x7000000a, /* 013C(:455):        DRD2A: EU0=0 EU1=0 EU2=0 EU3=10 EXT MORE init=0 WS=0 RS=0 */
 | |
| +    0x080cf89f, /* 0140(:455):        DRD2B1: idx0 = EU3(); EU3(idx2)  */
 | |
| +    0x6000000d, /* 0144(:456):        DRD2A: EU0=0 EU1=0 EU2=0 EU3=13 EXT init=0 WS=0 RS=0 */
 | |
| +    0x018cf89f, /* 0148(:456):        DRD2B1: var6 = EU3(); EU3(idx2)  */
 | |
| +    0x000001f8, /* 014C(:0):      NOP */
 | |
| +    0x8618801b, /* 0150(:462):    LCD: idx1 = var12; idx1 once var0; idx1 += inc3 */
 | |
| +    0x7000000e, /* 0154(:463):      DRD2A: EU0=0 EU1=0 EU2=0 EU3=14 EXT MORE init=0 WS=0 RS=0 */
 | |
| +    0x084cf21f, /* 0158(:463):      DRD2B1: idx1 = EU3(); EU3(var8)  */
 | |
| +    0xd8990336, /* 015C(:464):      LCDEXT: idx2 = idx1; idx2 > var12; idx2 += inc6 */
 | |
| +    0x8019801b, /* 0160(:464):      LCD: idx3 = var0; idx3 once var0; idx3 += inc3 */
 | |
| +    0x040001f8, /* 0164(:465):        DRD1A: FN=0 INT init=0 WS=0 RS=0 */
 | |
| +    0x000001f8, /* 0168(:0):      NOP */
 | |
| +    0x000001f8, /* 016C(:0):    NOP */
 | |
|  };
 | |
|  u32 MCD_SingleNoEu_TDT[]=
 | |
|  {
 | |
| -    0x8318001b, /* 0000(:646):  LCD: idx0 = var6; idx0 once var0; idx0 += inc3 */
 | |
| -    0x7000000c, /* 0004(:647):    DRD2A: EU0=0 EU1=0 EU2=0 EU3=12 EXT MORE init=0 WS=0 RS=0 */
 | |
| -    0x080cf81f, /* 0008(:647):    DRD2B1: idx0 = EU3(); EU3(idx0)  */
 | |
| -    0x8318801b, /* 000C(:648):    LCD: idx1 = var6; idx1 once var0; idx1 += inc3 */
 | |
| -    0x6000000d, /* 0010(:649):      DRD2A: EU0=0 EU1=0 EU2=0 EU3=13 EXT init=0 WS=0 RS=0 */
 | |
| -    0x084cf85f, /* 0014(:649):      DRD2B1: idx1 = EU3(); EU3(idx1)  */
 | |
| +    0x8198001b, /* 0000(:657):  LCD: idx0 = var3; idx0 once var0; idx0 += inc3 */
 | |
| +    0x7000000d, /* 0004(:658):    DRD2A: EU0=0 EU1=0 EU2=0 EU3=13 EXT MORE init=0 WS=0 RS=0 */
 | |
| +    0x080cf81f, /* 0008(:658):    DRD2B1: idx0 = EU3(); EU3(idx0)  */
 | |
| +    0x8198801b, /* 000C(:659):    LCD: idx1 = var3; idx1 once var0; idx1 += inc3 */
 | |
| +    0x6000000e, /* 0010(:660):      DRD2A: EU0=0 EU1=0 EU2=0 EU3=14 EXT init=0 WS=0 RS=0 */
 | |
| +    0x084cf85f, /* 0014(:660):      DRD2B1: idx1 = EU3(); EU3(idx1)  */
 | |
|      0x000001f8, /* 0018(:0):    NOP */
 | |
| -    0x8498001b, /* 001C(:653):  LCD: idx0 = var9; idx0 once var0; idx0 += inc3 */
 | |
| -    0x7000000c, /* 0020(:654):    DRD2A: EU0=0 EU1=0 EU2=0 EU3=12 EXT MORE init=0 WS=0 RS=0 */
 | |
| -    0x020cf81f, /* 0024(:654):    DRD2B1: var8 = EU3(); EU3(idx0)  */
 | |
| -    0x6000000d, /* 0028(:655):    DRD2A: EU0=0 EU1=0 EU2=0 EU3=13 EXT init=0 WS=0 RS=0 */
 | |
| -    0x028cf81f, /* 002C(:655):    DRD2B1: var10 = EU3(); EU3(idx0)  */
 | |
| -    0xc404601b, /* 0030(:658):  LCDEXT: idx0 = var8, idx1 = var8; ; idx0 += inc3, idx1 += inc3 */
 | |
| -    0xc00423dc, /* 0034(:658):  LCDEXT: idx2 = var0, idx3 = var8; idx3 == var15; idx2 += inc3, idx3 += inc4 */
 | |
| -    0x809a601b, /* 0038(:659):  LCD: idx4 = var1; ; idx4 += inc3 */
 | |
| -    0xc207a182, /* 003C(:662):    LCDEXT: idx5 = var4, idx6 = var15; idx6 < var6; idx5 += inc0, idx6 += inc2 */
 | |
| -    0x869be009, /* 0040(:662):    LCD: idx7 = var13; ; idx7 += inc1 */
 | |
| -    0x03fed7b8, /* 0044(:665):      DRD1A: *idx7; FN=0 init=31 WS=3 RS=3 */
 | |
| -    0xda9b001b, /* 0048(:667):    LCDEXT: idx5 = idx5, idx6 = idx6; idx5 once var0; idx5 += inc3, idx6 += inc3 */
 | |
| -    0x9b9be01b, /* 004C(:667):    LCD: idx7 = idx7; ; idx7 += inc3 */
 | |
| -    0x70000006, /* 0050(:669):      DRD2A: EU0=0 EU1=0 EU2=0 EU3=6 EXT MORE init=0 WS=0 RS=0 */
 | |
| -    0x088cf890, /* 0054(:669):      DRD2B1: idx2 = EU3(); EU3(idx2,var16)  */
 | |
| -    0x1000cb28, /* 0058(:670):      DRD1A: *idx2 = idx5; FN=0 MORE init=0 WS=0 RS=0 */
 | |
| -    0x70000006, /* 005C(:671):      DRD2A: EU0=0 EU1=0 EU2=0 EU3=6 EXT MORE init=0 WS=0 RS=0 */
 | |
| -    0x088cf890, /* 0060(:671):      DRD2B1: idx2 = EU3(); EU3(idx2,var16)  */
 | |
| -    0x1000cb30, /* 0064(:672):      DRD1A: *idx2 = idx6; FN=0 MORE init=0 WS=0 RS=0 */
 | |
| -    0x70000006, /* 0068(:673):      DRD2A: EU0=0 EU1=0 EU2=0 EU3=6 EXT MORE init=0 WS=0 RS=0 */
 | |
| -    0x088cf890, /* 006C(:673):      DRD2B1: idx2 = EU3(); EU3(idx2,var16)  */
 | |
| -    0x0000cb38, /* 0070(:674):      DRD1A: *idx2 = idx7; FN=0 init=0 WS=0 RS=0 */
 | |
| +    0x8298001b, /* 001C(:664):  LCD: idx0 = var5; idx0 once var0; idx0 += inc3 */
 | |
| +    0x7000000d, /* 0020(:665):    DRD2A: EU0=0 EU1=0 EU2=0 EU3=13 EXT MORE init=0 WS=0 RS=0 */
 | |
| +    0x010cf81f, /* 0024(:665):    DRD2B1: var4 = EU3(); EU3(idx0)  */
 | |
| +    0x6000000e, /* 0028(:666):    DRD2A: EU0=0 EU1=0 EU2=0 EU3=14 EXT init=0 WS=0 RS=0 */
 | |
| +    0x018cf81f, /* 002C(:666):    DRD2B1: var6 = EU3(); EU3(idx0)  */
 | |
| +    0xc202601b, /* 0030(:669):  LCDEXT: idx0 = var4, idx1 = var4; ; idx0 += inc3, idx1 += inc3 */
 | |
| +    0xc002221c, /* 0034(:669):  LCDEXT: idx2 = var0, idx3 = var4; idx3 == var8; idx2 += inc3, idx3 += inc4 */
 | |
| +    0x809a601b, /* 0038(:670):  LCD: idx4 = var1; ; idx4 += inc3 */
 | |
| +    0xc10420c2, /* 003C(:673):    LCDEXT: idx5 = var2, idx6 = var8; idx6 < var3; idx5 += inc0, idx6 += inc2 */
 | |
| +    0x839be009, /* 0040(:673):    LCD: idx7 = var7; ; idx7 += inc1 */
 | |
| +    0x03fed7b8, /* 0044(:676):      DRD1A: *idx7; FN=0 init=31 WS=3 RS=3 */
 | |
| +    0xda9b001b, /* 0048(:678):    LCDEXT: idx5 = idx5, idx6 = idx6; idx5 once var0; idx5 += inc3, idx6 += inc3 */
 | |
| +    0x9b9be01b, /* 004C(:678):    LCD: idx7 = idx7; ; idx7 += inc3 */
 | |
| +    0x70000006, /* 0050(:680):      DRD2A: EU0=0 EU1=0 EU2=0 EU3=6 EXT MORE init=0 WS=0 RS=0 */
 | |
| +    0x088cf889, /* 0054(:680):      DRD2B1: idx2 = EU3(); EU3(idx2,var9)  */
 | |
| +    0x1000cb28, /* 0058(:681):      DRD1A: *idx2 = idx5; FN=0 MORE init=0 WS=0 RS=0 */
 | |
| +    0x70000006, /* 005C(:682):      DRD2A: EU0=0 EU1=0 EU2=0 EU3=6 EXT MORE init=0 WS=0 RS=0 */
 | |
| +    0x088cf889, /* 0060(:682):      DRD2B1: idx2 = EU3(); EU3(idx2,var9)  */
 | |
| +    0x1000cb30, /* 0064(:683):      DRD1A: *idx2 = idx6; FN=0 MORE init=0 WS=0 RS=0 */
 | |
| +    0x70000006, /* 0068(:684):      DRD2A: EU0=0 EU1=0 EU2=0 EU3=6 EXT MORE init=0 WS=0 RS=0 */
 | |
| +    0x088cf889, /* 006C(:684):      DRD2B1: idx2 = EU3(); EU3(idx2,var9)  */
 | |
| +    0x0000cb38, /* 0070(:685):      DRD1A: *idx2 = idx7; FN=0 init=0 WS=0 RS=0 */
 | |
|      0x000001f8, /* 0074(:0):    NOP */
 | |
| -    0xc404601b, /* 0078(:678):  LCDEXT: idx0 = var8, idx1 = var8; ; idx0 += inc3, idx1 += inc3 */
 | |
| -    0xc004245c, /* 007C(:678):  LCDEXT: idx2 = var0, idx3 = var8; idx3 == var17; idx2 += inc3, idx3 += inc4 */
 | |
| -    0x809a601b, /* 0080(:679):  LCD: idx4 = var1; ; idx4 += inc3 */
 | |
| -    0xda9b001b, /* 0084(:682):    LCDEXT: idx5 = idx5, idx6 = idx6; idx5 once var0; idx5 += inc3, idx6 += inc3 */
 | |
| -    0x9b9be01b, /* 0088(:682):    LCD: idx7 = idx7; ; idx7 += inc3 */
 | |
| -    0x0000d3a0, /* 008C(:683):      DRD1A: *idx4; FN=0 init=0 WS=0 RS=0 */
 | |
| -    0xc207a182, /* 0090(:685):    LCDEXT: idx5 = var4, idx6 = var15; idx6 < var6; idx5 += inc0, idx6 += inc2 */
 | |
| -    0x869be009, /* 0094(:685):    LCD: idx7 = var13; ; idx7 += inc1 */
 | |
| -    0x0bfed7b8, /* 0098(:688):      DRD1A: *idx7; FN=0 TFD init=31 WS=3 RS=3 */
 | |
| -    0xda9b001b, /* 009C(:690):    LCDEXT: idx5 = idx5, idx6 = idx6; idx5 once var0; idx5 += inc3, idx6 += inc3 */
 | |
| -    0x9b9be01b, /* 00A0(:690):    LCD: idx7 = idx7; ; idx7 += inc3 */
 | |
| -    0x70000006, /* 00A4(:692):      DRD2A: EU0=0 EU1=0 EU2=0 EU3=6 EXT MORE init=0 WS=0 RS=0 */
 | |
| -    0x088cf890, /* 00A8(:692):      DRD2B1: idx2 = EU3(); EU3(idx2,var16)  */
 | |
| -    0x1000cb28, /* 00AC(:693):      DRD1A: *idx2 = idx5; FN=0 MORE init=0 WS=0 RS=0 */
 | |
| -    0x70000006, /* 00B0(:694):      DRD2A: EU0=0 EU1=0 EU2=0 EU3=6 EXT MORE init=0 WS=0 RS=0 */
 | |
| -    0x088cf890, /* 00B4(:694):      DRD2B1: idx2 = EU3(); EU3(idx2,var16)  */
 | |
| -    0x1000cb30, /* 00B8(:695):      DRD1A: *idx2 = idx6; FN=0 MORE init=0 WS=0 RS=0 */
 | |
| -    0x70000006, /* 00BC(:696):      DRD2A: EU0=0 EU1=0 EU2=0 EU3=6 EXT MORE init=0 WS=0 RS=0 */
 | |
| -    0x088cf890, /* 00C0(:696):      DRD2B1: idx2 = EU3(); EU3(idx2,var16)  */
 | |
| -    0x0000cb38, /* 00C4(:697):      DRD1A: *idx2 = idx7; FN=0 init=0 WS=0 RS=0 */
 | |
| +    0xc202601b, /* 0078(:689):  LCDEXT: idx0 = var4, idx1 = var4; ; idx0 += inc3, idx1 += inc3 */
 | |
| +    0xc002229c, /* 007C(:689):  LCDEXT: idx2 = var0, idx3 = var4; idx3 == var10; idx2 += inc3, idx3 += inc4 */
 | |
| +    0x809a601b, /* 0080(:690):  LCD: idx4 = var1; ; idx4 += inc3 */
 | |
| +    0xda9b001b, /* 0084(:693):    LCDEXT: idx5 = idx5, idx6 = idx6; idx5 once var0; idx5 += inc3, idx6 += inc3 */
 | |
| +    0x9b9be01b, /* 0088(:693):    LCD: idx7 = idx7; ; idx7 += inc3 */
 | |
| +    0x0000d3a0, /* 008C(:694):      DRD1A: *idx4; FN=0 init=0 WS=0 RS=0 */
 | |
| +    0xc10420c2, /* 0090(:696):    LCDEXT: idx5 = var2, idx6 = var8; idx6 < var3; idx5 += inc0, idx6 += inc2 */
 | |
| +    0x839be009, /* 0094(:696):    LCD: idx7 = var7; ; idx7 += inc1 */
 | |
| +    0x0bfed7b8, /* 0098(:699):      DRD1A: *idx7; FN=0 TFD init=31 WS=3 RS=3 */
 | |
| +    0xda9b001b, /* 009C(:701):    LCDEXT: idx5 = idx5, idx6 = idx6; idx5 once var0; idx5 += inc3, idx6 += inc3 */
 | |
| +    0x9b9be01b, /* 00A0(:701):    LCD: idx7 = idx7; ; idx7 += inc3 */
 | |
| +    0x70000006, /* 00A4(:703):      DRD2A: EU0=0 EU1=0 EU2=0 EU3=6 EXT MORE init=0 WS=0 RS=0 */
 | |
| +    0x088cf889, /* 00A8(:703):      DRD2B1: idx2 = EU3(); EU3(idx2,var9)  */
 | |
| +    0x1000cb28, /* 00AC(:704):      DRD1A: *idx2 = idx5; FN=0 MORE init=0 WS=0 RS=0 */
 | |
| +    0x70000006, /* 00B0(:705):      DRD2A: EU0=0 EU1=0 EU2=0 EU3=6 EXT MORE init=0 WS=0 RS=0 */
 | |
| +    0x088cf889, /* 00B4(:705):      DRD2B1: idx2 = EU3(); EU3(idx2,var9)  */
 | |
| +    0x1000cb30, /* 00B8(:706):      DRD1A: *idx2 = idx6; FN=0 MORE init=0 WS=0 RS=0 */
 | |
| +    0x70000006, /* 00BC(:707):      DRD2A: EU0=0 EU1=0 EU2=0 EU3=6 EXT MORE init=0 WS=0 RS=0 */
 | |
| +    0x088cf889, /* 00C0(:707):      DRD2B1: idx2 = EU3(); EU3(idx2,var9)  */
 | |
| +    0x0000cb38, /* 00C4(:708):      DRD1A: *idx2 = idx7; FN=0 init=0 WS=0 RS=0 */
 | |
|      0x000001f8, /* 00C8(:0):    NOP */
 | |
| -    0xc51803ed, /* 00CC(:701):  LCDEXT: idx0 = var10; idx0 > var15; idx0 += inc5 */
 | |
| -    0x8018801b, /* 00D0(:701):  LCD: idx1 = var0; idx1 once var0; idx1 += inc3 */
 | |
| -    0x040001f8, /* 00D4(:702):    DRD1A: FN=0 INT init=0 WS=0 RS=0 */
 | |
| +    0xc318022d, /* 00CC(:712):  LCDEXT: idx0 = var6; idx0 > var8; idx0 += inc5 */
 | |
| +    0x8018801b, /* 00D0(:712):  LCD: idx1 = var0; idx1 once var0; idx1 += inc3 */
 | |
| +    0x040001f8, /* 00D4(:713):    DRD1A: FN=0 INT init=0 WS=0 RS=0 */
 | |
|  };
 | |
|  #ifdef MCD_INCLUDE_EU
 | |
|  u32 MCD_ChainEu_TDT[]=
 | |
|  {
 | |
| -    0x80004000, /* 0000(:928):  LCDEXT: idx0 = 0x00000000; ; */
 | |
| -    0x8118801b, /* 0004(:928):  LCD: idx1 = var2; idx1 once var0; idx1 += inc3 */
 | |
| -    0xb8ca0018, /* 0008(:929):    LCD: idx2 = *(idx1 + var20); idx2 once var0; idx2 += inc3 */
 | |
| -    0x10004b10, /* 000C(:930):      DRD1A: var18 = idx2; FN=0 MORE init=0 WS=0 RS=0 */
 | |
| -    0x7000000c, /* 0010(:931):      DRD2A: EU0=0 EU1=0 EU2=0 EU3=12 EXT MORE init=0 WS=0 RS=0 */
 | |
| -    0x024cf89f, /* 0014(:931):      DRD2B1: var9 = EU3(); EU3(idx2)  */
 | |
| -    0x60000009, /* 0018(:932):      DRD2A: EU0=0 EU1=0 EU2=0 EU3=9 EXT init=0 WS=0 RS=0 */
 | |
| -    0x080cf89f, /* 001C(:932):      DRD2B1: idx0 = EU3(); EU3(idx2)  */
 | |
| +    0x80004000, /* 0000(:947):  LCDEXT: idx0 = 0x00000000; ; */
 | |
| +    0x8198801b, /* 0004(:947):  LCD: idx1 = var3; idx1 once var0; idx1 += inc3 */
 | |
| +    0xb8c68018, /* 0008(:948):    LCD: idx2 = *(idx1 + var13); idx2 once var0; idx2 += inc3 */
 | |
| +    0x10002f10, /* 000C(:949):      DRD1A: var11 = idx2; FN=0 MORE init=0 WS=0 RS=0 */
 | |
| +    0x7000000d, /* 0010(:950):      DRD2A: EU0=0 EU1=0 EU2=0 EU3=13 EXT MORE init=0 WS=0 RS=0 */
 | |
| +    0x01ccf89f, /* 0014(:950):      DRD2B1: var7 = EU3(); EU3(idx2)  */
 | |
| +    0x6000000a, /* 0018(:951):      DRD2A: EU0=0 EU1=0 EU2=0 EU3=10 EXT init=0 WS=0 RS=0 */
 | |
| +    0x080cf89f, /* 001C(:951):      DRD2B1: idx0 = EU3(); EU3(idx2)  */
 | |
|      0x000001f8, /* 0020(:0):    NOP */
 | |
| -    0x98180524, /* 0024(:936):  LCD: idx0 = idx0; idx0 != var20; idx0 += inc4 */
 | |
| -    0x8118801b, /* 0028(:938):    LCD: idx1 = var2; idx1 once var0; idx1 += inc3 */
 | |
| -    0xf8ca001a, /* 002C(:939):      LCDEXT: idx2 = *(idx1 + var20 + 8); idx2 once var0; idx2 += inc3 */
 | |
| -    0xb8ca601b, /* 0030(:940):      LCD: idx3 = *(idx1 + var20 + 12); ; idx3 += inc3 */
 | |
| -    0x10004310, /* 0034(:942):        DRD1A: var16 = idx2; FN=0 MORE init=0 WS=0 RS=0 */
 | |
| -    0x00001718, /* 0038(:943):        DRD1A: var5 = idx3; FN=0 init=0 WS=0 RS=0 */
 | |
| -    0xb8ca001d, /* 003C(:945):      LCD: idx2 = *(idx1 + var20 + 20); idx2 once var0; idx2 += inc3 */
 | |
| -    0x10001f10, /* 0040(:946):        DRD1A: var7 = idx2; FN=0 MORE init=0 WS=0 RS=0 */
 | |
| -    0x60000007, /* 0044(:947):        DRD2A: EU0=0 EU1=0 EU2=0 EU3=7 EXT init=0 WS=0 RS=0 */
 | |
| -    0x020cf893, /* 0048(:947):        DRD2B1: var8 = EU3(); EU3(idx2,var19)  */
 | |
| -    0x98ca001c, /* 004C(:949):      LCD: idx2 = idx1 + var20 + 4; idx2 once var0; idx2 += inc3 */
 | |
| -    0x00000710, /* 0050(:950):        DRD1A: var1 = idx2; FN=0 init=0 WS=0 RS=0 */
 | |
| -    0x98ca8018, /* 0054(:951):      LCD: idx2 = idx1 + var21; idx2 once var0; idx2 += inc3 */
 | |
| -    0x10002b10, /* 0058(:952):        DRD1A: var10 = idx2; FN=0 MORE init=0 WS=0 RS=0 */
 | |
| -    0x0000c828, /* 005C(:953):        DRD1A: *idx2 = var5; FN=0 init=0 WS=0 RS=0 */
 | |
| +    0x981803a4, /* 0024(:955):  LCD: idx0 = idx0; idx0 == var14; idx0 += inc4 */
 | |
| +    0x8198801b, /* 0028(:957):    LCD: idx1 = var3; idx1 once var0; idx1 += inc3 */
 | |
| +    0xf8c6801a, /* 002C(:958):      LCDEXT: idx2 = *(idx1 + var13 + 8); idx2 once var0; idx2 += inc3 */
 | |
| +    0xb8c6e01b, /* 0030(:959):      LCD: idx3 = *(idx1 + var13 + 12); ; idx3 += inc3 */
 | |
| +    0x10002b10, /* 0034(:961):        DRD1A: var10 = idx2; FN=0 MORE init=0 WS=0 RS=0 */
 | |
| +    0x00001318, /* 0038(:962):        DRD1A: var4 = idx3; FN=0 init=0 WS=0 RS=0 */
 | |
| +    0xb8c6801d, /* 003C(:964):      LCD: idx2 = *(idx1 + var13 + 20); idx2 once var0; idx2 += inc3 */
 | |
| +    0x10001710, /* 0040(:965):        DRD1A: var5 = idx2; FN=0 MORE init=0 WS=0 RS=0 */
 | |
| +    0x60000007, /* 0044(:966):        DRD2A: EU0=0 EU1=0 EU2=0 EU3=7 EXT init=0 WS=0 RS=0 */
 | |
| +    0x018cf88c, /* 0048(:966):        DRD2B1: var6 = EU3(); EU3(idx2,var12)  */
 | |
| +    0x98c6801c, /* 004C(:968):      LCD: idx2 = idx1 + var13 + 4; idx2 once var0; idx2 += inc3 */
 | |
| +    0x00000b10, /* 0050(:969):        DRD1A: var2 = idx2; FN=0 init=0 WS=0 RS=0 */
 | |
| +    0x98c78018, /* 0054(:970):      LCD: idx2 = idx1 + var15; idx2 once var0; idx2 += inc3 */
 | |
| +    0x10002310, /* 0058(:971):        DRD1A: var8 = idx2; FN=0 MORE init=0 WS=0 RS=0 */
 | |
| +    0x0000c820, /* 005C(:972):        DRD1A: *idx2 = var4; FN=0 init=0 WS=0 RS=0 */
 | |
|      0x000001f8, /* 0060(:0):      NOP */
 | |
| -    0xc14ae018, /* 0064(:957):    LCDEXT: idx1 = var2 + var21; ; idx1 += inc3 */
 | |
| -    0xc004a51d, /* 0068(:957):    LCDEXT: idx2 = var0, idx3 = var9; idx3 == var20; idx2 += inc3, idx3 += inc5 */
 | |
| -    0x811a601b, /* 006C(:958):    LCD: idx4 = var2; ; idx4 += inc3 */
 | |
| -    0xc28a21c2, /* 0070(:961):      LCDEXT: idx5 = var5, idx6 = var20; idx6 < var7; idx5 += inc0, idx6 += inc2 */
 | |
| -    0x881be009, /* 0074(:961):      LCD: idx7 = var16; ; idx7 += inc1 */
 | |
| -    0x63fe0000, /* 0078(:964):        DRD2A: EU0=0 EU1=0 EU2=0 EU3=0 EXT init=31 WS=3 RS=3 */
 | |
| -    0x0d4cfddf, /* 007C(:964):        DRD2B1: *idx5 = EU3(); EU3(*idx7)  */
 | |
| -    0xda9b001b, /* 0080(:966):      LCDEXT: idx5 = idx5, idx6 = idx6; idx5 once var0; idx5 += inc3, idx6 += inc3 */
 | |
| -    0x9b9be01b, /* 0084(:966):      LCD: idx7 = idx7; ; idx7 += inc3 */
 | |
| -    0x1000cb20, /* 0088(:967):        DRD1A: *idx2 = idx4; FN=0 MORE init=0 WS=0 RS=0 */
 | |
| -    0x70000006, /* 008C(:968):        DRD2A: EU0=0 EU1=0 EU2=0 EU3=6 EXT MORE init=0 WS=0 RS=0 */
 | |
| -    0x088cf896, /* 0090(:968):        DRD2B1: idx2 = EU3(); EU3(idx2,var22)  */
 | |
| -    0x1000cb28, /* 0094(:969):        DRD1A: *idx2 = idx5; FN=0 MORE init=0 WS=0 RS=0 */
 | |
| -    0x70000006, /* 0098(:970):        DRD2A: EU0=0 EU1=0 EU2=0 EU3=6 EXT MORE init=0 WS=0 RS=0 */
 | |
| -    0x088cf896, /* 009C(:970):        DRD2B1: idx2 = EU3(); EU3(idx2,var22)  */
 | |
| -    0x1000cb30, /* 00A0(:971):        DRD1A: *idx2 = idx6; FN=0 MORE init=0 WS=0 RS=0 */
 | |
| -    0x70000006, /* 00A4(:972):        DRD2A: EU0=0 EU1=0 EU2=0 EU3=6 EXT MORE init=0 WS=0 RS=0 */
 | |
| -    0x088cf896, /* 00A8(:972):        DRD2B1: idx2 = EU3(); EU3(idx2,var22)  */
 | |
| -    0x1000cb38, /* 00AC(:973):        DRD1A: *idx2 = idx7; FN=0 MORE init=0 WS=0 RS=0 */
 | |
| -    0x0000c728, /* 00B0(:974):        DRD1A: *idx1 = idx5; FN=0 init=0 WS=0 RS=0 */
 | |
| -    0x000001f8, /* 00B4(:0):      NOP */
 | |
| -    0xc14ae018, /* 00B8(:978):    LCDEXT: idx1 = var2 + var21; ; idx1 += inc3 */
 | |
| -    0xc004a5dd, /* 00BC(:978):    LCDEXT: idx2 = var0, idx3 = var9; idx3 == var23; idx2 += inc3, idx3 += inc5 */
 | |
| -    0x811a601b, /* 00C0(:979):    LCD: idx4 = var2; ; idx4 += inc3 */
 | |
| -    0xda9b001b, /* 00C4(:982):      LCDEXT: idx5 = idx5, idx6 = idx6; idx5 once var0; idx5 += inc3, idx6 += inc3 */
 | |
| -    0x9b9be01b, /* 00C8(:982):      LCD: idx7 = idx7; ; idx7 += inc3 */
 | |
| -    0x0000d3a0, /* 00CC(:983):        DRD1A: *idx4; FN=0 init=0 WS=0 RS=0 */
 | |
| -    0xc28a21c2, /* 00D0(:985):      LCDEXT: idx5 = var5, idx6 = var20; idx6 < var7; idx5 += inc0, idx6 += inc2 */
 | |
| -    0x881be009, /* 00D4(:985):      LCD: idx7 = var16; ; idx7 += inc1 */
 | |
| -    0x6bfe0000, /* 00D8(:988):        DRD2A: EU0=0 EU1=0 EU2=0 EU3=0 TFD EXT init=31 WS=3 RS=3 */
 | |
| -    0x0d4cfddf, /* 00DC(:988):        DRD2B1: *idx5 = EU3(); EU3(*idx7)  */
 | |
| -    0xda9b001b, /* 00E0(:990):      LCDEXT: idx5 = idx5, idx6 = idx6; idx5 once var0; idx5 += inc3, idx6 += inc3 */
 | |
| -    0x9b9be01b, /* 00E4(:990):      LCD: idx7 = idx7; ; idx7 += inc3 */
 | |
| -    0x1000cb20, /* 00E8(:991):        DRD1A: *idx2 = idx4; FN=0 MORE init=0 WS=0 RS=0 */
 | |
| -    0x70000006, /* 00EC(:992):        DRD2A: EU0=0 EU1=0 EU2=0 EU3=6 EXT MORE init=0 WS=0 RS=0 */
 | |
| -    0x088cf896, /* 00F0(:992):        DRD2B1: idx2 = EU3(); EU3(idx2,var22)  */
 | |
| -    0x1000cb28, /* 00F4(:993):        DRD1A: *idx2 = idx5; FN=0 MORE init=0 WS=0 RS=0 */
 | |
| -    0x70000006, /* 00F8(:994):        DRD2A: EU0=0 EU1=0 EU2=0 EU3=6 EXT MORE init=0 WS=0 RS=0 */
 | |
| -    0x088cf896, /* 00FC(:994):        DRD2B1: idx2 = EU3(); EU3(idx2,var22)  */
 | |
| -    0x1000cb30, /* 0100(:995):        DRD1A: *idx2 = idx6; FN=0 MORE init=0 WS=0 RS=0 */
 | |
| -    0x70000006, /* 0104(:996):        DRD2A: EU0=0 EU1=0 EU2=0 EU3=6 EXT MORE init=0 WS=0 RS=0 */
 | |
| -    0x088cf896, /* 0108(:996):        DRD2B1: idx2 = EU3(); EU3(idx2,var22)  */
 | |
| -    0x1000cb38, /* 010C(:997):        DRD1A: *idx2 = idx7; FN=0 MORE init=0 WS=0 RS=0 */
 | |
| -    0x0000c728, /* 0110(:998):        DRD1A: *idx1 = idx5; FN=0 init=0 WS=0 RS=0 */
 | |
| -    0x000001f8, /* 0114(:0):      NOP */
 | |
| -    0x8118801b, /* 0118(:1002):    LCD: idx1 = var2; idx1 once var0; idx1 += inc3 */
 | |
| -    0x8a19001b, /* 011C(:1004):      LCD: idx2 = var20; idx2 once var0; idx2 += inc3 */
 | |
| -    0x6000000e, /* 0120(:1005):        DRD2A: EU0=0 EU1=0 EU2=0 EU3=14 EXT init=0 WS=0 RS=0 */
 | |
| -    0x088cf49f, /* 0124(:1005):        DRD2B1: idx2 = EU3(); EU3(var18)  */
 | |
| -    0xd9190536, /* 0128(:1006):      LCDEXT: idx2 = idx2; idx2 == var20; idx2 += inc6 */
 | |
| -    0x98ca0018, /* 012C(:1006):      LCD: idx3 = idx1 + var20; idx3 once var0; idx3 += inc3 */
 | |
| -    0x6000000a, /* 0130(:1008):        DRD2A: EU0=0 EU1=0 EU2=0 EU3=10 EXT init=0 WS=0 RS=0 */
 | |
| -    0x0cccfcdf, /* 0134(:1008):        DRD2B1: *idx3 = EU3(); EU3(*idx3)  */
 | |
| -    0x000001f8, /* 0138(:0):      NOP */
 | |
| -    0xa14a001e, /* 013C(:1011):    LCD: idx1 = *(var2 + var20 + 24); idx1 once var0; idx1 += inc3 */
 | |
| -    0x10000b08, /* 0140(:1012):      DRD1A: var2 = idx1; FN=0 MORE init=0 WS=0 RS=0 */
 | |
| -    0x10002c90, /* 0144(:1013):      DRD1A: var11 = var18; FN=0 MORE init=0 WS=0 RS=0 */
 | |
| -    0xb8ca0018, /* 0148(:1014):      LCD: idx2 = *(idx1 + var20); idx2 once var0; idx2 += inc3 */
 | |
| -    0x10004b10, /* 014C(:1015):        DRD1A: var18 = idx2; FN=0 MORE init=0 WS=0 RS=0 */
 | |
| -    0x70000009, /* 0150(:1016):        DRD2A: EU0=0 EU1=0 EU2=0 EU3=9 EXT MORE init=0 WS=0 RS=0 */
 | |
| -    0x080cf89f, /* 0154(:1016):        DRD2B1: idx0 = EU3(); EU3(idx2)  */
 | |
| -    0x6000000c, /* 0158(:1017):        DRD2A: EU0=0 EU1=0 EU2=0 EU3=12 EXT init=0 WS=0 RS=0 */
 | |
| -    0x024cf89f, /* 015C(:1017):        DRD2B1: var9 = EU3(); EU3(idx2)  */
 | |
| -    0x000001f8, /* 0160(:0):      NOP */
 | |
| -    0x8a18801b, /* 0164(:1023):    LCD: idx1 = var20; idx1 once var0; idx1 += inc3 */
 | |
| -    0x7000000d, /* 0168(:1024):      DRD2A: EU0=0 EU1=0 EU2=0 EU3=13 EXT MORE init=0 WS=0 RS=0 */
 | |
| -    0x084cf2df, /* 016C(:1024):      DRD2B1: idx1 = EU3(); EU3(var11)  */
 | |
| -    0xd899053f, /* 0170(:1025):      LCDEXT: idx2 = idx1; idx2 > var20; idx2 += inc7 */
 | |
| -    0x8019801b, /* 0174(:1025):      LCD: idx3 = var0; idx3 once var0; idx3 += inc3 */
 | |
| -    0x040001f8, /* 0178(:1026):        DRD1A: FN=0 INT init=0 WS=0 RS=0 */
 | |
| -    0x000001f8, /* 017C(:0):      NOP */
 | |
| -    0x000001f8, /* 0180(:0):    NOP */
 | |
| +    0x8698801b, /* 0064(:976):    LCD: idx1 = var13; idx1 once var0; idx1 += inc3 */
 | |
| +    0x7000000f, /* 0068(:977):      DRD2A: EU0=0 EU1=0 EU2=0 EU3=15 EXT MORE init=0 WS=0 RS=0 */
 | |
| +    0x084cf2df, /* 006C(:977):      DRD2B1: idx1 = EU3(); EU3(var11)  */
 | |
| +    0xd899042d, /* 0070(:978):      LCDEXT: idx2 = idx1; idx2 >= var16; idx2 += inc5 */
 | |
| +    0x8019801b, /* 0074(:978):      LCD: idx3 = var0; idx3 once var0; idx3 += inc3 */
 | |
| +    0x60000003, /* 0078(:979):        DRD2A: EU0=0 EU1=0 EU2=0 EU3=3 EXT init=0 WS=0 RS=0 */
 | |
| +    0x2cd7c7df, /* 007C(:979):        DRD2B2: EU3(var13)  */
 | |
| +    0xd8990364, /* 0080(:980):      LCDEXT: idx2 = idx1; idx2 == var13; idx2 += inc4 */
 | |
| +    0x8019801b, /* 0084(:980):      LCD: idx3 = var0; idx3 once var0; idx3 += inc3 */
 | |
| +    0x60000003, /* 0088(:981):        DRD2A: EU0=0 EU1=0 EU2=0 EU3=3 EXT init=0 WS=0 RS=0 */
 | |
| +    0x2c17c7df, /* 008C(:981):        DRD2B2: EU3(var1)  */
 | |
| +    0x000001f8, /* 0090(:0):      NOP */
 | |
| +    0xc1c7e018, /* 0094(:984):    LCDEXT: idx1 = var3 + var15; ; idx1 += inc3 */
 | |
| +    0xc003a35e, /* 0098(:984):    LCDEXT: idx2 = var0, idx3 = var7; idx3 == var13; idx2 += inc3, idx3 += inc6 */
 | |
| +    0x819a601b, /* 009C(:985):    LCD: idx4 = var3; ; idx4 += inc3 */
 | |
| +    0xc206a142, /* 00A0(:988):      LCDEXT: idx5 = var4, idx6 = var13; idx6 < var5; idx5 += inc0, idx6 += inc2 */
 | |
| +    0x851be009, /* 00A4(:988):      LCD: idx7 = var10; ; idx7 += inc1 */
 | |
| +    0x63fe0000, /* 00A8(:991):        DRD2A: EU0=0 EU1=0 EU2=0 EU3=0 EXT init=31 WS=3 RS=3 */
 | |
| +    0x0d4cfddf, /* 00AC(:991):        DRD2B1: *idx5 = EU3(); EU3(*idx7)  */
 | |
| +    0xda9b001b, /* 00B0(:993):      LCDEXT: idx5 = idx5, idx6 = idx6; idx5 once var0; idx5 += inc3, idx6 += inc3 */
 | |
| +    0x9b9be01b, /* 00B4(:993):      LCD: idx7 = idx7; ; idx7 += inc3 */
 | |
| +    0x70000002, /* 00B8(:994):        DRD2A: EU0=0 EU1=0 EU2=0 EU3=2 EXT MORE init=0 WS=0 RS=0 */
 | |
| +    0x004cf81f, /* 00BC(:994):        DRD2B1: var1 = EU3(); EU3(idx0)  */
 | |
| +    0x1000cb20, /* 00C0(:995):        DRD1A: *idx2 = idx4; FN=0 MORE init=0 WS=0 RS=0 */
 | |
| +    0x70000006, /* 00C4(:996):        DRD2A: EU0=0 EU1=0 EU2=0 EU3=6 EXT MORE init=0 WS=0 RS=0 */
 | |
| +    0x088cf891, /* 00C8(:996):        DRD2B1: idx2 = EU3(); EU3(idx2,var17)  */
 | |
| +    0x1000cb28, /* 00CC(:997):        DRD1A: *idx2 = idx5; FN=0 MORE init=0 WS=0 RS=0 */
 | |
| +    0x70000006, /* 00D0(:998):        DRD2A: EU0=0 EU1=0 EU2=0 EU3=6 EXT MORE init=0 WS=0 RS=0 */
 | |
| +    0x088cf891, /* 00D4(:998):        DRD2B1: idx2 = EU3(); EU3(idx2,var17)  */
 | |
| +    0x1000cb30, /* 00D8(:999):        DRD1A: *idx2 = idx6; FN=0 MORE init=0 WS=0 RS=0 */
 | |
| +    0x70000006, /* 00DC(:1000):        DRD2A: EU0=0 EU1=0 EU2=0 EU3=6 EXT MORE init=0 WS=0 RS=0 */
 | |
| +    0x088cf891, /* 00E0(:1000):        DRD2B1: idx2 = EU3(); EU3(idx2,var17)  */
 | |
| +    0x1000cb38, /* 00E4(:1001):        DRD1A: *idx2 = idx7; FN=0 MORE init=0 WS=0 RS=0 */
 | |
| +    0x0000c728, /* 00E8(:1002):        DRD1A: *idx1 = idx5; FN=0 init=0 WS=0 RS=0 */
 | |
| +    0x000001f8, /* 00EC(:0):      NOP */
 | |
| +    0xc1c7e018, /* 00F0(:1006):    LCDEXT: idx1 = var3 + var15; ; idx1 += inc3 */
 | |
| +    0xc003a49e, /* 00F4(:1006):    LCDEXT: idx2 = var0, idx3 = var7; idx3 == var18; idx2 += inc3, idx3 += inc6 */
 | |
| +    0x819a601b, /* 00F8(:1007):    LCD: idx4 = var3; ; idx4 += inc3 */
 | |
| +    0xda9b001b, /* 00FC(:1010):      LCDEXT: idx5 = idx5, idx6 = idx6; idx5 once var0; idx5 += inc3, idx6 += inc3 */
 | |
| +    0x9b9be01b, /* 0100(:1010):      LCD: idx7 = idx7; ; idx7 += inc3 */
 | |
| +    0x0000d3a0, /* 0104(:1011):        DRD1A: *idx4; FN=0 init=0 WS=0 RS=0 */
 | |
| +    0xc206a142, /* 0108(:1013):      LCDEXT: idx5 = var4, idx6 = var13; idx6 < var5; idx5 += inc0, idx6 += inc2 */
 | |
| +    0x851be009, /* 010C(:1013):      LCD: idx7 = var10; ; idx7 += inc1 */
 | |
| +    0x6bfe0000, /* 0110(:1016):        DRD2A: EU0=0 EU1=0 EU2=0 EU3=0 TFD EXT init=31 WS=3 RS=3 */
 | |
| +    0x0d4cfddf, /* 0114(:1016):        DRD2B1: *idx5 = EU3(); EU3(*idx7)  */
 | |
| +    0xda9b001b, /* 0118(:1018):      LCDEXT: idx5 = idx5, idx6 = idx6; idx5 once var0; idx5 += inc3, idx6 += inc3 */
 | |
| +    0x9b9be01b, /* 011C(:1018):      LCD: idx7 = idx7; ; idx7 += inc3 */
 | |
| +    0x70000002, /* 0120(:1019):        DRD2A: EU0=0 EU1=0 EU2=0 EU3=2 EXT MORE init=0 WS=0 RS=0 */
 | |
| +    0x004cf81f, /* 0124(:1019):        DRD2B1: var1 = EU3(); EU3(idx0)  */
 | |
| +    0x1000cb20, /* 0128(:1020):        DRD1A: *idx2 = idx4; FN=0 MORE init=0 WS=0 RS=0 */
 | |
| +    0x70000006, /* 012C(:1021):        DRD2A: EU0=0 EU1=0 EU2=0 EU3=6 EXT MORE init=0 WS=0 RS=0 */
 | |
| +    0x088cf891, /* 0130(:1021):        DRD2B1: idx2 = EU3(); EU3(idx2,var17)  */
 | |
| +    0x1000cb28, /* 0134(:1022):        DRD1A: *idx2 = idx5; FN=0 MORE init=0 WS=0 RS=0 */
 | |
| +    0x70000006, /* 0138(:1023):        DRD2A: EU0=0 EU1=0 EU2=0 EU3=6 EXT MORE init=0 WS=0 RS=0 */
 | |
| +    0x088cf891, /* 013C(:1023):        DRD2B1: idx2 = EU3(); EU3(idx2,var17)  */
 | |
| +    0x1000cb30, /* 0140(:1024):        DRD1A: *idx2 = idx6; FN=0 MORE init=0 WS=0 RS=0 */
 | |
| +    0x70000006, /* 0144(:1025):        DRD2A: EU0=0 EU1=0 EU2=0 EU3=6 EXT MORE init=0 WS=0 RS=0 */
 | |
| +    0x088cf891, /* 0148(:1025):        DRD2B1: idx2 = EU3(); EU3(idx2,var17)  */
 | |
| +    0x1000cb38, /* 014C(:1026):        DRD1A: *idx2 = idx7; FN=0 MORE init=0 WS=0 RS=0 */
 | |
| +    0x0000c728, /* 0150(:1027):        DRD1A: *idx1 = idx5; FN=0 init=0 WS=0 RS=0 */
 | |
| +    0x000001f8, /* 0154(:0):      NOP */
 | |
| +    0x8198801b, /* 0158(:1031):    LCD: idx1 = var3; idx1 once var0; idx1 += inc3 */
 | |
| +    0xd8c68018, /* 015C(:1033):      LCDEXT: idx2 = idx1 + var13; idx2 once var0; idx2 += inc3 */
 | |
| +    0x98c6e01c, /* 0160(:1033):      LCD: idx3 = idx1 + var13 + 4; ; idx3 += inc3 */
 | |
| +    0x6000000b, /* 0164(:1034):        DRD2A: EU0=0 EU1=0 EU2=0 EU3=11 EXT init=0 WS=0 RS=0 */
 | |
| +    0x0c8cfc9f, /* 0168(:1034):        DRD2B1: *idx2 = EU3(); EU3(*idx2)  */
 | |
| +    0x0000cc08, /* 016C(:1035):      DRD1A: *idx3 = var1; FN=0 init=0 WS=0 RS=0 */
 | |
| +    0xa1c6801e, /* 0170(:1038):    LCD: idx1 = *(var3 + var13 + 24); idx1 once var0; idx1 += inc3 */
 | |
| +    0x10000f08, /* 0174(:1039):      DRD1A: var3 = idx1; FN=0 MORE init=0 WS=0 RS=0 */
 | |
| +    0x10002458, /* 0178(:1040):      DRD1A: var9 = var11; FN=0 MORE init=0 WS=0 RS=0 */
 | |
| +    0xb8c68018, /* 017C(:1041):      LCD: idx2 = *(idx1 + var13); idx2 once var0; idx2 += inc3 */
 | |
| +    0x10002f10, /* 0180(:1042):        DRD1A: var11 = idx2; FN=0 MORE init=0 WS=0 RS=0 */
 | |
| +    0x7000000a, /* 0184(:1043):        DRD2A: EU0=0 EU1=0 EU2=0 EU3=10 EXT MORE init=0 WS=0 RS=0 */
 | |
| +    0x080cf89f, /* 0188(:1043):        DRD2B1: idx0 = EU3(); EU3(idx2)  */
 | |
| +    0x6000000d, /* 018C(:1044):        DRD2A: EU0=0 EU1=0 EU2=0 EU3=13 EXT init=0 WS=0 RS=0 */
 | |
| +    0x01ccf89f, /* 0190(:1044):        DRD2B1: var7 = EU3(); EU3(idx2)  */
 | |
| +    0x000001f8, /* 0194(:0):      NOP */
 | |
| +    0x8698801b, /* 0198(:1050):    LCD: idx1 = var13; idx1 once var0; idx1 += inc3 */
 | |
| +    0x7000000e, /* 019C(:1051):      DRD2A: EU0=0 EU1=0 EU2=0 EU3=14 EXT MORE init=0 WS=0 RS=0 */
 | |
| +    0x084cf25f, /* 01A0(:1051):      DRD2B1: idx1 = EU3(); EU3(var9)  */
 | |
| +    0xd899037f, /* 01A4(:1052):      LCDEXT: idx2 = idx1; idx2 > var13; idx2 += inc7 */
 | |
| +    0x8019801b, /* 01A8(:1052):      LCD: idx3 = var0; idx3 once var0; idx3 += inc3 */
 | |
| +    0x040001f8, /* 01AC(:1053):        DRD1A: FN=0 INT init=0 WS=0 RS=0 */
 | |
| +    0x000001f8, /* 01B0(:0):      NOP */
 | |
| +    0x000001f8, /* 01B4(:0):    NOP */
 | |
|  };
 | |
|  u32 MCD_SingleEu_TDT[]=
 | |
|  {
 | |
| -    0x8318001b, /* 0000(:1204):  LCD: idx0 = var6; idx0 once var0; idx0 += inc3 */
 | |
| -    0x7000000c, /* 0004(:1205):    DRD2A: EU0=0 EU1=0 EU2=0 EU3=12 EXT MORE init=0 WS=0 RS=0 */
 | |
| -    0x080cf81f, /* 0008(:1205):    DRD2B1: idx0 = EU3(); EU3(idx0)  */
 | |
| -    0x8318801b, /* 000C(:1206):    LCD: idx1 = var6; idx1 once var0; idx1 += inc3 */
 | |
| -    0x6000000d, /* 0010(:1207):      DRD2A: EU0=0 EU1=0 EU2=0 EU3=13 EXT init=0 WS=0 RS=0 */
 | |
| -    0x084cf85f, /* 0014(:1207):      DRD2B1: idx1 = EU3(); EU3(idx1)  */
 | |
| +    0x8218001b, /* 0000(:1248):  LCD: idx0 = var4; idx0 once var0; idx0 += inc3 */
 | |
| +    0x7000000d, /* 0004(:1249):    DRD2A: EU0=0 EU1=0 EU2=0 EU3=13 EXT MORE init=0 WS=0 RS=0 */
 | |
| +    0x080cf81f, /* 0008(:1249):    DRD2B1: idx0 = EU3(); EU3(idx0)  */
 | |
| +    0x8218801b, /* 000C(:1250):    LCD: idx1 = var4; idx1 once var0; idx1 += inc3 */
 | |
| +    0x6000000e, /* 0010(:1251):      DRD2A: EU0=0 EU1=0 EU2=0 EU3=14 EXT init=0 WS=0 RS=0 */
 | |
| +    0x084cf85f, /* 0014(:1251):      DRD2B1: idx1 = EU3(); EU3(idx1)  */
 | |
|      0x000001f8, /* 0018(:0):    NOP */
 | |
| -    0x8498001b, /* 001C(:1211):  LCD: idx0 = var9; idx0 once var0; idx0 += inc3 */
 | |
| -    0x7000000c, /* 0020(:1212):    DRD2A: EU0=0 EU1=0 EU2=0 EU3=12 EXT MORE init=0 WS=0 RS=0 */
 | |
| -    0x020cf81f, /* 0024(:1212):    DRD2B1: var8 = EU3(); EU3(idx0)  */
 | |
| -    0x6000000d, /* 0028(:1213):    DRD2A: EU0=0 EU1=0 EU2=0 EU3=13 EXT init=0 WS=0 RS=0 */
 | |
| -    0x028cf81f, /* 002C(:1213):    DRD2B1: var10 = EU3(); EU3(idx0)  */
 | |
| -    0xc404601b, /* 0030(:1216):  LCDEXT: idx0 = var8, idx1 = var8; ; idx0 += inc3, idx1 += inc3 */
 | |
| -    0xc00423dc, /* 0034(:1216):  LCDEXT: idx2 = var0, idx3 = var8; idx3 == var15; idx2 += inc3, idx3 += inc4 */
 | |
| -    0x809a601b, /* 0038(:1217):  LCD: idx4 = var1; ; idx4 += inc3 */
 | |
| -    0xc207a182, /* 003C(:1220):    LCDEXT: idx5 = var4, idx6 = var15; idx6 < var6; idx5 += inc0, idx6 += inc2 */
 | |
| -    0x869be009, /* 0040(:1220):    LCD: idx7 = var13; ; idx7 += inc1 */
 | |
| -    0x63fe0000, /* 0044(:1223):      DRD2A: EU0=0 EU1=0 EU2=0 EU3=0 EXT init=31 WS=3 RS=3 */
 | |
| -    0x0d4cfddf, /* 0048(:1223):      DRD2B1: *idx5 = EU3(); EU3(*idx7)  */
 | |
| -    0xda9b001b, /* 004C(:1225):    LCDEXT: idx5 = idx5, idx6 = idx6; idx5 once var0; idx5 += inc3, idx6 += inc3 */
 | |
| -    0x9b9be01b, /* 0050(:1225):    LCD: idx7 = idx7; ; idx7 += inc3 */
 | |
| -    0x70000006, /* 0054(:1227):      DRD2A: EU0=0 EU1=0 EU2=0 EU3=6 EXT MORE init=0 WS=0 RS=0 */
 | |
| -    0x088cf890, /* 0058(:1227):      DRD2B1: idx2 = EU3(); EU3(idx2,var16)  */
 | |
| -    0x1000cb28, /* 005C(:1228):      DRD1A: *idx2 = idx5; FN=0 MORE init=0 WS=0 RS=0 */
 | |
| -    0x70000006, /* 0060(:1229):      DRD2A: EU0=0 EU1=0 EU2=0 EU3=6 EXT MORE init=0 WS=0 RS=0 */
 | |
| -    0x088cf890, /* 0064(:1229):      DRD2B1: idx2 = EU3(); EU3(idx2,var16)  */
 | |
| -    0x1000cb30, /* 0068(:1230):      DRD1A: *idx2 = idx6; FN=0 MORE init=0 WS=0 RS=0 */
 | |
| -    0x70000006, /* 006C(:1231):      DRD2A: EU0=0 EU1=0 EU2=0 EU3=6 EXT MORE init=0 WS=0 RS=0 */
 | |
| -    0x088cf890, /* 0070(:1231):      DRD2B1: idx2 = EU3(); EU3(idx2,var16)  */
 | |
| -    0x0000cb38, /* 0074(:1232):      DRD1A: *idx2 = idx7; FN=0 init=0 WS=0 RS=0 */
 | |
| -    0x000001f8, /* 0078(:0):    NOP */
 | |
| -    0xc404601b, /* 007C(:1236):  LCDEXT: idx0 = var8, idx1 = var8; ; idx0 += inc3, idx1 += inc3 */
 | |
| -    0xc004245c, /* 0080(:1236):  LCDEXT: idx2 = var0, idx3 = var8; idx3 == var17; idx2 += inc3, idx3 += inc4 */
 | |
| -    0x809a601b, /* 0084(:1237):  LCD: idx4 = var1; ; idx4 += inc3 */
 | |
| -    0xda9b001b, /* 0088(:1240):    LCDEXT: idx5 = idx5, idx6 = idx6; idx5 once var0; idx5 += inc3, idx6 += inc3 */
 | |
| -    0x9b9be01b, /* 008C(:1240):    LCD: idx7 = idx7; ; idx7 += inc3 */
 | |
| -    0x0000d3a0, /* 0090(:1241):      DRD1A: *idx4; FN=0 init=0 WS=0 RS=0 */
 | |
| -    0xc207a182, /* 0094(:1243):    LCDEXT: idx5 = var4, idx6 = var15; idx6 < var6; idx5 += inc0, idx6 += inc2 */
 | |
| -    0x869be009, /* 0098(:1243):    LCD: idx7 = var13; ; idx7 += inc1 */
 | |
| -    0x6bfe0000, /* 009C(:1246):      DRD2A: EU0=0 EU1=0 EU2=0 EU3=0 TFD EXT init=31 WS=3 RS=3 */
 | |
| -    0x0d4cfddf, /* 00A0(:1246):      DRD2B1: *idx5 = EU3(); EU3(*idx7)  */
 | |
| -    0xda9b001b, /* 00A4(:1248):    LCDEXT: idx5 = idx5, idx6 = idx6; idx5 once var0; idx5 += inc3, idx6 += inc3 */
 | |
| -    0x9b9be01b, /* 00A8(:1248):    LCD: idx7 = idx7; ; idx7 += inc3 */
 | |
| -    0x70000006, /* 00AC(:1250):      DRD2A: EU0=0 EU1=0 EU2=0 EU3=6 EXT MORE init=0 WS=0 RS=0 */
 | |
| -    0x088cf890, /* 00B0(:1250):      DRD2B1: idx2 = EU3(); EU3(idx2,var16)  */
 | |
| -    0x1000cb28, /* 00B4(:1251):      DRD1A: *idx2 = idx5; FN=0 MORE init=0 WS=0 RS=0 */
 | |
| -    0x70000006, /* 00B8(:1252):      DRD2A: EU0=0 EU1=0 EU2=0 EU3=6 EXT MORE init=0 WS=0 RS=0 */
 | |
| -    0x088cf890, /* 00BC(:1252):      DRD2B1: idx2 = EU3(); EU3(idx2,var16)  */
 | |
| -    0x1000cb30, /* 00C0(:1253):      DRD1A: *idx2 = idx6; FN=0 MORE init=0 WS=0 RS=0 */
 | |
| -    0x70000006, /* 00C4(:1254):      DRD2A: EU0=0 EU1=0 EU2=0 EU3=6 EXT MORE init=0 WS=0 RS=0 */
 | |
| -    0x088cf890, /* 00C8(:1254):      DRD2B1: idx2 = EU3(); EU3(idx2,var16)  */
 | |
| -    0x0000cb38, /* 00CC(:1255):      DRD1A: *idx2 = idx7; FN=0 init=0 WS=0 RS=0 */
 | |
| -    0x000001f8, /* 00D0(:0):    NOP */
 | |
| -    0xc51803ed, /* 00D4(:1259):  LCDEXT: idx0 = var10; idx0 > var15; idx0 += inc5 */
 | |
| -    0x8018801b, /* 00D8(:1259):  LCD: idx1 = var0; idx1 once var0; idx1 += inc3 */
 | |
| -    0x040001f8, /* 00DC(:1260):    DRD1A: FN=0 INT init=0 WS=0 RS=0 */
 | |
| +    0x8318001b, /* 001C(:1255):  LCD: idx0 = var6; idx0 once var0; idx0 += inc3 */
 | |
| +    0x7000000d, /* 0020(:1256):    DRD2A: EU0=0 EU1=0 EU2=0 EU3=13 EXT MORE init=0 WS=0 RS=0 */
 | |
| +    0x014cf81f, /* 0024(:1256):    DRD2B1: var5 = EU3(); EU3(idx0)  */
 | |
| +    0x6000000e, /* 0028(:1257):    DRD2A: EU0=0 EU1=0 EU2=0 EU3=14 EXT init=0 WS=0 RS=0 */
 | |
| +    0x01ccf81f, /* 002C(:1257):    DRD2B1: var7 = EU3(); EU3(idx0)  */
 | |
| +    0x8498001b, /* 0030(:1260):  LCD: idx0 = var9; idx0 once var0; idx0 += inc3 */
 | |
| +    0x7000000f, /* 0034(:1261):    DRD2A: EU0=0 EU1=0 EU2=0 EU3=15 EXT MORE init=0 WS=0 RS=0 */
 | |
| +    0x080cf19f, /* 0038(:1261):    DRD2B1: idx0 = EU3(); EU3(var6)  */
 | |
| +    0xd81882a4, /* 003C(:1262):    LCDEXT: idx1 = idx0; idx1 >= var10; idx1 += inc4 */
 | |
| +    0x8019001b, /* 0040(:1262):    LCD: idx2 = var0; idx2 once var0; idx2 += inc3 */
 | |
| +    0x60000003, /* 0044(:1263):      DRD2A: EU0=0 EU1=0 EU2=0 EU3=3 EXT init=0 WS=0 RS=0 */
 | |
| +    0x2c97c7df, /* 0048(:1263):      DRD2B2: EU3(var9)  */
 | |
| +    0xd818826d, /* 004C(:1264):    LCDEXT: idx1 = idx0; idx1 == var9; idx1 += inc5 */
 | |
| +    0x8019001b, /* 0050(:1264):    LCD: idx2 = var0; idx2 once var0; idx2 += inc3 */
 | |
| +    0x60000003, /* 0054(:1265):      DRD2A: EU0=0 EU1=0 EU2=0 EU3=3 EXT init=0 WS=0 RS=0 */
 | |
| +    0x2c17c7df, /* 0058(:1265):      DRD2B2: EU3(var1)  */
 | |
| +    0x000001f8, /* 005C(:0):    NOP */
 | |
| +    0xc282e01b, /* 0060(:1268):  LCDEXT: idx0 = var5, idx1 = var5; ; idx0 += inc3, idx1 += inc3 */
 | |
| +    0xc002a25e, /* 0064(:1268):  LCDEXT: idx2 = var0, idx3 = var5; idx3 == var9; idx2 += inc3, idx3 += inc6 */
 | |
| +    0x811a601b, /* 0068(:1269):  LCD: idx4 = var2; ; idx4 += inc3 */
 | |
| +    0xc184a102, /* 006C(:1272):    LCDEXT: idx5 = var3, idx6 = var9; idx6 < var4; idx5 += inc0, idx6 += inc2 */
 | |
| +    0x841be009, /* 0070(:1272):    LCD: idx7 = var8; ; idx7 += inc1 */
 | |
| +    0x63fe0000, /* 0074(:1275):      DRD2A: EU0=0 EU1=0 EU2=0 EU3=0 EXT init=31 WS=3 RS=3 */
 | |
| +    0x0d4cfddf, /* 0078(:1275):      DRD2B1: *idx5 = EU3(); EU3(*idx7)  */
 | |
| +    0xda9b001b, /* 007C(:1277):    LCDEXT: idx5 = idx5, idx6 = idx6; idx5 once var0; idx5 += inc3, idx6 += inc3 */
 | |
| +    0x9b9be01b, /* 0080(:1277):    LCD: idx7 = idx7; ; idx7 += inc3 */
 | |
| +    0x70000002, /* 0084(:1279):      DRD2A: EU0=0 EU1=0 EU2=0 EU3=2 EXT MORE init=0 WS=0 RS=0 */
 | |
| +    0x004cf99f, /* 0088(:1279):      DRD2B1: var1 = EU3(); EU3(idx6)  */
 | |
| +    0x70000006, /* 008C(:1280):      DRD2A: EU0=0 EU1=0 EU2=0 EU3=6 EXT MORE init=0 WS=0 RS=0 */
 | |
| +    0x088cf88b, /* 0090(:1280):      DRD2B1: idx2 = EU3(); EU3(idx2,var11)  */
 | |
| +    0x1000cb28, /* 0094(:1281):      DRD1A: *idx2 = idx5; FN=0 MORE init=0 WS=0 RS=0 */
 | |
| +    0x70000006, /* 0098(:1282):      DRD2A: EU0=0 EU1=0 EU2=0 EU3=6 EXT MORE init=0 WS=0 RS=0 */
 | |
| +    0x088cf88b, /* 009C(:1282):      DRD2B1: idx2 = EU3(); EU3(idx2,var11)  */
 | |
| +    0x1000cb30, /* 00A0(:1283):      DRD1A: *idx2 = idx6; FN=0 MORE init=0 WS=0 RS=0 */
 | |
| +    0x70000006, /* 00A4(:1284):      DRD2A: EU0=0 EU1=0 EU2=0 EU3=6 EXT MORE init=0 WS=0 RS=0 */
 | |
| +    0x088cf88b, /* 00A8(:1284):      DRD2B1: idx2 = EU3(); EU3(idx2,var11)  */
 | |
| +    0x0000cb38, /* 00AC(:1285):      DRD1A: *idx2 = idx7; FN=0 init=0 WS=0 RS=0 */
 | |
| +    0x000001f8, /* 00B0(:0):    NOP */
 | |
| +    0xc282e01b, /* 00B4(:1289):  LCDEXT: idx0 = var5, idx1 = var5; ; idx0 += inc3, idx1 += inc3 */
 | |
| +    0xc002a31e, /* 00B8(:1289):  LCDEXT: idx2 = var0, idx3 = var5; idx3 == var12; idx2 += inc3, idx3 += inc6 */
 | |
| +    0x811a601b, /* 00BC(:1290):  LCD: idx4 = var2; ; idx4 += inc3 */
 | |
| +    0xda9b001b, /* 00C0(:1293):    LCDEXT: idx5 = idx5, idx6 = idx6; idx5 once var0; idx5 += inc3, idx6 += inc3 */
 | |
| +    0x9b9be01b, /* 00C4(:1293):    LCD: idx7 = idx7; ; idx7 += inc3 */
 | |
| +    0x0000d3a0, /* 00C8(:1294):      DRD1A: *idx4; FN=0 init=0 WS=0 RS=0 */
 | |
| +    0xc184a102, /* 00CC(:1296):    LCDEXT: idx5 = var3, idx6 = var9; idx6 < var4; idx5 += inc0, idx6 += inc2 */
 | |
| +    0x841be009, /* 00D0(:1296):    LCD: idx7 = var8; ; idx7 += inc1 */
 | |
| +    0x6bfe0000, /* 00D4(:1299):      DRD2A: EU0=0 EU1=0 EU2=0 EU3=0 TFD EXT init=31 WS=3 RS=3 */
 | |
| +    0x0d4cfddf, /* 00D8(:1299):      DRD2B1: *idx5 = EU3(); EU3(*idx7)  */
 | |
| +    0xda9b001b, /* 00DC(:1301):    LCDEXT: idx5 = idx5, idx6 = idx6; idx5 once var0; idx5 += inc3, idx6 += inc3 */
 | |
| +    0x9b9be01b, /* 00E0(:1301):    LCD: idx7 = idx7; ; idx7 += inc3 */
 | |
| +    0x70000002, /* 00E4(:1303):      DRD2A: EU0=0 EU1=0 EU2=0 EU3=2 EXT MORE init=0 WS=0 RS=0 */
 | |
| +    0x004cf99f, /* 00E8(:1303):      DRD2B1: var1 = EU3(); EU3(idx6)  */
 | |
| +    0x70000006, /* 00EC(:1304):      DRD2A: EU0=0 EU1=0 EU2=0 EU3=6 EXT MORE init=0 WS=0 RS=0 */
 | |
| +    0x088cf88b, /* 00F0(:1304):      DRD2B1: idx2 = EU3(); EU3(idx2,var11)  */
 | |
| +    0x1000cb28, /* 00F4(:1305):      DRD1A: *idx2 = idx5; FN=0 MORE init=0 WS=0 RS=0 */
 | |
| +    0x70000006, /* 00F8(:1306):      DRD2A: EU0=0 EU1=0 EU2=0 EU3=6 EXT MORE init=0 WS=0 RS=0 */
 | |
| +    0x088cf88b, /* 00FC(:1306):      DRD2B1: idx2 = EU3(); EU3(idx2,var11)  */
 | |
| +    0x1000cb30, /* 0100(:1307):      DRD1A: *idx2 = idx6; FN=0 MORE init=0 WS=0 RS=0 */
 | |
| +    0x70000006, /* 0104(:1308):      DRD2A: EU0=0 EU1=0 EU2=0 EU3=6 EXT MORE init=0 WS=0 RS=0 */
 | |
| +    0x088cf88b, /* 0108(:1308):      DRD2B1: idx2 = EU3(); EU3(idx2,var11)  */
 | |
| +    0x0000cb38, /* 010C(:1309):      DRD1A: *idx2 = idx7; FN=0 init=0 WS=0 RS=0 */
 | |
| +    0x000001f8, /* 0110(:0):    NOP */
 | |
| +    0x8144801c, /* 0114(:1312):  LCD: idx0 = var2 + var9 + 4; idx0 once var0; idx0 += inc3 */
 | |
| +    0x0000c008, /* 0118(:1313):    DRD1A: *idx0 = var1; FN=0 init=0 WS=0 RS=0 */
 | |
| +    0xc398027f, /* 011C(:1315):  LCDEXT: idx0 = var7; idx0 > var9; idx0 += inc7 */
 | |
| +    0x8018801b, /* 0120(:1315):  LCD: idx1 = var0; idx1 once var0; idx1 += inc3 */
 | |
| +    0x040001f8, /* 0124(:1316):    DRD1A: FN=0 INT init=0 WS=0 RS=0 */
 | |
|  };
 | |
|  #endif
 | |
|  u32 MCD_ENetRcv_TDT[]=
 | |
|  {
 | |
| -    0x80004000, /* 0000(:1334):  LCDEXT: idx0 = 0x00000000; ; */
 | |
| -    0x82188000, /* 0004(:1334):  LCD: idx1 = var4; idx1 once var0; idx1 += inc0 */
 | |
| -    0x10000788, /* 0008(:1335):    DRD1A: var1 = *idx1; FN=0 MORE init=0 WS=0 RS=0 */
 | |
| -    0x60000009, /* 000C(:1336):    DRD2A: EU0=0 EU1=0 EU2=0 EU3=9 EXT init=0 WS=0 RS=0 */
 | |
| -    0x080cf05f, /* 0010(:1336):    DRD2B1: idx0 = EU3(); EU3(var1)  */
 | |
| -    0x98180249, /* 0014(:1339):  LCD: idx0 = idx0; idx0 != var9; idx0 += inc1 */
 | |
| -    0x82448004, /* 0018(:1341):    LCD: idx1 = var4 + var9 + 4; idx1 once var0; idx1 += inc0 */
 | |
| -    0x7000000d, /* 001C(:1342):      DRD2A: EU0=0 EU1=0 EU2=0 EU3=13 EXT MORE init=0 WS=0 RS=0 */
 | |
| -    0x014cf05f, /* 0020(:1342):      DRD2B1: var5 = EU3(); EU3(var1)  */
 | |
| -    0x7000000b, /* 0024(:1343):      DRD2A: EU0=0 EU1=0 EU2=0 EU3=11 EXT MORE init=0 WS=0 RS=0 */
 | |
| -    0x020cf05f, /* 0028(:1343):      DRD2B1: var8 = EU3(); EU3(var1)  */
 | |
| -    0x70000004, /* 002C(:1344):      DRD2A: EU0=0 EU1=0 EU2=0 EU3=4 EXT MORE init=0 WS=0 RS=0 */
 | |
| -    0x018cf04a, /* 0030(:1344):      DRD2B1: var6 = EU3(); EU3(var1,var10)  */
 | |
| -    0x70000004, /* 0034(:1345):      DRD2A: EU0=0 EU1=0 EU2=0 EU3=4 EXT MORE init=0 WS=0 RS=0 */
 | |
| -    0x004cf04b, /* 0038(:1345):      DRD2B1: var1 = EU3(); EU3(var1,var11)  */
 | |
| -    0x00000b88, /* 003C(:1348):      DRD1A: var2 = *idx1; FN=0 init=0 WS=0 RS=0 */
 | |
| -    0xc4838190, /* 0040(:1351):    LCDEXT: idx1 = var9, idx2 = var7; idx1 < var6; idx1 += inc2, idx2 += inc0 */
 | |
| -    0x8119e012, /* 0044(:1351):    LCD: idx3 = var2; ; idx3 += inc2 */
 | |
| -    0x03e0cf90, /* 0048(:1354):      DRD1A: *idx3 = *idx2; FN=0 init=31 WS=0 RS=0 */
 | |
| -    0x81188000, /* 004C(:1357):    LCD: idx1 = var2; idx1 once var0; idx1 += inc0 */
 | |
| -    0x000ac788, /* 0050(:1358):      DRD1A: *idx1 = *idx1; FN=0 init=0 WS=1 RS=1 */
 | |
| -    0xc4838000, /* 0054(:1360):    LCDEXT: idx1 = var9, idx2 = var7; idx1 once var0; idx1 += inc0, idx2 += inc0 */
 | |
| -    0x8219e000, /* 0058(:1360):    LCD: idx3 = var4; ; idx3 += inc0 */
 | |
| -    0x70000004, /* 005C(:1368):      DRD2A: EU0=0 EU1=0 EU2=0 EU3=4 EXT MORE init=0 WS=0 RS=0 */
 | |
| -    0x084cfc8c, /* 0060(:1368):      DRD2B1: idx1 = EU3(); EU3(*idx2,var12)  */
 | |
| -    0x60000005, /* 0064(:1371):      DRD2A: EU0=0 EU1=0 EU2=0 EU3=5 EXT init=0 WS=0 RS=0 */
 | |
| -    0x0cccf841, /* 0068(:1371):      DRD2B1: *idx3 = EU3(); EU3(idx1,var1)  */
 | |
| -    0x82468000, /* 006C(:1377):    LCD: idx1 = var4 + var13; idx1 once var0; idx1 += inc0 */
 | |
| -    0xc419025b, /* 0070(:1379):      LCDEXT: idx2 = var8; idx2 > var9; idx2 += inc3 */
 | |
| -    0x80198000, /* 0074(:1379):      LCD: idx3 = var0; idx3 once var0; idx3 += inc0 */
 | |
| -    0x00008400, /* 0078(:1380):        DRD1A: idx1 = var0; FN=0 init=0 WS=0 RS=0 */
 | |
| -    0x00001308, /* 007C(:1381):      DRD1A: var4 = idx1; FN=0 init=0 WS=0 RS=0 */
 | |
| -    0x82188000, /* 0080(:1384):    LCD: idx1 = var4; idx1 once var0; idx1 += inc0 */
 | |
| -    0x10000788, /* 0084(:1385):      DRD1A: var1 = *idx1; FN=0 MORE init=0 WS=0 RS=0 */
 | |
| -    0x60000009, /* 0088(:1386):      DRD2A: EU0=0 EU1=0 EU2=0 EU3=9 EXT init=0 WS=0 RS=0 */
 | |
| -    0x080cf05f, /* 008C(:1386):      DRD2B1: idx0 = EU3(); EU3(var1)  */
 | |
| -    0xc2988249, /* 0090(:1389):    LCDEXT: idx1 = var5; idx1 != var9; idx1 += inc1 */
 | |
| -    0x80190000, /* 0094(:1389):    LCD: idx2 = var0; idx2 once var0; idx2 += inc0 */
 | |
| -    0x040001f8, /* 0098(:1390):      DRD1A: FN=0 INT init=0 WS=0 RS=0 */
 | |
| -    0x000001f8, /* 009C(:0):    NOP */
 | |
| +    0x80004000, /* 0000(:1389):  LCDEXT: idx0 = 0x00000000; ; */
 | |
| +    0x81988000, /* 0004(:1389):  LCD: idx1 = var3; idx1 once var0; idx1 += inc0 */
 | |
| +    0x10000788, /* 0008(:1390):    DRD1A: var1 = *idx1; FN=0 MORE init=0 WS=0 RS=0 */
 | |
| +    0x6000000a, /* 000C(:1391):    DRD2A: EU0=0 EU1=0 EU2=0 EU3=10 EXT init=0 WS=0 RS=0 */
 | |
| +    0x080cf05f, /* 0010(:1391):    DRD2B1: idx0 = EU3(); EU3(var1)  */
 | |
| +    0x98180209, /* 0014(:1394):  LCD: idx0 = idx0; idx0 != var8; idx0 += inc1 */
 | |
| +    0x81c40004, /* 0018(:1396):    LCD: idx1 = var3 + var8 + 4; idx1 once var0; idx1 += inc0 */
 | |
| +    0x7000000e, /* 001C(:1397):      DRD2A: EU0=0 EU1=0 EU2=0 EU3=14 EXT MORE init=0 WS=0 RS=0 */
 | |
| +    0x010cf05f, /* 0020(:1397):      DRD2B1: var4 = EU3(); EU3(var1)  */
 | |
| +    0x7000000c, /* 0024(:1398):      DRD2A: EU0=0 EU1=0 EU2=0 EU3=12 EXT MORE init=0 WS=0 RS=0 */
 | |
| +    0x01ccf05f, /* 0028(:1398):      DRD2B1: var7 = EU3(); EU3(var1)  */
 | |
| +    0x70000004, /* 002C(:1399):      DRD2A: EU0=0 EU1=0 EU2=0 EU3=4 EXT MORE init=0 WS=0 RS=0 */
 | |
| +    0x014cf049, /* 0030(:1399):      DRD2B1: var5 = EU3(); EU3(var1,var9)  */
 | |
| +    0x70000004, /* 0034(:1400):      DRD2A: EU0=0 EU1=0 EU2=0 EU3=4 EXT MORE init=0 WS=0 RS=0 */
 | |
| +    0x004cf04a, /* 0038(:1400):      DRD2B1: var1 = EU3(); EU3(var1,var10)  */
 | |
| +    0x00000b88, /* 003C(:1403):      DRD1A: var2 = *idx1; FN=0 init=0 WS=0 RS=0 */
 | |
| +    0xc4030150, /* 0040(:1406):    LCDEXT: idx1 = var8, idx2 = var6; idx1 < var5; idx1 += inc2, idx2 += inc0 */
 | |
| +    0x8119e012, /* 0044(:1406):    LCD: idx3 = var2; ; idx3 += inc2 */
 | |
| +    0x03e0cf90, /* 0048(:1409):      DRD1A: *idx3 = *idx2; FN=0 init=31 WS=0 RS=0 */
 | |
| +    0x81188000, /* 004C(:1412):    LCD: idx1 = var2; idx1 once var0; idx1 += inc0 */
 | |
| +    0x000ac788, /* 0050(:1413):      DRD1A: *idx1 = *idx1; FN=0 init=0 WS=1 RS=1 */
 | |
| +    0xc4030000, /* 0054(:1415):    LCDEXT: idx1 = var8, idx2 = var6; idx1 once var0; idx1 += inc0, idx2 += inc0 */
 | |
| +    0x8199e000, /* 0058(:1415):    LCD: idx3 = var3; ; idx3 += inc0 */
 | |
| +    0x63e00004, /* 005C(:1418):      DRD2A: EU0=0 EU1=0 EU2=0 EU3=4 EXT init=31 WS=0 RS=0 */
 | |
| +    0x084cfc8b, /* 0060(:1418):      DRD2B1: idx1 = EU3(); EU3(*idx2,var11)  */
 | |
| +    0xd8990000, /* 0064(:1421):    LCDEXT: idx1 = idx1, idx2 = idx2; idx1 once var0; idx1 += inc0, idx2 += inc0 */
 | |
| +    0x9999e000, /* 0068(:1421):    LCD: idx3 = idx3; ; idx3 += inc0 */
 | |
| +    0x60000005, /* 006C(:1422):      DRD2A: EU0=0 EU1=0 EU2=0 EU3=5 EXT init=0 WS=0 RS=0 */
 | |
| +    0x0cccf841, /* 0070(:1422):      DRD2B1: *idx3 = EU3(); EU3(idx1,var1)  */
 | |
| +    0x81c60000, /* 0074(:1427):    LCD: idx1 = var3 + var12; idx1 once var0; idx1 += inc0 */
 | |
| +    0xc399021b, /* 0078(:1429):      LCDEXT: idx2 = var7; idx2 > var8; idx2 += inc3 */
 | |
| +    0x80198000, /* 007C(:1429):      LCD: idx3 = var0; idx3 once var0; idx3 += inc0 */
 | |
| +    0x00008400, /* 0080(:1430):        DRD1A: idx1 = var0; FN=0 init=0 WS=0 RS=0 */
 | |
| +    0x00000f08, /* 0084(:1431):      DRD1A: var3 = idx1; FN=0 init=0 WS=0 RS=0 */
 | |
| +    0x81988000, /* 0088(:1434):    LCD: idx1 = var3; idx1 once var0; idx1 += inc0 */
 | |
| +    0x10000788, /* 008C(:1435):      DRD1A: var1 = *idx1; FN=0 MORE init=0 WS=0 RS=0 */
 | |
| +    0x6000000a, /* 0090(:1436):      DRD2A: EU0=0 EU1=0 EU2=0 EU3=10 EXT init=0 WS=0 RS=0 */
 | |
| +    0x080cf05f, /* 0094(:1436):      DRD2B1: idx0 = EU3(); EU3(var1)  */
 | |
| +    0xc2188209, /* 0098(:1439):    LCDEXT: idx1 = var4; idx1 != var8; idx1 += inc1 */
 | |
| +    0x80190000, /* 009C(:1439):    LCD: idx2 = var0; idx2 once var0; idx2 += inc0 */
 | |
| +    0x040001f8, /* 00A0(:1440):      DRD1A: FN=0 INT init=0 WS=0 RS=0 */
 | |
| +    0x000001f8, /* 00A4(:0):    NOP */
 | |
|  };
 | |
|  u32 MCD_ENetXmit_TDT[]=
 | |
|  {
 | |
| -    0x80004000, /* 0000(:1465):  LCDEXT: idx0 = 0x00000000; ; */
 | |
| -    0x81988000, /* 0004(:1465):  LCD: idx1 = var3; idx1 once var0; idx1 += inc0 */
 | |
| -    0x10000788, /* 0008(:1466):    DRD1A: var1 = *idx1; FN=0 MORE init=0 WS=0 RS=0 */
 | |
| -    0x60000009, /* 000C(:1467):    DRD2A: EU0=0 EU1=0 EU2=0 EU3=9 EXT init=0 WS=0 RS=0 */
 | |
| -    0x080cf05f, /* 0010(:1467):    DRD2B1: idx0 = EU3(); EU3(var1)  */
 | |
| -    0x98180309, /* 0014(:1470):  LCD: idx0 = idx0; idx0 != var12; idx0 += inc1 */
 | |
| -    0x80004003, /* 0018(:1472):    LCDEXT: idx1 = 0x00000003; ; */
 | |
| -    0x81c60004, /* 001C(:1472):    LCD: idx2 = var3 + var12 + 4; idx2 once var0; idx2 += inc0 */
 | |
| -    0x7000000d, /* 0020(:1473):      DRD2A: EU0=0 EU1=0 EU2=0 EU3=13 EXT MORE init=0 WS=0 RS=0 */
 | |
| -    0x014cf05f, /* 0024(:1473):      DRD2B1: var5 = EU3(); EU3(var1)  */
 | |
| -    0x7000000b, /* 0028(:1474):      DRD2A: EU0=0 EU1=0 EU2=0 EU3=11 EXT MORE init=0 WS=0 RS=0 */
 | |
| -    0x028cf05f, /* 002C(:1474):      DRD2B1: var10 = EU3(); EU3(var1)  */
 | |
| -    0x7000000c, /* 0030(:1475):      DRD2A: EU0=0 EU1=0 EU2=0 EU3=12 EXT MORE init=0 WS=0 RS=0 */
 | |
| -    0x018cf05f, /* 0034(:1475):      DRD2B1: var6 = EU3(); EU3(var1)  */
 | |
| -    0x70000004, /* 0038(:1476):      DRD2A: EU0=0 EU1=0 EU2=0 EU3=4 EXT MORE init=0 WS=0 RS=0 */
 | |
| -    0x01ccf04d, /* 003C(:1476):      DRD2B1: var7 = EU3(); EU3(var1,var13)  */
 | |
| -    0x10000b90, /* 0040(:1477):      DRD1A: var2 = *idx2; FN=0 MORE init=0 WS=0 RS=0 */
 | |
| -    0x60000004, /* 0044(:1478):      DRD2A: EU0=0 EU1=0 EU2=0 EU3=4 EXT init=0 WS=0 RS=0 */
 | |
| -    0x020cf0a1, /* 0048(:1478):      DRD2B1: var8 = EU3(); EU3(var2,idx1)  */
 | |
| -    0xc3188312, /* 004C(:1481):    LCDEXT: idx1 = var6; idx1 > var12; idx1 += inc2 */
 | |
| -    0x83c70000, /* 0050(:1481):    LCD: idx2 = var7 + var14; idx2 once var0; idx2 += inc0 */
 | |
| -    0x00001f10, /* 0054(:1482):      DRD1A: var7 = idx2; FN=0 init=0 WS=0 RS=0 */
 | |
| -    0xc583a3c3, /* 0058(:1484):    LCDEXT: idx1 = var11, idx2 = var7; idx2 >= var15; idx1 += inc0, idx2 += inc3 */
 | |
| -    0x81042325, /* 005C(:1484):    LCD: idx3 = var2, idx4 = var8; idx4 == var12; idx3 += inc4, idx4 += inc5 */
 | |
| -    0x03e0c798, /* 0060(:1489):      DRD1A: *idx1 = *idx3; FN=0 init=31 WS=0 RS=0 */
 | |
| -    0xd8990000, /* 0064(:1492):    LCDEXT: idx1 = idx1, idx2 = idx2; idx1 once var0; idx1 += inc0, idx2 += inc0 */
 | |
| -    0x9999e000, /* 0068(:1492):    LCD: idx3 = idx3; ; idx3 += inc0 */
 | |
| -    0x000acf98, /* 006C(:1493):      DRD1A: *idx3 = *idx3; FN=0 init=0 WS=1 RS=1 */
 | |
| -    0xd8992306, /* 0070(:1495):    LCDEXT: idx1 = idx1, idx2 = idx2; idx2 > var12; idx1 += inc0, idx2 += inc6 */
 | |
| -    0x9999e03f, /* 0074(:1495):    LCD: idx3 = idx3; ; idx3 += inc7 */
 | |
| -    0x03eac798, /* 0078(:1498):      DRD1A: *idx1 = *idx3; FN=0 init=31 WS=1 RS=1 */
 | |
| -    0xd8990000, /* 007C(:1501):    LCDEXT: idx1 = idx1, idx2 = idx2; idx1 once var0; idx1 += inc0, idx2 += inc0 */
 | |
| -    0x9999e000, /* 0080(:1501):    LCD: idx3 = idx3; ; idx3 += inc0 */
 | |
| -    0x000acf98, /* 0084(:1502):      DRD1A: *idx3 = *idx3; FN=0 init=0 WS=1 RS=1 */
 | |
| -    0xd8990000, /* 0088(:1504):    LCDEXT: idx1 = idx1, idx2 = idx2; idx1 once var0; idx1 += inc0, idx2 += inc0 */
 | |
| -    0x99832302, /* 008C(:1504):    LCD: idx3 = idx3, idx4 = var6; idx4 > var12; idx3 += inc0, idx4 += inc2 */
 | |
| -    0x0beac798, /* 0090(:1507):      DRD1A: *idx1 = *idx3; FN=0 TFD init=31 WS=1 RS=1 */
 | |
| -    0x81988000, /* 0094(:1509):    LCD: idx1 = var3; idx1 once var0; idx1 += inc0 */
 | |
| -    0x6000000a, /* 0098(:1510):      DRD2A: EU0=0 EU1=0 EU2=0 EU3=10 EXT init=0 WS=0 RS=0 */
 | |
| -    0x0c4cfc5f, /* 009C(:1510):      DRD2B1: *idx1 = EU3(); EU3(*idx1)  */
 | |
| -    0x81c80000, /* 00A0(:1512):    LCD: idx1 = var3 + var16; idx1 once var0; idx1 += inc0 */
 | |
| -    0xc5190312, /* 00A4(:1514):      LCDEXT: idx2 = var10; idx2 > var12; idx2 += inc2 */
 | |
| -    0x80198000, /* 00A8(:1514):      LCD: idx3 = var0; idx3 once var0; idx3 += inc0 */
 | |
| -    0x00008400, /* 00AC(:1515):        DRD1A: idx1 = var0; FN=0 init=0 WS=0 RS=0 */
 | |
| -    0x00000f08, /* 00B0(:1516):      DRD1A: var3 = idx1; FN=0 init=0 WS=0 RS=0 */
 | |
| -    0x81988000, /* 00B4(:1519):    LCD: idx1 = var3; idx1 once var0; idx1 += inc0 */
 | |
| -    0x10000788, /* 00B8(:1520):      DRD1A: var1 = *idx1; FN=0 MORE init=0 WS=0 RS=0 */
 | |
| -    0x60000009, /* 00BC(:1521):      DRD2A: EU0=0 EU1=0 EU2=0 EU3=9 EXT init=0 WS=0 RS=0 */
 | |
| -    0x080cf05f, /* 00C0(:1521):      DRD2B1: idx0 = EU3(); EU3(var1)  */
 | |
| -    0xc2988309, /* 00C4(:1524):    LCDEXT: idx1 = var5; idx1 != var12; idx1 += inc1 */
 | |
| -    0x80190000, /* 00C8(:1524):    LCD: idx2 = var0; idx2 once var0; idx2 += inc0 */
 | |
| -    0x040001f8, /* 00CC(:1525):      DRD1A: FN=0 INT init=0 WS=0 RS=0 */
 | |
| +    0x80004000, /* 0000(:1515):  LCDEXT: idx0 = 0x00000000; ; */
 | |
| +    0x81988000, /* 0004(:1515):  LCD: idx1 = var3; idx1 once var0; idx1 += inc0 */
 | |
| +    0x10000788, /* 0008(:1516):    DRD1A: var1 = *idx1; FN=0 MORE init=0 WS=0 RS=0 */
 | |
| +    0x6000000a, /* 000C(:1517):    DRD2A: EU0=0 EU1=0 EU2=0 EU3=10 EXT init=0 WS=0 RS=0 */
 | |
| +    0x080cf05f, /* 0010(:1517):    DRD2B1: idx0 = EU3(); EU3(var1)  */
 | |
| +    0x98180309, /* 0014(:1520):  LCD: idx0 = idx0; idx0 != var12; idx0 += inc1 */
 | |
| +    0x80004003, /* 0018(:1522):    LCDEXT: idx1 = 0x00000003; ; */
 | |
| +    0x81c60004, /* 001C(:1522):    LCD: idx2 = var3 + var12 + 4; idx2 once var0; idx2 += inc0 */
 | |
| +    0x7000000e, /* 0020(:1523):      DRD2A: EU0=0 EU1=0 EU2=0 EU3=14 EXT MORE init=0 WS=0 RS=0 */
 | |
| +    0x014cf05f, /* 0024(:1523):      DRD2B1: var5 = EU3(); EU3(var1)  */
 | |
| +    0x7000000c, /* 0028(:1524):      DRD2A: EU0=0 EU1=0 EU2=0 EU3=12 EXT MORE init=0 WS=0 RS=0 */
 | |
| +    0x028cf05f, /* 002C(:1524):      DRD2B1: var10 = EU3(); EU3(var1)  */
 | |
| +    0x7000000d, /* 0030(:1525):      DRD2A: EU0=0 EU1=0 EU2=0 EU3=13 EXT MORE init=0 WS=0 RS=0 */
 | |
| +    0x018cf05f, /* 0034(:1525):      DRD2B1: var6 = EU3(); EU3(var1)  */
 | |
| +    0x70000004, /* 0038(:1526):      DRD2A: EU0=0 EU1=0 EU2=0 EU3=4 EXT MORE init=0 WS=0 RS=0 */
 | |
| +    0x01ccf04d, /* 003C(:1526):      DRD2B1: var7 = EU3(); EU3(var1,var13)  */
 | |
| +    0x10000b90, /* 0040(:1527):      DRD1A: var2 = *idx2; FN=0 MORE init=0 WS=0 RS=0 */
 | |
| +    0x60000004, /* 0044(:1528):      DRD2A: EU0=0 EU1=0 EU2=0 EU3=4 EXT init=0 WS=0 RS=0 */
 | |
| +    0x020cf0a1, /* 0048(:1528):      DRD2B1: var8 = EU3(); EU3(var2,idx1)  */
 | |
| +    0xc3188312, /* 004C(:1531):    LCDEXT: idx1 = var6; idx1 > var12; idx1 += inc2 */
 | |
| +    0x83c70000, /* 0050(:1531):    LCD: idx2 = var7 + var14; idx2 once var0; idx2 += inc0 */
 | |
| +    0x00001f10, /* 0054(:1532):      DRD1A: var7 = idx2; FN=0 init=0 WS=0 RS=0 */
 | |
| +    0xc583a3c3, /* 0058(:1534):    LCDEXT: idx1 = var11, idx2 = var7; idx2 >= var15; idx1 += inc0, idx2 += inc3 */
 | |
| +    0x81042325, /* 005C(:1534):    LCD: idx3 = var2, idx4 = var8; idx4 == var12; idx3 += inc4, idx4 += inc5 */
 | |
| +    0x03e0c798, /* 0060(:1539):      DRD1A: *idx1 = *idx3; FN=0 init=31 WS=0 RS=0 */
 | |
| +    0xd8990000, /* 0064(:1542):    LCDEXT: idx1 = idx1, idx2 = idx2; idx1 once var0; idx1 += inc0, idx2 += inc0 */
 | |
| +    0x9999e000, /* 0068(:1542):    LCD: idx3 = idx3; ; idx3 += inc0 */
 | |
| +    0x000acf98, /* 006C(:1543):      DRD1A: *idx3 = *idx3; FN=0 init=0 WS=1 RS=1 */
 | |
| +    0xd8992306, /* 0070(:1545):    LCDEXT: idx1 = idx1, idx2 = idx2; idx2 > var12; idx1 += inc0, idx2 += inc6 */
 | |
| +    0x9999e03f, /* 0074(:1545):    LCD: idx3 = idx3; ; idx3 += inc7 */
 | |
| +    0x03eac798, /* 0078(:1548):      DRD1A: *idx1 = *idx3; FN=0 init=31 WS=1 RS=1 */
 | |
| +    0xd8990000, /* 007C(:1551):    LCDEXT: idx1 = idx1, idx2 = idx2; idx1 once var0; idx1 += inc0, idx2 += inc0 */
 | |
| +    0x9999e000, /* 0080(:1551):    LCD: idx3 = idx3; ; idx3 += inc0 */
 | |
| +    0x000acf98, /* 0084(:1552):      DRD1A: *idx3 = *idx3; FN=0 init=0 WS=1 RS=1 */
 | |
| +    0xd8990000, /* 0088(:1554):    LCDEXT: idx1 = idx1, idx2 = idx2; idx1 once var0; idx1 += inc0, idx2 += inc0 */
 | |
| +    0x99832302, /* 008C(:1554):    LCD: idx3 = idx3, idx4 = var6; idx4 > var12; idx3 += inc0, idx4 += inc2 */
 | |
| +    0x0beac798, /* 0090(:1557):      DRD1A: *idx1 = *idx3; FN=0 TFD init=31 WS=1 RS=1 */
 | |
| +    0x81988000, /* 0094(:1559):    LCD: idx1 = var3; idx1 once var0; idx1 += inc0 */
 | |
| +    0x6000000b, /* 0098(:1560):      DRD2A: EU0=0 EU1=0 EU2=0 EU3=11 EXT init=0 WS=0 RS=0 */
 | |
| +    0x0c4cfc5f, /* 009C(:1560):      DRD2B1: *idx1 = EU3(); EU3(*idx1)  */
 | |
| +    0x81c80000, /* 00A0(:1562):    LCD: idx1 = var3 + var16; idx1 once var0; idx1 += inc0 */
 | |
| +    0xc5190312, /* 00A4(:1564):      LCDEXT: idx2 = var10; idx2 > var12; idx2 += inc2 */
 | |
| +    0x80198000, /* 00A8(:1564):      LCD: idx3 = var0; idx3 once var0; idx3 += inc0 */
 | |
| +    0x00008400, /* 00AC(:1565):        DRD1A: idx1 = var0; FN=0 init=0 WS=0 RS=0 */
 | |
| +    0x00000f08, /* 00B0(:1566):      DRD1A: var3 = idx1; FN=0 init=0 WS=0 RS=0 */
 | |
| +    0x81988000, /* 00B4(:1569):    LCD: idx1 = var3; idx1 once var0; idx1 += inc0 */
 | |
| +    0x10000788, /* 00B8(:1570):      DRD1A: var1 = *idx1; FN=0 MORE init=0 WS=0 RS=0 */
 | |
| +    0x6000000a, /* 00BC(:1571):      DRD2A: EU0=0 EU1=0 EU2=0 EU3=10 EXT init=0 WS=0 RS=0 */
 | |
| +    0x080cf05f, /* 00C0(:1571):      DRD2B1: idx0 = EU3(); EU3(var1)  */
 | |
| +    0xc2988309, /* 00C4(:1574):    LCDEXT: idx1 = var5; idx1 != var12; idx1 += inc1 */
 | |
| +    0x80190000, /* 00C8(:1574):    LCD: idx2 = var0; idx2 once var0; idx2 += inc0 */
 | |
| +    0x040001f8, /* 00CC(:1575):      DRD1A: FN=0 INT init=0 WS=0 RS=0 */
 | |
|      0x000001f8, /* 00D0(:0):    NOP */
 | |
|  };
 | |
|  
 | |
| +#ifdef MCD_INCLUDE_EU
 | |
| +MCD_bufDesc MCD_singleBufDescs[NCHANNELS];
 | |
| +#endif
 | |
| --- a/drivers/dma/MCD_tasksInit.c
 | |
| +++ b/drivers/dma/MCD_tasksInit.c
 | |
| @@ -1,51 +1,34 @@
 | |
| -/*********************************************************************
 | |
| - *
 | |
| - * Copyright (C) 2004  Motorola, Inc.
 | |
| - *	MOTOROLA, INC. All Rights Reserved.  
 | |
| - *  You are hereby granted a copyright license to use
 | |
| - *  the SOFTWARE so long as this entire notice is
 | |
| - *  retained without alteration in any modified and/or redistributed
 | |
| - *  versions, and that such modified versions are clearly identified
 | |
| - *  as such. No licenses are granted by implication, estoppel or
 | |
| - *  otherwise under any patents or trademarks of Motorola, Inc. This 
 | |
| - *  software is provided on an "AS IS" basis and without warranty.
 | |
| - *
 | |
| - *  To the maximum extent permitted by applicable law, MOTOROLA 
 | |
| - *  DISCLAIMS ALL WARRANTIES WHETHER EXPRESS OR IMPLIED, INCLUDING 
 | |
| - *  IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR
 | |
| - *  PURPOSE AND ANY WARRANTY AGAINST INFRINGEMENT WITH REGARD TO THE 
 | |
| - *  SOFTWARE (INCLUDING ANY MODIFIED VERSIONS THEREOF) AND ANY 
 | |
| - *  ACCOMPANYING WRITTEN MATERIALS.
 | |
| - * 
 | |
| - *  To the maximum extent permitted by applicable law, IN NO EVENT
 | |
| - *  SHALL MOTOROLA BE LIABLE FOR ANY DAMAGES WHATSOEVER (INCLUDING 
 | |
| - *  WITHOUT LIMITATION, DAMAGES FOR LOSS OF BUSINESS PROFITS, BUSINESS 
 | |
| - *  INTERRUPTION, LOSS OF BUSINESS INFORMATION, OR OTHER PECUNIARY
 | |
| - *  LOSS) ARISING OF THE USE OR INABILITY TO USE THE SOFTWARE.   
 | |
| - * 
 | |
| - *  Motorola assumes no responsibility for the maintenance and support
 | |
| - *  of this software
 | |
| - ********************************************************************/
 | |
|  /*
 | |
| - * Do not edit!
 | |
| - */
 | |
| - /*
 | |
| - * File:		MCD_tasksInit.c
 | |
| - * Purpose:		Function for initialize variable tables of different
 | |
| - *              types of tasks.
 | |
| + * drivers/dma/MCD_tasksInit.c
 | |
|   *
 | |
| - * Notes:
 | |
| + * Copyright (C) 2004-2008 Freescale Semiconductor, Inc.
 | |
| + *     Kurt Mahan <kmahan@freescale.com>
 | |
|   *
 | |
| + * This program is free software; you can redistribute it and/or
 | |
| + * modify it under the terms of the GNU General Public License as
 | |
| + * published by the Free Software Foundation; either version 2 of
 | |
| + * the License, or (at your option) any later version.
 | |
|   *
 | |
| - * Modifications:
 | |
| - *  	
 | |
| + * This program is distributed in the hope that it will be useful,
 | |
| + * but WITHOUT ANY WARRANTY; without even the implied warranty of
 | |
| + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | |
| + * GNU General Public License for more details.
 | |
|   *
 | |
| - */ 
 | |
| + * You should have received a copy of the GNU General Public License
 | |
| + * along with this program; if not, write to the Free Software
 | |
| + * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
 | |
| + * MA 02111-1307 USA
 | |
| + */
 | |
|  
 | |
| -#include <asm/MCD_dma.h>
 | |
| +/*
 | |
| + * Autogenerated - Do not edit!
 | |
| + */
 | |
| +
 | |
| +#include "MCD_dma.h"
 | |
|  
 | |
|  extern dmaRegs *MCD_dmaBar;
 | |
|  
 | |
| +
 | |
|  /*
 | |
|   * Task 0
 | |
|   */
 | |
| @@ -53,232 +36,203 @@ extern dmaRegs *MCD_dmaBar;
 | |
|  void  MCD_startDmaChainNoEu(int *currBD, short srcIncr, short destIncr, int xferSize, short xferSizeIncr, int *cSave, volatile TaskTableEntry *taskTable, int channel)
 | |
|  {
 | |
|  
 | |
| -	MCD_SET_VAR(taskTable+channel, 2, (u32)currBD);	/* var[2] */
 | |
| -	MCD_SET_VAR(taskTable+channel, 25, (u32)(0xe000 << 16) | (0xffff & srcIncr));	/* inc[1] */
 | |
| -	MCD_SET_VAR(taskTable+channel, 24, (u32)(0xe000 << 16) | (0xffff & destIncr));	/* inc[0] */
 | |
| -	MCD_SET_VAR(taskTable+channel, 19, (u32)xferSize);	/* var[19] */
 | |
| -	MCD_SET_VAR(taskTable+channel, 26, (u32)(0x2000 << 16) | (0xffff & xferSizeIncr));	/* inc[2] */
 | |
| -	MCD_SET_VAR(taskTable+channel, 0, (u32)cSave);	/* var[0] */
 | |
| -	MCD_SET_VAR(taskTable+channel, 1, (u32)0x00000000);	/* var[1] */
 | |
| -	MCD_SET_VAR(taskTable+channel, 3, (u32)0x00000000);	/* var[3] */
 | |
| -	MCD_SET_VAR(taskTable+channel, 4, (u32)0x00000000);	/* var[4] */
 | |
| -	MCD_SET_VAR(taskTable+channel, 5, (u32)0x00000000);	/* var[5] */
 | |
| -	MCD_SET_VAR(taskTable+channel, 6, (u32)0x00000000);	/* var[6] */
 | |
| -	MCD_SET_VAR(taskTable+channel, 7, (u32)0x00000000);	/* var[7] */
 | |
| -	MCD_SET_VAR(taskTable+channel, 8, (u32)0x00000000);	/* var[8] */
 | |
| -	MCD_SET_VAR(taskTable+channel, 9, (u32)0x00000000);	/* var[9] */
 | |
| -	MCD_SET_VAR(taskTable+channel, 10, (u32)0x00000000);	/* var[10] */
 | |
| -	MCD_SET_VAR(taskTable+channel, 11, (u32)0x00000000);	/* var[11] */
 | |
| -	MCD_SET_VAR(taskTable+channel, 12, (u32)0x00000000);	/* var[12] */
 | |
| -	MCD_SET_VAR(taskTable+channel, 13, (u32)0x00000000);	/* var[13] */
 | |
| -	MCD_SET_VAR(taskTable+channel, 14, (u32)0x00000000);	/* var[14] */
 | |
| -	MCD_SET_VAR(taskTable+channel, 15, (u32)0x00000000);	/* var[15] */
 | |
| -	MCD_SET_VAR(taskTable+channel, 16, (u32)0x00000000);	/* var[16] */
 | |
| -	MCD_SET_VAR(taskTable+channel, 17, (u32)0x00000000);	/* var[17] */
 | |
| -	MCD_SET_VAR(taskTable+channel, 18, (u32)0x00000000);	/* var[18] */
 | |
| -	MCD_SET_VAR(taskTable+channel, 20, (u32)0x00000000);	/* var[20] */
 | |
| -	MCD_SET_VAR(taskTable+channel, 21, (u32)0x00000010);	/* var[21] */
 | |
| -	MCD_SET_VAR(taskTable+channel, 22, (u32)0x00000004);	/* var[22] */
 | |
| -	MCD_SET_VAR(taskTable+channel, 23, (u32)0x00000080);	/* var[23] */
 | |
| -	MCD_SET_VAR(taskTable+channel, 27, (u32)0x00000000);	/* inc[3] */
 | |
| -	MCD_SET_VAR(taskTable+channel, 28, (u32)0x60000000);	/* inc[4] */
 | |
| -	MCD_SET_VAR(taskTable+channel, 29, (u32)0x80000001);	/* inc[5] */
 | |
| -	MCD_SET_VAR(taskTable+channel, 30, (u32)0x80000000);	/* inc[6] */
 | |
| -	MCD_SET_VAR(taskTable+channel, 31, (u32)0x40000000);	/* inc[7] */
 | |
| +    MCD_SET_VAR(taskTable+channel, 2, (u32)currBD); /* var[2] */
 | |
| +    MCD_SET_VAR(taskTable+channel, 25, (u32)(0xe000 << 16) | (0xffff & srcIncr));   /* inc[1] */
 | |
| +    MCD_SET_VAR(taskTable+channel, 24, (u32)(0xe000 << 16) | (0xffff & destIncr));  /* inc[0] */
 | |
| +    MCD_SET_VAR(taskTable+channel, 11, (u32)xferSize);  /* var[11] */
 | |
| +    MCD_SET_VAR(taskTable+channel, 26, (u32)(0x2000 << 16) | (0xffff & xferSizeIncr));  /* inc[2] */
 | |
| +    MCD_SET_VAR(taskTable+channel, 0, (u32)cSave);  /* var[0] */
 | |
| +    MCD_SET_VAR(taskTable+channel, 1, (u32)0x00000000); /* var[1] */
 | |
| +    MCD_SET_VAR(taskTable+channel, 3, (u32)0x00000000); /* var[3] */
 | |
| +    MCD_SET_VAR(taskTable+channel, 4, (u32)0x00000000); /* var[4] */
 | |
| +    MCD_SET_VAR(taskTable+channel, 5, (u32)0x00000000); /* var[5] */
 | |
| +    MCD_SET_VAR(taskTable+channel, 6, (u32)0x00000000); /* var[6] */
 | |
| +    MCD_SET_VAR(taskTable+channel, 7, (u32)0x00000000); /* var[7] */
 | |
| +    MCD_SET_VAR(taskTable+channel, 8, (u32)0x00000000); /* var[8] */
 | |
| +    MCD_SET_VAR(taskTable+channel, 9, (u32)0x00000000); /* var[9] */
 | |
| +    MCD_SET_VAR(taskTable+channel, 10, (u32)0x00000000);    /* var[10] */
 | |
| +    MCD_SET_VAR(taskTable+channel, 12, (u32)0x00000000);    /* var[12] */
 | |
| +    MCD_SET_VAR(taskTable+channel, 13, (u32)0x80000000);    /* var[13] */
 | |
| +    MCD_SET_VAR(taskTable+channel, 14, (u32)0x00000010);    /* var[14] */
 | |
| +    MCD_SET_VAR(taskTable+channel, 15, (u32)0x00000004);    /* var[15] */
 | |
| +    MCD_SET_VAR(taskTable+channel, 16, (u32)0x08000000);    /* var[16] */
 | |
| +    MCD_SET_VAR(taskTable+channel, 27, (u32)0x00000000);    /* inc[3] */
 | |
| +    MCD_SET_VAR(taskTable+channel, 28, (u32)0x80000000);    /* inc[4] */
 | |
| +    MCD_SET_VAR(taskTable+channel, 29, (u32)0x80000001);    /* inc[5] */
 | |
| +    MCD_SET_VAR(taskTable+channel, 30, (u32)0x40000000);    /* inc[6] */
 | |
|  
 | |
|      /* Set the task's Enable bit in its Task Control Register */
 | |
| -    MCD_dmaBar->taskControl[channel] |= (u16)0x8000; /* add a MACRO HERE TBD*/
 | |
| -	
 | |
| -
 | |
| +    MCD_dmaBar->taskControl[channel] |= (u16)0x8000;
 | |
|  }
 | |
|  
 | |
|  
 | |
|  /*
 | |
|   * Task 1
 | |
|   */
 | |
| - 
 | |
| -void  MCD_startDmaSingleNoEu(char *srcAddr, short srcIncr, char *destAddr, short destIncr, int dmaSize, int dmaSizeMXferSize, short xferSizeIncr, int flags, int *currBD, int *cSave, volatile TaskTableEntry *taskTable, int channel)
 | |
| +
 | |
| +void  MCD_startDmaSingleNoEu(char *srcAddr, short srcIncr, char *destAddr, short destIncr, int dmaSize, short xferSizeIncr, int flags, int *currBD, int *cSave, volatile TaskTableEntry *taskTable, int channel)
 | |
|  {
 | |
| -	
 | |
| -	MCD_SET_VAR(taskTable+channel, 13, (u32)srcAddr);	/* var[13] */
 | |
| -	MCD_SET_VAR(taskTable+channel, 25, (u32)(0xe000 << 16) | (0xffff & srcIncr));	/* inc[1] */
 | |
| -	MCD_SET_VAR(taskTable+channel, 4, (u32)destAddr);	/* var[4] */
 | |
| -	MCD_SET_VAR(taskTable+channel, 24, (u32)(0xe000 << 16) | (0xffff & destIncr));	/* inc[0] */
 | |
| -	MCD_SET_VAR(taskTable+channel, 6, (u32)dmaSize);	/* var[6] */
 | |
| -	MCD_SET_VAR(taskTable+channel, 7, (u32)dmaSizeMXferSize);	/* var[7] */
 | |
| -	MCD_SET_VAR(taskTable+channel, 26, (u32)(0x2000 << 16) | (0xffff & xferSizeIncr));	/* inc[2] */
 | |
| -	MCD_SET_VAR(taskTable+channel, 9, (u32)flags);	/* var[9] */
 | |
| -	MCD_SET_VAR(taskTable+channel, 1, (u32)currBD);	/* var[1] */
 | |
| -	MCD_SET_VAR(taskTable+channel, 0, (u32)cSave);	/* var[0] */
 | |
| -	MCD_SET_VAR(taskTable+channel, 2, (u32)0x00000000);	/* var[2] */
 | |
| -	MCD_SET_VAR(taskTable+channel, 3, (u32)0x00000000);	/* var[3] */
 | |
| -	MCD_SET_VAR(taskTable+channel, 5, (u32)0x00000000);	/* var[5] */
 | |
| -	MCD_SET_VAR(taskTable+channel, 8, (u32)0x00000000);	/* var[8] */
 | |
| -	MCD_SET_VAR(taskTable+channel, 10, (u32)0x00000000);	/* var[10] */
 | |
| -	MCD_SET_VAR(taskTable+channel, 11, (u32)0x00000000);	/* var[11] */
 | |
| -	MCD_SET_VAR(taskTable+channel, 12, (u32)0x00000000);	/* var[12] */
 | |
| -	MCD_SET_VAR(taskTable+channel, 14, (u32)0x00000000);	/* var[14] */
 | |
| -	MCD_SET_VAR(taskTable+channel, 15, (u32)0x00000000);	/* var[15] */
 | |
| -	MCD_SET_VAR(taskTable+channel, 16, (u32)0x00000004);	/* var[16] */
 | |
| -	MCD_SET_VAR(taskTable+channel, 17, (u32)0x00000080);	/* var[17] */
 | |
| -	MCD_SET_VAR(taskTable+channel, 27, (u32)0x00000000);	/* inc[3] */
 | |
| -	MCD_SET_VAR(taskTable+channel, 28, (u32)0x80000001);	/* inc[4] */
 | |
| -	MCD_SET_VAR(taskTable+channel, 29, (u32)0x40000000);	/* inc[5] */
 | |
|  
 | |
| +    MCD_SET_VAR(taskTable+channel, 7, (u32)srcAddr);    /* var[7] */
 | |
| +    MCD_SET_VAR(taskTable+channel, 25, (u32)(0xe000 << 16) | (0xffff & srcIncr));   /* inc[1] */
 | |
| +    MCD_SET_VAR(taskTable+channel, 2, (u32)destAddr);   /* var[2] */
 | |
| +    MCD_SET_VAR(taskTable+channel, 24, (u32)(0xe000 << 16) | (0xffff & destIncr));  /* inc[0] */
 | |
| +    MCD_SET_VAR(taskTable+channel, 3, (u32)dmaSize);    /* var[3] */
 | |
| +    MCD_SET_VAR(taskTable+channel, 26, (u32)(0x2000 << 16) | (0xffff & xferSizeIncr));  /* inc[2] */
 | |
| +    MCD_SET_VAR(taskTable+channel, 5, (u32)flags);  /* var[5] */
 | |
| +    MCD_SET_VAR(taskTable+channel, 1, (u32)currBD); /* var[1] */
 | |
| +    MCD_SET_VAR(taskTable+channel, 0, (u32)cSave);  /* var[0] */
 | |
| +    MCD_SET_VAR(taskTable+channel, 4, (u32)0x00000000); /* var[4] */
 | |
| +    MCD_SET_VAR(taskTable+channel, 6, (u32)0x00000000); /* var[6] */
 | |
| +    MCD_SET_VAR(taskTable+channel, 8, (u32)0x00000000); /* var[8] */
 | |
| +    MCD_SET_VAR(taskTable+channel, 9, (u32)0x00000004); /* var[9] */
 | |
| +    MCD_SET_VAR(taskTable+channel, 10, (u32)0x08000000);    /* var[10] */
 | |
| +    MCD_SET_VAR(taskTable+channel, 27, (u32)0x00000000);    /* inc[3] */
 | |
| +    MCD_SET_VAR(taskTable+channel, 28, (u32)0x80000001);    /* inc[4] */
 | |
| +    MCD_SET_VAR(taskTable+channel, 29, (u32)0x40000000);    /* inc[5] */
 | |
|  
 | |
| -    /* enable the task */
 | |
| -    MCD_dmaBar->taskControl[channel] |= (u16)0x8000; /* add a MACRO HERE TBD*/
 | |
| +    /* Set the task's Enable bit in its Task Control Register */
 | |
| +    MCD_dmaBar->taskControl[channel] |= (u16)0x8000;
 | |
|  }
 | |
|  
 | |
|  
 | |
|  /*
 | |
|   * Task 2
 | |
|   */
 | |
| - 
 | |
| +
 | |
|  void  MCD_startDmaChainEu(int *currBD, short srcIncr, short destIncr, int xferSize, short xferSizeIncr, int *cSave, volatile TaskTableEntry *taskTable, int channel)
 | |
|  {
 | |
| -	
 | |
| -	MCD_SET_VAR(taskTable+channel, 2, (u32)currBD);	/* var[2] */
 | |
| -	MCD_SET_VAR(taskTable+channel, 25, (u32)(0xe000 << 16) | (0xffff & srcIncr));	/* inc[1] */
 | |
| -	MCD_SET_VAR(taskTable+channel, 24, (u32)(0xe000 << 16) | (0xffff & destIncr));	/* inc[0] */
 | |
| -	MCD_SET_VAR(taskTable+channel, 19, (u32)xferSize);	/* var[19] */
 | |
| -	MCD_SET_VAR(taskTable+channel, 26, (u32)(0x2000 << 16) | (0xffff & xferSizeIncr));	/* inc[2] */
 | |
| -	MCD_SET_VAR(taskTable+channel, 0, (u32)cSave);	/* var[0] */
 | |
| -	MCD_SET_VAR(taskTable+channel, 1, (u32)0x00000000);	/* var[1] */
 | |
| -	MCD_SET_VAR(taskTable+channel, 3, (u32)0x00000000);	/* var[3] */
 | |
| -	MCD_SET_VAR(taskTable+channel, 4, (u32)0x00000000);	/* var[4] */
 | |
| -	MCD_SET_VAR(taskTable+channel, 5, (u32)0x00000000);	/* var[5] */
 | |
| -	MCD_SET_VAR(taskTable+channel, 6, (u32)0x00000000);	/* var[6] */
 | |
| -	MCD_SET_VAR(taskTable+channel, 7, (u32)0x00000000);	/* var[7] */
 | |
| -	MCD_SET_VAR(taskTable+channel, 8, (u32)0x00000000);	/* var[8] */
 | |
| -	MCD_SET_VAR(taskTable+channel, 9, (u32)0x00000000);	/* var[9] */
 | |
| -	MCD_SET_VAR(taskTable+channel, 10, (u32)0x00000000);	/* var[10] */
 | |
| -	MCD_SET_VAR(taskTable+channel, 11, (u32)0x00000000);	/* var[11] */
 | |
| -	MCD_SET_VAR(taskTable+channel, 12, (u32)0x00000000);	/* var[12] */
 | |
| -	MCD_SET_VAR(taskTable+channel, 13, (u32)0x00000000);	/* var[13] */
 | |
| -	MCD_SET_VAR(taskTable+channel, 14, (u32)0x00000000);	/* var[14] */
 | |
| -	MCD_SET_VAR(taskTable+channel, 15, (u32)0x00000000);	/* var[15] */
 | |
| -	MCD_SET_VAR(taskTable+channel, 16, (u32)0x00000000);	/* var[16] */
 | |
| -	MCD_SET_VAR(taskTable+channel, 17, (u32)0x00000000);	/* var[17] */
 | |
| -	MCD_SET_VAR(taskTable+channel, 18, (u32)0x00000000);	/* var[18] */
 | |
| -	MCD_SET_VAR(taskTable+channel, 20, (u32)0x00000000);	/* var[20] */
 | |
| -	MCD_SET_VAR(taskTable+channel, 21, (u32)0x00000010);	/* var[21] */
 | |
| -	MCD_SET_VAR(taskTable+channel, 22, (u32)0x00000004);	/* var[22] */
 | |
| -	MCD_SET_VAR(taskTable+channel, 23, (u32)0x00000080);	/* var[23] */
 | |
| -	MCD_SET_VAR(taskTable+channel, 27, (u32)0x00000000);	/* inc[3] */
 | |
| -	MCD_SET_VAR(taskTable+channel, 28, (u32)0x60000000);	/* inc[4] */
 | |
| -	MCD_SET_VAR(taskTable+channel, 29, (u32)0x80000001);	/* inc[5] */
 | |
| -	MCD_SET_VAR(taskTable+channel, 30, (u32)0x80000000);	/* inc[6] */
 | |
| -	MCD_SET_VAR(taskTable+channel, 31, (u32)0x40000000);	/* inc[7] */
 | |
|  
 | |
| -    /*enable the task*/
 | |
| -    MCD_dmaBar->taskControl[channel] |= (u16)0x8000; /* add a MACRO HERE TBD*/
 | |
| +    MCD_SET_VAR(taskTable+channel, 3, (u32)currBD); /* var[3] */
 | |
| +    MCD_SET_VAR(taskTable+channel, 25, (u32)(0xe000 << 16) | (0xffff & srcIncr));   /* inc[1] */
 | |
| +    MCD_SET_VAR(taskTable+channel, 24, (u32)(0xe000 << 16) | (0xffff & destIncr));  /* inc[0] */
 | |
| +    MCD_SET_VAR(taskTable+channel, 12, (u32)xferSize);  /* var[12] */
 | |
| +    MCD_SET_VAR(taskTable+channel, 26, (u32)(0x2000 << 16) | (0xffff & xferSizeIncr));  /* inc[2] */
 | |
| +    MCD_SET_VAR(taskTable+channel, 0, (u32)cSave);  /* var[0] */
 | |
| +    MCD_SET_VAR(taskTable+channel, 1, (u32)0x00000000); /* var[1] */
 | |
| +    MCD_SET_VAR(taskTable+channel, 2, (u32)0x00000000); /* var[2] */
 | |
| +    MCD_SET_VAR(taskTable+channel, 4, (u32)0x00000000); /* var[4] */
 | |
| +    MCD_SET_VAR(taskTable+channel, 5, (u32)0x00000000); /* var[5] */
 | |
| +    MCD_SET_VAR(taskTable+channel, 6, (u32)0x00000000); /* var[6] */
 | |
| +    MCD_SET_VAR(taskTable+channel, 7, (u32)0x00000000); /* var[7] */
 | |
| +    MCD_SET_VAR(taskTable+channel, 8, (u32)0x00000000); /* var[8] */
 | |
| +    MCD_SET_VAR(taskTable+channel, 9, (u32)0x00000000); /* var[9] */
 | |
| +    MCD_SET_VAR(taskTable+channel, 10, (u32)0x00000000);    /* var[10] */
 | |
| +    MCD_SET_VAR(taskTable+channel, 11, (u32)0x00000000);    /* var[11] */
 | |
| +    MCD_SET_VAR(taskTable+channel, 13, (u32)0x00000000);    /* var[13] */
 | |
| +    MCD_SET_VAR(taskTable+channel, 14, (u32)0x80000000);    /* var[14] */
 | |
| +    MCD_SET_VAR(taskTable+channel, 15, (u32)0x00000010);    /* var[15] */
 | |
| +    MCD_SET_VAR(taskTable+channel, 16, (u32)0x00000001);    /* var[16] */
 | |
| +    MCD_SET_VAR(taskTable+channel, 17, (u32)0x00000004);    /* var[17] */
 | |
| +    MCD_SET_VAR(taskTable+channel, 18, (u32)0x08000000);    /* var[18] */
 | |
| +    MCD_SET_VAR(taskTable+channel, 27, (u32)0x00000000);    /* inc[3] */
 | |
| +    MCD_SET_VAR(taskTable+channel, 28, (u32)0x80000000);    /* inc[4] */
 | |
| +    MCD_SET_VAR(taskTable+channel, 29, (u32)0xc0000000);    /* inc[5] */
 | |
| +    MCD_SET_VAR(taskTable+channel, 30, (u32)0x80000001);    /* inc[6] */
 | |
| +    MCD_SET_VAR(taskTable+channel, 31, (u32)0x40000000);    /* inc[7] */
 | |
| +
 | |
| +    /* Set the task's Enable bit in its Task Control Register */
 | |
| +    MCD_dmaBar->taskControl[channel] |= (u16)0x8000;
 | |
|  }
 | |
|  
 | |
|  
 | |
|  /*
 | |
|   * Task 3
 | |
|   */
 | |
| - 
 | |
| -void  MCD_startDmaSingleEu(char *srcAddr, short srcIncr, char *destAddr, short destIncr, int dmaSize, int dmaSizeMXferSize, short xferSizeIncr, int flags, int *currBD, int *cSave, volatile TaskTableEntry *taskTable, int channel)
 | |
| +
 | |
| +void  MCD_startDmaSingleEu(char *srcAddr, short srcIncr, char *destAddr, short destIncr, int dmaSize, short xferSizeIncr, int flags, int *currBD, int *cSave, volatile TaskTableEntry *taskTable, int channel)
 | |
|  {
 | |
| -	
 | |
| -	MCD_SET_VAR(taskTable+channel, 13, (u32)srcAddr);	/* var[13] */
 | |
| -	MCD_SET_VAR(taskTable+channel, 25, (u32)(0xe000 << 16) | (0xffff & srcIncr));	/* inc[1] */
 | |
| -	MCD_SET_VAR(taskTable+channel, 4, (u32)destAddr);	/* var[4] */
 | |
| -	MCD_SET_VAR(taskTable+channel, 24, (u32)(0xe000 << 16) | (0xffff & destIncr));	/* inc[0] */
 | |
| -	MCD_SET_VAR(taskTable+channel, 6, (u32)dmaSize);	/* var[6] */
 | |
| -	MCD_SET_VAR(taskTable+channel, 7, (u32)dmaSizeMXferSize);	/* var[7] */
 | |
| -	MCD_SET_VAR(taskTable+channel, 26, (u32)(0x2000 << 16) | (0xffff & xferSizeIncr));	/* inc[2] */
 | |
| -	MCD_SET_VAR(taskTable+channel, 9, (u32)flags);	/* var[9] */
 | |
| -	MCD_SET_VAR(taskTable+channel, 1, (u32)currBD);	/* var[1] */
 | |
| -	MCD_SET_VAR(taskTable+channel, 0, (u32)cSave);	/* var[0] */
 | |
| -	MCD_SET_VAR(taskTable+channel, 2, (u32)0x00000000);	/* var[2] */
 | |
| -	MCD_SET_VAR(taskTable+channel, 3, (u32)0x00000000);	/* var[3] */
 | |
| -	MCD_SET_VAR(taskTable+channel, 5, (u32)0x00000000);	/* var[5] */
 | |
| -	MCD_SET_VAR(taskTable+channel, 8, (u32)0x00000000);	/* var[8] */
 | |
| -	MCD_SET_VAR(taskTable+channel, 10, (u32)0x00000000);	/* var[10] */
 | |
| -	MCD_SET_VAR(taskTable+channel, 11, (u32)0x00000000);	/* var[11] */
 | |
| -	MCD_SET_VAR(taskTable+channel, 12, (u32)0x00000000);	/* var[12] */
 | |
| -	MCD_SET_VAR(taskTable+channel, 14, (u32)0x00000000);	/* var[14] */
 | |
| -	MCD_SET_VAR(taskTable+channel, 15, (u32)0x00000000);	/* var[15] */
 | |
| -	MCD_SET_VAR(taskTable+channel, 16, (u32)0x00000004);	/* var[16] */
 | |
| -	MCD_SET_VAR(taskTable+channel, 17, (u32)0x00000080);	/* var[17] */
 | |
| -	MCD_SET_VAR(taskTable+channel, 27, (u32)0x00000000);	/* inc[3] */
 | |
| -	MCD_SET_VAR(taskTable+channel, 28, (u32)0x80000001);	/* inc[4] */
 | |
| -	MCD_SET_VAR(taskTable+channel, 29, (u32)0x40000000);	/* inc[5] */
 | |
|  
 | |
| -    /*enable the task*/
 | |
| -    MCD_dmaBar->taskControl[channel] |= (u16)0x8000; /* add a MACRO HERE TBD*/
 | |
| +    MCD_SET_VAR(taskTable+channel, 8, (u32)srcAddr);    /* var[8] */
 | |
| +    MCD_SET_VAR(taskTable+channel, 25, (u32)(0xe000 << 16) | (0xffff & srcIncr));   /* inc[1] */
 | |
| +    MCD_SET_VAR(taskTable+channel, 3, (u32)destAddr);   /* var[3] */
 | |
| +    MCD_SET_VAR(taskTable+channel, 24, (u32)(0xe000 << 16) | (0xffff & destIncr));  /* inc[0] */
 | |
| +    MCD_SET_VAR(taskTable+channel, 4, (u32)dmaSize);    /* var[4] */
 | |
| +    MCD_SET_VAR(taskTable+channel, 26, (u32)(0x2000 << 16) | (0xffff & xferSizeIncr));  /* inc[2] */
 | |
| +    MCD_SET_VAR(taskTable+channel, 6, (u32)flags);  /* var[6] */
 | |
| +    MCD_SET_VAR(taskTable+channel, 2, (u32)currBD); /* var[2] */
 | |
| +    MCD_SET_VAR(taskTable+channel, 0, (u32)cSave);  /* var[0] */
 | |
| +    MCD_SET_VAR(taskTable+channel, 1, (u32)0x00000000); /* var[1] */
 | |
| +    MCD_SET_VAR(taskTable+channel, 5, (u32)0x00000000); /* var[5] */
 | |
| +    MCD_SET_VAR(taskTable+channel, 7, (u32)0x00000000); /* var[7] */
 | |
| +    MCD_SET_VAR(taskTable+channel, 9, (u32)0x00000000); /* var[9] */
 | |
| +    MCD_SET_VAR(taskTable+channel, 10, (u32)0x00000001);    /* var[10] */
 | |
| +    MCD_SET_VAR(taskTable+channel, 11, (u32)0x00000004);    /* var[11] */
 | |
| +    MCD_SET_VAR(taskTable+channel, 12, (u32)0x08000000);    /* var[12] */
 | |
| +    MCD_SET_VAR(taskTable+channel, 27, (u32)0x00000000);    /* inc[3] */
 | |
| +    MCD_SET_VAR(taskTable+channel, 28, (u32)0xc0000000);    /* inc[4] */
 | |
| +    MCD_SET_VAR(taskTable+channel, 29, (u32)0x80000000);    /* inc[5] */
 | |
| +    MCD_SET_VAR(taskTable+channel, 30, (u32)0x80000001);    /* inc[6] */
 | |
| +    MCD_SET_VAR(taskTable+channel, 31, (u32)0x40000000);    /* inc[7] */
 | |
|  
 | |
| +    /* Set the task's Enable bit in its Task Control Register */
 | |
| +    MCD_dmaBar->taskControl[channel] |= (u16)0x8000;
 | |
|  }
 | |
|  
 | |
|  
 | |
|  /*
 | |
|   * Task 4
 | |
|   */
 | |
| - 
 | |
| +
 | |
|  void  MCD_startDmaENetRcv(char *bDBase, char *currBD, char *rcvFifoPtr, volatile TaskTableEntry *taskTable, int channel)
 | |
|  {
 | |
| -	
 | |
| -	MCD_SET_VAR(taskTable+channel, 0, (u32)bDBase);	/* var[0] */
 | |
| -	MCD_SET_VAR(taskTable+channel, 4, (u32)currBD);	/* var[4] */
 | |
| -	MCD_SET_VAR(taskTable+channel, 7, (u32)rcvFifoPtr);	/* var[7] */
 | |
| -	MCD_SET_VAR(taskTable+channel, 1, (u32)0x00000000);	/* var[1] */
 | |
| -	MCD_SET_VAR(taskTable+channel, 2, (u32)0x00000000);	/* var[2] */
 | |
| -	MCD_SET_VAR(taskTable+channel, 3, (u32)0x00000000);	/* var[3] */
 | |
| -	MCD_SET_VAR(taskTable+channel, 5, (u32)0x00000000);	/* var[5] */
 | |
| -	MCD_SET_VAR(taskTable+channel, 6, (u32)0x00000000);	/* var[6] */
 | |
| -	MCD_SET_VAR(taskTable+channel, 8, (u32)0x00000000);	/* var[8] */
 | |
| -	MCD_SET_VAR(taskTable+channel, 9, (u32)0x00000000);	/* var[9] */
 | |
| -	MCD_SET_VAR(taskTable+channel, 10, (u32)0x0000ffff);	/* var[10] */
 | |
| -	MCD_SET_VAR(taskTable+channel, 11, (u32)0x30000000);	/* var[11] */
 | |
| -	MCD_SET_VAR(taskTable+channel, 12, (u32)0x0fffffff);	/* var[12] */
 | |
| -	MCD_SET_VAR(taskTable+channel, 13, (u32)0x00000008);	/* var[13] */
 | |
| -	MCD_SET_VAR(taskTable+channel, 24, (u32)0x00000000);	/* inc[0] */
 | |
| -	MCD_SET_VAR(taskTable+channel, 25, (u32)0x60000000);	/* inc[1] */
 | |
| -	MCD_SET_VAR(taskTable+channel, 26, (u32)0x20000004);	/* inc[2] */
 | |
| -	MCD_SET_VAR(taskTable+channel, 27, (u32)0x40000000);	/* inc[3] */
 | |
| -    /*enable the task*/
 | |
| -    MCD_dmaBar->taskControl[channel] |= (u16)0x8000; /* add a MACRO HERE TBD*/
 | |
|  
 | |
| +    MCD_SET_VAR(taskTable+channel, 0, (u32)bDBase); /* var[0] */
 | |
| +    MCD_SET_VAR(taskTable+channel, 3, (u32)currBD); /* var[3] */
 | |
| +    MCD_SET_VAR(taskTable+channel, 6, (u32)rcvFifoPtr); /* var[6] */
 | |
| +    MCD_SET_VAR(taskTable+channel, 1, (u32)0x00000000); /* var[1] */
 | |
| +    MCD_SET_VAR(taskTable+channel, 2, (u32)0x00000000); /* var[2] */
 | |
| +    MCD_SET_VAR(taskTable+channel, 4, (u32)0x00000000); /* var[4] */
 | |
| +    MCD_SET_VAR(taskTable+channel, 5, (u32)0x00000000); /* var[5] */
 | |
| +    MCD_SET_VAR(taskTable+channel, 7, (u32)0x00000000); /* var[7] */
 | |
| +    MCD_SET_VAR(taskTable+channel, 8, (u32)0x00000000); /* var[8] */
 | |
| +    MCD_SET_VAR(taskTable+channel, 9, (u32)0x0000ffff); /* var[9] */
 | |
| +    MCD_SET_VAR(taskTable+channel, 10, (u32)0x30000000);    /* var[10] */
 | |
| +    MCD_SET_VAR(taskTable+channel, 11, (u32)0x0fffffff);    /* var[11] */
 | |
| +    MCD_SET_VAR(taskTable+channel, 12, (u32)0x00000008);    /* var[12] */
 | |
| +    MCD_SET_VAR(taskTable+channel, 24, (u32)0x00000000);    /* inc[0] */
 | |
| +    MCD_SET_VAR(taskTable+channel, 25, (u32)0x60000000);    /* inc[1] */
 | |
| +    MCD_SET_VAR(taskTable+channel, 26, (u32)0x20000004);    /* inc[2] */
 | |
| +    MCD_SET_VAR(taskTable+channel, 27, (u32)0x40000000);    /* inc[3] */
 | |
| +
 | |
| +    /* Set the task's Enable bit in its Task Control Register */
 | |
| +    MCD_dmaBar->taskControl[channel] |= (u16)0x8000;
 | |
|  }
 | |
|  
 | |
|  
 | |
|  /*
 | |
|   * Task 5
 | |
|   */
 | |
| - 
 | |
| +
 | |
|  void  MCD_startDmaENetXmit(char *bDBase, char *currBD, char *xmitFifoPtr, volatile TaskTableEntry *taskTable, int channel)
 | |
|  {
 | |
| -	
 | |
| -	MCD_SET_VAR(taskTable+channel, 0, (u32)bDBase);	/* var[0] */
 | |
| -	MCD_SET_VAR(taskTable+channel, 3, (u32)currBD);	/* var[3] */
 | |
| -	MCD_SET_VAR(taskTable+channel, 11, (u32)xmitFifoPtr);	/* var[11] */
 | |
| -	MCD_SET_VAR(taskTable+channel, 1, (u32)0x00000000);	/* var[1] */
 | |
| -	MCD_SET_VAR(taskTable+channel, 2, (u32)0x00000000);	/* var[2] */
 | |
| -	MCD_SET_VAR(taskTable+channel, 4, (u32)0x00000000);	/* var[4] */
 | |
| -	MCD_SET_VAR(taskTable+channel, 5, (u32)0x00000000);	/* var[5] */
 | |
| -	MCD_SET_VAR(taskTable+channel, 6, (u32)0x00000000);	/* var[6] */
 | |
| -	MCD_SET_VAR(taskTable+channel, 7, (u32)0x00000000);	/* var[7] */
 | |
| -	MCD_SET_VAR(taskTable+channel, 8, (u32)0x00000000);	/* var[8] */
 | |
| -	MCD_SET_VAR(taskTable+channel, 9, (u32)0x00000000);	/* var[9] */
 | |
| -	MCD_SET_VAR(taskTable+channel, 10, (u32)0x00000000);	/* var[10] */
 | |
| -	MCD_SET_VAR(taskTable+channel, 12, (u32)0x00000000);	/* var[12] */
 | |
| -	MCD_SET_VAR(taskTable+channel, 13, (u32)0x0000ffff);	/* var[13] */
 | |
| -	MCD_SET_VAR(taskTable+channel, 14, (u32)0xffffffff);	/* var[14] */
 | |
| -	MCD_SET_VAR(taskTable+channel, 15, (u32)0x00000004);	/* var[15] */
 | |
| -	MCD_SET_VAR(taskTable+channel, 16, (u32)0x00000008);	/* var[16] */
 | |
| -	MCD_SET_VAR(taskTable+channel, 24, (u32)0x00000000);	/* inc[0] */
 | |
| -	MCD_SET_VAR(taskTable+channel, 25, (u32)0x60000000);	/* inc[1] */
 | |
| -	MCD_SET_VAR(taskTable+channel, 26, (u32)0x40000000);	/* inc[2] */
 | |
| -	MCD_SET_VAR(taskTable+channel, 27, (u32)0xc000fffc);	/* inc[3] */
 | |
| -	MCD_SET_VAR(taskTable+channel, 28, (u32)0xe0000004);	/* inc[4] */
 | |
| -	MCD_SET_VAR(taskTable+channel, 29, (u32)0x80000000);	/* inc[5] */
 | |
| -	MCD_SET_VAR(taskTable+channel, 30, (u32)0x4000ffff);	/* inc[6] */
 | |
| -	MCD_SET_VAR(taskTable+channel, 31, (u32)0xe0000001);	/* inc[7] */
 | |
|  
 | |
| -    /*enable the task*/
 | |
| -    MCD_dmaBar->taskControl[channel] |= (u16)0x8000; /* add a MACRO HERE TBD*/
 | |
| +    MCD_SET_VAR(taskTable+channel, 0, (u32)bDBase); /* var[0] */
 | |
| +    MCD_SET_VAR(taskTable+channel, 3, (u32)currBD); /* var[3] */
 | |
| +    MCD_SET_VAR(taskTable+channel, 11, (u32)xmitFifoPtr);   /* var[11] */
 | |
| +    MCD_SET_VAR(taskTable+channel, 1, (u32)0x00000000); /* var[1] */
 | |
| +    MCD_SET_VAR(taskTable+channel, 2, (u32)0x00000000); /* var[2] */
 | |
| +    MCD_SET_VAR(taskTable+channel, 4, (u32)0x00000000); /* var[4] */
 | |
| +    MCD_SET_VAR(taskTable+channel, 5, (u32)0x00000000); /* var[5] */
 | |
| +    MCD_SET_VAR(taskTable+channel, 6, (u32)0x00000000); /* var[6] */
 | |
| +    MCD_SET_VAR(taskTable+channel, 7, (u32)0x00000000); /* var[7] */
 | |
| +    MCD_SET_VAR(taskTable+channel, 8, (u32)0x00000000); /* var[8] */
 | |
| +    MCD_SET_VAR(taskTable+channel, 9, (u32)0x00000000); /* var[9] */
 | |
| +    MCD_SET_VAR(taskTable+channel, 10, (u32)0x00000000);    /* var[10] */
 | |
| +    MCD_SET_VAR(taskTable+channel, 12, (u32)0x00000000);    /* var[12] */
 | |
| +    MCD_SET_VAR(taskTable+channel, 13, (u32)0x0000ffff);    /* var[13] */
 | |
| +    MCD_SET_VAR(taskTable+channel, 14, (u32)0xffffffff);    /* var[14] */
 | |
| +    MCD_SET_VAR(taskTable+channel, 15, (u32)0x00000004);    /* var[15] */
 | |
| +    MCD_SET_VAR(taskTable+channel, 16, (u32)0x00000008);    /* var[16] */
 | |
| +    MCD_SET_VAR(taskTable+channel, 24, (u32)0x00000000);    /* inc[0] */
 | |
| +    MCD_SET_VAR(taskTable+channel, 25, (u32)0x60000000);    /* inc[1] */
 | |
| +    MCD_SET_VAR(taskTable+channel, 26, (u32)0x40000000);    /* inc[2] */
 | |
| +    MCD_SET_VAR(taskTable+channel, 27, (u32)0xc000fffc);    /* inc[3] */
 | |
| +    MCD_SET_VAR(taskTable+channel, 28, (u32)0xe0000004);    /* inc[4] */
 | |
| +    MCD_SET_VAR(taskTable+channel, 29, (u32)0x80000000);    /* inc[5] */
 | |
| +    MCD_SET_VAR(taskTable+channel, 30, (u32)0x4000ffff);    /* inc[6] */
 | |
| +    MCD_SET_VAR(taskTable+channel, 31, (u32)0xe0000001);    /* inc[7] */
 | |
|  
 | |
| +    /* Set the task's Enable bit in its Task Control Register */
 | |
| +    MCD_dmaBar->taskControl[channel] |= (u16)0x8000;
 | |
|  }
 | |
| --- a/drivers/dma/MCD_tasksInit.h
 | |
| +++ b/drivers/dma/MCD_tasksInit.h
 | |
| @@ -1,40 +1,31 @@
 | |
| -/*********************************************************************
 | |
| +/*
 | |
| + * drivers/dma/MCD_tasksInit.h
 | |
|   *
 | |
| - * Copyright (C) 2004  Motorola, Inc.
 | |
| - *  MOTOROLA, INC. All Rights Reserved.
 | |
| - *  You are hereby granted a copyright license to use
 | |
| - *  the SOFTWARE so long as this entire notice is
 | |
| - *  retained without alteration in any modified and/or redistributed
 | |
| - *  versions, and that such modified versions are clearly identified
 | |
| - *  as such. No licenses are granted by implication, estoppel or
 | |
| - *  otherwise under any patents or trademarks of Motorola, Inc. This
 | |
| - *  software is provided on an "AS IS" basis and without warranty.
 | |
| + * Copyright (C) 2004-2008 Freescale Semiconductor, Inc.
 | |
| + *     Kurt Mahan <kmahan@freescale.com>
 | |
|   *
 | |
| - *  To the maximum extent permitted by applicable law, MOTOROLA
 | |
| - *  DISCLAIMS ALL WARRANTIES WHETHER EXPRESS OR IMPLIED, INCLUDING
 | |
| - *  IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR
 | |
| - *  PURPOSE AND ANY WARRANTY AGAINST INFRINGEMENT WITH REGARD TO THE
 | |
| - *  SOFTWARE (INCLUDING ANY MODIFIED VERSIONS THEREOF) AND ANY
 | |
| - *  ACCOMPANYING WRITTEN MATERIALS.
 | |
| + * This program is free software; you can redistribute it and/or
 | |
| + * modify it under the terms of the GNU General Public License as
 | |
| + * published by the Free Software Foundation; either version 2 of
 | |
| + * the License, or (at your option) any later version.
 | |
|   *
 | |
| - *  To the maximum extent permitted by applicable law, IN NO EVENT
 | |
| - *  SHALL MOTOROLA BE LIABLE FOR ANY DAMAGES WHATSOEVER (INCLUDING
 | |
| - *  WITHOUT LIMITATION, DAMAGES FOR LOSS OF BUSINESS PROFITS, BUSINESS
 | |
| - *  INTERRUPTION, LOSS OF BUSINESS INFORMATION, OR OTHER PECUNIARY
 | |
| - *  LOSS) ARISING OF THE USE OR INABILITY TO USE THE SOFTWARE.
 | |
| + * This program is distributed in the hope that it will be useful,
 | |
| + * but WITHOUT ANY WARRANTY; without even the implied warranty of
 | |
| + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | |
| + * GNU General Public License for more details.
 | |
|   *
 | |
| - *  Motorola assumes no responsibility for the maintenance and support
 | |
| - *  of this software
 | |
| - ********************************************************************/
 | |
| + * You should have received a copy of the GNU General Public License
 | |
| + * along with this program; if not, write to the Free Software
 | |
| + * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
 | |
| + * MA 02111-1307 USA
 | |
| + */
 | |
|  #ifndef MCD_TSK_INIT_H
 | |
|  #define MCD_TSK_INIT_H 1
 | |
|  
 | |
|  /*
 | |
| - * Do not edit!
 | |
| + * Autogenerated - Do not edit!
 | |
|   */
 | |
|  
 | |
| -
 | |
| -
 | |
|  /*
 | |
|   * Task 0
 | |
|   */
 | |
| @@ -44,7 +35,7 @@ void  MCD_startDmaChainNoEu(int *currBD,
 | |
|  /*
 | |
|   * Task 1
 | |
|   */
 | |
| -void  MCD_startDmaSingleNoEu(char *srcAddr, short srcIncr, char *destAddr, short destIncr, int dmaSize, int dmaSizeMXferSize, short xferSizeIncr, int flags, int *currBD, int *cSave, volatile TaskTableEntry *taskTable, int channel);
 | |
| +void  MCD_startDmaSingleNoEu(char *srcAddr, short srcIncr, char *destAddr, short destIncr, int dmaSize, short xferSizeIncr, int flags, int *currBD, int *cSave, volatile TaskTableEntry *taskTable, int channel);
 | |
|  
 | |
|  
 | |
|  /*
 | |
| @@ -56,7 +47,7 @@ void  MCD_startDmaChainEu(int *currBD, s
 | |
|  /*
 | |
|   * Task 3
 | |
|   */
 | |
| -void  MCD_startDmaSingleEu(char *srcAddr, short srcIncr, char *destAddr, short destIncr, int dmaSize, int dmaSizeMXferSize, short xferSizeIncr, int flags, int *currBD, int *cSave, volatile TaskTableEntry *taskTable, int channel);
 | |
| +void  MCD_startDmaSingleEu(char *srcAddr, short srcIncr, char *destAddr, short destIncr, int dmaSize, short xferSizeIncr, int flags, int *currBD, int *cSave, volatile TaskTableEntry *taskTable, int channel);
 | |
|  
 | |
|  
 | |
|  /*
 |