⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ppp_framer.h

📁 8032底层驱动部分。因为可以移植 所以单独来拿出来
💻 H
📖 第 1 页 / 共 2 页
字号:
/*****************************************************************************
*  Copyright Statement:
*  --------------------
*  This software is protected by Copyright and the information contained
*  herein is confidential. The software may not be copied and the information
*  contained herein may not be used or disclosed except with the written
*  permission of MediaTek Inc. (C) 2005
*
*  BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
*  THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
*  RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO BUYER ON
*  AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
*  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
*  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
*  NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
*  SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
*  SUPPLIED WITH THE MEDIATEK SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH
*  THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO
*  NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S
*  SPECIFICATION OR TO CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM.
*
*  BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE
*  LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
*  AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
*  OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY BUYER TO
*  MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE. 
*
*  THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE
*  WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT OF
*  LAWS PRINCIPLES.  ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING THEREOF AND
*  RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN FRANCISCO, CA, UNDER
*  THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE (ICC).
*
*****************************************************************************/
/*****************************************************************************
 *
 * Filename:
 * ---------
 *    ppp_framer.h
 *
 * Project:
 * --------
 *   Maui_Software
 *
 * Description:
 * ------------
 *   The header file the PPP framer driver .
 *
 * Author:
 * -------
 * -------
 *
 *============================================================================
 *             HISTORY
 * Below this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
 *------------------------------------------------------------------------------
 * removed!
 * removed!
 * removed!
 *
 * removed!
 * removed!
 * removed!
 *
 * removed!
 * removed!
 * removed!
 *
 * removed!
 * removed!
 * removed!
 *
 * removed!
 * removed!
 * removed!
 * removed!
 * removed!
 * removed!
 * removed!
 * removed!
 * removed!
 * removed!
 *------------------------------------------------------------------------------
 * Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
 *============================================================================
 ****************************************************************************/
#ifndef PPP_FRAMER_H
#define PPP_FRAMER_H

/*   Structure of PPP frame
+------+--------+--------+----------+------------+--------+----------+------+
|Flag  |Address |Control |Protocol  |Information |Padding |FCS       |Flag  |
|(0x7e)|(0xff)  |(0x03)  | 8/16bits |            |        |16/32bits |(0x7e)|
+------+--------+--------+----------+------------+--------+----------+------+
*/

//#define PFC_UNIT_TEST	// for driver unit test
//#define PFC_UNIT_TEST_ALL	// for general interface UT

// common part of MT6228 and MT6229 are put overhere
typedef enum{
	PFC_HW_TYPE,
	PFC_SW_TYPE
}pfc_type_enum;

typedef enum{
	PFC_GPRS_OWNER,   /* GPRS shall use hardware framer first !*/
	PFC_CSD_OWNER,
	PFC_MAX_ID
}pfc_owner_id_enum;

#define PFC_SEM_COUNT	1
#define PFC_TIMEOUT_PERIOD				100	// in the unit of 10ms
#define PFC_START_TIMER()		   		\
		pfc_dcb.is_timeout = KAL_FALSE;\
		GPTI_StartItem(pfc_dcb.gpt_handle,\
                  PFC_TIMEOUT_PERIOD,\
                  PFC_TimeOutHandler,\
                  NULL)

#define PFC_STOP_TIMER()			\
		if(!pfc_dcb.is_timeout)\
		{\
			GPTI_StopItem(pfc_dcb.gpt_handle);\
		}\
		else\
		{\
			DRVPDN_Enable(DRVPDN_CON0,DRVPDN_CON0_PFC,PDN_PFC);\
			return PFC_TIMEOUT_STA;	\
		}
#define ENTER_CRITICAL()		{\
													kal_uint32 _savedMask;\
													_savedMask = SaveAndSetIRQMask();
#define EXIT_CRITICAL()			RestoreIRQMask(_savedMask);}

#if defined(PFC_UNIT_TEST)
#define PFC_RESET_SRC_BUFFER() 
#else
/* Reset the src buffer for next time usage */
#define PFC_RESET_SRC_BUFFER()	\
		   src->cur_ptr = src->end_ptr = src->data_ptr;\
		   src->used = 0;
#endif

typedef struct{
	kal_uint32 handler;
	pfc_owner_id_enum owner[PFC_MAX_ID];
	kal_semid mutex;	
	kal_uint8 active_id;
}pfc_manage_stuct;

		
#define PFC_BASE_ADRS			(PFC_base)
// #define IRQ_PFC_CODE				(31)

#if defined(MT6228)
#define PFC_START					(PFC_BASE_ADRS+0x00)
#define PFC_CON					(PFC_BASE_ADRS+0x04)
#define PFC_EPTC					(PFC_BASE_ADRS+0x08)
#define PFC_EACCM					(PFC_BASE_ADRS+0x0c)
#define PFC_DST_SRC				(PFC_BASE_ADRS+0x10)
#define PFC_LEN					(PFC_BASE_ADRS+0x14)
#define PFC_SDRAT					(PFC_BASE_ADRS+0x18)
#define PFC_STAT					(PFC_BASE_ADRS+0x1c)
#define PFC_DCSRC					(PFC_BASE_ADRS+0x20)
#define PFC_ECSRC					(PFC_BASE_ADRS+0x24)
#define PFC_DCDES					(PFC_BASE_ADRS+0x28)
#define PFC_ECDES					(PFC_BASE_ADRS+0x2c)
#define PFC_DUSLEN				(PFC_BASE_ADRS+0x30)
#define PFC_EUSLEN				(PFC_BASE_ADRS+0x34)
#define PFC_DUWBLEN				(PFC_BASE_ADRS+0x38)
#define PFC_EUWBLEN				(PFC_BASE_ADRS+0x3c)
#define PFC_DPTC					(PFC_BASE_ADRS+0x40)

