📄 simd.c
字号:
/*****************************************************************************
* 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:
* ---------
* simd.c
*
* Project:
* --------
* Maui_Software
*
* Description:
* ------------
* This Module defines the SIM 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!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* 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!!
*============================================================================
****************************************************************************/
#if ( (!defined(MT6208)) && (!defined(FPGA)) )
#include "drv_comm.h"
#include "reg_base.h"
#include "intrCtrl.h"
#include "sim_hw.h"
#include "sim_al.h"
#include "sim_sw.h"
#include "drvpdn.h"
#include "drv_hisr.h"
#ifdef MT6318
#include "pmic6318_sw.h"
#endif /*MT6318*/
#include "init.h"
#ifdef SIM_ADDDMA
#include "dma_hw.h"
#include "dma_sw.h"
#endif /*SIM_ADDDMA*/
#include "usim_drv.h"
#define SIM_DEFAULT_TOUT_VALUE 0x983
#define SIM_CMD_TOUT_VALUE 0x1400
kal_uint32 TOUTValue = SIM_DEFAULT_TOUT_VALUE;
static kal_uint8 TOUT_Factor=1;
/*Maybe changed when the unit of the HW TOUT counter is changed!!*/
const kal_uint8 ClkStopTimeTable[3][2]={ {0,5},
{3,11},
{6,19}
};
Sim_Card SimCard;
kal_uint8 reset_index;
kal_uint8 PTS_data[4];
kal_bool TS_HSK_ENABLE;
kal_char sim_dbg_str[100];
#ifdef MT6205B
#ifdef __SIM_ENHANCED_SPEED__
static kal_bool PTS_check = KAL_TRUE;
#else
static kal_bool PTS_check = KAL_FALSE;
#endif
#else /*!MT6205B*/
static kal_bool PTS_check = KAL_TRUE;
#endif /*!MT6205B*/
void SIM_Initialize(kal_uint8 format, kal_uint8 power);
#if ( (!defined(MT6205)) && (!defined(MT6205B)) )
kal_uint8 sim_dmaport;
#ifdef SIM_ADDDMA
static DMA_INPUT sim_input;
#ifdef MT6218B
#pragma arm section rwdata = "INTERNRW", zidata = "INTERNZI"
static kal_uint8 baud_data[640];
#pragma arm section rwdata , zidata
static DMA_FULLSIZE_HWMENU sim_menu;
extern void dma_ch1_stop(void);
extern void dma_ch1_init(kal_uint32 dstaddr, kal_uint16 len, kal_uint8 limiter);
extern void dma_ch1_start(kal_uint32 srcaddr);
#else /*!MT6218B*/
static DMA_HWMENU sim_menu;
#endif /*MT6218B*/
#endif /*SIM_ADDDMA*/
#endif /*MT6218,MT6218B*/
#ifdef SIM_ADDDMA
#if ( (defined(MT6205)) || (defined(MT6205B)) )
kal_bool SIM_DMAIni(kal_bool Tx) /*(KAL_TRUE ==> transmit, KAL_FALSE ==> receive)*/
{
if (DMA2_CheckRunStat())
DMA2_Stop();
if (DMA2_CheckITStat())
DMA2_Stop();
if (Tx == KAL_TRUE)
{
/* Size = 8bit, sinc en, dinc disable, hw management, 1 trans/dma cycle, USB master,Interrupt disable */
DRV_WriteReg(DMA2_CONTRL,DMA_CON_SimTxNormal);
}
else
{
/* Size = 8bit, sinc disable, dinc enable, hw management, 1 trans/dma cycle, USB master,Interrupt disable */
DRV_WriteReg(DMA2_CONTRL,DMA_CON_SimRxNormal);
}
return KAL_TRUE;
}
#endif /*MT6205,MT6205B*/
#endif /*SIM_ADDDMA*/
#if ( (!defined(MT6205)) && (!defined(MT6205B)) )
void SIM_L1Reset(void)
{
SIM_DisAllIntr();
#ifdef SIM_ADDDMA
if (sim_dmaport != 0)
DMA_Stop(sim_dmaport);
#endif /*SIM_ADDDMA*/
SIM_FIFO_Flush();
//De-activate SIM card
if (DRV_Reg(SIM_CTRL)&SIM_CTRL_SIMON)
{
SimCard.State = SIM_WaitRejectDone;
DRV_WriteReg(SIM_IRQEN,(SIM_IRQEN_SIMOFF|SIM_IRQEN_NATR));
DRV_Reg(SIM_CTRL) &= ~SIM_CTRL_SIMON;
}
else
{
SIM_Initialize(SimCard.Data_format,SimCard.Power);
}
}
#endif /*! MT6205,MT6205B*/
kal_uint32 SIM_GetCurrentTime(void)
{
return (DRV_Reg32(0x80200230));
}
kal_uint32 SIM_GetDurationTick(kal_uint32 previous_time, kal_uint32 current_time)
{
kal_uint32 result;
#if ( defined(MT6218B) || defined(MT6205B) )
ASSERT(0);
#endif /*MT6218B, MT6205B*/
if (previous_time > current_time)
{
#if ( defined(MT6219) || defined(MT6228) )
result = 0x80000 - previous_time + current_time;
#else /*MT6229, MT6227, MT6226, MT6217, MT6226M*/
result = 0x1000000 - previous_time + current_time;
#endif /*MT6228, MT6229, MT6227, MT6226, MT6226M*/
}
else
{
result = current_time - previous_time;
}
return result;
}
void SIM_SetRXTIDE(kal_uint16 RXTIDE)
{
kal_uint16 TIDE;
TIDE = DRV_Reg(SIM_TIDE);
TIDE &= ~SIM_TIDE_RXMASK;
TIDE |= (RXTIDE-1);
DRV_WriteReg(SIM_TIDE,TIDE);
}
void SIM_SetTXTIDE(kal_uint16 _TXTIDE)
{
kal_uint16 TIDE;
TIDE = DRV_Reg(SIM_TIDE);
TIDE &= ~SIM_TIDE_TXMASK;
TIDE |= ((_TXTIDE+1) <<8);
DRV_WriteReg(SIM_TIDE,TIDE);
}
#ifdef NoT0CTRL
kal_uint8 SIM_CheckSW(kal_uint16 ACK)
{
if ((ACK & 0x00f0) == 0x0060)
return KAL_TRUE;
if ((ACK & 0x00f0) == 0x0090)
return KAL_TRUE;
return KAL_FALSE;
}
#endif /*NoT0CTRL*/
kal_bool SIM_ResetNoATR(kal_uint8 pow) //For normal case reset
{
//Only enable SIM interrupt
SimCard.State = SIM_WAIT_FOR_ATR;
reset_index = 0;
SimCard.Power = pow;
//Deactivate the SIM card
SIM_L1Reset();
SIM_WaitEvent(SimCard,RST_READY);
if (SimCard.result == SIM_SUCCESS)
{
return KAL_TRUE;
}
else
{
return KAL_FALSE;
}
}
void SIM_Initialize(kal_uint8 format, kal_uint8 power)
{
kal_uint16 tmp;
kal_uint16 Conf;
//tmp = *(volatile kal_uint16 *)0x80140070;
//if (tmp != 1)
//while(1);
SimCard.Data_format = format;
SimCard.Power = power;
dbg_print("SIM_Initialize power: %d, format: %d, TS_HSK_ENABLE: %d", power, format, TS_HSK_ENABLE);
//Setup the SIM control module, SIM_BRR, SIM_CONF
//Set SIMCLK = 13M/4, and BAUD RATE = default value(F=372,D=1);
DRV_WriteReg(SIM_BRR,(SIM_BRR_CLK_Div4 | SIM_BRR_BAUD_Div372));
if (format != SIM_direct)
{
Conf = SIM_CONF_InDirect;
}
else
{
Conf = SIM_CONF_Direct;
}
//#ifndef PMIC_PRESENT
#ifdef MT6318
if (power == SIM_30V)
pmic_vsim_sel(VSIM_3);
else
pmic_vsim_sel(VSIM_1_8);
#elif( (!defined(MT6318))&& (!defined(MT6305)) ) //No any PMIC
if (power != SIM_30V)
{
Conf |= SIM_CONF_SIMSEL;
}
#else /*Phone setting*/
if (power == SIM_30V)
{
Conf |= SIM_CONF_SIMSEL;
}
#endif /*Phone setting*/
if (TS_HSK_ENABLE == KAL_TRUE)
Conf |= (SIM_CONF_TXHSK | SIM_CONF_RXHSK);
DRV_WriteReg(SIM_CONF,Conf);
if (TS_HSK_ENABLE == KAL_TRUE)
{
SIM_SetRXRetry(1);
SIM_SetTXRetry(1);
}
else
{
SIM_SetRXRetry(0);
SIM_SetTXRetry(0);
}
//Set the ATRTout as 9600etu
SIM_SetTOUT(TOUTValue);
// reset interrupts, flush rx, tx fifo
SIM_FIFO_Flush();
//Set the txfifo and rxfifo tide mark
SIM_SetRXTIDE(1);
//Read Interrupt Status
tmp = DRV_Reg(SIM_STS);
SimCard.State = SIM_WAIT_FOR_ATR;
//Enable Interrupt
DRV_WriteReg(SIM_IRQEN,(SIM_IRQEN_Normal & ~SIM_IRQEN_RXERR));
SimCard.recDataErr = KAL_FALSE;
//activate the SIM card, and activate the SIMCLK
SIM_Active();
////dbg_print("SIM ACtive\r\n");
}
kal_bool SIM_PTSProcess(kal_uint8 *TxBuffaddr, kal_uint8 Txlength) //Bool lalasun
{
kal_uint8 index;
kal_uint8 tmp;
#if defined(__USIM_DRV__)
if(DRV_Reg(SIM_COUNT))
USIM_CLR_FIFO();
#endif
for (index = 0; index < Txlength; index++)
{
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -