net/octeontx2: add Tx multi segment version
[dpdk.git] / drivers / raw / ifpga_rawdev / base / opae_hw_api.c
index 41c5903..8964e79 100644 (file)
@@ -210,12 +210,14 @@ int opae_acc_get_uuid(struct opae_accelerator *acc,
  * opae_manager_alloc - alloc opae_manager data structure
  * @name: manager name.
  * @ops: ops of this manager.
+ * @network_ops: ops of network management.
  * @data: private data of this manager.
  *
  * Return: opae_manager on success, otherwise NULL.
  */
 struct opae_manager *
-opae_manager_alloc(const char *name, struct opae_manager_ops *ops, void *data)
+opae_manager_alloc(const char *name, struct opae_manager_ops *ops,
+               struct opae_manager_networking_ops *network_ops, void *data)
 {
        struct opae_manager *mgr = opae_zmalloc(sizeof(*mgr));
 
@@ -224,6 +226,7 @@ opae_manager_alloc(const char *name, struct opae_manager_ops *ops, void *data)
 
        mgr->name = name;
        mgr->ops = ops;
+       mgr->network_ops = network_ops;
        mgr->data = data;
 
        opae_log("%s %p\n", __func__, mgr);
@@ -241,8 +244,8 @@ opae_manager_alloc(const char *name, struct opae_manager_ops *ops, void *data)
  *
  * Return: 0 on success, otherwise error code.
  */
-int opae_manager_flash(struct opae_manager *mgr, int id, void *buf, u32 size,
-                      u64 *status)
+int opae_manager_flash(struct opae_manager *mgr, int id, const char *buf,
+               u32 size, u64 *status)
 {
        if (!mgr)
                return -EINVAL;
@@ -379,3 +382,196 @@ opae_adapter_get_acc(struct opae_adapter *adapter, int acc_id)
 
        return NULL;
 }
+
+/**
+ * opae_manager_read_mac_rom - read the content of the MAC ROM
+ * @mgr: opae_manager for MAC ROM
+ * @port: the port number of retimer
+ * @addr: buffer of the MAC address
+ *
+ * Return: return the bytes of read successfully
+ */
+int opae_manager_read_mac_rom(struct opae_manager *mgr, int port,
+               struct opae_ether_addr *addr)
+{
+       if (!mgr || !mgr->network_ops)
+               return -EINVAL;
+
+       if (mgr->network_ops->read_mac_rom)
+               return mgr->network_ops->read_mac_rom(mgr,
+                               port * sizeof(struct opae_ether_addr),
+                               addr, sizeof(struct opae_ether_addr));
+
+       return -ENOENT;
+}
+
+/**
+ * opae_manager_write_mac_rom - write data into MAC ROM
+ * @mgr: opae_manager for MAC ROM
+ * @port: the port number of the retimer
+ * @addr: data of the MAC address
+ *
+ * Return: return written bytes
+ */
+int opae_manager_write_mac_rom(struct opae_manager *mgr, int port,
+               struct opae_ether_addr *addr)
+{
+       if (!mgr || !mgr->network_ops)
+               return -EINVAL;
+
+       if (mgr->network_ops && mgr->network_ops->write_mac_rom)
+               return mgr->network_ops->write_mac_rom(mgr,
+                               port * sizeof(struct opae_ether_addr),
+                               addr, sizeof(struct opae_ether_addr));
+
+       return -ENOENT;
+}
+
+/**
+ * opae_manager_get_eth_group_nums - get eth group numbers
+ * @mgr: opae_manager for eth group
+ *
+ * Return: the numbers of eth group
+ */
+int opae_manager_get_eth_group_nums(struct opae_manager *mgr)
+{
+       if (!mgr || !mgr->network_ops)
+               return -EINVAL;
+
+       if (mgr->network_ops->get_retimer_info)
+               return mgr->network_ops->get_eth_group_nums(mgr);
+
+       return -ENOENT;
+}
+
+/**
+ * opae_manager_get_eth_group_info - get eth group info
+ * @mgr: opae_manager for eth group
+ * @group_id: id for eth group
+ * @info: info return to caller
+ *
+ * Return: 0 on success, otherwise error code
+ */
+int opae_manager_get_eth_group_info(struct opae_manager *mgr,
+              u8 group_id, struct opae_eth_group_info *info)
+{
+       if (!mgr || !mgr->network_ops)
+               return -EINVAL;
+
+       if (mgr->network_ops->get_retimer_info)
+               return mgr->network_ops->get_eth_group_info(mgr,
+                       group_id, info);
+
+       return -ENOENT;
+}
+
+/**
+ * opae_manager_get_eth_group_region_info
+ * @mgr: opae_manager for flash.
+ * @info: the memory region info for eth group
+ *
+ * Return: 0 on success, otherwise error code.
+ */
+int opae_manager_get_eth_group_region_info(struct opae_manager *mgr,
+               u8 group_id, struct opae_eth_group_region_info *info)
+{
+       if (!mgr)
+               return -EINVAL;
+
+       if (group_id >= MAX_ETH_GROUP_DEVICES)
+               return -EINVAL;
+
+       info->group_id = group_id;
+
+       if (mgr && mgr->ops && mgr->ops->get_eth_group_region_info)
+               return mgr->ops->get_eth_group_region_info(mgr, info);
+
+       return -ENOENT;
+}
+
+/**
+ * opae_manager_eth_group_read_reg - read ETH group register
+ * @mgr: opae_manager for ETH Group
+ * @group_id: ETH group id
+ * @type: eth type
+ * @index: port index in eth group device
+ * @addr: register address of ETH Group
+ * @data: read buffer
+ *
+ * Return: 0 on success, otherwise error code
+ */
+int opae_manager_eth_group_read_reg(struct opae_manager *mgr, u8 group_id,
+               u8 type, u8 index, u16 addr, u32 *data)
+{
+       if (!mgr || !mgr->network_ops)
+               return -EINVAL;
+
+       if (mgr->network_ops->eth_group_reg_read)
+               return mgr->network_ops->eth_group_reg_read(mgr, group_id,
+                               type, index, addr, data);
+
+       return -ENOENT;
+}
+
+/**
+ * opae_manager_eth_group_write_reg - write ETH group register
+ * @mgr: opae_manager for ETH Group
+ * @group_id: ETH group id
+ * @type: eth type
+ * @index: port index in eth group device
+ * @addr: register address of ETH Group
+ * @data: data will write to register
+ *
+ * Return: 0 on success, otherwise error code
+ */
+int opae_manager_eth_group_write_reg(struct opae_manager *mgr, u8 group_id,
+               u8 type, u8 index, u16 addr, u32 data)
+{
+       if (!mgr || !mgr->network_ops)
+               return -EINVAL;
+
+       if (mgr->network_ops->eth_group_reg_write)
+               return mgr->network_ops->eth_group_reg_write(mgr, group_id,
+                               type, index, addr, data);
+
+       return -ENOENT;
+}
+
+/**
+ * opae_manager_get_retimer_info - get retimer info like PKVL chip
+ * @mgr: opae_manager for retimer
+ * @info: info return to caller
+ *
+ * Return: 0 on success, otherwise error code
+ */
+int opae_manager_get_retimer_info(struct opae_manager *mgr,
+              struct opae_retimer_info *info)
+{
+       if (!mgr || !mgr->network_ops)
+               return -EINVAL;
+
+       if (mgr->network_ops->get_retimer_info)
+               return mgr->network_ops->get_retimer_info(mgr, info);
+
+       return -ENOENT;
+}
+
+/**
+ * opae_manager_get_retimer_status - get retimer status
+ * @mgr: opae_manager of retimer
+ * @status: status of retimer
+ *
+ * Return: 0 on success, otherwise error code
+ */
+int opae_manager_get_retimer_status(struct opae_manager *mgr,
+               struct opae_retimer_status *status)
+{
+       if (!mgr || !mgr->network_ops)
+               return -EINVAL;
+
+       if (mgr->network_ops->get_retimer_status)
+               return mgr->network_ops->get_retimer_status(mgr,
+                               status);
+
+       return -ENOENT;
+}