/* * NAND Flash Controller Device Driver * Copyright (c) 2009, Intel Corporation and its suppliers. * * This program is free software; you can redistribute it and/or modify it * under the terms and conditions of the GNU General Public License, * version 2, as published by the Free Software Foundation. * * This program is distributed in the hope 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., * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. * */ /* header for LLD_CDMA.c module */ #ifndef _LLD_CDMA_ #define _LLD_CDMA_ #include "flash.h" #define DEBUG_SYNC 1 /*/////////// CDMA specific MACRO definition */ #define MAX_DESCS (255) #define MAX_CHANS (4) #define MAX_SYNC_POINTS (16) #define MAX_DESC_PER_CHAN (MAX_DESCS * 3 + MAX_SYNC_POINTS + 2) #define CHANNEL_SYNC_MASK (0x000F) #define CHANNEL_DMA_MASK (0x00F0) #define CHANNEL_ID_MASK (0x0300) #define CHANNEL_CONT_MASK (0x4000) #define CHANNEL_INTR_MASK (0x8000) #define CHANNEL_SYNC_OFFSET (0) #define CHANNEL_DMA_OFFSET (4) #define CHANNEL_ID_OFFSET (8) #define CHANNEL_CONT_OFFSET (14) #define CHANNEL_INTR_OFFSET (15) u16 CDMA_Data_CMD(u8 cmd, u8 *data, u32 block, u16 page, u16 num, u16 flags); u16 CDMA_MemCopy_CMD(u8 *dest, u8 *src, u32 byte_cnt, u16 flags); u16 CDMA_Execute_CMDs(void); void print_pending_cmds(void); void print_cdma_descriptors(void); extern u8 g_SBDCmdIndex; extern struct mrst_nand_info info; /*/////////// prototypes: APIs for LLD_CDMA */ int is_cdma_interrupt(void); u16 CDMA_Event_Status(void); /* CMD-DMA Descriptor Struct. These are defined by the CMD_DMA HW */ struct cdma_descriptor { u32 NxtPointerHi; u32 NxtPointerLo; u32 FlashPointerHi; u32 FlashPointerLo; u32 CommandType; u32 MemAddrHi; u32 MemAddrLo; u32 CommandFlags; u32 Channel; u32 Status; u32 MemCopyPointerHi; u32 MemCopyPointerLo; u32 Reserved12; u32 Reserved13; u32 Reserved14; u32 pcmd; /* pending cmd num related to this descriptor */ }; /* This struct holds one MemCopy descriptor as defined by the HW */ struct memcpy_descriptor { u32 NxtPointerHi; u32 NxtPointerLo; u32 SrcAddrHi; u32 SrcAddrLo; u32 DestAddrHi; u32 DestAddrLo; u32 XferSize; u32 MemCopyFlags; u32 MemCopyStatus; u32 reserved9; u32 reserved10; u32 reserved11; u32 reserved12; u32 reserved13; u32 reserved14; u32 reserved15; }; /* Pending CMD table entries (includes MemCopy parameters */ struct pending_cmd { u8 CMD; u8 *DataAddr; u32 Block; u16 Page; u16 PageCount; u8 *DataDestAddr; u8 *DataSrcAddr; u32 MemCopyByteCnt; u16 Flags; u16 Status; }; #if DEBUG_SYNC extern u32 debug_sync_cnt; #endif /* Definitions for CMD DMA descriptor chain fields */ #define CMD_DMA_DESC_COMP 0x8000 #define CMD_DMA_DESC_FAIL 0x4000 #endif /*_LLD_CDMA_*/