Clément Perrochaud | dece458 | 2015-03-09 11:12:04 +0100 | [diff] [blame] | 1 | /* |
| 2 | * Copyright (C) 2014 NXP Semiconductors All rights reserved. |
| 3 | * |
| 4 | * Authors: Clément Perrochaud <clement.perrochaud@nxp.com> |
| 5 | * |
| 6 | * Derived from PN544 device driver: |
| 7 | * Copyright (C) 2012 Intel Corporation. All rights reserved. |
| 8 | * |
| 9 | * This program is free software; you can redistribute it and/or modify it |
| 10 | * under the terms and conditions of the GNU General Public License, |
| 11 | * version 2, as published by the Free Software Foundation. |
| 12 | * |
| 13 | * This program is distributed in the hope that it will be useful, |
| 14 | * but WITHOUT ANY WARRANTY; without even the implied warranty of |
| 15 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
| 16 | * GNU General Public License for more details. |
| 17 | * |
| 18 | * You should have received a copy of the GNU General Public License |
| 19 | * along with this program; if not, see <http://www.gnu.org/licenses/>. |
| 20 | */ |
| 21 | |
| 22 | #ifndef __LOCAL_NXP_NCI_H_ |
| 23 | #define __LOCAL_NXP_NCI_H_ |
| 24 | |
| 25 | #include <linux/completion.h> |
| 26 | #include <linux/firmware.h> |
| 27 | #include <linux/nfc.h> |
| 28 | #include <linux/platform_data/nxp-nci.h> |
| 29 | |
| 30 | #include <net/nfc/nci_core.h> |
| 31 | |
| 32 | #define NXP_NCI_FW_HDR_LEN 2 |
| 33 | #define NXP_NCI_FW_CRC_LEN 2 |
| 34 | |
| 35 | #define NXP_NCI_FW_FRAME_LEN_MASK 0x03FF |
| 36 | |
| 37 | enum nxp_nci_mode { |
| 38 | NXP_NCI_MODE_COLD, |
| 39 | NXP_NCI_MODE_NCI, |
| 40 | NXP_NCI_MODE_FW |
| 41 | }; |
| 42 | |
| 43 | struct nxp_nci_phy_ops { |
| 44 | int (*set_mode)(void *id, enum nxp_nci_mode mode); |
| 45 | int (*write)(void *id, struct sk_buff *skb); |
| 46 | }; |
| 47 | |
| 48 | struct nxp_nci_fw_info { |
| 49 | char name[NFC_FIRMWARE_NAME_MAXSIZE + 1]; |
| 50 | const struct firmware *fw; |
| 51 | |
| 52 | size_t size; |
| 53 | size_t written; |
| 54 | |
| 55 | const u8 *data; |
| 56 | size_t frame_size; |
| 57 | |
| 58 | struct work_struct work; |
| 59 | struct completion cmd_completion; |
| 60 | |
| 61 | int cmd_result; |
| 62 | }; |
| 63 | |
| 64 | struct nxp_nci_info { |
| 65 | struct nci_dev *ndev; |
| 66 | void *phy_id; |
| 67 | struct device *pdev; |
| 68 | |
| 69 | enum nxp_nci_mode mode; |
| 70 | |
Julia Lawall | 7cf6d08 | 2015-10-11 13:24:13 +0200 | [diff] [blame] | 71 | const struct nxp_nci_phy_ops *phy_ops; |
Clément Perrochaud | dece458 | 2015-03-09 11:12:04 +0100 | [diff] [blame] | 72 | unsigned int max_payload; |
| 73 | |
| 74 | struct mutex info_lock; |
| 75 | |
| 76 | struct nxp_nci_fw_info fw_info; |
| 77 | }; |
| 78 | |
| 79 | int nxp_nci_fw_download(struct nci_dev *ndev, const char *firmware_name); |
| 80 | void nxp_nci_fw_work(struct work_struct *work); |
| 81 | void nxp_nci_fw_recv_frame(struct nci_dev *ndev, struct sk_buff *skb); |
| 82 | void nxp_nci_fw_work_complete(struct nxp_nci_info *info, int result); |
| 83 | |
| 84 | int nxp_nci_probe(void *phy_id, struct device *pdev, |
Julia Lawall | 7cf6d08 | 2015-10-11 13:24:13 +0200 | [diff] [blame] | 85 | const struct nxp_nci_phy_ops *phy_ops, |
| 86 | unsigned int max_payload, |
Clément Perrochaud | dece458 | 2015-03-09 11:12:04 +0100 | [diff] [blame] | 87 | struct nci_dev **ndev); |
| 88 | void nxp_nci_remove(struct nci_dev *ndev); |
| 89 | |
| 90 | #endif /* __LOCAL_NXP_NCI_H_ */ |