f-stack/dpdk/drivers/raw/ifpga_rawdev/base/ifpga_feature_dev.h

169 lines
4.2 KiB
C
Raw Normal View History

2018-12-06 14:17:51 +00:00
/* SPDX-License-Identifier: BSD-3-Clause
* Copyright(c) 2010-2018 Intel Corporation
*/
#ifndef _IFPGA_FEATURE_DEV_H_
#define _IFPGA_FEATURE_DEV_H_
#include "ifpga_hw.h"
static inline struct ifpga_port_hw *
get_port(struct ifpga_hw *hw, u32 port_id)
{
if (!is_valid_port_id(hw, port_id))
return NULL;
return &hw->port[port_id];
}
#define ifpga_for_each_fme_feature(hw, feature) \
for ((feature) = (hw)->sub_feature; \
(feature) < (hw)->sub_feature + (FME_FEATURE_ID_MAX); (feature)++)
#define ifpga_for_each_port_feature(hw, feature) \
for ((feature) = (hw)->sub_feature; \
(feature) < (hw)->sub_feature + (PORT_FEATURE_ID_MAX); (feature)++)
static inline struct feature *
get_fme_feature_by_id(struct ifpga_fme_hw *fme, u64 id)
{
struct feature *feature;
ifpga_for_each_fme_feature(fme, feature) {
if (feature->id == id)
return feature;
}
return NULL;
}
static inline struct feature *
get_port_feature_by_id(struct ifpga_port_hw *port, u64 id)
{
struct feature *feature;
ifpga_for_each_port_feature(port, feature) {
if (feature->id == id)
return feature;
}
return NULL;
}
static inline void *
get_fme_feature_ioaddr_by_index(struct ifpga_fme_hw *fme, int index)
{
return fme->sub_feature[index].addr;
}
static inline void *
get_port_feature_ioaddr_by_index(struct ifpga_port_hw *port, int index)
{
return port->sub_feature[index].addr;
}
static inline bool
is_fme_feature_present(struct ifpga_fme_hw *fme, int index)
{
return !!get_fme_feature_ioaddr_by_index(fme, index);
}
static inline bool
is_port_feature_present(struct ifpga_port_hw *port, int index)
{
return !!get_port_feature_ioaddr_by_index(port, index);
}
int fpga_get_afu_uuid(struct ifpga_port_hw *port, struct uuid *uuid);
int __fpga_port_disable(struct ifpga_port_hw *port);
void __fpga_port_enable(struct ifpga_port_hw *port);
static inline int fpga_port_disable(struct ifpga_port_hw *port)
{
int ret;
spinlock_lock(&port->lock);
ret = __fpga_port_disable(port);
spinlock_unlock(&port->lock);
return ret;
}
static inline int fpga_port_enable(struct ifpga_port_hw *port)
{
spinlock_lock(&port->lock);
__fpga_port_enable(port);
spinlock_unlock(&port->lock);
return 0;
}
static inline int __fpga_port_reset(struct ifpga_port_hw *port)
{
int ret;
ret = __fpga_port_disable(port);
if (ret)
return ret;
__fpga_port_enable(port);
return 0;
}
static inline int fpga_port_reset(struct ifpga_port_hw *port)
{
int ret;
spinlock_lock(&port->lock);
ret = __fpga_port_reset(port);
spinlock_unlock(&port->lock);
return ret;
}
int do_pr(struct ifpga_hw *hw, u32 port_id, void *buffer, u32 size,
u64 *status);
int fme_get_prop(struct ifpga_fme_hw *fme, struct feature_prop *prop);
int fme_set_prop(struct ifpga_fme_hw *fme, struct feature_prop *prop);
int fme_set_irq(struct ifpga_fme_hw *fme, u32 feature_id, void *irq_set);
int fme_hw_init(struct ifpga_fme_hw *fme);
void fme_hw_uinit(struct ifpga_fme_hw *fme);
void port_hw_uinit(struct ifpga_port_hw *port);
int port_hw_init(struct ifpga_port_hw *port);
int port_clear_error(struct ifpga_port_hw *port);
void port_err_mask(struct ifpga_port_hw *port, bool mask);
int port_err_clear(struct ifpga_port_hw *port, u64 err);
extern struct feature_ops fme_hdr_ops;
extern struct feature_ops fme_thermal_mgmt_ops;
extern struct feature_ops fme_power_mgmt_ops;
extern struct feature_ops fme_global_err_ops;
extern struct feature_ops fme_pr_mgmt_ops;
extern struct feature_ops fme_global_iperf_ops;
extern struct feature_ops fme_global_dperf_ops;
int port_get_prop(struct ifpga_port_hw *port, struct feature_prop *prop);
int port_set_prop(struct ifpga_port_hw *port, struct feature_prop *prop);
/* This struct is used when parsing uafu irq_set */
struct fpga_uafu_irq_set {
u32 start;
u32 count;
s32 *evtfds;
};
int port_set_irq(struct ifpga_port_hw *port, u32 feature_id, void *irq_set);
extern struct feature_ops ifpga_rawdev_port_hdr_ops;
extern struct feature_ops ifpga_rawdev_port_error_ops;
extern struct feature_ops ifpga_rawdev_port_stp_ops;
extern struct feature_ops ifpga_rawdev_port_uint_ops;
/* help functions for feature ops */
int fpga_msix_set_block(struct feature *feature, unsigned int start,
unsigned int count, s32 *fds);
#endif /* _IFPGA_FEATURE_DEV_H_ */