+
+/**
+ * Get firmware/device-stack status.
+ * Implementation to allocate buffer for returning information.
+ *
+ * @param dev
+ * Raw device pointer
+ * @param status
+ * void block containing device specific status information
+ * @return
+ * 0 for success,
+ * !0 for failure, with undefined value in `status_info`
+ */
+typedef int (*rawdev_firmware_status_get_t)(struct rte_rawdev *dev,
+ rte_rawdev_obj_t status_info);
+
+/**
+ * Get firmware version information
+ *
+ * @param dev
+ * Raw device pointer
+ * @param version_info
+ * void pointer to version information returned by device
+ * @return
+ * 0 for success,
+ * !0 for failure, with undefined value in `version_info`
+ */
+typedef int (*rawdev_firmware_version_get_t)(struct rte_rawdev *dev,
+ rte_rawdev_obj_t version_info);
+
+/**
+ * Load firmware from a buffer (DMA'able)
+ *
+ * @param dev
+ * Raw device pointer
+ * @param firmware_file
+ * file pointer to firmware area
+ * @return
+ * >0, ~0: for successful load
+ * <0: for failure
+ *
+ * @see Application may use 'firmware_version_get` for ascertaining successful
+ * load
+ */
+typedef int (*rawdev_firmware_load_t)(struct rte_rawdev *dev,
+ rte_rawdev_obj_t firmware_buf);
+
+/**
+ * Unload firmware
+ *
+ * @param dev
+ * Raw device pointer
+ * @return
+ * >0, ~0 for successful unloading
+ * <0 for failure in unloading
+ *
+ * Note: Application can use the `firmware_status_get` or
+ * `firmware_version_get` to get result of unload.
+ */
+typedef int (*rawdev_firmware_unload_t)(struct rte_rawdev *dev);
+
+/**
+ * Start rawdev selftest
+ *
+ * @return
+ * Return 0 on success
+ */
+typedef int (*rawdev_selftest_t)(uint16_t dev_id);
+