#define PFC_START_ENABLE		(0x0001) // 0: update dst adrs with len, 1: start and update src adrs with len
#define PFC_START_NADDR			(0x0002)	// only update the len without adrs
#define PFC_START_DUPSRL		(0x0004)	// update decoding src, len
#define PFC_START_EUPSRL		(0x0008)	// update encoding scr, len
#define PFC_START_DCLR			(0x0010)	// reset decoder
#define PFC_START_ECLR			(0x0020) // reset encoder
#define PFC_START_DUPDEL		(0x0040)	// update decoding dest, len
#define PFC_START_EUPDEL		(0x0080)	// update encoding dest, len
#define PFC_START_DF7E			(0x0100)	// start with 0x7E and skip others
#define PFC_START_DSET7E		(0x0200)	// start with 0x7E and skip others
#define PFC_START_ELASTS		(0x0400)	// last operation of encoding for source
#define PFC_START_ELASTD		(0x0800)	// last operation of encoding for destination

#define PFC_CON_ENC				(0x0001)	// encode bit
#define PFC_CON_EACFC			(0x0002) // ACFC is enabled during encoding
#define PFC_CON_EPFC				(0x0004)	// PFC is enabled during encoding
#define PFC_CON_EF32				(0x0008)	// using FCS32 during encoding otherwise FCS16
#define PFC_CON_DACFC			(0x0010)	// ACFC is enabled during decoding
#define PFC_CON_DPFC				(0x0020)	// PFC is enabled during decoding
#define PFC_CON_DF32				(0x0040)	// using FCS32 during decoding otherwise FCS16
#define PFC_CON_EDEL				(0x0080) // Escape DEL(0x7f) in encoding.

#define PFC_EPTC_8bit			(0x00ff)

#define PFC_EVENT						1
#define PFC_START_RESET_VALUE		0
#define PFC_DECODE_START_VALUE	(PFC_START_DUPSRL|PFC_START_ENABLE)
#define PFC_ENCODE_START_VALUE	(PFC_START_EUPSRL|PFC_START_ENABLE)

#define PFC_DECODE_RESET()			DRV_WriteReg(PFC_START, PFC_START_DCLR);\
											DRV_WriteReg(PFC_START, 0);
#define PFC_ENCODE_RESET()			DRV_WriteReg(PFC_START, PFC_START_ECLR);\
											DRV_WriteReg(PFC_START, 0);
#define HI_BYTE(a)					(kal_uint8)(((a)>>8)&0xff)
#define LOW_BYTE(a)					(kal_uint8)(((a))&0xff)

#define PPP_ERR_SYNC						-102		// incorrect sequence flag
#define PPP_ERR_FCS						-100		// incorrect FCS
#define PPP_ERR_ACF_PROTOCOL			-101		// incorrect address control field

#define PFC_FLAG							0x7e
#define PFC_AVAILABLE_ID				99


#define PFC_WAIT_COMPLETE()		while(DRV_Reg(PFC_STAT)==PFC_STAT_BUSY \
											&& !pfc_dcb.is_timeout);

typedef enum{
 	PFC_STAT_OK					= 0,	// PFC is ready
 	PFC_STAT_BUSY				= 1,	// PFC is busy
 	PFC_STAT_DST_FULL			= 2,	// destination buffer is full
 	PFC_STAT_DSRC_ZERO_LEN 	= 3,	// decode zero length of src operation
 	PFC_STAT_FCS_ERR			= 4,	// decode with a error FCS
 	PFC_STAT_NOT_0x7E			= 5,	// decode a not 0x7e leading sequence, or not found 0x7e whle df7e is set
 	PFC_STAT_AC_ERR			= 6,	// address or control filed failed
 	PFC_STAT_INVALID_FRAME	= 7,	// invalid 0x7d, 0x7e sequence
 	PFC_STAT_PAUSE				= 8,	// PFC is at pause state

 	// software added 
 	PFC_TIMEOUT_STA			= 100
}pfc_status_enum;

#define PFC_STATUE_DECODE_RESUME_FAIL	-1

typedef enum{
	PFC_READY_STATE,
	PFC_DECODE_STATE,
	PFC_ENCODE_STATE,	
	PFC_ERROR_STATE
}pfc_state_enum;

typedef enum{
	PFC_DECODE_READY,
	PFC_DECODE_BUSY,
	PFC_DECODE_PAUSE,
	PFC_DECODE_ERR,
	PFC_DECODE_FIND_NO_7E
}pfc_decode_state_enum;

typedef enum{
	PFC_ENCODE_READY,
	PFC_ENCODE_BUSY,

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -