root/drivers/nfc/nfcmrvl/fw_dnld.h

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

INCLUDED FROM


   1 /**
   2  * Marvell NFC driver: Firmware downloader
   3  *
   4  * Copyright (C) 2015, Marvell International Ltd.
   5  *
   6  * This software file (the "File") is distributed by Marvell International
   7  * Ltd. under the terms of the GNU General Public License Version 2, June 1991
   8  * (the "License").  You may use, redistribute and/or modify this File in
   9  * accordance with the terms and conditions of the License, a copy of which
  10  * is available on the worldwide web at
  11  * http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt.
  12  *
  13  * THE FILE IS DISTRIBUTED AS-IS, WITHOUT WARRANTY OF ANY KIND, AND THE
  14  * IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE
  15  * ARE EXPRESSLY DISCLAIMED.  The License provides additional details about
  16  * this warranty disclaimer.
  17  **/
  18 
  19 #ifndef __NFCMRVL_FW_DNLD_H__
  20 #define __NFCMRVL_FW_DNLD_H__
  21 
  22 #include <linux/workqueue.h>
  23 
  24 #define NFCMRVL_FW_MAGIC                0x88888888
  25 
  26 #define NCI_OP_PROP_BOOT_CMD            0x3A
  27 
  28 #define NCI_CORE_LC_PROP_FW_DL          0xFD
  29 #define NCI_CORE_LC_CONNID_PROP_FW_DL   0x02
  30 
  31 #define HELPER_CMD_ENTRY_POINT          0x04
  32 #define HELPER_CMD_PACKET_FORMAT        0xA5
  33 #define HELPER_ACK_PACKET_FORMAT        0x5A
  34 #define HELPER_RETRY_REQUESTED          (1 << 15)
  35 
  36 struct nfcmrvl_private;
  37 
  38 struct nfcmrvl_fw_uart_config {
  39         uint8_t flow_control;
  40         uint32_t baudrate;
  41 } __packed;
  42 
  43 struct nfcmrvl_fw_i2c_config {
  44         uint32_t clk;
  45 } __packed;
  46 
  47 struct nfcmrvl_fw_spi_config {
  48         uint32_t clk;
  49 } __packed;
  50 
  51 struct nfcmrvl_fw_binary_config {
  52         uint32_t offset;
  53         union {
  54                 void *config;
  55                 struct nfcmrvl_fw_uart_config uart;
  56                 struct nfcmrvl_fw_i2c_config i2c;
  57                 struct nfcmrvl_fw_spi_config spi;
  58                 uint8_t reserved[64];
  59         };
  60 } __packed;
  61 
  62 struct nfcmrvl_fw {
  63         uint32_t magic;
  64         uint32_t ref_clock;
  65         uint32_t phy;
  66         struct nfcmrvl_fw_binary_config bootrom;
  67         struct nfcmrvl_fw_binary_config helper;
  68         struct nfcmrvl_fw_binary_config firmware;
  69         uint8_t reserved[64];
  70 } __packed;
  71 
  72 struct nfcmrvl_fw_dnld {
  73         char name[NFC_FIRMWARE_NAME_MAXSIZE + 1];
  74         const struct firmware *fw;
  75 
  76         const struct nfcmrvl_fw *header;
  77         const struct nfcmrvl_fw_binary_config *binary_config;
  78 
  79         int state;
  80         int substate;
  81         int offset;
  82         int chunk_len;
  83 
  84         struct workqueue_struct *rx_wq;
  85         struct work_struct rx_work;
  86         struct sk_buff_head rx_q;
  87 
  88         struct timer_list timer;
  89 };
  90 
  91 int nfcmrvl_fw_dnld_init(struct nfcmrvl_private *priv);
  92 void nfcmrvl_fw_dnld_deinit(struct nfcmrvl_private *priv);
  93 void nfcmrvl_fw_dnld_abort(struct nfcmrvl_private *priv);
  94 int nfcmrvl_fw_dnld_start(struct nci_dev *ndev, const char *firmware_name);
  95 void nfcmrvl_fw_dnld_recv_frame(struct nfcmrvl_private *priv,
  96                                 struct sk_buff *skb);
  97 
  98 #endif

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