root/net/nfc/digital.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


DEFINITIONS

This source file includes following definitions.
  1. digital_in_send_cmd
  2. digital_tg_send_cmd
  3. digital_tg_listen
  4. digital_skb_add_crc_a
  5. digital_skb_add_crc_b
  6. digital_skb_add_crc_f
  7. digital_skb_add_crc_none
  8. digital_skb_check_crc_a
  9. digital_skb_check_crc_b
  10. digital_skb_check_crc_f
  11. digital_skb_check_crc_none

   1 /* SPDX-License-Identifier: GPL-2.0-only */
   2 /*
   3  * NFC Digital Protocol stack
   4  * Copyright (c) 2013, Intel Corporation.
   5  */
   6 
   7 #ifndef __DIGITAL_H
   8 #define __DIGITAL_H
   9 
  10 #include <net/nfc/nfc.h>
  11 #include <net/nfc/digital.h>
  12 
  13 #include <linux/crc-ccitt.h>
  14 #include <linux/crc-itu-t.h>
  15 
  16 #define PROTOCOL_ERR(req) pr_err("%d: NFC Digital Protocol error: %s\n", \
  17                                  __LINE__, req)
  18 
  19 #define DIGITAL_CMD_IN_SEND        0
  20 #define DIGITAL_CMD_TG_SEND        1
  21 #define DIGITAL_CMD_TG_LISTEN      2
  22 #define DIGITAL_CMD_TG_LISTEN_MDAA 3
  23 #define DIGITAL_CMD_TG_LISTEN_MD   4
  24 
  25 #define DIGITAL_MAX_HEADER_LEN 7
  26 #define DIGITAL_CRC_LEN        2
  27 
  28 #define DIGITAL_SENSF_NFCID2_NFC_DEP_B1 0x01
  29 #define DIGITAL_SENSF_NFCID2_NFC_DEP_B2 0xFE
  30 
  31 #define DIGITAL_SENS_RES_NFC_DEP 0x0100
  32 #define DIGITAL_SEL_RES_NFC_DEP  0x40
  33 #define DIGITAL_SENSF_FELICA_SC  0xFFFF
  34 
  35 #define DIGITAL_DRV_CAPS_IN_CRC(ddev) \
  36         ((ddev)->driver_capabilities & NFC_DIGITAL_DRV_CAPS_IN_CRC)
  37 #define DIGITAL_DRV_CAPS_TG_CRC(ddev) \
  38         ((ddev)->driver_capabilities & NFC_DIGITAL_DRV_CAPS_TG_CRC)
  39 
  40 struct digital_data_exch {
  41         data_exchange_cb_t cb;
  42         void *cb_context;
  43 };
  44 
  45 struct sk_buff *digital_skb_alloc(struct nfc_digital_dev *ddev,
  46                                   unsigned int len);
  47 
  48 int digital_send_cmd(struct nfc_digital_dev *ddev, u8 cmd_type,
  49                      struct sk_buff *skb, struct digital_tg_mdaa_params *params,
  50                      u16 timeout, nfc_digital_cmd_complete_t cmd_cb,
  51                      void *cb_context);
  52 
  53 int digital_in_configure_hw(struct nfc_digital_dev *ddev, int type, int param);
  54 static inline int digital_in_send_cmd(struct nfc_digital_dev *ddev,
  55                                       struct sk_buff *skb, u16 timeout,
  56                                       nfc_digital_cmd_complete_t cmd_cb,
  57                                       void *cb_context)
  58 {
  59         return digital_send_cmd(ddev, DIGITAL_CMD_IN_SEND, skb, NULL, timeout,
  60                                 cmd_cb, cb_context);
  61 }
  62 
  63 void digital_poll_next_tech(struct nfc_digital_dev *ddev);
  64 
  65 int digital_in_send_sens_req(struct nfc_digital_dev *ddev, u8 rf_tech);
  66 int digital_in_send_sensb_req(struct nfc_digital_dev *ddev, u8 rf_tech);
  67 int digital_in_send_sensf_req(struct nfc_digital_dev *ddev, u8 rf_tech);
  68 int digital_in_send_iso15693_inv_req(struct nfc_digital_dev *ddev, u8 rf_tech);
  69 
  70 int digital_in_iso_dep_pull_sod(struct nfc_digital_dev *ddev,
  71                                 struct sk_buff *skb);
  72 int digital_in_iso_dep_push_sod(struct nfc_digital_dev *ddev,
  73                                 struct sk_buff *skb);
  74 
  75 int digital_target_found(struct nfc_digital_dev *ddev,
  76                          struct nfc_target *target, u8 protocol);
  77 
  78 int digital_in_recv_mifare_res(struct sk_buff *resp);
  79 
  80 int digital_in_send_atr_req(struct nfc_digital_dev *ddev,
  81                             struct nfc_target *target, __u8 comm_mode, __u8 *gb,
  82                             size_t gb_len);
  83 int digital_in_send_dep_req(struct nfc_digital_dev *ddev,
  84                             struct nfc_target *target, struct sk_buff *skb,
  85                             struct digital_data_exch *data_exch);
  86 
  87 int digital_tg_configure_hw(struct nfc_digital_dev *ddev, int type, int param);
  88 static inline int digital_tg_send_cmd(struct nfc_digital_dev *ddev,
  89                         struct sk_buff *skb, u16 timeout,
  90                         nfc_digital_cmd_complete_t cmd_cb, void *cb_context)
  91 {
  92         return digital_send_cmd(ddev, DIGITAL_CMD_TG_SEND, skb, NULL, timeout,
  93                                 cmd_cb, cb_context);
  94 }
  95 
  96 void digital_tg_recv_sens_req(struct nfc_digital_dev *ddev, void *arg,
  97                               struct sk_buff *resp);
  98 
  99 void digital_tg_recv_sensf_req(struct nfc_digital_dev *ddev, void *arg,
 100                                struct sk_buff *resp);
 101 
 102 static inline int digital_tg_listen(struct nfc_digital_dev *ddev, u16 timeout,
 103                                     nfc_digital_cmd_complete_t cb, void *arg)
 104 {
 105         return digital_send_cmd(ddev, DIGITAL_CMD_TG_LISTEN, NULL, NULL,
 106                                 timeout, cb, arg);
 107 }
 108 
 109 void digital_tg_recv_atr_req(struct nfc_digital_dev *ddev, void *arg,
 110                              struct sk_buff *resp);
 111 
 112 int digital_tg_send_dep_res(struct nfc_digital_dev *ddev, struct sk_buff *skb);
 113 
 114 int digital_tg_listen_nfca(struct nfc_digital_dev *ddev, u8 rf_tech);
 115 int digital_tg_listen_nfcf(struct nfc_digital_dev *ddev, u8 rf_tech);
 116 void digital_tg_recv_md_req(struct nfc_digital_dev *ddev, void *arg,
 117                             struct sk_buff *resp);
 118 
 119 typedef u16 (*crc_func_t)(u16, const u8 *, size_t);
 120 
 121 #define CRC_A_INIT 0x6363
 122 #define CRC_B_INIT 0xFFFF
 123 #define CRC_F_INIT 0x0000
 124 
 125 void digital_skb_add_crc(struct sk_buff *skb, crc_func_t crc_func, u16 init,
 126                          u8 bitwise_inv, u8 msb_first);
 127 
 128 static inline void digital_skb_add_crc_a(struct sk_buff *skb)
 129 {
 130         digital_skb_add_crc(skb, crc_ccitt, CRC_A_INIT, 0, 0);
 131 }
 132 
 133 static inline void digital_skb_add_crc_b(struct sk_buff *skb)
 134 {
 135         digital_skb_add_crc(skb, crc_ccitt, CRC_B_INIT, 1, 0);
 136 }
 137 
 138 static inline void digital_skb_add_crc_f(struct sk_buff *skb)
 139 {
 140         digital_skb_add_crc(skb, crc_itu_t, CRC_F_INIT, 0, 1);
 141 }
 142 
 143 static inline void digital_skb_add_crc_none(struct sk_buff *skb)
 144 {
 145         return;
 146 }
 147 
 148 int digital_skb_check_crc(struct sk_buff *skb, crc_func_t crc_func,
 149                           u16 crc_init, u8 bitwise_inv, u8 msb_first);
 150 
 151 static inline int digital_skb_check_crc_a(struct sk_buff *skb)
 152 {
 153         return digital_skb_check_crc(skb, crc_ccitt, CRC_A_INIT, 0, 0);
 154 }
 155 
 156 static inline int digital_skb_check_crc_b(struct sk_buff *skb)
 157 {
 158         return digital_skb_check_crc(skb, crc_ccitt, CRC_B_INIT, 1, 0);
 159 }
 160 
 161 static inline int digital_skb_check_crc_f(struct sk_buff *skb)
 162 {
 163         return digital_skb_check_crc(skb, crc_itu_t, CRC_F_INIT, 0, 1);
 164 }
 165 
 166 static inline int digital_skb_check_crc_none(struct sk_buff *skb)
 167 {
 168         return 0;
 169 }
 170 
 171 #endif /* __DIGITAL_H */

/* [<][>][^][v][top][bottom][index][help] */