/*
 *  Driver for the Conexant CX25821 PCIe bridge
 *
 *  Copyright (C) 2009 Conexant Systems Inc.
 *  Authors  <hiep.huynh@conexant.com>, <shu.lin@conexant.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.
 *
 *  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/mutex.h>
#include <linux/workqueue.h>

#define OPEN_FILE_1           0
#define NUM_PROGS             8
#define NUM_FRAMES            2
#define ODD_FIELD             0
#define EVEN_FIELD            1
#define TOP_OFFSET            0
#define FIFO_DISABLE          0
#define FIFO_ENABLE           1
#define TEST_FRAMES           5
#define END_OF_FILE           0
#define IN_PROGRESS           1
#define RESET_STATUS          -1
#define NUM_NO_OPS            5

/* PAL and NTSC line sizes and number of lines. */
#define WIDTH_D1              720
#define NTSC_LINES_PER_FRAME  480
#define PAL_LINES_PER_FRAME   576
#define PAL_LINE_SZ           1440
#define Y422_LINE_SZ          1440
#define Y411_LINE_SZ          1080
#define NTSC_FIELD_HEIGHT     240
#define NTSC_ODD_FLD_LINES    241
#define PAL_FIELD_HEIGHT      288

#define FRAME_SIZE_NTSC_Y422    (NTSC_LINES_PER_FRAME * Y422_LINE_SZ)
#define FRAME_SIZE_NTSC_Y411    (NTSC_LINES_PER_FRAME * Y411_LINE_SZ)
#define FRAME_SIZE_PAL_Y422     (PAL_LINES_PER_FRAME * Y422_LINE_SZ)
#define FRAME_SIZE_PAL_Y411     (PAL_LINES_PER_FRAME * Y411_LINE_SZ)

#define NTSC_DATA_BUF_SZ        (Y422_LINE_SZ * NTSC_LINES_PER_FRAME)
#define PAL_DATA_BUF_SZ         (Y422_LINE_SZ * PAL_LINES_PER_FRAME)

#define RISC_WRITECR_INSTRUCTION_SIZE   16
#define RISC_SYNC_INSTRUCTION_SIZE      4
#define JUMP_INSTRUCTION_SIZE           12
#define MAXSIZE_NO_OPS                  36
#define DWORD_SIZE                      4

#define USE_RISC_NOOP_VIDEO   1

#ifdef USE_RISC_NOOP_VIDEO
#define PAL_US_VID_PROG_SIZE						\
	(PAL_FIELD_HEIGHT * 3 * DWORD_SIZE +				\
	 RISC_WRITECR_INSTRUCTION_SIZE + RISC_SYNC_INSTRUCTION_SIZE +	\
	 NUM_NO_OPS * DWORD_SIZE)

#define PAL_RISC_BUF_SIZE         (2 * PAL_US_VID_PROG_SIZE)

#define PAL_VID_PROG_SIZE						\
	((PAL_FIELD_HEIGHT * 2) * 3 * DWORD_SIZE +			\
	 2 * RISC_SYNC_INSTRUCTION_SIZE + RISC_WRITECR_INSTRUCTION_SIZE + \
	 JUMP_INSTRUCTION_SIZE + 2 * NUM_NO_OPS * DWORD_SIZE)

#define ODD_FLD_PAL_PROG_SIZE						\
	(PAL_FIELD_HEIGHT * 3 * DWORD_SIZE +				\
	 RISC_SYNC_INSTRUCTION_SIZE + RISC_WRITECR_INSTRUCTION_SIZE +	\
	 NUM_NO_OPS * DWORD_SIZE)

#define NTSC_US_VID_PROG_SIZE						\
	((NTSC_ODD_FLD_LINES + 1) * 3 * DWORD_SIZE +			\
	 RISC_WRITECR_INSTRUCTION_SIZE + JUMP_INSTRUCTION_SIZE +	\
	 NUM_NO_OPS * DWORD_SIZE)

#define NTSC_RISC_BUF_SIZE						\
	(2 * (RISC_SYNC_INSTRUCTION_SIZE + NTSC_US_VID_PROG_SIZE))

#define FRAME1_VID_PROG_SIZE						\
	((NTSC_ODD_FLD_LINES + NTSC_FIELD_HEIGHT) *			\
	 3 * DWORD_SIZE + 2 * RISC_SYNC_INSTRUCTION_SIZE +		\
	 RISC_WRITECR_INSTRUCTION_SIZE + JUMP_INSTRUCTION_SIZE +	\
	 2 * NUM_NO_OPS * DWORD_SIZE)

#define ODD_FLD_NTSC_PROG_SIZE						\
	(NTSC_ODD_FLD_LINES * 3 * DWORD_SIZE +				\
	 RISC_SYNC_INSTRUCTION_SIZE + RISC_WRITECR_INSTRUCTION_SIZE +	\
	 NUM_NO_OPS * DWORD_SIZE)
#endif

#ifndef USE_RISC_NOOP_VIDEO
#define PAL_US_VID_PROG_SIZE						\
	((PAL_FIELD_HEIGHT + 1) * 3 * DWORD_SIZE +			\
	 RISC_WRITECR_INSTRUCTION_SIZE)

#define PAL_RISC_BUF_SIZE						\
	(2 * (RISC_SYNC_INSTRUCTION_SIZE + PAL_US_VID_PROG_SIZE))

#define PAL_VID_PROG_SIZE						\
	((PAL_FIELD_HEIGHT * 2) * 3 * DWORD_SIZE +			\
	 2 * RISC_SYNC_INSTRUCTION_SIZE + RISC_WRITECR_INSTRUCTION_SIZE + \
	 JUMP_INSTRUCTION_SIZE)

#define ODD_FLD_PAL_PROG_SIZE						\
	(PAL_FIELD_HEIGHT * 3 * DWORD_SIZE +				\
	 RISC_SYNC_INSTRUCTION_SIZE + RISC_WRITECR_INSTRUCTION_SIZE)

#define ODD_FLD_NTSC_PROG_SIZE						\
	(NTSC_ODD_FLD_LINES * 3 * DWORD_SIZE +				\
	 RISC_SYNC_INSTRUCTION_SIZE + RISC_WRITECR_INSTRUCTION_SIZE)

#define NTSC_US_VID_PROG_SIZE						\
	((NTSC_ODD_FLD_LINES + 1) * 3 * DWORD_SIZE +			\
	 RISC_WRITECR_INSTRUCTION_SIZE + JUMP_INSTRUCTION_SIZE)

#define NTSC_RISC_BUF_SIZE						\
	(2 * (RISC_SYNC_INSTRUCTION_SIZE + NTSC_US_VID_PROG_SIZE))

#define FRAME1_VID_PROG_SIZE						\
	((NTSC_ODD_FLD_LINES + NTSC_FIELD_HEIGHT) *			\
	 3 * DWORD_SIZE + 2 * RISC_SYNC_INSTRUCTION_SIZE +		\
	 RISC_WRITECR_INSTRUCTION_SIZE + JUMP_INSTRUCTION_SIZE)

#endif
