static void mtv319_pull_data(void)
{
	U8 ifreg, istatus;

	RTV_GUARD_LOCK;

	RTV_REG_MAP_SEL(SPI_CTRL_PAGE);

	ifreg = RTV_REG_GET(0x55);
	if (ifreg != 0xAA) {
		mtv319_spi_recover(stream_buff, MTV319_INTERRUPT_SIZE);
		DPRINTK("Interface error 1\n");
	}

	istatus = RTV_REG_GET(0x10);
	if (istatus & (U8)(~SPI_INTR_BITS)) {
		mtv319_spi_recover(stream_buff, MTV319_INTERRUPT_SIZE);
		DPRINTK("Interface error 2 (0x%02X)\n", istatus);
		goto exit_read_mem;
	}

	if (istatus & SPI_UNDERFLOW_INTR) {
		RTV_REG_SET(0x2A, 1);
		RTV_REG_SET(0x2A, 0);
		DPRINTK("UDF: 0x%02X\n", istatus);
		goto exit_read_mem;
	}

	if (istatus & SPI_THRESHOLD_INTR) {
		RTV_REG_MAP_SEL(SPI_MEM_PAGE);
		RTV_REG_BURST_GET(0x10, stream_buff, MTV319_INTERRUPT_SIZE);

		tdmb_store_data(stream_buff, MTV319_INTERRUPT_SIZE);

		if (istatus & SPI_OVERFLOW_INTR)
			DPRINTK("OVF: 0x%02X\n", istatus); /* To debug */
	} else
		DPRINTK("No data interrupt (0x%02X)\n", istatus);

exit_read_mem:
	RTV_GUARD_FREE;
}
/*-------------------------------------------------------------------------------------
int8 tunerbb_drv_mtv319_read_data(uint8* buffer, uint32* buffer_size)
    (1)   Reading MSC or MSC + FIC etc Data.
            This function is used in EBI2 HOST Interface
    (2)   Return Value
           Sucess : 1
           Fail : 0 or negative interger (If there is error code)
    (3)   Argument
           uint8* buffer (IN/OUT)
               - buffer for Data
           uint32* buffer_size (IN /OUT)
              - Data Size

        <notice> This function is used in only EBI2 HOST Interface
--------------------------------------------------------------------------------------- */
int8	tunerbb_drv_mtv319_read_data(uint8* buffer, uint32* buffer_size)
{
#if defined(STREAM_SLAVE_PARALLEL_UPLOAD) || defined(STREAM_SPI_UPLOAD)
#if defined(SPI_INTERFACE_CHECK)
	uint8 ifreg, ifreg2;
	UINT i;
#endif
	uint8 istatus;
	UINT intr_size, num_read_ts_chunk, tsp_read_len = 0;
	TDMB_BB_HEADER_TYPE *dmb_header = (TDMB_BB_HEADER_TYPE *)buffer;
	uint8 *tspb_ptr = (uint8 *)(buffer + sizeof(TDMB_BB_HEADER_TYPE));
	uint8 intr_cnt;
#define MAX_NUM_READ_THRESHOLD_INTR		4

	*buffer_size = 0; /* Init */

	RTV_GUARD_LOCK;

	intr_size = rtvTDMB_GetInterruptLevelSize();

	RTV_REG_MAP_SEL(SPI_CTRL_PAGE);
#if defined(SPI_INTERFACE_CHECK)
	for (i = 0; i < 10; i++)
	{
		ifreg = RTV_REG_GET(0x55);
		ifreg2 = RTV_REG_GET(0x56);
		if ((ifreg == 0xAA) && (ifreg2 == 0xAA))
			break;
		else
		{
			mtv319_spi_recover(buffer, MTV319_SPI_CMD_SIZE + intr_size);
			DMBMSG("(%u) Interface error 1\n", i);
		}
	}
#endif
	istatus = RTV_REG_GET(0x10);
	if (istatus & (U8)(~SPI_INTR_BITS)) {
		mtv319_spi_recover(buffer, MTV319_SPI_CMD_SIZE + intr_size);
		RTV_REG_SET(0x2A, 1);
		RTV_REG_SET(0x2A, 0);
		DMBMSG("Interface error 2 (0x%02X)\n", istatus);
		goto exit_read_mem;
	}

	if (istatus & SPI_UNDERFLOW_INTR)
	{
		RTV_REG_SET(0x2A, 1);
		RTV_REG_SET(0x2A, 0);
		DMBMSG("UDF: 0x%02X\n", istatus);
		goto exit_read_mem;
	}

	if (istatus & SPI_THRESHOLD_INTR)
	{
	#if 0
		if (!(istatus & SPI_OVERFLOW_INTR))
			num_read_ts_chunk = 1;
		else
			num_read_ts_chunk = MAX_NUM_READ_THRESHOLD_INTR; /* Overflow */
	#else
		num_read_ts_chunk = 1;
	#endif

		//DMBMSG("num_read_ts_chunk (%u)\n", num_read_ts_chunk);
    	RTV_REG_MAP_SEL(SPI_CTRL_PAGE);
		intr_cnt = RTV_REG_GET(0x12);
		if (intr_cnt > 1)
			DMBMSG("1 more threshold interrupt(%d)\n", intr_cnt);

		RTV_REG_MAP_SEL(SPI_MEM_PAGE);
		do {
			RTV_REG_BURST_GET(0x10, tspb_ptr, intr_size);
			//print_tsp(tspb_ptr, intr_size); /* To debug */

			tspb_ptr += intr_size;
			tsp_read_len += intr_size;
		} while (--num_read_ts_chunk);

		if (istatus & SPI_OVERFLOW_INTR)
			DMBMSG("OVF: 0x%02X\n", istatus); /* To debug */

		dmb_header->size = tsp_read_len;
		dmb_header->data_type = opened_subch_info[0].data_type;

		*buffer_size = sizeof(TDMB_BB_HEADER_TYPE) + tsp_read_len;
	}
	else
	{
		RTV_REG_MAP_SEL(SPI_CTRL_PAGE);
		mtv319_spi_recover(buffer, MTV319_SPI_CMD_SIZE + intr_size);
		RTV_REG_SET(0x2A, 1);
		RTV_REG_SET(0x2A, 0);	
		DMBMSG("No data interrupt (0x%02X)\n", istatus);
	}

exit_read_mem:
	RTV_GUARD_FREE;

	return MTV319_RESULT_SUCCESS;

#elif defined(STREAM_TS_UPLOAD)
	return MTV319_RESULT_ERROR;
#endif
}