forked from Qortal/Brooklyn
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
101 lines
2.4 KiB
101 lines
2.4 KiB
/* SPDX-License-Identifier: GPL-2.0-or-later */ |
|
/* |
|
* NCI based driver for Samsung S3FWRN5 NFC chip |
|
* |
|
* Copyright (C) 2015 Samsung Electrnoics |
|
* Robert Baldyga <[email protected]> |
|
*/ |
|
|
|
#ifndef __LOCAL_S3FWRN5_FIRMWARE_H_ |
|
#define __LOCAL_S3FWRN5_FIRMWARE_H_ |
|
|
|
/* FW Message Types */ |
|
#define S3FWRN5_FW_MSG_CMD 0x00 |
|
#define S3FWRN5_FW_MSG_RSP 0x01 |
|
#define S3FWRN5_FW_MSG_DATA 0x02 |
|
|
|
/* FW Return Codes */ |
|
#define S3FWRN5_FW_RET_SUCCESS 0x00 |
|
#define S3FWRN5_FW_RET_MESSAGE_TYPE_INVALID 0x01 |
|
#define S3FWRN5_FW_RET_COMMAND_INVALID 0x02 |
|
#define S3FWRN5_FW_RET_PAGE_DATA_OVERFLOW 0x03 |
|
#define S3FWRN5_FW_RET_SECT_DATA_OVERFLOW 0x04 |
|
#define S3FWRN5_FW_RET_AUTHENTICATION_FAIL 0x05 |
|
#define S3FWRN5_FW_RET_FLASH_OPERATION_FAIL 0x06 |
|
#define S3FWRN5_FW_RET_ADDRESS_OUT_OF_RANGE 0x07 |
|
#define S3FWRN5_FW_RET_PARAMETER_INVALID 0x08 |
|
|
|
/* ---- FW Packet structures ---- */ |
|
#define S3FWRN5_FW_HDR_SIZE 4 |
|
|
|
struct s3fwrn5_fw_header { |
|
__u8 type; |
|
__u8 code; |
|
__u16 len; |
|
}; |
|
|
|
#define S3FWRN5_FW_CMD_RESET 0x00 |
|
|
|
#define S3FWRN5_FW_CMD_GET_BOOTINFO 0x01 |
|
|
|
struct s3fwrn5_fw_cmd_get_bootinfo_rsp { |
|
__u8 hw_version[4]; |
|
__u16 sector_size; |
|
__u16 page_size; |
|
__u16 frame_max_size; |
|
__u16 hw_buffer_size; |
|
}; |
|
|
|
#define S3FWRN5_FW_CMD_ENTER_UPDATE_MODE 0x02 |
|
|
|
struct s3fwrn5_fw_cmd_enter_updatemode { |
|
__u16 hashcode_size; |
|
__u16 signature_size; |
|
}; |
|
|
|
#define S3FWRN5_FW_CMD_UPDATE_SECTOR 0x04 |
|
|
|
struct s3fwrn5_fw_cmd_update_sector { |
|
__u32 base_address; |
|
}; |
|
|
|
#define S3FWRN5_FW_CMD_COMPLETE_UPDATE_MODE 0x05 |
|
|
|
struct s3fwrn5_fw_image { |
|
const struct firmware *fw; |
|
|
|
char date[13]; |
|
u32 version; |
|
const void *sig; |
|
u32 sig_size; |
|
const void *image; |
|
u32 image_sectors; |
|
const void *custom_sig; |
|
u32 custom_sig_size; |
|
}; |
|
|
|
struct s3fwrn5_fw_info { |
|
struct nci_dev *ndev; |
|
struct s3fwrn5_fw_image fw; |
|
char fw_name[NFC_FIRMWARE_NAME_MAXSIZE + 1]; |
|
|
|
const void *sig; |
|
u32 sig_size; |
|
u32 sector_size; |
|
u32 base_addr; |
|
|
|
struct completion completion; |
|
struct sk_buff *rsp; |
|
char parity; |
|
}; |
|
|
|
int s3fwrn5_fw_request_firmware(struct s3fwrn5_fw_info *fw_info); |
|
void s3fwrn5_fw_init(struct s3fwrn5_fw_info *fw_info, const char *fw_name); |
|
int s3fwrn5_fw_setup(struct s3fwrn5_fw_info *fw_info); |
|
bool s3fwrn5_fw_check_version(const struct s3fwrn5_fw_info *fw_info, u32 version); |
|
int s3fwrn5_fw_download(struct s3fwrn5_fw_info *fw_info); |
|
void s3fwrn5_fw_cleanup(struct s3fwrn5_fw_info *fw_info); |
|
|
|
int s3fwrn5_fw_recv_frame(struct nci_dev *ndev, struct sk_buff *skb); |
|
|
|
#endif /* __LOCAL_S3FWRN5_FIRMWARE_H_ */
|
|
|