/*
 * (C) Copyright 2001
 * Wolfgang Denk, DENX Software Engineering, wd@denx.de.
 *
 * See file CREDITS for list of people who contributed to this
 * project.
 *
 * 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
 */

#ifndef _CMD_BSP_H_
#define _CMD_BSP_H_

#include <ppcboot.h>
#include <command.h>

#if (CONFIG_COMMANDS & CFG_CMD_BSP)

/* ----- LWMON -----------------------------------------------------------------
 */
#if defined(CONFIG_LWMON)

#define	CMD_TBL_BSP	MK_CMD_TBL_ENTRY(					\
	"pic",	3,	4,	1,	do_pic,					\
	"pic     - read and write PIC registers\n",				\
	"read  reg      - read PIC register `reg'\n"				\
	"pic write reg val  - write value `val' to PIC register `reg'\n"	\
),  MK_CMD_TBL_ENTRY(								\
	"kbd",	3,	1,	1,	do_kbd,					\
	"kbd     - read keyboard status\n",					\
	NULL									\
),  MK_CMD_TBL_ENTRY(								\
	"lsb",	3,	2,	1,	do_lsb,					\
	"lsb     - check and set LSB switch\n",					\
	"on  - switch LSB on\n"							\
	"lsb off - switch LSB off\n"						\
	"lsb     - print current setting\n"					\
),
int do_pic (cmd_tbl_t *cmdtp, bd_t *bd, int flag, int argc, char *argv[]);
int do_kbd (cmd_tbl_t *cmdtp, bd_t *bd, int flag, int argc, char *argv[]);
int do_lsb (cmd_tbl_t *cmdtp, bd_t *bd, int flag, int argc, char *argv[]);

#endif	/* CONFIG_LWMON */
/* ----------------------------------------------------------------------------*/

/* ----- PCU E -----------------------------------------------------------------
 */
#if defined(CONFIG_PCU_E) || defined(CONFIG_CCM)

#define CMD_TBL_BSP	MK_CMD_TBL_ENTRY(					\
	"puma",	4,	4,	1,	do_puma,				\
	"puma    - access PUMA FPGA\n",						\
	"status - print PUMA status\n"						\
	"puma load addr len - load PUMA configuration data\n"			\
),
int do_puma (cmd_tbl_t *cmdtp, bd_t *bd, int flag, int argc, char *argv[]);

#endif	/* CONFIG_PCU_E, CONFIG_CCM */
/* ----------------------------------------------------------------------------*/

/* ----- PIP405 -----------------------------------------------------------------
 */
#if defined(CONFIG_PIP405)

#define	CMD_TBL_BSP MK_CMD_TBL_ENTRY(				\
	"pip405",	4,	6,	1,	do_pip405,			\
	"pip405  - PIP405 specific Cmds\n",					\
	"flash mem [SrcAddr] - updates PPCBOOT with image in memory\n"					\
	"pip405 flash floppy [SrcAddr] - updates PPCBOOT with image from floppy\n"					\
	"pip405 flash mps - updates PPCBOOT with image from MPS\n"					\
),
int do_pip405 (cmd_tbl_t *cmdtp, bd_t *bd, int flag, int argc, char *argv[]);

#endif /* CONFIG_PIP405 */
/* ----------------------------------------------------------------------------*/
/* ----- MIP405 -----------------------------------------------------------------
 */
#if defined(CONFIG_MIP405)

#define	CMD_TBL_BSP MK_CMD_TBL_ENTRY(				\
	"mip405",	4,	6,	1,	do_mip405,			\
	"mip405  - MIP405 specific Cmds\n",					\
	"flash mem [SrcAddr] - updates PPCBOOT with image in memory\n"					\
	"mip405 flash mps - updates PPCBOOT with image from MPS\n"					\
),
int do_mip405 (cmd_tbl_t *cmdtp, bd_t *bd, int flag, int argc, char *argv[]);

#endif /* CONFIG_MIP405 */
/* ----------------------------------------------------------------------------*/

/* ----- DASA_SIM ---------------------------------------------------------------
 */
#if defined(CONFIG_DASA_SIM)

#define	CMD_TBL_BSP MK_CMD_TBL_ENTRY(				                \
	"pci9054",	7,	3,	1,	do_pci9054,			\
	"pci9054 - PLX PCI9054 EEPROM access\n",				\
	"pci9054 info - print EEPROM values\n"		                        \
	"pci9054 update - updates EEPROM with default values\n"			\
),
int do_pci9054 (cmd_tbl_t *cmdtp, bd_t *bd, int flag, int argc, char *argv[]);

#endif /* CONFIG_DASA_SIM */
/* ----------------------------------------------------------------------------*/

/* ----- HYMOD -----------------------------------------------------------------
 */
