^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1) /* SPDX-License-Identifier: GPL-2.0-or-later */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3) * Copyright (C) 2011 Intel Corporation. All rights reserved.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6) #ifndef __NET_HCI_H
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 7) #define __NET_HCI_H
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 8)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 9) #include <linux/skbuff.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11) #include <net/nfc/nfc.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 12)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 13) struct nfc_hci_dev;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 14)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 15) struct nfc_hci_ops {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 16) int (*open) (struct nfc_hci_dev *hdev);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 17) void (*close) (struct nfc_hci_dev *hdev);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 18) int (*load_session) (struct nfc_hci_dev *hdev);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 19) int (*hci_ready) (struct nfc_hci_dev *hdev);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 20) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 21) * xmit must always send the complete buffer before
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 22) * returning. Returned result must be 0 for success
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 23) * or negative for failure.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 24) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 25) int (*xmit) (struct nfc_hci_dev *hdev, struct sk_buff *skb);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 26) int (*start_poll) (struct nfc_hci_dev *hdev,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 27) u32 im_protocols, u32 tm_protocols);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 28) void (*stop_poll) (struct nfc_hci_dev *hdev);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 29) int (*dep_link_up)(struct nfc_hci_dev *hdev, struct nfc_target *target,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 30) u8 comm_mode, u8 *gb, size_t gb_len);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 31) int (*dep_link_down)(struct nfc_hci_dev *hdev);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 32) int (*target_from_gate) (struct nfc_hci_dev *hdev, u8 gate,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 33) struct nfc_target *target);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 34) int (*complete_target_discovered) (struct nfc_hci_dev *hdev, u8 gate,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 35) struct nfc_target *target);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 36) int (*im_transceive) (struct nfc_hci_dev *hdev,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 37) struct nfc_target *target, struct sk_buff *skb,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 38) data_exchange_cb_t cb, void *cb_context);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 39) int (*tm_send)(struct nfc_hci_dev *hdev, struct sk_buff *skb);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 40) int (*check_presence)(struct nfc_hci_dev *hdev,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 41) struct nfc_target *target);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 42) int (*event_received)(struct nfc_hci_dev *hdev, u8 pipe, u8 event,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 43) struct sk_buff *skb);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 44) void (*cmd_received)(struct nfc_hci_dev *hdev, u8 pipe, u8 cmd,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 45) struct sk_buff *skb);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 46) int (*fw_download)(struct nfc_hci_dev *hdev, const char *firmware_name);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 47) int (*discover_se)(struct nfc_hci_dev *dev);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 48) int (*enable_se)(struct nfc_hci_dev *dev, u32 se_idx);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 49) int (*disable_se)(struct nfc_hci_dev *dev, u32 se_idx);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 50) int (*se_io)(struct nfc_hci_dev *dev, u32 se_idx,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 51) u8 *apdu, size_t apdu_length,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 52) se_io_cb_t cb, void *cb_context);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 53) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 54)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 55) /* Pipes */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 56) #define NFC_HCI_DO_NOT_CREATE_PIPE 0x81
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 57) #define NFC_HCI_INVALID_PIPE 0x80
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 58) #define NFC_HCI_INVALID_GATE 0xFF
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 59) #define NFC_HCI_INVALID_HOST 0x80
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 60) #define NFC_HCI_LINK_MGMT_PIPE 0x00
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 61) #define NFC_HCI_ADMIN_PIPE 0x01
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 62)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 63) struct nfc_hci_gate {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 64) u8 gate;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 65) u8 pipe;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 66) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 67)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 68) struct nfc_hci_pipe {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 69) u8 gate;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 70) u8 dest_host;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 71) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 72)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 73) #define NFC_HCI_MAX_CUSTOM_GATES 50
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 74) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 75) * According to specification 102 622 chapter 4.4 Pipes,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 76) * the pipe identifier is 7 bits long.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 77) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 78) #define NFC_HCI_MAX_PIPES 128
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 79) struct nfc_hci_init_data {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 80) u8 gate_count;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 81) struct nfc_hci_gate gates[NFC_HCI_MAX_CUSTOM_GATES];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 82) char session_id[9];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 83) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 84)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 85) typedef int (*xmit) (struct sk_buff *skb, void *cb_data);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 86)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 87) #define NFC_HCI_MAX_GATES 256
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 88)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 89) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 90) * These values can be specified by a driver to indicate it requires some
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 91) * adaptation of the HCI standard.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 92) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 93) * NFC_HCI_QUIRK_SHORT_CLEAR - send HCI_ADM_CLEAR_ALL_PIPE cmd with no params
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 94) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 95) enum {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 96) NFC_HCI_QUIRK_SHORT_CLEAR = 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 97) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 98)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 99) struct nfc_hci_dev {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 100) struct nfc_dev *ndev;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 101)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 102) u32 max_data_link_payload;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 103)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 104) bool shutting_down;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 105)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 106) struct mutex msg_tx_mutex;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 107)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 108) struct list_head msg_tx_queue;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 109)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 110) struct work_struct msg_tx_work;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 111)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 112) struct timer_list cmd_timer;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 113) struct hci_msg *cmd_pending_msg;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 114)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 115) struct sk_buff_head rx_hcp_frags;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 116)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 117) struct work_struct msg_rx_work;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 118)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 119) struct sk_buff_head msg_rx_queue;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 120)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 121) struct nfc_hci_ops *ops;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 122)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 123) struct nfc_llc *llc;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 124)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 125) struct nfc_hci_init_data init_data;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 126)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 127) void *clientdata;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 128)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 129) u8 gate2pipe[NFC_HCI_MAX_GATES];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 130) struct nfc_hci_pipe pipes[NFC_HCI_MAX_PIPES];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 131)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 132) u8 sw_romlib;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 133) u8 sw_patch;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 134) u8 sw_flashlib_major;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 135) u8 sw_flashlib_minor;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 136)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 137) u8 hw_derivative;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 138) u8 hw_version;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 139) u8 hw_mpw;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 140) u8 hw_software;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 141) u8 hw_bsid;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 142)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 143) int async_cb_type;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 144) data_exchange_cb_t async_cb;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 145) void *async_cb_context;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 146)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 147) u8 *gb;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 148) size_t gb_len;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 149)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 150) unsigned long quirks;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 151) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 152)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 153) /* hci device allocation */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 154) struct nfc_hci_dev *nfc_hci_allocate_device(struct nfc_hci_ops *ops,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 155) struct nfc_hci_init_data *init_data,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 156) unsigned long quirks,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 157) u32 protocols,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 158) const char *llc_name,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 159) int tx_headroom,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 160) int tx_tailroom,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 161) int max_link_payload);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 162) void nfc_hci_free_device(struct nfc_hci_dev *hdev);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 163)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 164) int nfc_hci_register_device(struct nfc_hci_dev *hdev);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 165) void nfc_hci_unregister_device(struct nfc_hci_dev *hdev);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 166)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 167) void nfc_hci_set_clientdata(struct nfc_hci_dev *hdev, void *clientdata);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 168) void *nfc_hci_get_clientdata(struct nfc_hci_dev *hdev);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 169)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 170) static inline int nfc_hci_set_vendor_cmds(struct nfc_hci_dev *hdev,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 171) struct nfc_vendor_cmd *cmds,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 172) int n_cmds)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 173) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 174) return nfc_set_vendor_cmds(hdev->ndev, cmds, n_cmds);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 175) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 176)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 177) void nfc_hci_driver_failure(struct nfc_hci_dev *hdev, int err);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 178)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 179) int nfc_hci_result_to_errno(u8 result);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 180) void nfc_hci_reset_pipes(struct nfc_hci_dev *dev);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 181) void nfc_hci_reset_pipes_per_host(struct nfc_hci_dev *hdev, u8 host);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 182)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 183) /* Host IDs */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 184) #define NFC_HCI_HOST_CONTROLLER_ID 0x00
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 185) #define NFC_HCI_TERMINAL_HOST_ID 0x01
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 186) #define NFC_HCI_UICC_HOST_ID 0x02
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 187)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 188) /* Host Controller Gates and registry indexes */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 189) #define NFC_HCI_ADMIN_GATE 0x00
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 190) #define NFC_HCI_ADMIN_SESSION_IDENTITY 0x01
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 191) #define NFC_HCI_ADMIN_MAX_PIPE 0x02
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 192) #define NFC_HCI_ADMIN_WHITELIST 0x03
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 193) #define NFC_HCI_ADMIN_HOST_LIST 0x04
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 194)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 195) #define NFC_HCI_LOOPBACK_GATE 0x04
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 196)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 197) #define NFC_HCI_ID_MGMT_GATE 0x05
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 198) #define NFC_HCI_ID_MGMT_VERSION_SW 0x01
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 199) #define NFC_HCI_ID_MGMT_VERSION_HW 0x03
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 200) #define NFC_HCI_ID_MGMT_VENDOR_NAME 0x04
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 201) #define NFC_HCI_ID_MGMT_MODEL_ID 0x05
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 202) #define NFC_HCI_ID_MGMT_HCI_VERSION 0x02
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 203) #define NFC_HCI_ID_MGMT_GATES_LIST 0x06
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 204)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 205) #define NFC_HCI_LINK_MGMT_GATE 0x06
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 206) #define NFC_HCI_LINK_MGMT_REC_ERROR 0x01
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 207)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 208) #define NFC_HCI_RF_READER_B_GATE 0x11
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 209) #define NFC_HCI_RF_READER_B_PUPI 0x03
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 210) #define NFC_HCI_RF_READER_B_APPLICATION_DATA 0x04
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 211) #define NFC_HCI_RF_READER_B_AFI 0x02
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 212) #define NFC_HCI_RF_READER_B_HIGHER_LAYER_RESPONSE 0x01
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 213) #define NFC_HCI_RF_READER_B_HIGHER_LAYER_DATA 0x05
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 214)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 215) #define NFC_HCI_RF_READER_A_GATE 0x13
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 216) #define NFC_HCI_RF_READER_A_UID 0x02
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 217) #define NFC_HCI_RF_READER_A_ATQA 0x04
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 218) #define NFC_HCI_RF_READER_A_APPLICATION_DATA 0x05
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 219) #define NFC_HCI_RF_READER_A_SAK 0x03
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 220) #define NFC_HCI_RF_READER_A_FWI_SFGT 0x06
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 221) #define NFC_HCI_RF_READER_A_DATARATE_MAX 0x01
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 222)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 223) #define NFC_HCI_TYPE_A_SEL_PROT(x) (((x) & 0x60) >> 5)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 224) #define NFC_HCI_TYPE_A_SEL_PROT_MIFARE 0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 225) #define NFC_HCI_TYPE_A_SEL_PROT_ISO14443 1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 226) #define NFC_HCI_TYPE_A_SEL_PROT_DEP 2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 227) #define NFC_HCI_TYPE_A_SEL_PROT_ISO14443_DEP 3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 228)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 229) /* Generic events */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 230) #define NFC_HCI_EVT_HCI_END_OF_OPERATION 0x01
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 231) #define NFC_HCI_EVT_POST_DATA 0x02
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 232) #define NFC_HCI_EVT_HOT_PLUG 0x03
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 233)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 234) /* Generic commands */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 235) #define NFC_HCI_ANY_SET_PARAMETER 0x01
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 236) #define NFC_HCI_ANY_GET_PARAMETER 0x02
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 237) #define NFC_HCI_ANY_OPEN_PIPE 0x03
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 238) #define NFC_HCI_ANY_CLOSE_PIPE 0x04
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 239)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 240) /* Reader RF gates events */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 241) #define NFC_HCI_EVT_READER_REQUESTED 0x10
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 242) #define NFC_HCI_EVT_END_OPERATION 0x11
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 243)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 244) /* Reader Application gate events */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 245) #define NFC_HCI_EVT_TARGET_DISCOVERED 0x10
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 246)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 247) /* receiving messages from lower layer */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 248) void nfc_hci_resp_received(struct nfc_hci_dev *hdev, u8 result,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 249) struct sk_buff *skb);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 250) void nfc_hci_cmd_received(struct nfc_hci_dev *hdev, u8 pipe, u8 cmd,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 251) struct sk_buff *skb);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 252) void nfc_hci_event_received(struct nfc_hci_dev *hdev, u8 pipe, u8 event,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 253) struct sk_buff *skb);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 254) void nfc_hci_recv_frame(struct nfc_hci_dev *hdev, struct sk_buff *skb);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 255)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 256) /* connecting to gates and sending hci instructions */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 257) int nfc_hci_connect_gate(struct nfc_hci_dev *hdev, u8 dest_host, u8 dest_gate,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 258) u8 pipe);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 259) int nfc_hci_disconnect_gate(struct nfc_hci_dev *hdev, u8 gate);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 260) int nfc_hci_disconnect_all_gates(struct nfc_hci_dev *hdev);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 261) int nfc_hci_get_param(struct nfc_hci_dev *hdev, u8 gate, u8 idx,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 262) struct sk_buff **skb);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 263) int nfc_hci_set_param(struct nfc_hci_dev *hdev, u8 gate, u8 idx,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 264) const u8 *param, size_t param_len);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 265) int nfc_hci_send_cmd(struct nfc_hci_dev *hdev, u8 gate, u8 cmd,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 266) const u8 *param, size_t param_len, struct sk_buff **skb);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 267) int nfc_hci_send_cmd_async(struct nfc_hci_dev *hdev, u8 gate, u8 cmd,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 268) const u8 *param, size_t param_len,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 269) data_exchange_cb_t cb, void *cb_context);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 270) int nfc_hci_send_event(struct nfc_hci_dev *hdev, u8 gate, u8 event,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 271) const u8 *param, size_t param_len);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 272) int nfc_hci_target_discovered(struct nfc_hci_dev *hdev, u8 gate);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 273) u32 nfc_hci_sak_to_protocol(u8 sak);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 274)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 275) #endif /* __NET_HCI_H */