fpga: mgr: API change to replace fpga load functions with single function
fpga-mgr has three methods for programming FPGAs, depending on whether the image is in a scatter gather list, a contiguous buffer, or a firmware file. This makes it difficult to write upper layers as the caller has to assume whether the FPGA image is in a sg table, as a single buffer, or a firmware file. This commit moves these parameters to struct fpga_image_info and adds a single function for programming fpgas. New functions: * fpga_mgr_load - given fpga manager and struct fpga_image_info, program the fpga. * fpga_image_info_alloc - alloc a struct fpga_image_info. * fpga_image_info_free - free a struct fpga_image_info. These three functions are unexported: * fpga_mgr_buf_load_sg * fpga_mgr_buf_load * fpga_mgr_firmware_load Also use devm_kstrdup to copy firmware_name so we aren't making assumptions about where it comes from when allocing/freeing the struct fpga_image_info. API documentation has been updated and a new document for FPGA region has been added. Signed-off-by: Alan Tull <atull@kernel.org> Acked-by: Moritz Fischer <mdf@kernel.org> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:

committed by
Greg Kroah-Hartman

parent
9c1c4b2753
commit
5cf0c7f650
@@ -1,7 +1,8 @@
|
||||
/*
|
||||
* FPGA Framework
|
||||
*
|
||||
* Copyright (C) 2013-2015 Altera Corporation
|
||||
* Copyright (C) 2013-2016 Altera Corporation
|
||||
* Copyright (C) 2017 Intel Corporation
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify it
|
||||
* under the terms and conditions of the GNU General Public License,
|
||||
@@ -15,12 +16,12 @@
|
||||
* You should have received a copy of the GNU General Public License along with
|
||||
* this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
#include <linux/mutex.h>
|
||||
#include <linux/platform_device.h>
|
||||
|
||||
#ifndef _LINUX_FPGA_MGR_H
|
||||
#define _LINUX_FPGA_MGR_H
|
||||
|
||||
#include <linux/mutex.h>
|
||||
#include <linux/platform_device.h>
|
||||
|
||||
struct fpga_manager;
|
||||
struct sg_table;
|
||||
|
||||
@@ -83,12 +84,22 @@ enum fpga_mgr_states {
|
||||
* @disable_timeout_us: maximum time to disable traffic through bridge (uSec)
|
||||
* @config_complete_timeout_us: maximum time for FPGA to switch to operating
|
||||
* status in the write_complete op.
|
||||
* @firmware_name: name of FPGA image firmware file
|
||||
* @sgt: scatter/gather table containing FPGA image
|
||||
* @buf: contiguous buffer containing FPGA image
|
||||
* @count: size of buf
|
||||
* @dev: device that owns this
|
||||
*/
|
||||
struct fpga_image_info {
|
||||
u32 flags;
|
||||
u32 enable_timeout_us;
|
||||
u32 disable_timeout_us;
|
||||
u32 config_complete_timeout_us;
|
||||
char *firmware_name;
|
||||
struct sg_table *sgt;
|
||||
const char *buf;
|
||||
size_t count;
|
||||
struct device *dev;
|
||||
};
|
||||
|
||||
/**
|
||||
@@ -138,14 +149,11 @@ struct fpga_manager {
|
||||
|
||||
#define to_fpga_manager(d) container_of(d, struct fpga_manager, dev)
|
||||
|
||||
int fpga_mgr_buf_load(struct fpga_manager *mgr, struct fpga_image_info *info,
|
||||
const char *buf, size_t count);
|
||||
int fpga_mgr_buf_load_sg(struct fpga_manager *mgr, struct fpga_image_info *info,
|
||||
struct sg_table *sgt);
|
||||
struct fpga_image_info *fpga_image_info_alloc(struct device *dev);
|
||||
|
||||
int fpga_mgr_firmware_load(struct fpga_manager *mgr,
|
||||
struct fpga_image_info *info,
|
||||
const char *image_name);
|
||||
void fpga_image_info_free(struct fpga_image_info *info);
|
||||
|
||||
int fpga_mgr_load(struct fpga_manager *mgr, struct fpga_image_info *info);
|
||||
|
||||
struct fpga_manager *of_fpga_mgr_get(struct device_node *node);
|
||||
|
||||
|
Reference in New Issue
Block a user