Orange Pi5 kernel

Deprecated Linux kernel 5.10.110 for OrangePi 5/5B/5+ boards

3 Commits   0 Branches   0 Tags
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   1) /* SPDX-License-Identifier: GPL-2.0-or-later */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   2) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   3)  * NCI based driver for Samsung S3FWRN5 NFC chip
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   4)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   5)  * Copyright (C) 2015 Samsung Electrnoics
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   6)  * Robert Baldyga <r.baldyga@samsung.com>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   7)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   8) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   9) #ifndef __LOCAL_S3FWRN5_FIRMWARE_H_
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  10) #define __LOCAL_S3FWRN5_FIRMWARE_H_
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  11) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  12) /* FW Message Types */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  13) #define S3FWRN5_FW_MSG_CMD			0x00
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  14) #define S3FWRN5_FW_MSG_RSP			0x01
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  15) #define S3FWRN5_FW_MSG_DATA			0x02
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  16) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  17) /* FW Return Codes */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  18) #define S3FWRN5_FW_RET_SUCCESS			0x00
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  19) #define S3FWRN5_FW_RET_MESSAGE_TYPE_INVALID	0x01
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  20) #define S3FWRN5_FW_RET_COMMAND_INVALID		0x02
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  21) #define S3FWRN5_FW_RET_PAGE_DATA_OVERFLOW	0x03
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  22) #define S3FWRN5_FW_RET_SECT_DATA_OVERFLOW	0x04
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  23) #define S3FWRN5_FW_RET_AUTHENTICATION_FAIL	0x05
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  24) #define S3FWRN5_FW_RET_FLASH_OPERATION_FAIL	0x06
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  25) #define S3FWRN5_FW_RET_ADDRESS_OUT_OF_RANGE	0x07
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  26) #define S3FWRN5_FW_RET_PARAMETER_INVALID	0x08
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  27) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  28) /* ---- FW Packet structures ---- */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  29) #define S3FWRN5_FW_HDR_SIZE 4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  30) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  31) struct s3fwrn5_fw_header {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  32) 	__u8 type;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  33) 	__u8 code;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  34) 	__u16 len;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  35) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  36) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  37) #define S3FWRN5_FW_CMD_RESET			0x00
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  38) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  39) #define S3FWRN5_FW_CMD_GET_BOOTINFO		0x01
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  40) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  41) struct s3fwrn5_fw_cmd_get_bootinfo_rsp {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  42) 	__u8 hw_version[4];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  43) 	__u16 sector_size;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  44) 	__u16 page_size;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  45) 	__u16 frame_max_size;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  46) 	__u16 hw_buffer_size;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  47) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  48) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  49) #define S3FWRN5_FW_CMD_ENTER_UPDATE_MODE	0x02
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  50) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  51) struct s3fwrn5_fw_cmd_enter_updatemode {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  52) 	__u16 hashcode_size;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  53) 	__u16 signature_size;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  54) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  55) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  56) #define S3FWRN5_FW_CMD_UPDATE_SECTOR		0x04
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  57) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  58) struct s3fwrn5_fw_cmd_update_sector {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  59) 	__u32 base_address;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  60) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  61) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  62) #define S3FWRN5_FW_CMD_COMPLETE_UPDATE_MODE	0x05
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  63) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  64) struct s3fwrn5_fw_image {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  65) 	const struct firmware *fw;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  66) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  67) 	char date[13];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  68) 	u32 version;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  69) 	const void *sig;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  70) 	u32 sig_size;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  71) 	const void *image;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  72) 	u32 image_sectors;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  73) 	const void *custom_sig;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  74) 	u32 custom_sig_size;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  75) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  76) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  77) struct s3fwrn5_fw_info {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  78) 	struct nci_dev *ndev;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  79) 	struct s3fwrn5_fw_image fw;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  80) 	char fw_name[NFC_FIRMWARE_NAME_MAXSIZE + 1];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  81) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  82) 	const void *sig;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  83) 	u32 sig_size;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  84) 	u32 sector_size;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  85) 	u32 base_addr;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  86) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  87) 	struct completion completion;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  88) 	struct sk_buff *rsp;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  89) 	char parity;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  90) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  91) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  92) void s3fwrn5_fw_init(struct s3fwrn5_fw_info *fw_info, const char *fw_name);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  93) int s3fwrn5_fw_setup(struct s3fwrn5_fw_info *fw_info);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  94) bool s3fwrn5_fw_check_version(const struct s3fwrn5_fw_info *fw_info, u32 version);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  95) int s3fwrn5_fw_download(struct s3fwrn5_fw_info *fw_info);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  96) void s3fwrn5_fw_cleanup(struct s3fwrn5_fw_info *fw_info);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  97) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  98) int s3fwrn5_fw_recv_frame(struct nci_dev *ndev, struct sk_buff *skb);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  99) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 100) #endif /* __LOCAL_S3FWRN5_FIRMWARE_H_ */