15d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly/* 25d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly * Copyright (C) 2010 NXP Semiconductors 35d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly * 45d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly * Licensed under the Apache License, Version 2.0 (the "License"); 55d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly * you may not use this file except in compliance with the License. 65d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly * You may obtain a copy of the License at 75d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly * 85d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly * http://www.apache.org/licenses/LICENSE-2.0 95d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly * 105d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly * Unless required by applicable law or agreed to in writing, software 115d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly * distributed under the License is distributed on an "AS IS" BASIS, 125d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 135d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly * See the License for the specific language governing permissions and 145d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly * limitations under the License. 155d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly */ 165d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 175d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly/*! 185d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly * \file phLibNfc_Ioctl.c 195d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 205d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly * Project: NFC FRI 1.1 215d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly * 225d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly * $Date: Mon Mar 1 19:07:05 2010 $ 235d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly * $Author: ing07385 $ 245d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly * $Revision: 1.35 $ 255d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly * $Aliases: NFC_FRI1.1_WK1008_SDK,NFC_FRI1.1_WK1007_R33_4,NFC_FRI1.1_WK1007_SDK,NFC_FRI1.1_WK1014_SDK,NFC_FRI1.1_WK1017_PREP1,NFC_FRI1.1_WK1017_R34_1,NFC_FRI1.1_WK1017_R34_2,NFC_FRI1.1_WK1019_SDK,NFC_FRI1.1_WK1024_SDK $ 265d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly * 275d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly */ 285d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 295d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly/* 305d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly************************* Header Files **************************************** 315d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly*/ 325d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 335d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#include <phLibNfcStatus.h> 345d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#include <phLibNfc.h> 355d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#include <phHal4Nfc.h> 365d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#include <phOsalNfc.h> 375d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#include <phLibNfc_Internal.h> 385d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#include <phLibNfc_ndef_raw.h> 395d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#include <phLibNfc_initiator.h> 405d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#include <phLibNfc_discovery.h> 415d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#include <phLibNfc_ioctl.h> 425d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#include <phNfcStatus.h> 435d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 445d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly/* 455d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly*************************** Macro's **************************************** 465d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly*/ 475d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 485d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#ifndef STATIC_DISABLE 495d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#define STATIC static 505d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#else 515d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#define STATIC 525d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly#endif 535d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 545d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly/* 555d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly*************************** Global Variables ********************************** 565d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly*/ 575d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 585d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick PellySTATIC phLibNfc_Ioctl_Cntx_t phLibNfc_Ioctl_Cntx; 595d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 605d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly/* 615d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly*************************** Static Function Declaration *********************** 625d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly*/ 635d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 645d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 655d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly/* Response callback for Ioctl management */ 665d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick PellySTATIC void phLibNfc_Ioctl_Mgmt_CB(void *context, 675d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly phNfc_sData_t *pOutData, 685d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly NFCSTATUS status ); 695d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 705d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 715d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly/** Response callback for UICC switch mode*/ 725d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick PellySTATIC void phLibNfc_Switch_Swp_Mode_CB( 735d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly void *context, 745d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly NFCSTATUS status 755d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly ); 765d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 775d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly/* 785d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly*************************** Function Definitions ****************************** 795d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly*/ 805d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 815d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly/** 825d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly* The I/O Control function allows the caller to configure specific 835d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly* functionality provided by the lower layer.Each feature is accessible 845d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly* via a specific IOCTL Code. 855d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly*/ 865d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick PellyNFCSTATUS phLibNfc_Mgt_IoCtl (void* pDalHandle, 875d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly uint16_t IoctlCode, 885d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly phNfc_sData_t* pInParam, 895d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly phNfc_sData_t* pOutParam, 905d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly pphLibNfc_IoctlCallback_t pIoCtl_Rsp_cb, 915d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly void* pContext 925d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly ) 935d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly{ 945d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly NFCSTATUS StatusCode=NFCSTATUS_INVALID_PARAMETER; 955d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 965d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 975d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly if((IoctlCode==0)||(NULL==pIoCtl_Rsp_cb) || 985d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly (NULL==pContext) ||(NULL==pInParam) || 995d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly (NULL==pDalHandle)) 1005d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 1015d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly StatusCode=NFCSTATUS_INVALID_PARAMETER; 1025d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly return StatusCode; 1035d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 1045d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly if(IoctlCode!= NFC_FW_DOWNLOAD) 1055d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 1065d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly if(pOutParam == NULL) 1075d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 1085d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly StatusCode = NFCSTATUS_INVALID_PARAMETER; 1095d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly return StatusCode; 1105d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 1115d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly if(( gpphLibContext == NULL) || 1125d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly (gpphLibContext->LibNfcState.cur_state == eLibNfcHalStateShutdown)) 1135d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 1145d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly StatusCode = NFCSTATUS_NOT_INITIALISED; 1155d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly return StatusCode; 1165d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 1175d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly else 1185d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 1195d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly if(gpphLibContext->LibNfcState.next_state == eLibNfcHalStateShutdown) 1205d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 1215d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly StatusCode = NFCSTATUS_SHUTDOWN; 1225d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly return StatusCode; 1235d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 1245d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 1255d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 1265d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly phLibNfc_Ioctl_Cntx.CliRspCb =pIoCtl_Rsp_cb; 1275d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly phLibNfc_Ioctl_Cntx.pCliCntx = pContext; 1285d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly phLibNfc_Ioctl_Cntx.pOutParam = pOutParam; 1295d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly phLibNfc_Ioctl_Cntx.IoctlCode = IoctlCode; 1305d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly /* Process the IOCTL requests */ 1315d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly switch(IoctlCode) 1325d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 1335d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly case NFC_FW_DOWNLOAD: 1345d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly {/* Set power status */ 1355d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly phLibNfc_Ioctl_Cntx.psHwReference = phOsalNfc_GetMemory((uint32_t)sizeof(phHal_sHwReference_t)); 1365d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly if(phLibNfc_Ioctl_Cntx.psHwReference == NULL) 1375d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly return NFCSTATUS_FAILED; 1385d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly (void)memset(phLibNfc_Ioctl_Cntx.psHwReference,0,sizeof(phHal_sHwReference_t)); 1395d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly phLibNfc_Ioctl_Cntx.psHwReference->p_board_driver = pDalHandle; 1405d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 1415d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly StatusCode = phHal4Nfc_Ioctl( phLibNfc_Ioctl_Cntx.psHwReference, 1425d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly NFC_FW_DOWNLOAD, 1435d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly pInParam, 1445d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly pOutParam, 1455d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly phLibNfc_Ioctl_Mgmt_CB, 1465d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly &phLibNfc_Ioctl_Cntx ); 1475d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly }break; 1485d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly case NFC_MEM_READ: 1495d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 1505d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly StatusCode = phHal4Nfc_Ioctl(gpphLibContext->psHwReference, 1515d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly NFC_MEM_READ, 1525d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly pInParam, 1535d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly pOutParam, 1545d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly phLibNfc_Ioctl_Mgmt_CB, 1555d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly &phLibNfc_Ioctl_Cntx ); 1565d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 1575d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly }break; 1585d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly case NFC_MEM_WRITE: 1595d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 1605d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 1615d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly StatusCode = phHal4Nfc_Ioctl( gpphLibContext->psHwReference, 1625d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly NFC_MEM_WRITE, 1635d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly pInParam, 1645d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly pOutParam, 1655d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly phLibNfc_Ioctl_Mgmt_CB, 1665d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly &phLibNfc_Ioctl_Cntx ); 1675d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 1685d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly }break; 1695d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly case PHLIBNFC_ANTENNA_TEST: 1705d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 1715d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 1725d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly StatusCode = phHal4Nfc_Ioctl( gpphLibContext->psHwReference, 1735d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly PHLIBNFC_ANTENNA_TEST, 1745d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly pInParam, 1755d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly pOutParam, 1765d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly phLibNfc_Ioctl_Mgmt_CB, 1775d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly &phLibNfc_Ioctl_Cntx ); 1785d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 1795d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly }break; 1805d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly case PHLIBNFC_SWP_TEST: 1815d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 1825d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 1835d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly StatusCode = phHal4Nfc_Ioctl( gpphLibContext->psHwReference, 1845d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly PHLIBNFC_SWP_TEST, 1855d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly pInParam, 1865d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly pOutParam, 1875d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly phLibNfc_Ioctl_Mgmt_CB, 1885d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly &phLibNfc_Ioctl_Cntx ); 1895d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 1905d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly }break; 1915d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 1925d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly case PHLIBNFC_PRBS_TEST: 1935d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 1945d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly StatusCode = phHal4Nfc_Ioctl( gpphLibContext->psHwReference, 1955d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly PHLIBNFC_PRBS_TEST, 1965d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly pInParam, 1975d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly pOutParam, 1985d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly phLibNfc_Ioctl_Mgmt_CB, 1995d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly &phLibNfc_Ioctl_Cntx ); 2005d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 2015d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 2025d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly }break; 2035d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly case PHLIBNFC_SWITCH_SWP_MODE: 2045d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 2055d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly StatusCode = phHal4Nfc_Switch_Swp_Mode( gpphLibContext->psHwReference, 2065d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly (phHal_eSWP_Mode_t)pInParam->buffer[0], 2075d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly phLibNfc_Switch_Swp_Mode_CB, 2085d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly &phLibNfc_Ioctl_Cntx 2095d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly ); 2105d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 2115d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 2125d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly }break; 2135d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly default : 2145d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 2155d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly /* don't do any thing*/ 2165d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly }break; 2175d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 2185d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } /* End of IOCTL switch */ 2195d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly if(StatusCode!=NFCSTATUS_PENDING) 2205d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 2215d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly StatusCode = NFCSTATUS_FAILED; 2225d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 2235d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly else 2245d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 2255d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly if(IoctlCode!= NFC_FW_DOWNLOAD) 2265d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 2275d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly gpphLibContext->status.GenCb_pending_status=TRUE; 2285d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 2295d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 2305d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly return StatusCode; 2315d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 2325d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly} /* End of IOCTL handler function */ 2335d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 2345d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 2355d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 2365d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick PellySTATIC void phLibNfc_Ioctl_Mgmt_CB(void *context, 2375d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly phNfc_sData_t *pOutData, 2385d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly NFCSTATUS status ) 2395d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly{ 2405d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly phLibNfc_Ioctl_Cntx_t *pIoctlCntx=NULL; 2416dd948323de0f31b413c9f19a905f1c145c9c456Rob von Behren if(PHNFCSTATUS(status) == NFCSTATUS_FEATURE_NOT_SUPPORTED) 2426dd948323de0f31b413c9f19a905f1c145c9c456Rob von Behren { 2436dd948323de0f31b413c9f19a905f1c145c9c456Rob von Behren status = NFCSTATUS_FEATURE_NOT_SUPPORTED; 2446dd948323de0f31b413c9f19a905f1c145c9c456Rob von Behren } 2456dd948323de0f31b413c9f19a905f1c145c9c456Rob von Behren else if(PHNFCSTATUS(status)!=NFCSTATUS_SUCCESS) 2465d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 2475d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly status = NFCSTATUS_FAILED; 2485d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 2495d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly if(gpphLibContext!= NULL) 2505d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 2515d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly if(eLibNfcHalStateShutdown == gpphLibContext->LibNfcState.next_state) 2525d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 2535d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly /*If shutdown called in between allow shutdown to happen*/ 2545d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly phLibNfc_Pending_Shutdown(); 2555d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly status = NFCSTATUS_SHUTDOWN; 2565d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 2575d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 2585d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly pIoctlCntx= (phLibNfc_Ioctl_Cntx_t*)context; 2595d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly if( pIoctlCntx !=NULL) 2605d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 2615d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly switch(pIoctlCntx->IoctlCode) 2625d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 2635d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly case NFC_FW_DOWNLOAD: 2645d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 2655d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly /*Release the hardware reference memory*/ 2665d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly phOsalNfc_FreeMemory(pIoctlCntx->psHwReference); 2675d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly }break; 2685d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly case NFC_MEM_READ: 2695d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 2705d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 2715d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly }break; 2725d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly case NFC_MEM_WRITE: 2735d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 2745d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 2755d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly }break; 2765d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 2775d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly case PHLIBNFC_ANTENNA_TEST: 2785d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 2795d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 2805d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly }break; 2815d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly case PHLIBNFC_SWP_TEST: 2825d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 2835d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 2845d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly }break; 2855d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly case PHLIBNFC_PRBS_TEST: 2865d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 2875d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 2885d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly }break; 2895d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly default: 2905d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 2915d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 2925d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 2935d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly pIoctlCntx->CliRspCb(pIoctlCntx->pCliCntx,pOutData,status); 2945d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly if(gpphLibContext!= NULL) 2955d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 2965d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly gpphLibContext->status.GenCb_pending_status=FALSE; 2975d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 2985d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 2995d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly} 3005d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 3015d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick PellySTATIC void phLibNfc_Switch_Swp_Mode_CB( 3025d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly void *context, 3035d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly NFCSTATUS status 3045d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly ) 3055d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly{ 3065d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly if(PHNFCSTATUS(status)!=NFCSTATUS_SUCCESS) 3075d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 3085d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly status = NFCSTATUS_FAILED; 3095d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 3105d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly if(gpphLibContext!= NULL) 3115d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 3125d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly if(eLibNfcHalStateShutdown == gpphLibContext->LibNfcState.next_state) 3135d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 3145d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly /*If shutdown called in between allow shutdown to happen*/ 3155d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly phLibNfc_Pending_Shutdown(); 3165d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly status = NFCSTATUS_SHUTDOWN; 3175d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 3185d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 3195d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly if((NULL != context)&&(context == (void *)&phLibNfc_Ioctl_Cntx)) 3205d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 3215d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly if(NULL != phLibNfc_Ioctl_Cntx.CliRspCb) 3225d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly { 3235d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly (*phLibNfc_Ioctl_Cntx.CliRspCb)( 3245d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly phLibNfc_Ioctl_Cntx.pCliCntx, 3255d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly phLibNfc_Ioctl_Cntx.pOutParam, 3265d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly status 3275d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly ); 3285d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 3295d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly } 3305d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly return; 3315d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly} 3325d9927ba30ba449badb9f6df0fbeb4d6aedc6e2aNick Pelly 333