📄 ppp_framer.h
字号:
/*****************************************************************************
* 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 + -