#include "ifpga_defines.h"
#include "opae_ifpga_hw_api.h"
+#include "opae_eth_group.h"
+
+/** List of private feateues */
+TAILQ_HEAD(ifpga_feature_list, ifpga_feature);
enum ifpga_feature_state {
IFPGA_FEATURE_UNUSED = 0,
IFPGA_FEATURE_ATTACHED,
};
+enum feature_type {
+ FEATURE_FME_TYPE = 0,
+ FEATURE_PORT_TYPE,
+};
+
struct feature_irq_ctx {
int eventfd;
int idx;
};
-struct feature {
+struct ifpga_feature {
+ TAILQ_ENTRY(ifpga_feature)next;
enum ifpga_feature_state state;
+ enum feature_type type;
const char *name;
u64 id;
u8 *addr;
void *parent; /* to parent hw data structure */
- struct feature_ops *ops;/* callback to this private feature */
+ struct ifpga_feature_ops *ops;/* callback to this private feature */
+ unsigned int vec_start;
+ unsigned int vec_cnt;
};
-struct feature_ops {
- int (*init)(struct feature *feature);
- void (*uinit)(struct feature *feature);
- int (*get_prop)(struct feature *feature, struct feature_prop *prop);
- int (*set_prop)(struct feature *feature, struct feature_prop *prop);
- int (*set_irq)(struct feature *feature, void *irq_set);
+struct ifpga_feature_ops {
+ int (*init)(struct ifpga_feature *feature);
+ void (*uinit)(struct ifpga_feature *feature);
+ int (*get_prop)(struct ifpga_feature *feature,
+ struct feature_prop *prop);
+ int (*set_prop)(struct ifpga_feature *feature,
+ struct feature_prop *prop);
+ int (*set_irq)(struct ifpga_feature *feature, void *irq_set);
};
enum ifpga_fme_state {
struct ifpga_fme_hw {
enum ifpga_fme_state state;
- struct feature sub_feature[FME_FEATURE_ID_MAX];
+ struct ifpga_feature_list feature_list;
spinlock_t lock; /* protect hardware access */
void *parent; /* pointer to ifpga_hw */
u32 cache_size;
u32 capability;
+
+ void *max10_dev; /* MAX10 device */
+ void *i2c_master; /* I2C Master device */
+ void *eth_dev[MAX_ETH_GROUP_DEVICES];
+ struct opae_reg_region
+ eth_group_region[MAX_ETH_GROUP_DEVICES];
+ struct ifpga_fme_board_info board_info;
+ int nums_eth_dev;
+ unsigned int nums_acc_region;
};
enum ifpga_port_state {
struct ifpga_port_hw {
enum ifpga_port_state state;
- struct feature sub_feature[PORT_FEATURE_ID_MAX];
+ struct ifpga_feature_list feature_list;
spinlock_t lock; /* protect access to hw */
void *parent; /* pointer to ifpga_hw */