1e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/****************************************************************************** 2e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * 3e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * Copyright (C) 2012 Broadcom Corporation 4e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * 5e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 6e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * you may not use this file except in compliance with the License. 7e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * You may obtain a copy of the License at: 8e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * 9e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 10e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * 11e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 12e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 13e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * See the License for the specific language governing permissions and 15e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * limitations under the License. 16e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * 17e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ******************************************************************************/ 18e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 19e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/****************************************************************************** 20e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * 21e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * HAL Adaptation Interface (HAI). This interface regulates the interaction 22e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * between standard Android HAL and Broadcom-specific HAL. It adapts 23e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * Broadcom-specific features to the Android framework. 24e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * 25e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ******************************************************************************/ 26e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define LOG_TAG "NfcNciHal" 27e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#include "OverrideLog.h" 28e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#include "HalAdaptation.h" 29e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#include "SyncEvent.h" 30e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#include "config.h" 31e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#include "nfc_hal_int.h" 32e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#include "nfc_hal_post_reset.h" 33e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#include <errno.h> 34e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#include <pthread.h> 358df564e55201ea56bea9da4587c0d25f5ecf90baMartijn Coenen#include <cutils/properties.h> 365c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen#include "buildcfg.h" 37a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu#include "android_logmsg.h" 38edbfba90df8e223fadd787a10cb131e1dcfa7347Evan Chuextern void delete_hal_non_volatile_store (bool forceDelete); 39edbfba90df8e223fadd787a10cb131e1dcfa7347Evan Chuextern void verify_hal_non_volatile_store (); 40a5c7b4468b580946f0dd6ab73168071be5214ab3Evan Chuextern void resetConfig (); 415c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenenextern "C" 425c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen{ 435c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen#include "userial.h" 445c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen} 45e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 46a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chuextern void configureCrystalFrequency (); 47e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 48e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/////////////////////////////////////// 49e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project// private declaration, definition 50e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 51e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 52e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectstatic nfc_stack_callback_t* gAndroidHalCallback = NULL; 53e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectstatic nfc_stack_data_callback_t* gAndroidHalDataCallback = NULL; 54e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectstatic SyncEvent gOpenCompletedEvent; 55e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectstatic SyncEvent gPostInitCompletedEvent; 56e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectstatic SyncEvent gCloseCompletedEvent; 57e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 58e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjectUINT32 ScrProtocolTraceFlag = SCR_PROTO_TRACE_ALL; //0x017F00; 59e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 60e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectstatic void BroadcomHalCallback (UINT8 event, tHAL_NFC_STATUS status); 61e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectstatic void BroadcomHalDataCallback (UINT16 data_len, UINT8* p_data); 62e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 63eecdc2f8c53010e74fb4953acbed6249580fef97Paul Chaissonstatic bool isColdBoot = true; 64eecdc2f8c53010e74fb4953acbed6249580fef97Paul Chaisson 650eb7353a4877b921c2d4b9226ecad2d1cc672dcbPaul Chaissonextern tNFC_HAL_CFG *p_nfc_hal_cfg; 660976d37081fae8bcd4fc4dcf7996e1ce194fb4b1Evan Chuextern const UINT8 nfca_version_string []; 670976d37081fae8bcd4fc4dcf7996e1ce194fb4b1Evan Chuextern const UINT8 nfa_version_string []; 68e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 69c6d8cda88d41587a86032d6cc778e920dab94cf8Paul ChaissontNFC_HAL_DM_PRE_SET_MEM nfc_hal_pre_set_mem_20795a1 [] = 70c6d8cda88d41587a86032d6cc778e920dab94cf8Paul Chaisson{ 71c6d8cda88d41587a86032d6cc778e920dab94cf8Paul Chaisson {0x0016403c, 0x00000008}, 72c6d8cda88d41587a86032d6cc778e920dab94cf8Paul Chaisson {0x0016403c, 0x00000000}, 73c6d8cda88d41587a86032d6cc778e920dab94cf8Paul Chaisson {0x0014008c, 0x00000001}, 74c6d8cda88d41587a86032d6cc778e920dab94cf8Paul Chaisson {0, 0} 75c6d8cda88d41587a86032d6cc778e920dab94cf8Paul Chaisson}; 76c6d8cda88d41587a86032d6cc778e920dab94cf8Paul Chaisson 77c6d8cda88d41587a86032d6cc778e920dab94cf8Paul Chaissonextern tNFC_HAL_DM_PRE_SET_MEM *p_nfc_hal_dm_pre_set_mem; 78c6d8cda88d41587a86032d6cc778e920dab94cf8Paul Chaisson 79e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/////////////////////////////////////// 80e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 81e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 82e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectint HaiInitializeLibrary (const bcm2079x_dev_t* device) 83e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 84e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ALOGD ("%s: enter", __FUNCTION__); 850976d37081fae8bcd4fc4dcf7996e1ce194fb4b1Evan Chu ALOGE ("%s: ver=%s nfa=%s", __FUNCTION__, nfca_version_string, nfa_version_string); 86e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project int retval = EACCES; 87e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project unsigned long freq = 0; 88e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project unsigned long num = 0; 895c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen char temp[120]; 908df564e55201ea56bea9da4587c0d25f5ecf90baMartijn Coenen int8_t prop_value; 915c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen UINT8 logLevel = 0; 92e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 935c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen logLevel = InitializeGlobalAppLogLevel (); 94e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 95c6d8cda88d41587a86032d6cc778e920dab94cf8Paul Chaisson if ( GetNumValue ( NAME_GLOBAL_RESET, &num, sizeof ( num ) ) ) 96c6d8cda88d41587a86032d6cc778e920dab94cf8Paul Chaisson { 97c6d8cda88d41587a86032d6cc778e920dab94cf8Paul Chaisson if (num == 1) 98c6d8cda88d41587a86032d6cc778e920dab94cf8Paul Chaisson { 99c6d8cda88d41587a86032d6cc778e920dab94cf8Paul Chaisson // Send commands to disable boc 100c6d8cda88d41587a86032d6cc778e920dab94cf8Paul Chaisson p_nfc_hal_dm_pre_set_mem = nfc_hal_pre_set_mem_20795a1; 101c6d8cda88d41587a86032d6cc778e920dab94cf8Paul Chaisson } 102c6d8cda88d41587a86032d6cc778e920dab94cf8Paul Chaisson } 103c6d8cda88d41587a86032d6cc778e920dab94cf8Paul Chaisson 104a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu configureCrystalFrequency (); 1055a7e857aee2ebba4e369936aa5acdc7bcecf83e7Evan Chu verify_hal_non_volatile_store (); 1065c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen if ( GetNumValue ( NAME_PRESERVE_STORAGE, (char*)&num, sizeof ( num ) ) && 1075c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen (num == 1) ) 1085c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen ALOGD ("%s: preserve HAL NV store", __FUNCTION__); 1095c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen else 110edbfba90df8e223fadd787a10cb131e1dcfa7347Evan Chu { 111edbfba90df8e223fadd787a10cb131e1dcfa7347Evan Chu delete_hal_non_volatile_store (false); 112edbfba90df8e223fadd787a10cb131e1dcfa7347Evan Chu } 113e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 114a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu if ( GetNumValue ( NAME_USE_RAW_NCI_TRACE, &num, sizeof ( num ) ) ) 115a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu { 116a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu if (num == 1) 117a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu { 118a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu // display protocol traces in raw format 119a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu ProtoDispAdapterUseRawOutput (TRUE); 120a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu } 121a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu } 122a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu 123e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project // Initialize protocol logging level 124e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if ( GetNumValue ( NAME_PROTOCOL_TRACE_LEVEL, &num, sizeof ( num ) ) ) 125e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ScrProtocolTraceFlag = num; 126e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1275c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen tUSERIAL_OPEN_CFG cfg; 1285c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen struct tUART_CONFIG uart; 1295c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen 1305c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen if ( GetStrValue ( NAME_UART_PARITY, temp, sizeof ( temp ) ) ) 1315c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen { 1325c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen if ( strcmp ( temp, "even" ) == 0 ) 1335c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen uart.m_iParity = USERIAL_PARITY_EVEN; 1345c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen else if ( strcmp ( temp, "odd" ) == 0 ) 1355c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen uart.m_iParity = USERIAL_PARITY_ODD; 1365c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen else if ( strcmp ( temp, "none" ) == 0 ) 1375c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen uart.m_iParity = USERIAL_PARITY_NONE; 1385c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen } 1395c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen else 1405c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen uart.m_iParity = USERIAL_PARITY_NONE; 1415c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen 1425c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen if ( GetStrValue ( NAME_UART_STOPBITS, temp, sizeof ( temp ) ) ) 1435c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen { 1445c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen if ( strcmp ( temp, "1" ) == 0 ) 1455c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen uart.m_iStopbits = USERIAL_STOPBITS_1; 1465c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen else if ( strcmp ( temp, "2" ) == 0 ) 1475c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen uart.m_iStopbits = USERIAL_STOPBITS_2; 1485c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen else if ( strcmp ( temp, "1.5" ) == 0 ) 1495c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen uart.m_iStopbits = USERIAL_STOPBITS_1_5; 1505c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen } 1515c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen else if ( GetNumValue ( NAME_UART_STOPBITS, &num, sizeof ( num ) ) ) 1525c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen { 1535c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen if ( num == 1 ) 1545c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen uart.m_iStopbits = USERIAL_STOPBITS_1; 1555c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen else if ( num == 2 ) 1565c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen uart.m_iStopbits = USERIAL_STOPBITS_2; 1575c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen } 1585c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen else 1595c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen uart.m_iStopbits = USERIAL_STOPBITS_1; 1605c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen 1615c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen if ( GetNumValue ( NAME_UART_DATABITS, &num, sizeof ( num ) ) ) 1625c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen { 1635c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen if ( 5 <= num && num <= 8 ) 1645c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen uart.m_iDatabits = ( 1 << ( num + 1 ) ); 1655c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen } 1665c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen else 1675c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen uart.m_iDatabits = USERIAL_DATABITS_8; 168e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1695c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen if ( GetNumValue ( NAME_UART_BAUD, &num, sizeof ( num ) ) ) 1705c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen { 1715c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen if ( num == 300 ) uart.m_iBaudrate = USERIAL_BAUD_300; 1725c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen else if ( num == 600 ) uart.m_iBaudrate = USERIAL_BAUD_600; 1735c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen else if ( num == 1200 ) uart.m_iBaudrate = USERIAL_BAUD_1200; 1745c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen else if ( num == 2400 ) uart.m_iBaudrate = USERIAL_BAUD_2400; 1755c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen else if ( num == 9600 ) uart.m_iBaudrate = USERIAL_BAUD_9600; 1765c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen else if ( num == 19200 ) uart.m_iBaudrate = USERIAL_BAUD_19200; 1775c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen else if ( num == 57600 ) uart.m_iBaudrate = USERIAL_BAUD_57600; 1785c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen else if ( num == 115200 ) uart.m_iBaudrate = USERIAL_BAUD_115200; 1795c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen else if ( num == 230400 ) uart.m_iBaudrate = USERIAL_BAUD_230400; 1805c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen else if ( num == 460800 ) uart.m_iBaudrate = USERIAL_BAUD_460800; 1815c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen else if ( num == 921600 ) uart.m_iBaudrate = USERIAL_BAUD_921600; 1825c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen } 1835c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen else if ( GetStrValue ( NAME_UART_BAUD, temp, sizeof ( temp ) ) ) 1845c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen { 1855c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen if ( strcmp ( temp, "auto" ) == 0 ) 1865c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen uart.m_iBaudrate = USERIAL_BAUD_AUTO; 187e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 1885c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen else 1895c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen uart.m_iBaudrate = USERIAL_BAUD_115200; 1905c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen 1915c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen memset (&cfg, 0, sizeof(tUSERIAL_OPEN_CFG)); 1925c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen cfg.fmt = uart.m_iDatabits | uart.m_iParity | uart.m_iStopbits; 1935c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen cfg.baud = uart.m_iBaudrate; 1945c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen 1955c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen ALOGD ("%s: uart config=0x%04x, %d\n", __func__, cfg.fmt, cfg.baud); 1965c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen USERIAL_Init(&cfg); 1975c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen 1980eb7353a4877b921c2d4b9226ecad2d1cc672dcbPaul Chaisson if ( GetNumValue ( NAME_NFCC_ENABLE_TIMEOUT, &num, sizeof ( num ) ) ) 1990eb7353a4877b921c2d4b9226ecad2d1cc672dcbPaul Chaisson { 2000eb7353a4877b921c2d4b9226ecad2d1cc672dcbPaul Chaisson p_nfc_hal_cfg->nfc_hal_nfcc_enable_timeout = num; 2010eb7353a4877b921c2d4b9226ecad2d1cc672dcbPaul Chaisson } 2020eb7353a4877b921c2d4b9226ecad2d1cc672dcbPaul Chaisson 203b20cbf35a541d380f32d1f43a78feb44e9e0dc1bPaul Chaisson if ( GetNumValue ( NAME_NFA_MAX_EE_SUPPORTED, &num, sizeof ( num ) ) && num == 0 ) 204b20cbf35a541d380f32d1f43a78feb44e9e0dc1bPaul Chaisson { 205b20cbf35a541d380f32d1f43a78feb44e9e0dc1bPaul Chaisson // Since NFA_MAX_EE_SUPPORTED is explicetly set to 0, no UICC support is needed. 206b20cbf35a541d380f32d1f43a78feb44e9e0dc1bPaul Chaisson p_nfc_hal_cfg->nfc_hal_hci_uicc_support = 0; 207b20cbf35a541d380f32d1f43a78feb44e9e0dc1bPaul Chaisson } 208b20cbf35a541d380f32d1f43a78feb44e9e0dc1bPaul Chaisson 2098df564e55201ea56bea9da4587c0d25f5ecf90baMartijn Coenen prop_value = property_get_bool("nfc.bcm2079x.isColdboot", 0); 2108df564e55201ea56bea9da4587c0d25f5ecf90baMartijn Coenen if (prop_value) { 2118df564e55201ea56bea9da4587c0d25f5ecf90baMartijn Coenen isColdBoot = true; 2128df564e55201ea56bea9da4587c0d25f5ecf90baMartijn Coenen property_set("nfc.bcm2079x.isColdboot", "0"); 2138df564e55201ea56bea9da4587c0d25f5ecf90baMartijn Coenen } 214eecdc2f8c53010e74fb4953acbed6249580fef97Paul Chaisson // Set 'first boot' flag based on static variable that will get set to false 215eecdc2f8c53010e74fb4953acbed6249580fef97Paul Chaisson // after the stack has first initialized the EE. 216eecdc2f8c53010e74fb4953acbed6249580fef97Paul Chaisson p_nfc_hal_cfg->nfc_hal_first_boot = isColdBoot ? TRUE : FALSE; 217a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu 2185c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen HAL_NfcInitialize (); 2195c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen HAL_NfcSetTraceLevel (logLevel); // Initialize HAL's logging level 220e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 221e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project retval = 0; 222e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ALOGD ("%s: exit %d", __FUNCTION__, retval); 223e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return retval; 224e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 225e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 226e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 227e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectint HaiTerminateLibrary () 228e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 229e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project int retval = EACCES; 230e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ALOGD ("%s: enter", __FUNCTION__); 231e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 232e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project HAL_NfcTerminate (); 233e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project gAndroidHalCallback = NULL; 234e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project gAndroidHalDataCallback = NULL; 235e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project GKI_shutdown (); 236a5c7b4468b580946f0dd6ab73168071be5214ab3Evan Chu resetConfig (); 237e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project retval = 0; 238e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ALOGD ("%s: exit %d", __FUNCTION__, retval); 239e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return retval; 240e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 241e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 242e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 243e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectint HaiOpen (const bcm2079x_dev_t* device, nfc_stack_callback_t* halCallbackFunc, nfc_stack_data_callback_t* halDataCallbackFunc) 244e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 245e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ALOGD ("%s: enter", __FUNCTION__); 246e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project int retval = EACCES; 247e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 248e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project gAndroidHalCallback = halCallbackFunc; 249e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project gAndroidHalDataCallback = halDataCallbackFunc; 250e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 251e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project SyncEventGuard guard (gOpenCompletedEvent); 252e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project HAL_NfcOpen (BroadcomHalCallback, BroadcomHalDataCallback); 253e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project gOpenCompletedEvent.wait (); 254e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 255e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project retval = 0; 256e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ALOGD ("%s: exit %d", __FUNCTION__, retval); 257e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return retval; 258e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 259e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 260e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 261e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectvoid BroadcomHalCallback (UINT8 event, tHAL_NFC_STATUS status) 262e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 263e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ALOGD ("%s: enter; event=0x%X", __FUNCTION__, event); 264e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project switch (event) 265e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 266e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case HAL_NFC_OPEN_CPLT_EVT: 267e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 268e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ALOGD ("%s: HAL_NFC_OPEN_CPLT_EVT; status=0x%X", __FUNCTION__, status); 269e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project SyncEventGuard guard (gOpenCompletedEvent); 270e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project gOpenCompletedEvent.notifyOne (); 271e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project break; 272e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 273e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 274e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case HAL_NFC_POST_INIT_CPLT_EVT: 275e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 276e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ALOGD ("%s: HAL_NFC_POST_INIT_CPLT_EVT", __FUNCTION__); 277e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project SyncEventGuard guard (gPostInitCompletedEvent); 278e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project gPostInitCompletedEvent.notifyOne (); 279e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project break; 280e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 281e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 282e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case HAL_NFC_CLOSE_CPLT_EVT: 283e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 284e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ALOGD ("%s: HAL_NFC_CLOSE_CPLT_EVT", __FUNCTION__); 285e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project SyncEventGuard guard (gCloseCompletedEvent); 286e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project gCloseCompletedEvent.notifyOne (); 287e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project break; 288e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 289e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 290e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project case HAL_NFC_ERROR_EVT: 291e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 292e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ALOGD ("%s: HAL_NFC_ERROR_EVT", __FUNCTION__); 293e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 294e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project SyncEventGuard guard (gOpenCompletedEvent); 295e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project gOpenCompletedEvent.notifyOne (); 296e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 297e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 298e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project SyncEventGuard guard (gPostInitCompletedEvent); 299e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project gPostInitCompletedEvent.notifyOne (); 300e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 301e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 302e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project SyncEventGuard guard (gCloseCompletedEvent); 303e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project gCloseCompletedEvent.notifyOne (); 304e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 305e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project break; 306e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 307e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 308e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project gAndroidHalCallback (event, status); 309e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ALOGD ("%s: exit; event=0x%X", __FUNCTION__, event); 310e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 311e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 312e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 313e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectvoid BroadcomHalDataCallback (UINT16 data_len, UINT8* p_data) 314e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 315e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ALOGD ("%s: enter; len=%u", __FUNCTION__, data_len); 316e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project gAndroidHalDataCallback (data_len, p_data); 317e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 318e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 319e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 320e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectint HaiClose (const bcm2079x_dev_t* device) 321e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 322e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ALOGD ("%s: enter", __FUNCTION__); 323e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project int retval = EACCES; 324e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 325e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project SyncEventGuard guard (gCloseCompletedEvent); 326e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project HAL_NfcClose (); 327e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project gCloseCompletedEvent.wait (); 328e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project retval = 0; 329e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ALOGD ("%s: exit %d", __FUNCTION__, retval); 330e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return retval; 331e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 332e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 333e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 334e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectint HaiCoreInitialized (const bcm2079x_dev_t* device, uint8_t* coreInitResponseParams) 335e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 336e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ALOGD ("%s: enter", __FUNCTION__); 337e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project int retval = EACCES; 338e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 339e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project SyncEventGuard guard (gPostInitCompletedEvent); 340e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project HAL_NfcCoreInitialized (coreInitResponseParams); 341e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project gPostInitCompletedEvent.wait (); 342e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project retval = 0; 343e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ALOGD ("%s: exit %d", __FUNCTION__, retval); 344e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return retval; 345e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 346e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 347e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 348e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectint HaiWrite (const bcm2079x_dev_t* dev, uint16_t dataLen, const uint8_t* data) 349e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 350e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ALOGD ("%s: enter; len=%u", __FUNCTION__, dataLen); 351e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project int retval = EACCES; 352e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 353e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project HAL_NfcWrite (dataLen, const_cast<UINT8*> (data)); 354e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project retval = 0; 355e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ALOGD ("%s: exit %d", __FUNCTION__, retval); 356e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return retval; 357e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 358e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 359e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 360e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectint HaiPreDiscover (const bcm2079x_dev_t* device) 361e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 362e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ALOGD ("%s: enter", __FUNCTION__); 363e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project int retval = EACCES; 364e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 365c517d0ed11a775fd7d102ec2d0345275e7ecf71aEvan Chu // This function is a clear indication that the stack is initializing 366c517d0ed11a775fd7d102ec2d0345275e7ecf71aEvan Chu // EE. So we can reset the cold-boot flag here. 367c517d0ed11a775fd7d102ec2d0345275e7ecf71aEvan Chu isColdBoot = false; 36845e68232b8524aca5165dca28b994ec8c11593b1Evan Chu retval = HAL_NfcPreDiscover () ? 1 : 0; 369e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ALOGD ("%s: exit %d", __FUNCTION__, retval); 370e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return retval; 371e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 372e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 373e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 374e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectint HaiControlGranted (const bcm2079x_dev_t* device) 375e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 376e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ALOGD ("%s: enter", __FUNCTION__); 377e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project int retval = EACCES; 378e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 379e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project HAL_NfcControlGranted (); 380e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project retval = 0; 381e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ALOGD ("%s: exit %d", __FUNCTION__, retval); 382e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return retval; 383e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 384e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 385e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 386e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectint HaiPowerCycle (const bcm2079x_dev_t* device) 387e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 388e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ALOGD ("%s: enter", __FUNCTION__); 389e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project int retval = EACCES; 390e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 391e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project HAL_NfcPowerCycle (); 392e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project retval = 0; 393e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ALOGD ("%s: exit %d", __FUNCTION__, retval); 394e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return retval; 395e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 3965c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen 397b20cbf35a541d380f32d1f43a78feb44e9e0dc1bPaul Chaisson 398b20cbf35a541d380f32d1f43a78feb44e9e0dc1bPaul Chaissonint HaiGetMaxNfcee (const bcm2079x_dev_t* device, uint8_t* maxNfcee) 399b20cbf35a541d380f32d1f43a78feb44e9e0dc1bPaul Chaisson{ 400b20cbf35a541d380f32d1f43a78feb44e9e0dc1bPaul Chaisson ALOGD ("%s: enter", __FUNCTION__); 401b20cbf35a541d380f32d1f43a78feb44e9e0dc1bPaul Chaisson int retval = EACCES; 402b20cbf35a541d380f32d1f43a78feb44e9e0dc1bPaul Chaisson 403eecdc2f8c53010e74fb4953acbed6249580fef97Paul Chaisson // This function is a clear indication that the stack is initializing 404eecdc2f8c53010e74fb4953acbed6249580fef97Paul Chaisson // EE. So we can reset the cold-boot flag here. 405eecdc2f8c53010e74fb4953acbed6249580fef97Paul Chaisson isColdBoot = false; 406eecdc2f8c53010e74fb4953acbed6249580fef97Paul Chaisson 407b20cbf35a541d380f32d1f43a78feb44e9e0dc1bPaul Chaisson if ( maxNfcee ) 408b20cbf35a541d380f32d1f43a78feb44e9e0dc1bPaul Chaisson { 409a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu *maxNfcee = HAL_NfcGetMaxNfcee (); 410b20cbf35a541d380f32d1f43a78feb44e9e0dc1bPaul Chaisson ALOGD("%s: max_ee from HAL to use %d", __FUNCTION__, *maxNfcee); 411b20cbf35a541d380f32d1f43a78feb44e9e0dc1bPaul Chaisson retval = 0; 412b20cbf35a541d380f32d1f43a78feb44e9e0dc1bPaul Chaisson } 413b20cbf35a541d380f32d1f43a78feb44e9e0dc1bPaul Chaisson ALOGD ("%s: exit %d", __FUNCTION__, retval); 414b20cbf35a541d380f32d1f43a78feb44e9e0dc1bPaul Chaisson return retval; 415b20cbf35a541d380f32d1f43a78feb44e9e0dc1bPaul Chaisson} 416a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu 417