162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0-only */ 262306a36Sopenharmony_ci/* 362306a36Sopenharmony_ci * The NFC Controller Interface is the communication protocol between an 462306a36Sopenharmony_ci * NFC Controller (NFCC) and a Device Host (DH). 562306a36Sopenharmony_ci * 662306a36Sopenharmony_ci * Copyright (C) 2014 Marvell International Ltd. 762306a36Sopenharmony_ci * Copyright (C) 2011 Texas Instruments, Inc. 862306a36Sopenharmony_ci * 962306a36Sopenharmony_ci * Written by Ilan Elias <ilane@ti.com> 1062306a36Sopenharmony_ci * 1162306a36Sopenharmony_ci * Acknowledgements: 1262306a36Sopenharmony_ci * This file is based on hci.h, which was written 1362306a36Sopenharmony_ci * by Maxim Krasnyansky. 1462306a36Sopenharmony_ci */ 1562306a36Sopenharmony_ci 1662306a36Sopenharmony_ci#ifndef __NCI_H 1762306a36Sopenharmony_ci#define __NCI_H 1862306a36Sopenharmony_ci 1962306a36Sopenharmony_ci#include <net/nfc/nfc.h> 2062306a36Sopenharmony_ci 2162306a36Sopenharmony_ci/* NCI constants */ 2262306a36Sopenharmony_ci#define NCI_MAX_NUM_MAPPING_CONFIGS 10 2362306a36Sopenharmony_ci#define NCI_MAX_NUM_RF_CONFIGS 10 2462306a36Sopenharmony_ci#define NCI_MAX_NUM_CONN 10 2562306a36Sopenharmony_ci#define NCI_MAX_PARAM_LEN 251 2662306a36Sopenharmony_ci#define NCI_MAX_PAYLOAD_SIZE 255 2762306a36Sopenharmony_ci#define NCI_MAX_PACKET_SIZE 258 2862306a36Sopenharmony_ci#define NCI_MAX_LARGE_PARAMS_NCI_v2 15 2962306a36Sopenharmony_ci#define NCI_VER_2_MASK 0x20 3062306a36Sopenharmony_ci 3162306a36Sopenharmony_ci/* NCI Status Codes */ 3262306a36Sopenharmony_ci#define NCI_STATUS_OK 0x00 3362306a36Sopenharmony_ci#define NCI_STATUS_REJECTED 0x01 3462306a36Sopenharmony_ci#define NCI_STATUS_RF_FRAME_CORRUPTED 0x02 3562306a36Sopenharmony_ci#define NCI_STATUS_FAILED 0x03 3662306a36Sopenharmony_ci#define NCI_STATUS_NOT_INITIALIZED 0x04 3762306a36Sopenharmony_ci#define NCI_STATUS_SYNTAX_ERROR 0x05 3862306a36Sopenharmony_ci#define NCI_STATUS_SEMANTIC_ERROR 0x06 3962306a36Sopenharmony_ci#define NCI_STATUS_UNKNOWN_GID 0x07 4062306a36Sopenharmony_ci#define NCI_STATUS_UNKNOWN_OID 0x08 4162306a36Sopenharmony_ci#define NCI_STATUS_INVALID_PARAM 0x09 4262306a36Sopenharmony_ci#define NCI_STATUS_MESSAGE_SIZE_EXCEEDED 0x0a 4362306a36Sopenharmony_ci/* Discovery Specific Status Codes */ 4462306a36Sopenharmony_ci#define NCI_STATUS_DISCOVERY_ALREADY_STARTED 0xa0 4562306a36Sopenharmony_ci#define NCI_STATUS_DISCOVERY_TARGET_ACTIVATION_FAILED 0xa1 4662306a36Sopenharmony_ci#define NCI_STATUS_DISCOVERY_TEAR_DOWN 0xa2 4762306a36Sopenharmony_ci/* RF Interface Specific Status Codes */ 4862306a36Sopenharmony_ci#define NCI_STATUS_RF_TRANSMISSION_ERROR 0xb0 4962306a36Sopenharmony_ci#define NCI_STATUS_RF_PROTOCOL_ERROR 0xb1 5062306a36Sopenharmony_ci#define NCI_STATUS_RF_TIMEOUT_ERROR 0xb2 5162306a36Sopenharmony_ci/* NFCEE Interface Specific Status Codes */ 5262306a36Sopenharmony_ci#define NCI_STATUS_NFCEE_INTERFACE_ACTIVATION_FAILED 0xc0 5362306a36Sopenharmony_ci#define NCI_STATUS_NFCEE_TRANSMISSION_ERROR 0xc1 5462306a36Sopenharmony_ci#define NCI_STATUS_NFCEE_PROTOCOL_ERROR 0xc2 5562306a36Sopenharmony_ci#define NCI_STATUS_NFCEE_TIMEOUT_ERROR 0xc3 5662306a36Sopenharmony_ci 5762306a36Sopenharmony_ci/* NFCEE Interface/Protocols */ 5862306a36Sopenharmony_ci#define NCI_NFCEE_INTERFACE_APDU 0x00 5962306a36Sopenharmony_ci#define NCI_NFCEE_INTERFACE_HCI_ACCESS 0x01 6062306a36Sopenharmony_ci#define NCI_NFCEE_INTERFACE_TYPE3_CMD_SET 0x02 6162306a36Sopenharmony_ci#define NCI_NFCEE_INTERFACE_TRANSPARENT 0x03 6262306a36Sopenharmony_ci 6362306a36Sopenharmony_ci/* Destination type */ 6462306a36Sopenharmony_ci#define NCI_DESTINATION_NFCC_LOOPBACK 0x01 6562306a36Sopenharmony_ci#define NCI_DESTINATION_REMOTE_NFC_ENDPOINT 0x02 6662306a36Sopenharmony_ci#define NCI_DESTINATION_NFCEE 0x03 6762306a36Sopenharmony_ci 6862306a36Sopenharmony_ci/* Destination-specific parameters type */ 6962306a36Sopenharmony_ci#define NCI_DESTINATION_SPECIFIC_PARAM_RF_TYPE 0x00 7062306a36Sopenharmony_ci#define NCI_DESTINATION_SPECIFIC_PARAM_NFCEE_TYPE 0x01 7162306a36Sopenharmony_ci 7262306a36Sopenharmony_ci/* NFCEE Discovery Action */ 7362306a36Sopenharmony_ci#define NCI_NFCEE_DISCOVERY_ACTION_DISABLE 0x00 7462306a36Sopenharmony_ci#define NCI_NFCEE_DISCOVERY_ACTION_ENABLE 0x01 7562306a36Sopenharmony_ci 7662306a36Sopenharmony_ci/* NCI RF Technology and Mode */ 7762306a36Sopenharmony_ci#define NCI_NFC_A_PASSIVE_POLL_MODE 0x00 7862306a36Sopenharmony_ci#define NCI_NFC_B_PASSIVE_POLL_MODE 0x01 7962306a36Sopenharmony_ci#define NCI_NFC_F_PASSIVE_POLL_MODE 0x02 8062306a36Sopenharmony_ci#define NCI_NFC_A_ACTIVE_POLL_MODE 0x03 8162306a36Sopenharmony_ci#define NCI_NFC_F_ACTIVE_POLL_MODE 0x05 8262306a36Sopenharmony_ci#define NCI_NFC_V_PASSIVE_POLL_MODE 0x06 8362306a36Sopenharmony_ci#define NCI_NFC_A_PASSIVE_LISTEN_MODE 0x80 8462306a36Sopenharmony_ci#define NCI_NFC_B_PASSIVE_LISTEN_MODE 0x81 8562306a36Sopenharmony_ci#define NCI_NFC_F_PASSIVE_LISTEN_MODE 0x82 8662306a36Sopenharmony_ci#define NCI_NFC_A_ACTIVE_LISTEN_MODE 0x83 8762306a36Sopenharmony_ci#define NCI_NFC_F_ACTIVE_LISTEN_MODE 0x85 8862306a36Sopenharmony_ci 8962306a36Sopenharmony_ci#define NCI_RF_TECH_MODE_LISTEN_MASK 0x80 9062306a36Sopenharmony_ci 9162306a36Sopenharmony_ci/* NCI RF Technologies */ 9262306a36Sopenharmony_ci#define NCI_NFC_RF_TECHNOLOGY_A 0x00 9362306a36Sopenharmony_ci#define NCI_NFC_RF_TECHNOLOGY_B 0x01 9462306a36Sopenharmony_ci#define NCI_NFC_RF_TECHNOLOGY_F 0x02 9562306a36Sopenharmony_ci#define NCI_NFC_RF_TECHNOLOGY_V 0x03 9662306a36Sopenharmony_ci 9762306a36Sopenharmony_ci/* NCI Bit Rates */ 9862306a36Sopenharmony_ci#define NCI_NFC_BIT_RATE_106 0x00 9962306a36Sopenharmony_ci#define NCI_NFC_BIT_RATE_212 0x01 10062306a36Sopenharmony_ci#define NCI_NFC_BIT_RATE_424 0x02 10162306a36Sopenharmony_ci#define NCI_NFC_BIT_RATE_848 0x03 10262306a36Sopenharmony_ci#define NCI_NFC_BIT_RATE_1695 0x04 10362306a36Sopenharmony_ci#define NCI_NFC_BIT_RATE_3390 0x05 10462306a36Sopenharmony_ci#define NCI_NFC_BIT_RATE_6780 0x06 10562306a36Sopenharmony_ci#define NCI_NFC_BIT_RATE_26 0x20 10662306a36Sopenharmony_ci 10762306a36Sopenharmony_ci/* NCI RF Protocols */ 10862306a36Sopenharmony_ci#define NCI_RF_PROTOCOL_UNKNOWN 0x00 10962306a36Sopenharmony_ci#define NCI_RF_PROTOCOL_T1T 0x01 11062306a36Sopenharmony_ci#define NCI_RF_PROTOCOL_T2T 0x02 11162306a36Sopenharmony_ci#define NCI_RF_PROTOCOL_T3T 0x03 11262306a36Sopenharmony_ci#define NCI_RF_PROTOCOL_ISO_DEP 0x04 11362306a36Sopenharmony_ci#define NCI_RF_PROTOCOL_NFC_DEP 0x05 11462306a36Sopenharmony_ci#define NCI_RF_PROTOCOL_T5T 0x06 11562306a36Sopenharmony_ci 11662306a36Sopenharmony_ci/* NCI RF Interfaces */ 11762306a36Sopenharmony_ci#define NCI_RF_INTERFACE_NFCEE_DIRECT 0x00 11862306a36Sopenharmony_ci#define NCI_RF_INTERFACE_FRAME 0x01 11962306a36Sopenharmony_ci#define NCI_RF_INTERFACE_ISO_DEP 0x02 12062306a36Sopenharmony_ci#define NCI_RF_INTERFACE_NFC_DEP 0x03 12162306a36Sopenharmony_ci 12262306a36Sopenharmony_ci/* NCI Configuration Parameter Tags */ 12362306a36Sopenharmony_ci#define NCI_PN_ATR_REQ_GEN_BYTES 0x29 12462306a36Sopenharmony_ci#define NCI_LN_ATR_RES_GEN_BYTES 0x61 12562306a36Sopenharmony_ci#define NCI_LA_SEL_INFO 0x32 12662306a36Sopenharmony_ci#define NCI_LF_PROTOCOL_TYPE 0x50 12762306a36Sopenharmony_ci#define NCI_LF_CON_BITR_F 0x54 12862306a36Sopenharmony_ci 12962306a36Sopenharmony_ci/* NCI Configuration Parameters masks */ 13062306a36Sopenharmony_ci#define NCI_LA_SEL_INFO_ISO_DEP_MASK 0x20 13162306a36Sopenharmony_ci#define NCI_LA_SEL_INFO_NFC_DEP_MASK 0x40 13262306a36Sopenharmony_ci#define NCI_LF_PROTOCOL_TYPE_NFC_DEP_MASK 0x02 13362306a36Sopenharmony_ci#define NCI_LF_CON_BITR_F_212 0x02 13462306a36Sopenharmony_ci#define NCI_LF_CON_BITR_F_424 0x04 13562306a36Sopenharmony_ci 13662306a36Sopenharmony_ci/* NCI 2.x Feature Enable Bit */ 13762306a36Sopenharmony_ci#define NCI_FEATURE_DISABLE 0x00 13862306a36Sopenharmony_ci 13962306a36Sopenharmony_ci/* NCI Reset types */ 14062306a36Sopenharmony_ci#define NCI_RESET_TYPE_KEEP_CONFIG 0x00 14162306a36Sopenharmony_ci#define NCI_RESET_TYPE_RESET_CONFIG 0x01 14262306a36Sopenharmony_ci 14362306a36Sopenharmony_ci/* NCI Static RF connection ID */ 14462306a36Sopenharmony_ci#define NCI_STATIC_RF_CONN_ID 0x00 14562306a36Sopenharmony_ci 14662306a36Sopenharmony_ci/* NCI Data Flow Control */ 14762306a36Sopenharmony_ci#define NCI_DATA_FLOW_CONTROL_NOT_USED 0xff 14862306a36Sopenharmony_ci 14962306a36Sopenharmony_ci/* NCI RF_DISCOVER_MAP_CMD modes */ 15062306a36Sopenharmony_ci#define NCI_DISC_MAP_MODE_POLL 0x01 15162306a36Sopenharmony_ci#define NCI_DISC_MAP_MODE_LISTEN 0x02 15262306a36Sopenharmony_ci 15362306a36Sopenharmony_ci/* NCI Discover Notification Type */ 15462306a36Sopenharmony_ci#define NCI_DISCOVER_NTF_TYPE_LAST 0x00 15562306a36Sopenharmony_ci#define NCI_DISCOVER_NTF_TYPE_LAST_NFCC 0x01 15662306a36Sopenharmony_ci#define NCI_DISCOVER_NTF_TYPE_MORE 0x02 15762306a36Sopenharmony_ci 15862306a36Sopenharmony_ci/* NCI Deactivation Type */ 15962306a36Sopenharmony_ci#define NCI_DEACTIVATE_TYPE_IDLE_MODE 0x00 16062306a36Sopenharmony_ci#define NCI_DEACTIVATE_TYPE_SLEEP_MODE 0x01 16162306a36Sopenharmony_ci#define NCI_DEACTIVATE_TYPE_SLEEP_AF_MODE 0x02 16262306a36Sopenharmony_ci#define NCI_DEACTIVATE_TYPE_DISCOVERY 0x03 16362306a36Sopenharmony_ci 16462306a36Sopenharmony_ci/* Message Type (MT) */ 16562306a36Sopenharmony_ci#define NCI_MT_DATA_PKT 0x00 16662306a36Sopenharmony_ci#define NCI_MT_CMD_PKT 0x01 16762306a36Sopenharmony_ci#define NCI_MT_RSP_PKT 0x02 16862306a36Sopenharmony_ci#define NCI_MT_NTF_PKT 0x03 16962306a36Sopenharmony_ci 17062306a36Sopenharmony_ci#define nci_mt(hdr) (((hdr)[0]>>5)&0x07) 17162306a36Sopenharmony_ci#define nci_mt_set(hdr, mt) ((hdr)[0] |= (__u8)(((mt)&0x07)<<5)) 17262306a36Sopenharmony_ci 17362306a36Sopenharmony_ci/* Packet Boundary Flag (PBF) */ 17462306a36Sopenharmony_ci#define NCI_PBF_LAST 0x00 17562306a36Sopenharmony_ci#define NCI_PBF_CONT 0x01 17662306a36Sopenharmony_ci 17762306a36Sopenharmony_ci#define nci_pbf(hdr) (__u8)(((hdr)[0]>>4)&0x01) 17862306a36Sopenharmony_ci#define nci_pbf_set(hdr, pbf) ((hdr)[0] |= (__u8)(((pbf)&0x01)<<4)) 17962306a36Sopenharmony_ci 18062306a36Sopenharmony_ci/* Control Opcode manipulation */ 18162306a36Sopenharmony_ci#define nci_opcode_pack(gid, oid) (__u16)((((__u16)((gid)&0x0f))<<8)|\ 18262306a36Sopenharmony_ci ((__u16)((oid)&0x3f))) 18362306a36Sopenharmony_ci#define nci_opcode(hdr) nci_opcode_pack(hdr[0], hdr[1]) 18462306a36Sopenharmony_ci#define nci_opcode_gid(op) (__u8)(((op)&0x0f00)>>8) 18562306a36Sopenharmony_ci#define nci_opcode_oid(op) (__u8)((op)&0x003f) 18662306a36Sopenharmony_ci 18762306a36Sopenharmony_ci/* Payload Length */ 18862306a36Sopenharmony_ci#define nci_plen(hdr) (__u8)((hdr)[2]) 18962306a36Sopenharmony_ci 19062306a36Sopenharmony_ci/* Connection ID */ 19162306a36Sopenharmony_ci#define nci_conn_id(hdr) (__u8)(((hdr)[0])&0x0f) 19262306a36Sopenharmony_ci 19362306a36Sopenharmony_ci/* GID values */ 19462306a36Sopenharmony_ci#define NCI_GID_CORE 0x0 19562306a36Sopenharmony_ci#define NCI_GID_RF_MGMT 0x1 19662306a36Sopenharmony_ci#define NCI_GID_NFCEE_MGMT 0x2 19762306a36Sopenharmony_ci#define NCI_GID_PROPRIETARY 0xf 19862306a36Sopenharmony_ci 19962306a36Sopenharmony_ci/* ----- NCI over SPI head/crc(tail) room needed for outgoing frames ----- */ 20062306a36Sopenharmony_ci#define NCI_SPI_HDR_LEN 4 20162306a36Sopenharmony_ci#define NCI_SPI_CRC_LEN 2 20262306a36Sopenharmony_ci 20362306a36Sopenharmony_ci/* ---- NCI Packet structures ---- */ 20462306a36Sopenharmony_ci#define NCI_CTRL_HDR_SIZE 3 20562306a36Sopenharmony_ci#define NCI_DATA_HDR_SIZE 3 20662306a36Sopenharmony_ci 20762306a36Sopenharmony_cistruct nci_ctrl_hdr { 20862306a36Sopenharmony_ci __u8 gid; /* MT & PBF & GID */ 20962306a36Sopenharmony_ci __u8 oid; 21062306a36Sopenharmony_ci __u8 plen; 21162306a36Sopenharmony_ci} __packed; 21262306a36Sopenharmony_ci 21362306a36Sopenharmony_cistruct nci_data_hdr { 21462306a36Sopenharmony_ci __u8 conn_id; /* MT & PBF & ConnID */ 21562306a36Sopenharmony_ci __u8 rfu; 21662306a36Sopenharmony_ci __u8 plen; 21762306a36Sopenharmony_ci} __packed; 21862306a36Sopenharmony_ci 21962306a36Sopenharmony_ci/* ------------------------ */ 22062306a36Sopenharmony_ci/* ----- NCI Commands ---- */ 22162306a36Sopenharmony_ci/* ------------------------ */ 22262306a36Sopenharmony_ci#define NCI_OP_CORE_RESET_CMD nci_opcode_pack(NCI_GID_CORE, 0x00) 22362306a36Sopenharmony_cistruct nci_core_reset_cmd { 22462306a36Sopenharmony_ci __u8 reset_type; 22562306a36Sopenharmony_ci} __packed; 22662306a36Sopenharmony_ci 22762306a36Sopenharmony_ci#define NCI_OP_CORE_INIT_CMD nci_opcode_pack(NCI_GID_CORE, 0x01) 22862306a36Sopenharmony_ci/* To support NCI 2.x */ 22962306a36Sopenharmony_cistruct nci_core_init_v2_cmd { 23062306a36Sopenharmony_ci u8 feature1; 23162306a36Sopenharmony_ci u8 feature2; 23262306a36Sopenharmony_ci}; 23362306a36Sopenharmony_ci 23462306a36Sopenharmony_ci#define NCI_OP_CORE_SET_CONFIG_CMD nci_opcode_pack(NCI_GID_CORE, 0x02) 23562306a36Sopenharmony_cistruct set_config_param { 23662306a36Sopenharmony_ci __u8 id; 23762306a36Sopenharmony_ci __u8 len; 23862306a36Sopenharmony_ci __u8 val[NCI_MAX_PARAM_LEN]; 23962306a36Sopenharmony_ci} __packed; 24062306a36Sopenharmony_ci 24162306a36Sopenharmony_cistruct nci_core_set_config_cmd { 24262306a36Sopenharmony_ci __u8 num_params; 24362306a36Sopenharmony_ci struct set_config_param param; /* support 1 param per cmd is enough */ 24462306a36Sopenharmony_ci} __packed; 24562306a36Sopenharmony_ci 24662306a36Sopenharmony_ci#define NCI_OP_CORE_CONN_CREATE_CMD nci_opcode_pack(NCI_GID_CORE, 0x04) 24762306a36Sopenharmony_ci#define DEST_SPEC_PARAMS_ID_INDEX 0 24862306a36Sopenharmony_ci#define DEST_SPEC_PARAMS_PROTOCOL_INDEX 1 24962306a36Sopenharmony_cistruct dest_spec_params { 25062306a36Sopenharmony_ci __u8 id; 25162306a36Sopenharmony_ci __u8 protocol; 25262306a36Sopenharmony_ci} __packed; 25362306a36Sopenharmony_ci 25462306a36Sopenharmony_cistruct core_conn_create_dest_spec_params { 25562306a36Sopenharmony_ci __u8 type; 25662306a36Sopenharmony_ci __u8 length; 25762306a36Sopenharmony_ci __u8 value[]; 25862306a36Sopenharmony_ci} __packed; 25962306a36Sopenharmony_ci 26062306a36Sopenharmony_cistruct nci_core_conn_create_cmd { 26162306a36Sopenharmony_ci __u8 destination_type; 26262306a36Sopenharmony_ci __u8 number_destination_params; 26362306a36Sopenharmony_ci struct core_conn_create_dest_spec_params params[]; 26462306a36Sopenharmony_ci} __packed; 26562306a36Sopenharmony_ci 26662306a36Sopenharmony_ci#define NCI_OP_CORE_CONN_CLOSE_CMD nci_opcode_pack(NCI_GID_CORE, 0x05) 26762306a36Sopenharmony_ci 26862306a36Sopenharmony_ci#define NCI_OP_RF_DISCOVER_MAP_CMD nci_opcode_pack(NCI_GID_RF_MGMT, 0x00) 26962306a36Sopenharmony_cistruct disc_map_config { 27062306a36Sopenharmony_ci __u8 rf_protocol; 27162306a36Sopenharmony_ci __u8 mode; 27262306a36Sopenharmony_ci __u8 rf_interface; 27362306a36Sopenharmony_ci} __packed; 27462306a36Sopenharmony_ci 27562306a36Sopenharmony_cistruct nci_rf_disc_map_cmd { 27662306a36Sopenharmony_ci __u8 num_mapping_configs; 27762306a36Sopenharmony_ci struct disc_map_config mapping_configs 27862306a36Sopenharmony_ci [NCI_MAX_NUM_MAPPING_CONFIGS]; 27962306a36Sopenharmony_ci} __packed; 28062306a36Sopenharmony_ci 28162306a36Sopenharmony_ci#define NCI_OP_RF_DISCOVER_CMD nci_opcode_pack(NCI_GID_RF_MGMT, 0x03) 28262306a36Sopenharmony_cistruct disc_config { 28362306a36Sopenharmony_ci __u8 rf_tech_and_mode; 28462306a36Sopenharmony_ci __u8 frequency; 28562306a36Sopenharmony_ci} __packed; 28662306a36Sopenharmony_ci 28762306a36Sopenharmony_cistruct nci_rf_disc_cmd { 28862306a36Sopenharmony_ci __u8 num_disc_configs; 28962306a36Sopenharmony_ci struct disc_config disc_configs[NCI_MAX_NUM_RF_CONFIGS]; 29062306a36Sopenharmony_ci} __packed; 29162306a36Sopenharmony_ci 29262306a36Sopenharmony_ci#define NCI_OP_RF_DISCOVER_SELECT_CMD nci_opcode_pack(NCI_GID_RF_MGMT, 0x04) 29362306a36Sopenharmony_cistruct nci_rf_discover_select_cmd { 29462306a36Sopenharmony_ci __u8 rf_discovery_id; 29562306a36Sopenharmony_ci __u8 rf_protocol; 29662306a36Sopenharmony_ci __u8 rf_interface; 29762306a36Sopenharmony_ci} __packed; 29862306a36Sopenharmony_ci 29962306a36Sopenharmony_ci#define NCI_OP_RF_DEACTIVATE_CMD nci_opcode_pack(NCI_GID_RF_MGMT, 0x06) 30062306a36Sopenharmony_cistruct nci_rf_deactivate_cmd { 30162306a36Sopenharmony_ci __u8 type; 30262306a36Sopenharmony_ci} __packed; 30362306a36Sopenharmony_ci 30462306a36Sopenharmony_ci#define NCI_OP_NFCEE_DISCOVER_CMD nci_opcode_pack(NCI_GID_NFCEE_MGMT, 0x00) 30562306a36Sopenharmony_cistruct nci_nfcee_discover_cmd { 30662306a36Sopenharmony_ci __u8 discovery_action; 30762306a36Sopenharmony_ci} __packed; 30862306a36Sopenharmony_ci 30962306a36Sopenharmony_ci#define NCI_OP_NFCEE_MODE_SET_CMD nci_opcode_pack(NCI_GID_NFCEE_MGMT, 0x01) 31062306a36Sopenharmony_ci#define NCI_NFCEE_DISABLE 0x00 31162306a36Sopenharmony_ci#define NCI_NFCEE_ENABLE 0x01 31262306a36Sopenharmony_cistruct nci_nfcee_mode_set_cmd { 31362306a36Sopenharmony_ci __u8 nfcee_id; 31462306a36Sopenharmony_ci __u8 nfcee_mode; 31562306a36Sopenharmony_ci} __packed; 31662306a36Sopenharmony_ci 31762306a36Sopenharmony_ci#define NCI_OP_CORE_GET_CONFIG_CMD nci_opcode_pack(NCI_GID_CORE, 0x03) 31862306a36Sopenharmony_ci 31962306a36Sopenharmony_ci/* ----------------------- */ 32062306a36Sopenharmony_ci/* ---- NCI Responses ---- */ 32162306a36Sopenharmony_ci/* ----------------------- */ 32262306a36Sopenharmony_ci#define NCI_OP_CORE_RESET_RSP nci_opcode_pack(NCI_GID_CORE, 0x00) 32362306a36Sopenharmony_cistruct nci_core_reset_rsp { 32462306a36Sopenharmony_ci __u8 status; 32562306a36Sopenharmony_ci __u8 nci_ver; 32662306a36Sopenharmony_ci __u8 config_status; 32762306a36Sopenharmony_ci} __packed; 32862306a36Sopenharmony_ci 32962306a36Sopenharmony_ci#define NCI_OP_CORE_INIT_RSP nci_opcode_pack(NCI_GID_CORE, 0x01) 33062306a36Sopenharmony_cistruct nci_core_init_rsp_1 { 33162306a36Sopenharmony_ci __u8 status; 33262306a36Sopenharmony_ci __le32 nfcc_features; 33362306a36Sopenharmony_ci __u8 num_supported_rf_interfaces; 33462306a36Sopenharmony_ci __u8 supported_rf_interfaces[]; /* variable size array */ 33562306a36Sopenharmony_ci /* continuted in nci_core_init_rsp_2 */ 33662306a36Sopenharmony_ci} __packed; 33762306a36Sopenharmony_ci 33862306a36Sopenharmony_cistruct nci_core_init_rsp_2 { 33962306a36Sopenharmony_ci __u8 max_logical_connections; 34062306a36Sopenharmony_ci __le16 max_routing_table_size; 34162306a36Sopenharmony_ci __u8 max_ctrl_pkt_payload_len; 34262306a36Sopenharmony_ci __le16 max_size_for_large_params; 34362306a36Sopenharmony_ci __u8 manufact_id; 34462306a36Sopenharmony_ci __le32 manufact_specific_info; 34562306a36Sopenharmony_ci} __packed; 34662306a36Sopenharmony_ci 34762306a36Sopenharmony_ci/* To support NCI ver 2.x */ 34862306a36Sopenharmony_cistruct nci_core_init_rsp_nci_ver2 { 34962306a36Sopenharmony_ci u8 status; 35062306a36Sopenharmony_ci __le32 nfcc_features; 35162306a36Sopenharmony_ci u8 max_logical_connections; 35262306a36Sopenharmony_ci __le16 max_routing_table_size; 35362306a36Sopenharmony_ci u8 max_ctrl_pkt_payload_len; 35462306a36Sopenharmony_ci u8 max_data_pkt_hci_payload_len; 35562306a36Sopenharmony_ci u8 number_of_hci_credit; 35662306a36Sopenharmony_ci __le16 max_nfc_v_frame_size; 35762306a36Sopenharmony_ci u8 num_supported_rf_interfaces; 35862306a36Sopenharmony_ci u8 supported_rf_interfaces[]; 35962306a36Sopenharmony_ci} __packed; 36062306a36Sopenharmony_ci 36162306a36Sopenharmony_ci#define NCI_OP_CORE_SET_CONFIG_RSP nci_opcode_pack(NCI_GID_CORE, 0x02) 36262306a36Sopenharmony_cistruct nci_core_set_config_rsp { 36362306a36Sopenharmony_ci __u8 status; 36462306a36Sopenharmony_ci __u8 num_params; 36562306a36Sopenharmony_ci __u8 params_id[]; /* variable size array */ 36662306a36Sopenharmony_ci} __packed; 36762306a36Sopenharmony_ci 36862306a36Sopenharmony_ci#define NCI_OP_CORE_CONN_CREATE_RSP nci_opcode_pack(NCI_GID_CORE, 0x04) 36962306a36Sopenharmony_cistruct nci_core_conn_create_rsp { 37062306a36Sopenharmony_ci __u8 status; 37162306a36Sopenharmony_ci __u8 max_ctrl_pkt_payload_len; 37262306a36Sopenharmony_ci __u8 credits_cnt; 37362306a36Sopenharmony_ci __u8 conn_id; 37462306a36Sopenharmony_ci} __packed; 37562306a36Sopenharmony_ci 37662306a36Sopenharmony_ci#define NCI_OP_CORE_CONN_CLOSE_RSP nci_opcode_pack(NCI_GID_CORE, 0x05) 37762306a36Sopenharmony_ci 37862306a36Sopenharmony_ci#define NCI_OP_RF_DISCOVER_MAP_RSP nci_opcode_pack(NCI_GID_RF_MGMT, 0x00) 37962306a36Sopenharmony_ci 38062306a36Sopenharmony_ci#define NCI_OP_RF_DISCOVER_RSP nci_opcode_pack(NCI_GID_RF_MGMT, 0x03) 38162306a36Sopenharmony_ci 38262306a36Sopenharmony_ci#define NCI_OP_RF_DISCOVER_SELECT_RSP nci_opcode_pack(NCI_GID_RF_MGMT, 0x04) 38362306a36Sopenharmony_ci 38462306a36Sopenharmony_ci#define NCI_OP_RF_DEACTIVATE_RSP nci_opcode_pack(NCI_GID_RF_MGMT, 0x06) 38562306a36Sopenharmony_ci 38662306a36Sopenharmony_ci#define NCI_OP_NFCEE_DISCOVER_RSP nci_opcode_pack(NCI_GID_NFCEE_MGMT, 0x00) 38762306a36Sopenharmony_cistruct nci_nfcee_discover_rsp { 38862306a36Sopenharmony_ci __u8 status; 38962306a36Sopenharmony_ci __u8 num_nfcee; 39062306a36Sopenharmony_ci} __packed; 39162306a36Sopenharmony_ci 39262306a36Sopenharmony_ci#define NCI_OP_NFCEE_MODE_SET_RSP nci_opcode_pack(NCI_GID_NFCEE_MGMT, 0x01) 39362306a36Sopenharmony_ci 39462306a36Sopenharmony_ci#define NCI_OP_CORE_GET_CONFIG_RSP nci_opcode_pack(NCI_GID_CORE, 0x03) 39562306a36Sopenharmony_ci 39662306a36Sopenharmony_ci/* --------------------------- */ 39762306a36Sopenharmony_ci/* ---- NCI Notifications ---- */ 39862306a36Sopenharmony_ci/* --------------------------- */ 39962306a36Sopenharmony_ci#define NCI_OP_CORE_RESET_NTF nci_opcode_pack(NCI_GID_CORE, 0x00) 40062306a36Sopenharmony_cistruct nci_core_reset_ntf { 40162306a36Sopenharmony_ci u8 reset_trigger; 40262306a36Sopenharmony_ci u8 config_status; 40362306a36Sopenharmony_ci u8 nci_ver; 40462306a36Sopenharmony_ci u8 manufact_id; 40562306a36Sopenharmony_ci u8 manufacturer_specific_len; 40662306a36Sopenharmony_ci __le32 manufact_specific_info; 40762306a36Sopenharmony_ci} __packed; 40862306a36Sopenharmony_ci 40962306a36Sopenharmony_ci#define NCI_OP_CORE_CONN_CREDITS_NTF nci_opcode_pack(NCI_GID_CORE, 0x06) 41062306a36Sopenharmony_cistruct conn_credit_entry { 41162306a36Sopenharmony_ci __u8 conn_id; 41262306a36Sopenharmony_ci __u8 credits; 41362306a36Sopenharmony_ci} __packed; 41462306a36Sopenharmony_ci 41562306a36Sopenharmony_cistruct nci_core_conn_credit_ntf { 41662306a36Sopenharmony_ci __u8 num_entries; 41762306a36Sopenharmony_ci struct conn_credit_entry conn_entries[NCI_MAX_NUM_CONN]; 41862306a36Sopenharmony_ci} __packed; 41962306a36Sopenharmony_ci 42062306a36Sopenharmony_ci#define NCI_OP_CORE_GENERIC_ERROR_NTF nci_opcode_pack(NCI_GID_CORE, 0x07) 42162306a36Sopenharmony_ci 42262306a36Sopenharmony_ci#define NCI_OP_CORE_INTF_ERROR_NTF nci_opcode_pack(NCI_GID_CORE, 0x08) 42362306a36Sopenharmony_cistruct nci_core_intf_error_ntf { 42462306a36Sopenharmony_ci __u8 status; 42562306a36Sopenharmony_ci __u8 conn_id; 42662306a36Sopenharmony_ci} __packed; 42762306a36Sopenharmony_ci 42862306a36Sopenharmony_ci#define NCI_OP_RF_DISCOVER_NTF nci_opcode_pack(NCI_GID_RF_MGMT, 0x03) 42962306a36Sopenharmony_cistruct rf_tech_specific_params_nfca_poll { 43062306a36Sopenharmony_ci __u16 sens_res; 43162306a36Sopenharmony_ci __u8 nfcid1_len; /* 0, 4, 7, or 10 Bytes */ 43262306a36Sopenharmony_ci __u8 nfcid1[NFC_NFCID1_MAXSIZE]; 43362306a36Sopenharmony_ci __u8 sel_res_len; /* 0 or 1 Bytes */ 43462306a36Sopenharmony_ci __u8 sel_res; 43562306a36Sopenharmony_ci} __packed; 43662306a36Sopenharmony_ci 43762306a36Sopenharmony_cistruct rf_tech_specific_params_nfcb_poll { 43862306a36Sopenharmony_ci __u8 sensb_res_len; 43962306a36Sopenharmony_ci __u8 sensb_res[NFC_SENSB_RES_MAXSIZE]; /* 11 or 12 Bytes */ 44062306a36Sopenharmony_ci} __packed; 44162306a36Sopenharmony_ci 44262306a36Sopenharmony_cistruct rf_tech_specific_params_nfcf_poll { 44362306a36Sopenharmony_ci __u8 bit_rate; 44462306a36Sopenharmony_ci __u8 sensf_res_len; 44562306a36Sopenharmony_ci __u8 sensf_res[NFC_SENSF_RES_MAXSIZE]; /* 16 or 18 Bytes */ 44662306a36Sopenharmony_ci} __packed; 44762306a36Sopenharmony_ci 44862306a36Sopenharmony_cistruct rf_tech_specific_params_nfcv_poll { 44962306a36Sopenharmony_ci __u8 res_flags; 45062306a36Sopenharmony_ci __u8 dsfid; 45162306a36Sopenharmony_ci __u8 uid[NFC_ISO15693_UID_MAXSIZE]; /* 8 Bytes */ 45262306a36Sopenharmony_ci} __packed; 45362306a36Sopenharmony_ci 45462306a36Sopenharmony_cistruct rf_tech_specific_params_nfcf_listen { 45562306a36Sopenharmony_ci __u8 local_nfcid2_len; 45662306a36Sopenharmony_ci __u8 local_nfcid2[NFC_NFCID2_MAXSIZE]; /* 0 or 8 Bytes */ 45762306a36Sopenharmony_ci} __packed; 45862306a36Sopenharmony_ci 45962306a36Sopenharmony_cistruct nci_rf_discover_ntf { 46062306a36Sopenharmony_ci __u8 rf_discovery_id; 46162306a36Sopenharmony_ci __u8 rf_protocol; 46262306a36Sopenharmony_ci __u8 rf_tech_and_mode; 46362306a36Sopenharmony_ci __u8 rf_tech_specific_params_len; 46462306a36Sopenharmony_ci 46562306a36Sopenharmony_ci union { 46662306a36Sopenharmony_ci struct rf_tech_specific_params_nfca_poll nfca_poll; 46762306a36Sopenharmony_ci struct rf_tech_specific_params_nfcb_poll nfcb_poll; 46862306a36Sopenharmony_ci struct rf_tech_specific_params_nfcf_poll nfcf_poll; 46962306a36Sopenharmony_ci struct rf_tech_specific_params_nfcv_poll nfcv_poll; 47062306a36Sopenharmony_ci } rf_tech_specific_params; 47162306a36Sopenharmony_ci 47262306a36Sopenharmony_ci __u8 ntf_type; 47362306a36Sopenharmony_ci} __packed; 47462306a36Sopenharmony_ci 47562306a36Sopenharmony_ci#define NCI_OP_RF_INTF_ACTIVATED_NTF nci_opcode_pack(NCI_GID_RF_MGMT, 0x05) 47662306a36Sopenharmony_cistruct activation_params_nfca_poll_iso_dep { 47762306a36Sopenharmony_ci __u8 rats_res_len; 47862306a36Sopenharmony_ci __u8 rats_res[20]; 47962306a36Sopenharmony_ci}; 48062306a36Sopenharmony_ci 48162306a36Sopenharmony_cistruct activation_params_nfcb_poll_iso_dep { 48262306a36Sopenharmony_ci __u8 attrib_res_len; 48362306a36Sopenharmony_ci __u8 attrib_res[50]; 48462306a36Sopenharmony_ci}; 48562306a36Sopenharmony_ci 48662306a36Sopenharmony_cistruct activation_params_poll_nfc_dep { 48762306a36Sopenharmony_ci __u8 atr_res_len; 48862306a36Sopenharmony_ci __u8 atr_res[NFC_ATR_RES_MAXSIZE - 2]; /* ATR_RES from byte 3 */ 48962306a36Sopenharmony_ci}; 49062306a36Sopenharmony_ci 49162306a36Sopenharmony_cistruct activation_params_listen_nfc_dep { 49262306a36Sopenharmony_ci __u8 atr_req_len; 49362306a36Sopenharmony_ci __u8 atr_req[NFC_ATR_REQ_MAXSIZE - 2]; /* ATR_REQ from byte 3 */ 49462306a36Sopenharmony_ci}; 49562306a36Sopenharmony_ci 49662306a36Sopenharmony_cistruct nci_rf_intf_activated_ntf { 49762306a36Sopenharmony_ci __u8 rf_discovery_id; 49862306a36Sopenharmony_ci __u8 rf_interface; 49962306a36Sopenharmony_ci __u8 rf_protocol; 50062306a36Sopenharmony_ci __u8 activation_rf_tech_and_mode; 50162306a36Sopenharmony_ci __u8 max_data_pkt_payload_size; 50262306a36Sopenharmony_ci __u8 initial_num_credits; 50362306a36Sopenharmony_ci __u8 rf_tech_specific_params_len; 50462306a36Sopenharmony_ci 50562306a36Sopenharmony_ci union { 50662306a36Sopenharmony_ci struct rf_tech_specific_params_nfca_poll nfca_poll; 50762306a36Sopenharmony_ci struct rf_tech_specific_params_nfcb_poll nfcb_poll; 50862306a36Sopenharmony_ci struct rf_tech_specific_params_nfcf_poll nfcf_poll; 50962306a36Sopenharmony_ci struct rf_tech_specific_params_nfcv_poll nfcv_poll; 51062306a36Sopenharmony_ci struct rf_tech_specific_params_nfcf_listen nfcf_listen; 51162306a36Sopenharmony_ci } rf_tech_specific_params; 51262306a36Sopenharmony_ci 51362306a36Sopenharmony_ci __u8 data_exch_rf_tech_and_mode; 51462306a36Sopenharmony_ci __u8 data_exch_tx_bit_rate; 51562306a36Sopenharmony_ci __u8 data_exch_rx_bit_rate; 51662306a36Sopenharmony_ci __u8 activation_params_len; 51762306a36Sopenharmony_ci 51862306a36Sopenharmony_ci union { 51962306a36Sopenharmony_ci struct activation_params_nfca_poll_iso_dep nfca_poll_iso_dep; 52062306a36Sopenharmony_ci struct activation_params_nfcb_poll_iso_dep nfcb_poll_iso_dep; 52162306a36Sopenharmony_ci struct activation_params_poll_nfc_dep poll_nfc_dep; 52262306a36Sopenharmony_ci struct activation_params_listen_nfc_dep listen_nfc_dep; 52362306a36Sopenharmony_ci } activation_params; 52462306a36Sopenharmony_ci 52562306a36Sopenharmony_ci} __packed; 52662306a36Sopenharmony_ci 52762306a36Sopenharmony_ci#define NCI_OP_RF_DEACTIVATE_NTF nci_opcode_pack(NCI_GID_RF_MGMT, 0x06) 52862306a36Sopenharmony_cistruct nci_rf_deactivate_ntf { 52962306a36Sopenharmony_ci __u8 type; 53062306a36Sopenharmony_ci __u8 reason; 53162306a36Sopenharmony_ci} __packed; 53262306a36Sopenharmony_ci 53362306a36Sopenharmony_ci#define NCI_OP_RF_NFCEE_ACTION_NTF nci_opcode_pack(NCI_GID_RF_MGMT, 0x09) 53462306a36Sopenharmony_cistruct nci_rf_nfcee_action_ntf { 53562306a36Sopenharmony_ci __u8 nfcee_id; 53662306a36Sopenharmony_ci __u8 trigger; 53762306a36Sopenharmony_ci __u8 supported_data_length; 53862306a36Sopenharmony_ci __u8 supported_data[]; 53962306a36Sopenharmony_ci} __packed; 54062306a36Sopenharmony_ci 54162306a36Sopenharmony_ci#define NCI_OP_NFCEE_DISCOVER_NTF nci_opcode_pack(NCI_GID_NFCEE_MGMT, 0x00) 54262306a36Sopenharmony_cistruct nci_nfcee_supported_protocol { 54362306a36Sopenharmony_ci __u8 num_protocol; 54462306a36Sopenharmony_ci __u8 supported_protocol[]; 54562306a36Sopenharmony_ci} __packed; 54662306a36Sopenharmony_ci 54762306a36Sopenharmony_cistruct nci_nfcee_information_tlv { 54862306a36Sopenharmony_ci __u8 num_tlv; 54962306a36Sopenharmony_ci __u8 information_tlv[]; 55062306a36Sopenharmony_ci} __packed; 55162306a36Sopenharmony_ci 55262306a36Sopenharmony_cistruct nci_nfcee_discover_ntf { 55362306a36Sopenharmony_ci __u8 nfcee_id; 55462306a36Sopenharmony_ci __u8 nfcee_status; 55562306a36Sopenharmony_ci struct nci_nfcee_supported_protocol supported_protocols; 55662306a36Sopenharmony_ci struct nci_nfcee_information_tlv information_tlv; 55762306a36Sopenharmony_ci} __packed; 55862306a36Sopenharmony_ci 55962306a36Sopenharmony_ci#define NCI_OP_CORE_RESET_NTF nci_opcode_pack(NCI_GID_CORE, 0x00) 56062306a36Sopenharmony_ci 56162306a36Sopenharmony_ci#endif /* __NCI_H */ 562