FPGA Bridge

API to implement a new FPGA bridge

struct fpga_bridge

FPGA bridge structure

Definition

struct fpga_bridge {
  const char *name;
  struct device dev;
  struct mutex mutex;
  const struct fpga_bridge_ops *br_ops;
  struct fpga_image_info *info;
  struct list_head node;
  void *priv;
};

Members

name
name of low level FPGA bridge
dev
FPGA bridge device
mutex
enforces exclusive reference to bridge
br_ops
pointer to struct of FPGA bridge ops
info
fpga image specific information
node
FPGA bridge list node
priv
low level driver private date
struct fpga_bridge_ops

ops for low level FPGA bridge drivers

Definition

struct fpga_bridge_ops {
  int (*enable_show)(struct fpga_bridge *bridge);
  int (*enable_set)(struct fpga_bridge *bridge, bool enable);
  void (*fpga_bridge_remove)(struct fpga_bridge *bridge);
  const struct attribute_group **groups;
};

Members

enable_show
returns the FPGA bridge’s status
enable_set
set a FPGA bridge as enabled or disabled
fpga_bridge_remove
set FPGA into a specific state during driver remove
groups
optional attribute groups.
struct fpga_bridge * devm_fpga_bridge_create(struct device * dev, const char * name, const struct fpga_bridge_ops * br_ops, void * priv)

create and init a managed struct fpga_bridge

Parameters

struct device * dev
FPGA bridge device from pdev
const char * name
FPGA bridge name
const struct fpga_bridge_ops * br_ops
pointer to structure of fpga bridge ops
void * priv
FPGA bridge private data

Description

This function is intended for use in a FPGA bridge driver’s probe function. After the bridge driver creates the struct with devm_fpga_bridge_create(), it should register the bridge with fpga_bridge_register(). The bridge driver’s remove function should call fpga_bridge_unregister(). The bridge struct allocated with this function will be freed automatically on driver detach. This includes the case of a probe function returning error before calling fpga_bridge_register(), the struct will still get cleaned up.

Return

struct fpga_bridge or NULL

struct fpga_bridge * fpga_bridge_create(struct device * dev, const char * name, const struct fpga_bridge_ops * br_ops, void * priv)

create and initialize a struct fpga_bridge

Parameters

struct device * dev
FPGA bridge device from pdev
const char * name
FPGA bridge name
const struct fpga_bridge_ops * br_ops
pointer to structure of fpga bridge ops
void * priv
FPGA bridge private data

Description

The caller of this function is responsible for freeing the bridge with fpga_bridge_free(). Using devm_fpga_bridge_create() instead is recommended.

Return

struct fpga_bridge or NULL

void fpga_bridge_free(struct fpga_bridge * bridge)

free a fpga bridge created by fpga_bridge_create()

Parameters

struct fpga_bridge * bridge
FPGA bridge struct
int fpga_bridge_register(struct fpga_bridge * bridge)

register a FPGA bridge

Parameters

struct fpga_bridge * bridge
FPGA bridge struct

Return

0 for success, error code otherwise.

void fpga_bridge_unregister(struct fpga_bridge * bridge)

unregister a FPGA bridge

Parameters

struct fpga_bridge * bridge
FPGA bridge struct

Description

This function is intended for use in a FPGA bridge driver’s remove function.

API to control an FPGA bridge

You probably won’t need these directly. FPGA regions should handle this.

struct fpga_bridge * of_fpga_bridge_get(struct device_node * np, struct fpga_image_info * info)

get an exclusive reference to a fpga bridge

Parameters

struct device_node * np
node pointer of a FPGA bridge
struct fpga_image_info * info
fpga image specific information

Description

Return fpga_bridge struct if successful. Return -EBUSY if someone already has a reference to the bridge. Return -ENODEV if np is not a FPGA Bridge.

struct fpga_bridge * fpga_bridge_get(struct device * dev, struct fpga_image_info * info)

get an exclusive reference to a fpga bridge

Parameters

struct device * dev
parent device that fpga bridge was registered with
struct fpga_image_info * info
fpga manager info

Description

Given a device, get an exclusive reference to a fpga bridge.

Return

fpga bridge struct or IS_ERR() condition containing error code.

void fpga_bridge_put(struct fpga_bridge * bridge)

release a reference to a bridge

Parameters

struct fpga_bridge * bridge
FPGA bridge
int fpga_bridge_get_to_list(struct device * dev, struct fpga_image_info * info, struct list_head * bridge_list)

given device, get a bridge, add it to a list

Parameters

struct device * dev
FPGA bridge device
struct fpga_image_info * info
fpga image specific information
struct list_head * bridge_list
list of FPGA bridges

Description

Get an exclusive reference to the bridge and and it to the list.

Return 0 for success, error code from fpga_bridge_get() othewise.

int of_fpga_bridge_get_to_list(struct device_node * np, struct fpga_image_info * info, struct list_head * bridge_list)

get a bridge, add it to a list

Parameters

struct device_node * np
node pointer of a FPGA bridge
struct fpga_image_info * info
fpga image specific information
struct list_head * bridge_list
list of FPGA bridges

Description

Get an exclusive reference to the bridge and and it to the list.

Return 0 for success, error code from of_fpga_bridge_get() othewise.

int fpga_bridge_enable(struct fpga_bridge * bridge)

Enable transactions on the bridge

Parameters

struct fpga_bridge * bridge
FPGA bridge

Return

0 for success, error code otherwise.

int fpga_bridge_disable(struct fpga_bridge * bridge)

Disable transactions on the bridge

Parameters

struct fpga_bridge * bridge
FPGA bridge

Return

0 for success, error code otherwise.