root/drivers/nfc/nxp-nci/nxp-nci.h

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

INCLUDED FROM


   1 /* SPDX-License-Identifier: GPL-2.0-only */
   2 /*
   3  * Copyright (C) 2014  NXP Semiconductors  All rights reserved.
   4  *
   5  * Authors: Clément Perrochaud <clement.perrochaud@nxp.com>
   6  *
   7  * Derived from PN544 device driver:
   8  * Copyright (C) 2012  Intel Corporation. All rights reserved.
   9 */
  10 
  11 #ifndef __LOCAL_NXP_NCI_H_
  12 #define __LOCAL_NXP_NCI_H_
  13 
  14 #include <linux/completion.h>
  15 #include <linux/firmware.h>
  16 #include <linux/nfc.h>
  17 
  18 #include <net/nfc/nci_core.h>
  19 
  20 #define NXP_NCI_FW_HDR_LEN      2
  21 #define NXP_NCI_FW_CRC_LEN      2
  22 
  23 #define NXP_NCI_FW_FRAME_LEN_MASK       0x03FF
  24 
  25 enum nxp_nci_mode {
  26         NXP_NCI_MODE_COLD,
  27         NXP_NCI_MODE_NCI,
  28         NXP_NCI_MODE_FW
  29 };
  30 
  31 struct nxp_nci_phy_ops {
  32         int (*set_mode)(void *id, enum nxp_nci_mode mode);
  33         int (*write)(void *id, struct sk_buff *skb);
  34 };
  35 
  36 struct nxp_nci_fw_info {
  37         char name[NFC_FIRMWARE_NAME_MAXSIZE + 1];
  38         const struct firmware *fw;
  39 
  40         size_t size;
  41         size_t written;
  42 
  43         const u8 *data;
  44         size_t frame_size;
  45 
  46         struct work_struct work;
  47         struct completion cmd_completion;
  48 
  49         int cmd_result;
  50 };
  51 
  52 struct nxp_nci_info {
  53         struct nci_dev *ndev;
  54         void *phy_id;
  55         struct device *pdev;
  56 
  57         enum nxp_nci_mode mode;
  58 
  59         const struct nxp_nci_phy_ops *phy_ops;
  60         unsigned int max_payload;
  61 
  62         struct mutex info_lock;
  63 
  64         struct nxp_nci_fw_info fw_info;
  65 };
  66 
  67 int nxp_nci_fw_download(struct nci_dev *ndev, const char *firmware_name);
  68 void nxp_nci_fw_work(struct work_struct *work);
  69 void nxp_nci_fw_recv_frame(struct nci_dev *ndev, struct sk_buff *skb);
  70 void nxp_nci_fw_work_complete(struct nxp_nci_info *info, int result);
  71 
  72 int nxp_nci_probe(void *phy_id, struct device *pdev,
  73                   const struct nxp_nci_phy_ops *phy_ops,
  74                   unsigned int max_payload,
  75                   struct nci_dev **ndev);
  76 void nxp_nci_remove(struct nci_dev *ndev);
  77 
  78 #endif /* __LOCAL_NXP_NCI_H_ */

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