VEN & eSE SVDD power is not high during Secure Timer is Running

这个提交包含在:
nxpandroid
2017-10-16 16:19:15 +05:30
父节点 acdce17254
当前提交 4fb8563652
修改 2 个文件,包含 44 行新增4 行删除

查看文件

@@ -70,7 +70,7 @@
#include <linux/timer.h>
#include "pn553.h"
#define NEXUS5x 1
#define NEXUS5x 0
#define HWINFO 0
#if NEXUS5x
#undef ISO_RST
@@ -119,6 +119,7 @@ static bool sIsWakeLocked = false;
static struct pn544_dev *pn544_dev;
static struct semaphore ese_access_sema;
static struct semaphore svdd_sync_onoff_sema;
static struct completion dwp_onoff_sema;
static struct timer_list secure_timer;
static void release_ese_lock(p61_access_state_t p61_current_state);
int get_ese_lock(p61_access_state_t p61_current_state, int timeout);
@@ -382,6 +383,31 @@ static int release_svdd_wait(void)
pr_info("%s: Exit\n", __func__);
return 0;
}
static void dwp_OnOff(long nfc_service_pid, p61_access_state_t origin)
{
int timeout = 100; //100 ms timeout
unsigned long tempJ = msecs_to_jiffies(timeout);
if(nfc_service_pid)
{
if (0 == signal_handler(origin, nfc_service_pid))
{
init_completion(&dwp_onoff_sema);
if(wait_for_completion_timeout(&dwp_onoff_sema, tempJ) != 0)
{
pr_info("Dwp On/off wait protection: Timeout");
}
pr_info("Dwp On/Off wait protection : released");
}
}
}
static int release_dwpOnOff_wait(void)
{
pr_info("%s: Enter \n", __func__);
complete(&dwp_onoff_sema);
return 0;
}
static int pn544_dev_open(struct inode *inode, struct file *filp)
{
struct pn544_dev *pn544_dev = container_of(filp->private_data,
@@ -419,6 +445,9 @@ long pn544_dev_ioctl(struct file *filp, unsigned int cmd,
case P544_SET_NFC_SERVICE_PID:
return set_nfc_pid(arg);
break;
case P544_REL_DWPONOFF_WAIT:
return release_dwpOnOff_wait();
break;
default:
break;
}
@@ -540,7 +569,8 @@ long pn544_dev_ioctl(struct file *filp, unsigned int cmd,
if (!(current_state & P61_STATE_JCP_DWNLD)){
if(pn544_dev->nfc_service_pid){
pr_info("nfc service pid %s ---- %ld", __func__, pn544_dev->nfc_service_pid);
signal_handler(P61_STATE_SPI, pn544_dev->nfc_service_pid);
/*signal_handler(P61_STATE_SPI, pn544_dev->nfc_service_pid);*/
dwp_OnOff(pn544_dev->nfc_service_pid, P61_STATE_SPI);
}
else{
pr_info(" invalid nfc service pid....signalling failed%s ---- %ld", __func__, pn544_dev->nfc_service_pid);
@@ -720,7 +750,8 @@ long pn544_dev_ioctl(struct file *filp, unsigned int cmd,
if (current_state & P61_STATE_WIRED){
if(pn544_dev->nfc_service_pid){
pr_info("nfc service pid %s ---- %ld", __func__, pn544_dev->nfc_service_pid);
signal_handler(P61_STATE_SPI_PRIO, pn544_dev->nfc_service_pid);
/*signal_handler(P61_STATE_SPI_PRIO, pn544_dev->nfc_service_pid);*/
dwp_OnOff(pn544_dev->nfc_service_pid, P61_STATE_SPI_PRIO);
}
else{
pr_info(" invalid nfc service pid....signalling failed%s ---- %ld", __func__, pn544_dev->nfc_service_pid);

查看文件

@@ -92,8 +92,17 @@
*
*/
#define PN544_SET_DWNLD_STATUS _IOW(PN544_MAGIC, 0x09, long)
/*
NFC will call the ioctl to release the dwp on/off protection
*/
#define P544_REL_DWPONOFF_WAIT _IOW(PN544_MAGIC, 0x0A, long)
/*
NFC will call the ioctl to start Secure Timer
*/
#define P544_SECURE_TIMER_SESSION _IOW(PN544_MAGIC, 0x0B, long)
#define P544_SECURE_TIMER_SESSION _IOW(PN544_MAGIC, 0x0A, long)
#define MAX_ESE_ACCESS_TIME_OUT_MS 200 /*100 milliseconds*/
typedef enum p61_access_state{