diff options
Diffstat (limited to 'include/linux/fpga/fpga-mgr.h')
| -rw-r--r-- | include/linux/fpga/fpga-mgr.h | 24 | 
1 files changed, 22 insertions, 2 deletions
diff --git a/include/linux/fpga/fpga-mgr.h b/include/linux/fpga/fpga-mgr.h index 0f9468771bb9..54f63459efd6 100644 --- a/include/linux/fpga/fpga-mgr.h +++ b/include/linux/fpga/fpga-mgr.h @@ -22,6 +22,8 @@ struct sg_table;   * @FPGA_MGR_STATE_RESET: FPGA in reset state   * @FPGA_MGR_STATE_FIRMWARE_REQ: firmware request in progress   * @FPGA_MGR_STATE_FIRMWARE_REQ_ERR: firmware request failed + * @FPGA_MGR_STATE_PARSE_HEADER: parse FPGA image header + * @FPGA_MGR_STATE_PARSE_HEADER_ERR: Error during PARSE_HEADER stage   * @FPGA_MGR_STATE_WRITE_INIT: preparing FPGA for programming   * @FPGA_MGR_STATE_WRITE_INIT_ERR: Error during WRITE_INIT stage   * @FPGA_MGR_STATE_WRITE: writing image to FPGA @@ -41,7 +43,9 @@ enum fpga_mgr_states {  	FPGA_MGR_STATE_FIRMWARE_REQ,  	FPGA_MGR_STATE_FIRMWARE_REQ_ERR, -	/* write sequence: init, write, complete */ +	/* write sequence: parse header, init, write, complete */ +	FPGA_MGR_STATE_PARSE_HEADER, +	FPGA_MGR_STATE_PARSE_HEADER_ERR,  	FPGA_MGR_STATE_WRITE_INIT,  	FPGA_MGR_STATE_WRITE_INIT_ERR,  	FPGA_MGR_STATE_WRITE, @@ -85,6 +89,9 @@ enum fpga_mgr_states {   * @sgt: scatter/gather table containing FPGA image   * @buf: contiguous buffer containing FPGA image   * @count: size of buf + * @header_size: size of image header. + * @data_size: size of image data to be sent to the device. If not specified, + *	whole image will be used. Header may be skipped in either case.   * @region_id: id of target region   * @dev: device that owns this   * @overlay: Device Tree overlay @@ -98,6 +105,8 @@ struct fpga_image_info {  	struct sg_table *sgt;  	const char *buf;  	size_t count; +	size_t header_size; +	size_t data_size;  	int region_id;  	struct device *dev;  #ifdef CONFIG_OF @@ -137,9 +146,16 @@ struct fpga_manager_info {  /**   * struct fpga_manager_ops - ops for low level fpga manager drivers - * @initial_header_size: Maximum number of bytes that should be passed into write_init + * @initial_header_size: minimum number of bytes that should be passed into + *	parse_header and write_init. + * @skip_header: bool flag to tell fpga-mgr core whether it should skip + *	info->header_size part at the beginning of the image when invoking + *	write callback.   * @state: returns an enum value of the FPGA's state   * @status: returns status of the FPGA, including reconfiguration error code + * @parse_header: parse FPGA image header to set info->header_size and + *	info->data_size. In case the input buffer is not large enough, set + *	required size to info->header_size and return -EAGAIN.   * @write_init: prepare the FPGA to receive configuration data   * @write: write count bytes of configuration data to the FPGA   * @write_sg: write the scatter list of configuration data to the FPGA @@ -153,8 +169,12 @@ struct fpga_manager_info {   */  struct fpga_manager_ops {  	size_t initial_header_size; +	bool skip_header;  	enum fpga_mgr_states (*state)(struct fpga_manager *mgr);  	u64 (*status)(struct fpga_manager *mgr); +	int (*parse_header)(struct fpga_manager *mgr, +			    struct fpga_image_info *info, +			    const char *buf, size_t count);  	int (*write_init)(struct fpga_manager *mgr,  			  struct fpga_image_info *info,  			  const char *buf, size_t count);  | 
