Home | History | Annotate | Download | only in src
      1 /*
      2  * Copyright (C) 2010 NXP Semiconductors
      3  *
      4  * Licensed under the Apache License, Version 2.0 (the "License");
      5  * you may not use this file except in compliance with the License.
      6  * You may obtain a copy of the License at
      7  *
      8  *      http://www.apache.org/licenses/LICENSE-2.0
      9  *
     10  * Unless required by applicable law or agreed to in writing, software
     11  * distributed under the License is distributed on an "AS IS" BASIS,
     12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     13  * See the License for the specific language governing permissions and
     14  * limitations under the License.
     15  */
     16 
     17 /*!
     18 * =========================================================================== *
     19 *                                                                             *
     20 *                                                                             *
     21 * \file  phHciNfc_Generic.h                                                   *
     22 * \brief Common HCI Header for the Generic HCI Management.                    *
     23 *                                                                             *
     24 *                                                                             *
     25 * Project: NFC-FRI-1.1                                                        *
     26 *                                                                             *
     27 * $Date: Mon Mar 29 17:34:47 2010 $                                           *
     28 * $Author: ing04880 $                                                         *
     29 * $Revision: 1.73 $                                                           *
     30 * $Aliases: NFC_FRI1.1_WK1007_R33_4,NFC_FRI1.1_WK1017_PREP1,NFC_FRI1.1_WK1017_R34_1,NFC_FRI1.1_WK1017_R34_2,NFC_FRI1.1_WK1023_R35_1 $
     31 *                                                                             *
     32 * =========================================================================== *
     33 */
     34 
     35 /*@{*/
     36 #ifndef PHHCINFC_GENERIC_H
     37 #define PHHCINFC_GENERIC_H
     38 
     39 /*@}*/
     40 
     41 
     42 /**
     43  *  \name HCI
     44  *
     45  * File: \ref phHciNfc_Generic.h
     46  *
     47  */
     48 /*@{*/
     49 #define PHHCINFC_GENERIC_FILEREVISION "$Revision: 1.73 $" /**< \ingroup grp_file_attributes */
     50 #define PHHCINFC_GENERIC_FILEALIASES  "$Aliases: NFC_FRI1.1_WK1007_R33_4,NFC_FRI1.1_WK1017_PREP1,NFC_FRI1.1_WK1017_R34_1,NFC_FRI1.1_WK1017_R34_2,NFC_FRI1.1_WK1023_R35_1 $"     /**< \ingroup grp_file_attributes */
     51 /*@}*/
     52 /*
     53 
     54 ################################################################################
     55 ***************************** Header File Inclusion ****************************
     56 ################################################################################
     57 */
     58 
     59 #include <phNfcIoctlCode.h>
     60 #include<phNfcInterface.h>
     61 #include <phHciNfc.h>
     62 
     63 /*
     64 ################################################################################
     65 ****************************** Macro Definitions *******************************
     66 ################################################################################
     67 */
     68 
     69 #if defined(DEBUG)  /*|| defined(_DEBUG) */
     70 #define HCI_TRACE
     71 #endif
     72 
     73 #define Trace_buffer    phOsalNfc_DbgTraceBuffer
     74 
     75 /* HCI TRACE Macros */
     76 #if defined(HCI_TRACE)&& !defined(SILENT_HCI)
     77 #include <phOsalNfc.h>
     78 #include <stdio.h>
     79 extern char phOsalNfc_DbgTraceBuffer[];
     80 #define MAX_TRACE_BUFFER    150
     81 /* #define HCI_PRINT( str )  phOsalNfc_DbgTrace(str) */
     82 #define HCI_PRINT( str )  phOsalNfc_DbgString(str)
     83 #define HCI_DEBUG(str, arg) \
     84     {                                               \
     85         snprintf(Trace_buffer,MAX_TRACE_BUFFER,str,arg);    \
     86         phOsalNfc_DbgString(Trace_buffer);              \
     87     }
     88 #define HCI_PRINT_BUFFER(msg,buf,len)               \
     89     {                                               \
     90         snprintf(Trace_buffer,MAX_TRACE_BUFFER,"\n\t %s:",msg); \
     91         phOsalNfc_DbgString(Trace_buffer);              \
     92         phOsalNfc_DbgTrace(buf,len);                \
     93         phOsalNfc_DbgString("\r");                  \
     94                                                     \
     95     }
     96 #else
     97 #include <phDbgTrace.h>
     98 #if defined(PHDBG_TRACES) && !defined(HCI_TRACE)
     99 #define HCI_PRINT( str )  PHDBG_INFO(str)
    100 #define HCI_DEBUG(str, arg)
    101 #define HCI_PRINT_BUFFER(msg,buf,len)
    102 #else
    103 #define HCI_PRINT( str )
    104 #define HCI_DEBUG(str, arg)
    105 #define HCI_PRINT_BUFFER(msg,buf,len)
    106 #endif  /* #if defined(PHDBG_TRACES) */
    107 /* #if defined(PHDBG_INFO) && defined (PHDBG_CRITICAL_ERROR) */
    108 
    109 #endif /* #if defined(HCI_TRACE) */
    110 
    111 #define ZERO                        0x00U
    112 
    113 
    114 #ifdef MASK_BITS
    115 #define BYTE_SIZE                   0x08U
    116 
    117 /* HCI GET and SET BITS Macros */
    118 #define MASK_BITS8(p,l) \
    119                          ( ( (((uint8_t)(p))+((uint8_t)(l)))<=BYTE_SIZE )? \
    120                           (~(0xFFU<<((p)+(l))) & (0xFFU<<(p))):(0U) )
    121 #ifdef MASK_BITS
    122 #define GET_BITS8(num,p,l) \
    123                           ( ((((uint8_t)(p))+((uint8_t)(l)))<=BYTE_SIZE)? \
    124                            (((num)& (MASK_BITS8(p,l)))>>(p)):(0U) )
    125 #else
    126 #define GET_BITS8(num,p,l) \
    127                           ( ((((p)+(l))<=BYTE_SIZE))? \
    128                            (((num)>>(p))& (~(0xFFU<<(l)))):(0U) )
    129 #endif
    130 #define SET_BITS8(num,p,l,val) \
    131                          (  ((((uint8_t)(p))+((uint8_t)(l)))<=BYTE_SIZE)? \
    132                            (((num)& (~MASK_BITS8(p,l)))|((val)<<(p))):(0U))
    133 
    134 #endif
    135 
    136 /** \ingroup grp_hci_retval
    137     The Corresponding HCI Gate Not Supported.
    138  */
    139 #define NFCSTATUS_HCI_GATE_NOT_SUPPORTED    (0x71U)
    140 
    141 /** \ingroup grp_hci_retval
    142     Invalid Command from the HCI Layer
    143  */
    144 #define NFCSTATUS_INVALID_HCI_COMMAND       (0x72U)
    145 
    146 /** \ingroup grp_hci_retval
    147     HCI Command not supported . */
    148 #define NFCSTATUS_COMMAND_NOT_SUPPORTED     (0x73U)
    149 
    150 /** \ingroup grp_hci_retval
    151     Invalide Response from the HCI Layer
    152  */
    153 #define NFCSTATUS_INVALID_HCI_RESPONSE      (0x74U)
    154 
    155 /** \ingroup grp_hci_retval
    156     The Invalid Instruction type (Neither Command/Response nor Event ).
    157  */
    158 #define NFCSTATUS_INVALID_HCI_INSTRUCTION   (0x75U)
    159 
    160 /** \ingroup grp_hci_retval
    161     The Invalid Instruction type (Neither Command/Response nor Event ).
    162  */
    163 #define NFCSTATUS_INVALID_HCI_INFORMATION   (0x76U)
    164 
    165 /** \ingroup grp_hci_retval
    166     The Invalid HCI Sequence.
    167  */
    168 #define NFCSTATUS_INVALID_HCI_SEQUENCE      (0x78U)
    169 
    170 
    171 /** \ingroup grp_hci_retval
    172     The HCI Error Response with Response code.
    173  */
    174 #define NFCSTATUS_HCI_RESPONSE(code)        (code)
    175 
    176 
    177 /* Length of the HCP and the HCP Message Header in Bytes */
    178 #define HCP_HEADER_LEN          0x02U
    179 
    180 /* Length of the HCP Message Header in Bytes */
    181 #define HCP_MESSAGE_LEN         0x01U
    182 
    183 /* HCP Header Chaining Bit Offset */
    184 #define HCP_CHAINBIT_OFFSET     0x07U
    185 /* HCP Header Chaining Bit Length */
    186 #define HCP_CHAINBIT_LEN        0x01U
    187 
    188 /* Chaining Bit Values */
    189 #define HCP_CHAINBIT_DEFAULT    0x01U
    190 #define HCP_CHAINBIT_BEGIN      0x00U
    191 #define HCP_CHAINBIT_END        HCP_CHAINBIT_DEFAULT
    192 
    193 /* HCP Header Pipe ID Offset */
    194 #define HCP_PIPEID_OFFSET       0x00U
    195 /* HCP Header Pipe ID Length */
    196 #define HCP_PIPEID_LEN          0x07U
    197 
    198 /* HCP Message Header Type  Offset */
    199 #define HCP_MSG_TYPE_OFFSET     0x06U
    200 /* HCP Message Header Type Length */
    201 #define HCP_MSG_TYPE_LEN        0x02U
    202 
    203 /* HCP Message Type Values */
    204 #define HCP_MSG_TYPE_COMMAND        0x00U
    205 #define HCP_MSG_TYPE_EVENT          0x01U
    206 #define HCP_MSG_TYPE_RESPONSE       0x02U
    207 #define HCP_MSG_TYPE_RESERVED       0x03U
    208 
    209 /* HCP Message Header Instruction  Offset */
    210 #define HCP_MSG_INSTRUCTION_OFFSET  0x00U
    211 /* HCP Message Header Instruction Length */
    212 #define HCP_MSG_INSTRUCTION_LEN     0x06U
    213 /* HCP Invalid Message Instruction */
    214 #define HCP_MSG_INSTRUCTION_INVALID 0x3FU
    215 
    216 
    217 /* HCP Packet Zero Length */
    218 #define HCP_ZERO_LEN                0x00U
    219 
    220 
    221 
    222     /** \internal Generic HCI Commands for all the Gates */
    223 #define ANY_SET_PARAMETER                   0x01U
    224 #define ANY_GET_PARAMETER                   0x02U
    225 #define ANY_OPEN_PIPE                       0x03U
    226 #define ANY_CLOSE_PIPE                      0x04U
    227 #define ANY_GENERIC_CMD_RFU_B               0x05U
    228 #define ANY_GENERIC_CMD_RFU_E               0x0FU
    229 
    230 /*
    231  *  0x05-0x0F is Reserved for Future Use
    232  */
    233 
    234 /** \internal HCI Administration Com mands for the Management of the Host Network */
    235 
    236 #define ADM_CREATE_PIPE                     0x10U
    237 #define ADM_DELETE_PIPE                     0x11U
    238 #define ADM_NOTIFY_PIPE_CREATED             0x12U
    239 #define ADM_NOTIFY_PIPE_DELETED             0x13U
    240 #define ADM_CLEAR_ALL_PIPE                  0x14U
    241 #define ADM_NOTIFY_ALL_PIPE_CLEARED         0x15U
    242 #define ADM_CMD_RFU_B                       0x16U
    243 #define ADM_CMD_RFU_E                       0x3FU
    244 
    245 #define MSG_INSTRUCTION_UNKNWON             0x3FU
    246 
    247     /*
    248      *  0x16-0x3F is Reserved for Future Use
    249      */
    250 
    251 
    252 /** \internal HCI Generic Responses from the Gates */
    253 #define ANY_OK                              0x00U
    254 #define ANY_E_NOT_CONNECTED                 0x01U
    255 #define ANY_E_CMD_PAR_UNKNOWN               0x02U
    256 #define ANY_E_NOK                           0x03U
    257 #define ANY_E_PIPES_FULL                    0x04U
    258 #define ANY_E_REG_PAR_UNKNOWN               0x05U
    259 #define ANY_E_PIPE_NOT_OPENED               0x06U
    260 #define ANY_E_CMD_NOT_SUPPORTED             0x07U
    261 #define ANY_E_INHIBITED                     0x08U
    262 #define ANY_E_TIMEOUT                       0x09U
    263 #define ANY_E_REG_ACCESS_DENIED             0x0AU
    264 #define ANY_E_PIPE_ACCESS_DENIED            0x0BU
    265 
    266 /* Response Error Code for RF Reader Gate */
    267 #define WR_RF_ERROR                         0x10U
    268 
    269 /*
    270 *  0x08, 0x0B-0x3F is Reserved for Future Use
    271 */
    272 
    273 
    274 /** \internal HCI Generic Events from the Gates */
    275 #define EVT_HCI_END_OF_OPERATION    0x01
    276 #define EVT_POST_DATA               0x02
    277 #define EVT_HOT_PLUG                0x03
    278 
    279 
    280 /* Maximum Buffer Size for the HCI Data */
    281 #define PHHCINFC_MAX_BUFFERSIZE     (PHHAL_MAX_DATASIZE + 0x50U)
    282 
    283 #define PHHCINFC_MAX_OPENPIPE       0x6FU
    284 #define PHHCINFC_MAX_PIPE           0x6FU
    285 #define PHHCINFC_MIN_PIPE           0x02U
    286 
    287 
    288 /* Maximum Payload Length of HCI. */
    289 #define PHHCINFC_MAX_PACKET_DATA    0x1CU
    290 #define PHHCINFC_MAX_HCP_LEN        PHHCINFC_MAX_PACKET_DATA + 1
    291 
    292 
    293 
    294 /* Maximum Payload Length of HCI. */
    295 
    296 
    297 /*
    298 ################################################################################
    299 ******************** Enumeration and Structure Definition **********************
    300 ################################################################################
    301 */
    302 #if 1
    303 typedef NFCSTATUS (*pphHciNfc_Pipe_Receive_t) (
    304                                                 void *pContext,
    305                                                 void *pHwRef,
    306                                                 uint8_t *data,
    307 #ifdef ONE_BYTE_LEN
    308                                                 uint8_t length
    309 #else
    310                                                 uint16_t length
    311 #endif
    312                                         );
    313 #else
    314 
    315 typedef pphNfcIF_Transact_t pphHciNfc_Pipe_Receive_t;
    316 
    317 #endif
    318 
    319 /** \defgroup grp_hci_nfc HCI Component
    320  *
    321  *
    322  */
    323 
    324 typedef enum phHciNfc_HostID {
    325     phHciNfc_HostControllerID                   = 0x00U,
    326     phHciNfc_TerminalHostID                     = 0x01U,
    327     phHciNfc_UICCHostID                         = 0x02U
    328 /*
    329     phHciNfc_HostID_RFU_B                       = 0x03U,
    330     phHciNfc_HostID_RFU_E                       = 0xBFU,
    331     phHciNfc_HostIDProprietary_B                = 0xC0U,
    332     phHciNfc_HostIDProprietary_E                = 0xFFU
    333 */
    334 }phHciNfc_HostID_t;
    335 
    336 
    337 typedef enum phHciNfc_GateID{
    338     phHciNfc_AdminGate                          = 0x00U,
    339 /*
    340     phHciNfc_evGateIDProprietary_B              = 0x01U,
    341     phHciNfc_evGateIDProprietary_E              = 0x03U,
    342 */
    343     phHciNfc_LoopBackGate                       = 0x04U,
    344     phHciNfc_IdentityMgmtGate                   = 0x05U,
    345     phHciNfc_LinkMgmtGate                       = 0x06U,
    346 /*
    347     phHciNfc_GateID_RFU_B                       = 0x07U,
    348     phHciNfc_GateID_RFU_E                       = 0x0FU,
    349 */
    350 
    351 /*  TODO: Fillin Other Gate Information */
    352     /* ETSI HCI Specific RF Reader Gates */
    353     phHciNfc_RFReaderAGate                      = 0x13,
    354     phHciNfc_RFReaderBGate                      = 0x11,
    355 
    356     /* Proprietary Reader Gate */
    357     phHciNfc_ISO15693Gate                       = 0x12,
    358     phHciNfc_RFReaderFGate                      = 0x14,
    359     phHciNfc_JewelReaderGate                    = 0x15,
    360 
    361     /* ETSI HCI Card RF Gates */
    362     phHciNfc_CETypeBGate                        = 0x21,
    363     phHciNfc_CETypeBPrimeGate                   = 0x22,
    364     phHciNfc_CETypeAGate                        = 0x23,
    365     phHciNfc_CETypeFGate                        = 0x24,
    366 
    367     /* NFC-IP1 Gates */
    368     phHciNfc_NFCIP1InitRFGate                   = 0x30,
    369     phHciNfc_NFCIP1TargetRFGate                 = 0x31,
    370 
    371     /* ETSI HCI Connectivity Gate */
    372     phHciNfc_ConnectivityGate                   = 0x41,
    373 
    374 
    375     /*  Device Configuration Gates */
    376     phHciNfc_PN544MgmtGate                      = 0x90,
    377     phHciNfc_HostCommGate                       = 0x91,
    378     phHciNfc_GPIOGate                           = 0x92,
    379     phHciNfc_RFMgmtGate                         = 0x93,
    380     phHciNfc_PollingLoopGate                    = 0x94,
    381     phHciNfc_DownloadMgmtGate                   = 0x95,
    382 
    383     /* Card Emulation Managment Gates */
    384     phHciNfc_SwpMgmtGate                        = 0xA0,
    385     phHciNfc_NfcWIMgmtGate                      = 0xA1,
    386     phHciNfc_UnknownGate                        = 0xFF
    387 
    388 }phHciNfc_GateID_t;
    389 
    390 
    391 typedef enum phHciNfc_PipeID{
    392     HCI_LINKMGMT_PIPE_ID                = 0x00U,
    393     HCI_ADMIN_PIPE_ID                   = 0x01U,
    394     HCI_DYNAMIC_PIPE_ID                 = 0x02U,
    395     HCI_RESERVED_PIPE_ID                = 0x70U,
    396     HCI_UNKNOWN_PIPE_ID                 = PHHCINFC_MAX_PIPE
    397 /*
    398     phHciNfc_evOtherGatePipeID_B                = 0x02U,
    399     phHciNfc_evOtherGatePipeID_E                = 0x6FU,
    400     phHciNfc_evGatePipeID_RFU_B                 = 0x70U,
    401     phHciNfc_evGatePipeID_RFU_E                 = 0x7FU,
    402 */
    403 }phHciNfc_PipeID_t;
    404 
    405 
    406 typedef enum phHciNfc_eState {
    407     hciState_Reset              = 0x00U,
    408     hciState_Initialise,
    409     hciState_Test,
    410     hciState_Config,
    411     hciState_IO,
    412     hciState_Select,
    413     hciState_Listen,
    414     hciState_Activate,
    415     hciState_Reactivate,
    416     hciState_Connect,
    417     hciState_Transact,
    418     hciState_Disconnect,
    419     hciState_Presence,
    420     hciState_Release,
    421     hciState_Unknown
    422 }phHciNfc_eState_t;
    423 
    424 typedef enum phHciNfc_eMode {
    425     hciMode_Reset               = 0x00U,
    426     hciMode_Session,
    427     hciMode_Override,
    428     hciMode_Test,
    429     hciMode_Unknown
    430 }phHciNfc_eMode_t;
    431 
    432 
    433 typedef enum phHciNfc_eSeq{
    434     /* HCI Admin Sequence */
    435     ADMIN_INIT_SEQ              = 0x00U,
    436     ADMIN_SESSION_SEQ,
    437     ADMIN_CE_SEQ,
    438     ADMIN_REL_SEQ,
    439     ADMIN_EVT_HOTPLUG_SEQ,
    440 
    441     /* HCI Link Management Sequence */
    442     LINK_MGMT_INIT_SEQ,
    443     LINK_MGMT_REL_SEQ,
    444 
    445     /* HCI Identity Management Sequence */
    446     IDENTITY_INIT_SEQ,
    447     IDENTITY_INFO_SEQ,
    448     IDENTITY_REL_SEQ,
    449 
    450     /* HCI Polling Loop Sequence */
    451     PL_INIT_SEQ,
    452     PL_DURATION_SEQ,
    453     PL_CONFIG_PHASE_SEQ,
    454     PL_TGT_DISABLE_SEQ,
    455     PL_RESTART_SEQ,
    456     PL_STOP_SEQ,
    457     PL_REL_SEQ,
    458 
    459     /* HCI Device Management Sequence */
    460     DEV_INIT_SEQ,
    461     DEV_HAL_INFO_SEQ,
    462     DEV_CONFIG_SEQ,
    463     DEV_REL_SEQ,
    464 
    465     /* HCI Reader Management Sequence */
    466     READER_MGMT_INIT_SEQ,
    467     READER_ENABLE_SEQ,
    468     READER_SELECT_SEQ,
    469     READER_REACTIVATE_SEQ,
    470     READER_SW_AUTO_SEQ,
    471     READER_PRESENCE_CHK_SEQ,
    472     READER_UICC_DISPATCH_SEQ,
    473     READER_DESELECT_SEQ,
    474     READER_RESELECT_SEQ,
    475     READER_DISABLE_SEQ,
    476     READER_MGMT_REL_SEQ,
    477 
    478     /* HCI NFC-IP1 Sequence */
    479     NFCIP1_INIT_SEQ,
    480     INITIATOR_SPEED_SEQ,
    481     INITIATOR_GENERAL_SEQ,
    482     TARGET_GENERAL_SEQ,
    483     TARGET_SPEED_SEQ,
    484     NFCIP1_REL_SEQ,
    485 
    486     /* HCI Emulation Management Sequence */
    487     EMULATION_INIT_SEQ,
    488     EMULATION_SWP_SEQ,
    489     EMULATION_CONFIG_SEQ,
    490     EMULATION_REL_SEQ,
    491 
    492     HCI_END_SEQ,
    493     HCI_INVALID_SEQ
    494 } phHciNfc_eSeq_t;
    495 
    496 
    497 
    498 typedef enum phHciNfc_eSeqType{
    499     RESET_SEQ                   = 0x00U,
    500     INIT_SEQ,
    501     UPDATE_SEQ,
    502     INFO_SEQ,
    503     CONFIG_SEQ,
    504     REL_SEQ,
    505     END_SEQ
    506 } phHciNfc_eSeqType_t;
    507 
    508 
    509 typedef enum phHciNfc_eConfigType{
    510     INVALID_CFG                 = 0x00U,
    511     POLL_LOOP_CFG,
    512     SMX_WI_CFG,
    513     SMX_WI_MODE,
    514     UICC_SWP_CFG,
    515     SWP_EVT_CFG,
    516     SWP_PROTECT_CFG,
    517     NFC_GENERAL_CFG,
    518     NFC_TARGET_CFG,
    519     NFC_CE_A_CFG,
    520     NFC_CE_B_CFG
    521 } phHciNfc_eConfigType_t;
    522 
    523 
    524 typedef struct phHciNfc_HCP_Message{
    525     /** \internal Identifies the Type and Kind of Instruction */
    526     uint8_t     msg_header;
    527     /** \internal Host Controller Protocol (HCP) Packet Message Payload */
    528     uint8_t     payload[PHHCINFC_MAX_PACKET_DATA - 1];
    529 }phHciNfc_HCP_Message_t;
    530 
    531 
    532 typedef struct phHciNfc_HCP_Packet{
    533     /** \internal Chaining Information and Pipe Identifier */
    534     uint8_t     hcp_header;
    535     /** \internal Host Controller Protocol (HCP) Packet Message or Payload */
    536     union
    537     {
    538     /** \internal Host Controller Protocol (HCP) Packet Message */
    539         phHciNfc_HCP_Message_t message;
    540     /** \internal Host Controller Protocol (HCP) Packet Payload */
    541         uint8_t payload[PHHCINFC_MAX_PACKET_DATA];
    542     }msg;
    543 }phHciNfc_HCP_Packet_t;
    544 
    545 
    546 
    547 typedef struct phHciNfc_Gate_Info{
    548     /** \internal HCI Host Identifier  */
    549     uint8_t     host_id;
    550     /** \internal HCI Gate Identifier  */
    551     uint8_t     gate_id;
    552 }phHciNfc_Gate_Info_t;
    553 
    554 
    555 typedef struct phHciNfc_Pipe_Params{
    556     /** \internal HCI Source Gate Information for the pipe  */
    557     phHciNfc_Gate_Info_t    source;
    558     /** \internal HCI Destination Gate Information for the pipe  */
    559     phHciNfc_Gate_Info_t    dest;
    560     /** \internal HCI Pipe Identifier  */
    561     uint8_t                 pipe_id;
    562 }phHciNfc_Pipe_Params_t;
    563 
    564 
    565 typedef struct phHciNfc_Pipe_Info{
    566     /** \internal Structure containing the created dynamic pipe information */
    567     phHciNfc_Pipe_Params_t      pipe;
    568     /** \internal Status of the previous command sent to this pipe */
    569     NFCSTATUS                   prev_status;
    570     /** \internal previous message type Sent to this pipe */
    571     uint8_t                     sent_msg_type;
    572     /** \internal Message type Received in this pipe */
    573     uint8_t                     recv_msg_type;
    574     /** \internal previous message sent to this pipe */
    575     uint8_t                     prev_msg;
    576     /** \internal Index of the previous Set/Get Parameter command
    577      *  sent to this pipe */
    578     uint8_t                     reg_index;
    579     /** \internal length of Parameter of the Set/Get Parameter
    580      *  command sent to this pipe */
    581     uint16_t                    param_length;
    582     /** \internal Parameter of the Set/Get Parameter command
    583      *  sent to this pipe */
    584     void                        *param_info;
    585     /** \internal Pointer to a Pipe specific Receive Response function */
    586     pphHciNfc_Pipe_Receive_t    recv_resp;
    587     /** \internal Pointer to a Pipe specific Receive Event function */
    588     pphHciNfc_Pipe_Receive_t    recv_event;
    589     /** \internal Pointer to a Pipe specific Receive Command function */
    590     pphHciNfc_Pipe_Receive_t    recv_cmd;
    591 }phHciNfc_Pipe_Info_t;
    592 
    593 
    594 typedef struct phHciNfc_sContext{
    595     /** \internal HCI Layer Pointer from the upper layer for
    596                         lower layer function registration */
    597     phNfcLayer_sCfg_t           *p_hci_layer;
    598     /** \internal Pointer to the upper layer context */
    599     void                        *p_upper_context;
    600     /** \internal Pointer to the Hardware Reference Sturcture */
    601     phHal_sHwReference_t        *p_hw_ref;
    602     /** \internal Pointer to the upper layer notification callback function */
    603     pphNfcIF_Notification_CB_t  p_upper_notify;
    604     /** \internal Structure to store the lower interface operations */
    605     phNfc_sLowerIF_t            lower_interface;
    606     /** \internal Execution Sequence using the HCI Context */
    607     volatile phHciNfc_eSeq_t    hci_seq;
    608 
    609     /** \internal State of the HCI Context */
    610     volatile phNfc_sState_t     hci_state;
    611 
    612     /** \internal Mode of HCI Initialisation */
    613     phHciNfc_Init_t             init_mode;
    614 
    615     /** \internal Memory Information for HCI Initialisation */
    616     uint8_t                     hal_mem_info[NXP_HAL_MEM_INFO_SIZE];
    617 
    618     /** \internal HCI Configuration Type */
    619     phHciNfc_eConfigType_t      config_type;
    620     /** \internal HCI SmartMX Mode Configuration */
    621     phHal_eSmartMX_Mode_t       smx_mode;
    622     /** \internal HCI Configuration Information */
    623     void                        *p_config_params;
    624 
    625     /** \internal Current RF Reader/Emulation Gate in Use */
    626     phHal_eRFDevType_t          host_rf_type;
    627 
    628     /** \internal Connected Target Information */
    629     phHal_sRemoteDevInformation_t *p_target_info;
    630 
    631     /** \internal Information of all the pipes created and opened */
    632     phHciNfc_Pipe_Info_t        *p_pipe_list[PHHCINFC_MAX_PIPE+1];
    633 
    634     /** \internal Tag */
    635     phHciNfc_XchgInfo_t         *p_xchg_info;
    636 
    637     /** \internal Information of the HCI Gates */
    638     /** \internal HCI Admin Management Gate Information */
    639     void                        *p_admin_info;
    640     /** \internal HCI Link Management Gate Information */
    641     void                        *p_link_mgmt_info;
    642     /** \internal HCI Identity Management Gate Information */
    643     void                        *p_identity_info;
    644     /** \internal HCI Polling Loop Gate Information */
    645     void                        *p_poll_loop_info;
    646     /** \internal HCI NFC Device Management Information */
    647     void                        *p_device_mgmt_info;
    648     /** \internal HCI RF Reader Gates Management Information */
    649     void                        *p_reader_mgmt_info;
    650     /** \internal HCI Card Application Gates and Emulation
    651                   Information */
    652     void                        *p_emulation_mgmt_info;
    653     /** \internal HCI RF Reader A Gate Information */
    654     void                        *p_reader_a_info;
    655 #ifdef TYPE_B
    656     /** \internal HCI RF Reader B Gate Information */
    657     void                        *p_reader_b_info;
    658 #endif
    659 #ifdef TYPE_FELICA
    660     /** \internal HCI Felica Reader Gate Information */
    661     void                        *p_felica_info;
    662 #endif
    663 #ifdef TYPE_JEWEL
    664     /** \internal HCI Jewel Reader Gate Information */
    665     void                        *p_jewel_info;
    666 #endif
    667 #ifdef TYPE_ISO15693
    668     /** \internal HCI ISO15693 Reader Gate Information */
    669     void                        *p_iso_15693_info;
    670 #endif
    671 
    672 #ifdef ENABLE_P2P
    673     /** \internal HCI NFC-IP1 Peer to Peer Information */
    674     void                        *p_nfcip_info;
    675 #endif
    676     /** \internal HCI Secure Element Management Information */
    677     void                        *p_wi_info;
    678     /** \internal HCI UICC Information */
    679     void                        *p_uicc_info;
    680     /** \internal HCI SWP Information */
    681     void                        *p_swp_info;
    682 #ifdef HOST_EMULATION
    683     /** \internal HCI Card Emulation A Gate Information */
    684     void                        *p_ce_a_info;
    685     /** \internal HCI Card Emulation B Gate Information */
    686     void                        *p_ce_b_info;
    687 #endif
    688 
    689     /** \internal HCI Packet Data to be sent to the lower layer */
    690     phHciNfc_HCP_Packet_t       tx_packet;
    691     /** \internal HCI Packet Data to be received from the lower layer */
    692     phHciNfc_HCP_Packet_t       rx_packet;
    693 
    694     /** \internal Previous Status (To Store the Error Status ) */
    695     NFCSTATUS                   error_status;
    696 
    697     /** \internal Pointer to HCI Send Buffer */
    698     uint8_t                     send_buffer[PHHCINFC_MAX_BUFFERSIZE];
    699     /** \internal Pointer to HCI Receive Buffer */
    700     uint8_t                     recv_buffer[PHHCINFC_MAX_BUFFERSIZE];
    701 
    702     /** \internal Total Number of bytes to be Sent */
    703     volatile uint16_t           tx_total;
    704     /** \internal Number of bytes Remaining to be Sent */
    705     volatile uint16_t           tx_remain;
    706     /** \internal Number of bytes sent */
    707     volatile uint16_t           tx_sent;
    708 
    709     volatile uint16_t           rx_index;
    710 
    711     /** \internal Total Number of bytes received */
    712     volatile uint16_t           rx_total;
    713     /** \internal Number of bytes received */
    714     volatile uint16_t           rx_recvd;
    715     /** \internal Index of the received data in the
    716     *   response packet
    717     */
    718 
    719     /** \internal Send HCP Chaining Information */
    720     volatile uint8_t            tx_hcp_chaining;
    721     /** \internal Send HCP  Fragment Index */
    722     volatile uint16_t           tx_hcp_frgmnt_index;
    723 
    724     /** \internal Receive HCP Chaining Information */
    725     volatile uint8_t            rx_hcp_chaining;
    726     /** \internal Receive HCP Fragment Index */
    727     volatile uint16_t           rx_hcp_frgmnt_index;
    728 
    729     /** \internal The Device under Test */
    730     volatile uint8_t            hci_mode;
    731     /** \internal Wait for Response if Response is Pending  */
    732     volatile uint8_t            response_pending;
    733     /** \internal Notify the Event if Notifcation is Pending  */
    734     volatile uint8_t            event_pending;
    735 
    736     /** \internal Pending Release of the detected Target */
    737     uint8_t                     target_release;
    738 
    739 }phHciNfc_sContext_t;
    740 
    741 /*
    742 ################################################################################
    743 *********************** Function Prototype Declaration *************************
    744 ################################################################################
    745 */
    746 
    747 
    748 /**
    749  *
    750  * \ingroup grp_hci_nfc
    751  *
    752  *  The phHciNfc_Receive function receives the HCI Events or Response from the
    753  *  corresponding peripheral device, described by the HCI Context Structure.
    754  *
    755  *  \param[in]  psContext               psContext is the context of
    756  *                                      the HCI Layer.
    757  *  \param[in]  pHwRef                  pHwRef is the Information of
    758  *                                      the Device Interface Link .
    759  *  \param[out] pdata                   Pointer to the response buffer that
    760  *                                      receives the response read.
    761  *  \param[in] length                   Variable that receives
    762  *                                      the number of bytes read.
    763  *
    764  *  \retval NFCSTATUS_PENDING           Data successfully read.
    765  *  \retval NFCSTATUS_INVALID_PARAMETER One or more of the supplied parameters
    766  *                                      could not be interpreted properly.
    767  *  \retval Other errors                Other related errors
    768  *
    769  */
    770 
    771 extern
    772 NFCSTATUS
    773 phHciNfc_Receive(
    774                         void                *psContext,
    775                         void                *pHwRef,
    776                         uint8_t             *pdata,
    777 #ifdef ONE_BYTE_LEN
    778                         uint8_t             length
    779 #else
    780                         uint16_t            length
    781 #endif
    782                 );
    783 
    784 /**
    785  * \ingroup grp_hci_nfc
    786  *
    787  *  The phHciNfc_Send_Complete function acknowledges the completion of the HCI
    788  *  Commands sent to the device.
    789  *
    790  *  \param[in]  psContext               psContext is the context of
    791  *                                      the HCI Layer.
    792  *  \param[in]  pHwRef                  pHwRef is the Information of
    793  *                                      the Device Interface Link .
    794  *  \param[in]  pInfo                   Transaction information like
    795  *                                      status and length after the
    796  *                                      completion of the send.
    797  *
    798  *  \retval NONE.
    799  *
    800  */
    801 
    802 extern
    803 void
    804 phHciNfc_Send_Complete (
    805                             void                    *psContext,
    806                             void                    *pHwRef,
    807                             phNfc_sTransactionInfo_t *pInfo
    808                        );
    809 
    810 /**
    811  * \ingroup grp_hci_nfc
    812  *
    813  *  The phHciNfc_Receive_Complete function acknowledges the completion of the HCI
    814  *  Event Information or Response received from the device.
    815  *
    816  *  \param[in]  psContext               psContext is the context of
    817  *                                      the HCI Layer.
    818  *  \param[in]  pHwRef                  pHwRef is the Information of
    819  *                                      the Device Interface Link .
    820  *  \param[in]  pInfo                   Transaction information like status
    821  *                                      data and length after the completely
    822  *                                      receiving the response .
    823  *  \retval NONE.
    824  *
    825  *
    826  */
    827 
    828 extern
    829 void
    830 phHciNfc_Receive_Complete (
    831                                 void                    *psContext,
    832                                 void                    *pHwRef,
    833                                 phNfc_sTransactionInfo_t *pInfo
    834                           );
    835 
    836 /**
    837  * \ingroup grp_hci_nfc
    838  *
    839  *  The phHciNfc_Notify_Event function notifies the occurence of the HCI
    840  *  Event from the device.
    841  *
    842  *  \param[in]  psContext               psContext is the context of
    843  *                                      the HCI Layer.
    844  *  \param[in]  pHwRef                  pHwRef is the Information of
    845  *                                      the Device Interface Link .
    846  *  \param[in]  type                    reason returned for the notification to
    847  *                                      the HCI.
    848  *  \param[in]  pInfo                   Notification information like status
    849  *                                      data,length etc from the lower layer
    850  *                                      to the HCI Layer.
    851  *  \retval NONE.
    852  *
    853  */
    854 
    855 extern
    856 void
    857 phHciNfc_Notify_Event(
    858                             void                    *psContext,
    859                             void                    *pHwRef,
    860                             uint8_t                 type,
    861                             void                    *pInfo
    862                     );
    863 
    864 /**
    865  * \ingroup grp_hci_nfc
    866  *
    867  *  The phHciNfc_Tag_Notify function notifies the the upper layer
    868  *  with the Tag Specific Notifications .
    869  *
    870  *  \param[in]  psContext               psContext is the context of
    871  *                                      the HCI Layer.
    872  *  \param[in]  pHwRef                  pHwRef is the Information of
    873  *                                      the Device Interface Link .
    874  *  \param[in]  type                    reason returned for the notification to
    875  *                                      the HCI.
    876  *  \param[in]  pInfo                   Notification information like status
    877  *                                      data,length etc from the lower layer
    878  *                                      to the HCI Layer.
    879  *  \retval NONE.
    880  *
    881  */
    882 extern
    883 void
    884 phHciNfc_Tag_Notify(
    885                             phHciNfc_sContext_t     *psHciContext,
    886                             void                    *pHwRef,
    887                             uint8_t                 type,
    888                             void                    *pInfo
    889                );
    890 
    891 /**
    892  * \ingroup grp_hci_nfc
    893  *
    894  *  The phHciNfc_Tag_Notify function notifies the the upper layer
    895  *  with the Tag Specific Notifications .
    896  *
    897  *  \param[in]  psContext               psContext is the context of
    898  *                                      the HCI Layer.
    899  *  \param[in]  pHwRef                  pHwRef is the Information of
    900  *                                      the Device Interface Link .
    901  *  \param[in]  type                    reason returned for the notification to
    902  *                                      the HCI.
    903  *  \param[in]  pInfo                   Notification information like status
    904  *                                      data,length etc from the lower layer
    905  *                                      to the HCI Layer.
    906  *  \retval NONE.
    907  *
    908  */
    909 
    910 extern
    911 void
    912 phHciNfc_Target_Select_Notify(
    913                             phHciNfc_sContext_t     *psHciContext,
    914                             void                    *pHwRef,
    915                             uint8_t                 type,
    916                             void                    *pInfo
    917                );
    918 
    919 
    920 /**
    921  * \ingroup grp_hci_nfc
    922  *
    923  *  The phHciNfc_Transceive_Notify function notifies the the upper layer
    924  *  with the after the transceive operation.
    925  *
    926  *  \param[in]  psContext               psContext is the context of
    927  *                                      the HCI Layer.
    928  *  \param[in]  pHwRef                  pHwRef is the Information of
    929  *                                      the Device Interface Link .
    930  *  \param[in]  type                    reason returned for the notification to
    931  *                                      the HCI.
    932  *  \param[in]  pInfo                   Notification information like status
    933  *                                      data,length etc from the lower layer
    934  *                                      to the HCI Layer.
    935  *  \retval NONE.
    936  *
    937  */
    938 extern
    939 void
    940 phHciNfc_Transceive_Notify(
    941                             phHciNfc_sContext_t     *psHciContext,
    942                             void                    *pHwRef,
    943                             uint8_t                 type,
    944                             void                    *pInfo
    945                );
    946 
    947 /**
    948  * \ingroup grp_hci_nfc
    949  *
    950  *  The phHciNfc_Notify function calls the upper layer notification callback.
    951  *
    952  *  \param[in]  pUpperNotify            pUpperNotify is the notification
    953  *                                      callback of the upper HAL Layer.
    954  *  \param[in]  pUpperContext           pUpperContext is the context of
    955  *                                      the upper HAL Layer.
    956  *  \param[in]  pHwRef                  pHwRef is the Information of
    957  *                                      the Device Interface Link .
    958  *  \param[in]  type                    type of the notification to
    959  *                                      the upper HAL layer.
    960  *  \param[in]  pInfo                   completion information returned
    961  *                                      to the Upper HAL Layer.
    962  *  NFCSTATUS_SUCCESS                   Notification successfully completed .
    963  *  NFCSTATUS_INVALID_PARAMETER         One or more of the supplied parameters
    964  *                                      could not be interpreted properly.
    965  *  Other errors                        Errors related to the HCI or lower layers
    966  *
    967  *  \retval NONE.
    968  *
    969  */
    970 
    971 extern
    972 void
    973 phHciNfc_Notify(
    974                     pphNfcIF_Notification_CB_t  p_upper_notify,
    975                     void                        *p_upper_context,
    976                     void                        *pHwRef,
    977                     uint8_t                     type,
    978                     void                        *pInfo
    979                );
    980 
    981 /**
    982  * \ingroup grp_hci_nfc
    983  *
    984  *  The phHciNfc_Release_Notify function Releases HCI and notifies
    985  *  the upper layer.
    986  *
    987  *  \param[in]  psHciContext            psHciContext is the context of
    988  *                                      the HCI Layer.
    989  *  \param[in]  pHwRef                  pHwRef is the Information of
    990  *                                      the Device Interface Link .
    991  *  \param[in]  type                    reason returned for the notification to
    992  *                                      the HCI.
    993  *  \param[in]  pInfo                   Notification information like status
    994  *                                      data,length etc from the lower layer
    995  *                                      to the HCI Layer.
    996  *  \retval NONE.
    997  *
    998  */
    999 extern
   1000 void
   1001 phHciNfc_Release_Notify(
   1002                             phHciNfc_sContext_t     *psHciContext,
   1003                             void                    *pHwRef,
   1004                             uint8_t                 type,
   1005                             void                    *pInfo
   1006                );
   1007 
   1008 
   1009 
   1010 /**
   1011  * \ingroup grp_hci_nfc
   1012  *
   1013  *  The phHciNfc_Send_Generic_Cmd function sends the HCI Generic Commands
   1014  *  to the device.
   1015  *
   1016  *  \param[in]  psHciContext            psHciContext is the context of
   1017  *                                      the HCI Layer.
   1018  *  \param[in]  pHwRef                  pHwRef is the Information of
   1019  *                                      the Device Interface Link .
   1020  *  \param[in]  pipe_id                 The pipe to which the command
   1021  *                                      is being sent.
   1022  *  \param[in]  cmd                     The HCI Generic command sent to a
   1023  *                                      particular pipe .
   1024  *
   1025  *  \retval NFCSTATUS_PENDING           HCI Generic Command send in progress .
   1026  *  \retval
   1027  *  NFCSTATUS_INSUFFICIENT_RESOURCES    The memory could not be allocated
   1028  *                                      as required amount of memory
   1029  *                                      is not sufficient.
   1030  *
   1031  */
   1032 
   1033 extern
   1034 NFCSTATUS
   1035 phHciNfc_Send_Generic_Cmd (
   1036                                 phHciNfc_sContext_t *psHciContext,
   1037                                 void                *pHwRef,
   1038                                 uint8_t             pipe_id,
   1039                                 uint8_t             cmd
   1040                     );
   1041 
   1042 /**
   1043  * \ingroup grp_hci_nfc
   1044  *
   1045  *  The phHciNfc_Set_Param function configures the Gate specific register
   1046  *  with the provided value.
   1047  *
   1048  *  \param[in]  psHciContext            psHciContext is the context of
   1049  *                                      the HCI Layer.
   1050  *  \param[in]  pHwRef                  pHwRef is the Information of
   1051  *                                      the Device Interface Link .
   1052  *  \param[in]  p_pipe_info             Pointer to pipe specific information.
   1053  *  \param[in]  reg_index               Index of the register to be
   1054  *                                      configured .
   1055  *  \param[in]  p_param                 Value to the configured in
   1056  *                                      particular register.
   1057  *  \param[in]  param_length            Length of the parameter provided
   1058  *                                      for the configuration.
   1059  *
   1060  *  \retval NFCSTATUS_PENDING           HCI Set parameter in progress .
   1061  *  \retval
   1062  *  NFCSTATUS_INVALID_HCI_INFORMATION   The Information like p_pipe_info,
   1063  *                                      p_param or param_length is invalid
   1064  *
   1065  */
   1066 
   1067 extern
   1068 NFCSTATUS
   1069 phHciNfc_Set_Param (
   1070                             phHciNfc_sContext_t     *psHciContext,
   1071                             void                    *pHwRef,
   1072                             phHciNfc_Pipe_Info_t    *p_pipe_info,
   1073                             uint8_t                 reg_index,
   1074                             void                    *p_param,
   1075                             uint16_t                 param_length
   1076                 );
   1077 
   1078 /**
   1079  * \ingroup grp_hci_nfc
   1080  *
   1081  *  The phHciNfc_Send_HCP function sends the HCI Host Control Packet
   1082  *  Frames to the device.
   1083  *
   1084  *  \param[in]  psHciContext            psHciContext is the context of
   1085  *                                      the HCI Layer.
   1086  *  \param[in]  pHwRef                  pHwRef is the Information of
   1087  *                                      the Device Interface Link .
   1088  *
   1089  *  \retval NFCSTATUS_PENDING           HCP Frame send pending.
   1090  *  \retval NFCSTATUS_INVALID_PARAMETER One or more of the supplied parameters
   1091  *                                      could not be interpreted properly.
   1092  *  \retval Other errors                Other related errors
   1093  *
   1094  *
   1095  */
   1096 
   1097 extern
   1098 NFCSTATUS
   1099 phHciNfc_Send_HCP (
   1100                             phHciNfc_sContext_t *psHciContext,
   1101                             void                *pHwRef
   1102                         );
   1103 
   1104 
   1105 /**
   1106  * \ingroup grp_hci_nfc
   1107  *
   1108  *  The phHciNfc_Build_HCPFrame function initially builds the HCP Packet Frame
   1109  *  with the values passed in the arguments .
   1110  *
   1111  *  \param[in]  hcp_packet              hcp_packet is the frame packet structure
   1112  *                                      in which the frame is populated with the
   1113  *                                      appropriate fields.
   1114  *  \param[in]  chainbit                chainbit specifies whether the following
   1115  *                                      HCP frames are chained or the frame is a
   1116  *                                      normal frame.
   1117  *  \param[in]  pipe_id                 pipe_id of the pipe to which the frame has
   1118  *                                      to be sent.
   1119  *  \param[in]  msg_type                type of message sent to the pipe.
   1120  *  \param[in]  instruction             type of message instruction send to the pipe.
   1121  *
   1122  *  \retval NONE.
   1123  *
   1124  */
   1125 
   1126 
   1127 extern
   1128 void
   1129 phHciNfc_Build_HCPFrame (
   1130                                 phHciNfc_HCP_Packet_t *hcp_packet,
   1131                                 uint8_t             chainbit,
   1132                                 uint8_t             pipe_id,
   1133                                 uint8_t             msg_type,
   1134                                 uint8_t             instruction
   1135                       );
   1136 
   1137 /**
   1138  * \ingroup grp_hci_nfc
   1139  *
   1140  *  The phHciNfc_Append_HCPFrame function Appends the HCP Packet Frame
   1141  *  with the values passed in the arguments .
   1142  *
   1143  *  \param[in]  hcp_data            hcp_data is the pointer to the HCP
   1144  *                                  payload to which the data is to be
   1145  *                                  appended.
   1146  *  \param[in]  hcp_index           hcp_index is the index from which
   1147  *                                  the data source needs to be appended.
   1148  *  \param[in]  src_data            src_data that is to be appended to the
   1149  *                                  HCP packet.
   1150  *  \param[in]  src_len             The length of the data source that is
   1151  *                                  to be appended.
   1152  *  \retval NONE.
   1153  *
   1154  */
   1155 
   1156 extern
   1157 void
   1158  phHciNfc_Append_HCPFrame (
   1159                                 uint8_t                 *hcp_data,
   1160                                 uint16_t                hcp_index,
   1161                                 uint8_t                 *src_data,
   1162                                 uint16_t                src_len
   1163                           );
   1164 
   1165 /**
   1166  * \ingroup grp_hci_nfc
   1167  *
   1168  *  The phHciNfc_Allocate_Resource function allocates and initialises the
   1169  *  resource memory for the HCI layer.
   1170  *
   1171  *  \param[in] ppBuffer                 ppBuffer is the pointer to which the
   1172  *                                      resource memory is allocated.
   1173  *  \param[in] size                     Variable that specifies the size of
   1174  *                                      the memory that needs to be created.
   1175  *
   1176  *  \retval NFCSTATUS_SUCCESS           The Resource Memory was allocated
   1177  *                                      successfully .
   1178  *  \retval
   1179  *  NFCSTATUS_INSUFFICIENT_RESOURCES    The memory could not be allocated
   1180  *                                      as required amount of memory
   1181  *                                      is not suffient.
   1182  *
   1183  */
   1184 
   1185 extern
   1186 NFCSTATUS
   1187  phHciNfc_Allocate_Resource (
   1188                                 void                **ppBuffer,
   1189                                 uint16_t            size
   1190                             );
   1191 /**
   1192  * \ingroup grp_hci_nfc
   1193  *
   1194  *  The phHciNfc_Release_Resources function releases all the resources
   1195  *  allocated in the HCI Layer.
   1196  *
   1197  *  \param[in]  psHciContext            psHciContext is the context of
   1198  *                                      the HCI Layer.
   1199  *
   1200  *  \retval NONE.
   1201  *
   1202  */
   1203 
   1204 extern
   1205  void
   1206  phHciNfc_Release_Resources (
   1207                                 phHciNfc_sContext_t **ppsHciContext
   1208                             );
   1209 
   1210 /**
   1211  * \ingroup grp_hci_nfc
   1212  *
   1213  *  The phHciNfc_Release_Lower function initiates the release of the
   1214  *  lower layers.
   1215  *
   1216  *  \param[in]  psHciContext            psHciContext is the context of
   1217  *                                      the HCI Layer.
   1218  *  \param[in]  pHwRef                  pHwRef is the Information of
   1219  *                                      the Device Interface Link .
   1220  *
   1221  *  \retval NONE.
   1222  *
   1223  */
   1224 
   1225 extern
   1226 void
   1227 phHciNfc_Release_Lower(
   1228                     phHciNfc_sContext_t         *psHciContext,
   1229                     void                        *pHwRef
   1230                );
   1231 
   1232 
   1233 
   1234 #endif
   1235 
   1236