#if defined(CONFIG_HYMOD)

#define	CMD_TBL_BSP	MK_CMD_TBL_ENTRY(				\
	"fpga",	4,	6,	1,	do_fpga,			\
	"fpga    - FPGA sub-system\n",					\
	"load [type] addr size\n"					\
	"  - write the configuration data at memory address `addr',\n"	\
	"    size `size' bytes, into the FPGA of type `type' (either\n"	\
	"    `main' or `mezz', default `main'). e.g.\n"			\
	"        `fpga load 100000 7d8f'\n"				\
	"    loads the main FPGA with config data at address 100000\n"	\
	"    HEX, size 7d8f HEX (32143 DEC) bytes\n"			\
	"fpga tftp file addr\n"						\
	"  - transfers `file' from the tftp server into memory at\n"	\
	"    address `addr', then writes the entire file contents\n"	\
	"    into the main FPGA\n"					\
	"fpga store addr\n"						\
	"  - read configuration data from the main FPGA (the mezz\n"	\
	"    FPGA is write-only), into address `addr'. There must be\n"	\
	"    enough memory available at `addr' to hold all the config\n"\
	"    data - the size of which is determined by VC:???\n"	\
	"fpga info\n"							\
	"  - print information about the Hymod FPGA, namely the\n"	\
	"    memory addresses at which the four FPGA local bus\n"	\
	"    address spaces appear in the physical address space\n"	\
), MK_CMD_TBL_ENTRY(							\
	"eeclear", 4,	1,	0,	do_eecl,			\
	"eeclear - Clear the eeprom on a Hymod board \n",		\
	"[type]\n"							\
	"  - write zeroes into the EEPROM on the board of type `type'\n"\
	"    (`type' is either `main' or `mezz' - default `main')\n"	\
	"    Note: the EEPROM write enable jumper must be installed\n"	\
),
int do_fpga (cmd_tbl_t *cmdtp, bd_t *bd, int flag, int argc, char *argv[]);
int do_eecl (cmd_tbl_t *cmdtp, bd_t *bd, int flag, int argc, char *argv[]);

#endif	/* CONFIG_HYMOD */
/* ----------------------------------------------------------------------------*/
/* CRAY405 (L1) */
#if defined (CONFIG_CRAYL1)
#define	CMD_TBL_BSP MK_CMD_TBL_ENTRY(						\
	"L1cmd",	5,	4,	1,	do_crayL1,			\
	"L1cmd  - L1 update, setup, commands \n",				\
	"L1cmd update - update flash images from host\n"			\
	"L1cmd boot - nfs or ramboot L1\n"					\
),
int do_crayL1 (cmd_tbl_t *cmdtp, bd_t *bd, int flag, int argc, char *argv[]);
#endif /* CONFIG_CRAY405 */
/* ----------------------------------------------------------------------------*/

#if defined (CONFIG_EVB64260)
/* ----- EVB64260 -------------------------------------------------------------*/
#ifdef ZUMA_NTL
#define CMD_TBL_BSP  ZUMA_TBL_ENTRY

#define ZUMA_TBL_ENTRY	MK_CMD_TBL_ENTRY(				\
	"zinit",	 5,	 1,	 0,	 do_zuma_init_pbb,	\
	"zinit   - init zuma pbb\n",					\
	"\n"								\
	"    - init zuma pbb\n"						\
), MK_CMD_TBL_ENTRY(							\
	"zdtest",	  6,	  3,	  1,	  do_zuma_test_dma,	\
	"zdtest  - run dma test\n",					\
	"[cmd [count]]\n"						\
	"    - run dma cmd (w=0,v=1,cp=2,cmp=3,wi=4,vi=5), count bytes\n" \
), MK_CMD_TBL_ENTRY(							\
	"zminit",	  5,	  1,	  0,	  do_zuma_init_mbox,	\
	"zminit  - init zuma mbox\n",				\
	"\n"								\
	"    - init zuma mbox\n"					\
),

int do_zuma_init_pbb  (cmd_tbl_t *cmdtp, bd_t *bd, int flag, int argc, char *argv[]);
int do_zuma_test_dma  (cmd_tbl_t *cmdtp, bd_t *bd, int flag, int argc, char *argv[]);
int do_zuma_init_mbox (cmd_tbl_t *cmdtp, bd_t *bd, int flag, int argc, char *argv[]);

void zuma_init_pbb(void);
int zuma_mbox_init(void);
int zuma_test_dma(int cmd, int size);
#else
#define CMD_TBL_BSP
#endif /* ZUMA_NTL */

#endif /* CONFIG_EVB64260 */
/* ----------------------------------------------------------------------------*/

#else
#define CMD_TBL_BSP
#endif	/* CFG_CMD_BSP */

#endif	/* _CMD_BSP_H_ */
