blk-mq, elevator: Count requests per hctx to improve performance
[linux-2.6-microblaze.git] / include / linux / libnvdimm.h
index ad9898e..01f251b 100644 (file)
@@ -86,6 +86,7 @@ struct nvdimm_bus_descriptor {
        int (*flush_probe)(struct nvdimm_bus_descriptor *nd_desc);
        int (*clear_to_send)(struct nvdimm_bus_descriptor *nd_desc,
                        struct nvdimm *nvdimm, unsigned int cmd, void *data);
+       const struct nvdimm_bus_fw_ops *fw_ops;
 };
 
 struct nd_cmd_desc {
@@ -200,6 +201,49 @@ struct nvdimm_security_ops {
        int (*query_overwrite)(struct nvdimm *nvdimm);
 };
 
+enum nvdimm_fwa_state {
+       NVDIMM_FWA_INVALID,
+       NVDIMM_FWA_IDLE,
+       NVDIMM_FWA_ARMED,
+       NVDIMM_FWA_BUSY,
+       NVDIMM_FWA_ARM_OVERFLOW,
+};
+
+enum nvdimm_fwa_trigger {
+       NVDIMM_FWA_ARM,
+       NVDIMM_FWA_DISARM,
+};
+
+enum nvdimm_fwa_capability {
+       NVDIMM_FWA_CAP_INVALID,
+       NVDIMM_FWA_CAP_NONE,
+       NVDIMM_FWA_CAP_QUIESCE,
+       NVDIMM_FWA_CAP_LIVE,
+};
+
+enum nvdimm_fwa_result {
+       NVDIMM_FWA_RESULT_INVALID,
+       NVDIMM_FWA_RESULT_NONE,
+       NVDIMM_FWA_RESULT_SUCCESS,
+       NVDIMM_FWA_RESULT_NOTSTAGED,
+       NVDIMM_FWA_RESULT_NEEDRESET,
+       NVDIMM_FWA_RESULT_FAIL,
+};
+
+struct nvdimm_bus_fw_ops {
+       enum nvdimm_fwa_state (*activate_state)
+               (struct nvdimm_bus_descriptor *nd_desc);
+       enum nvdimm_fwa_capability (*capability)
+               (struct nvdimm_bus_descriptor *nd_desc);
+       int (*activate)(struct nvdimm_bus_descriptor *nd_desc);
+};
+
+struct nvdimm_fw_ops {
+       enum nvdimm_fwa_state (*activate_state)(struct nvdimm *nvdimm);
+       enum nvdimm_fwa_result (*activate_result)(struct nvdimm *nvdimm);
+       int (*arm)(struct nvdimm *nvdimm, enum nvdimm_fwa_trigger arg);
+};
+
 void badrange_init(struct badrange *badrange);
 int badrange_add(struct badrange *badrange, u64 addr, u64 length);
 void badrange_forget(struct badrange *badrange, phys_addr_t start,
@@ -225,14 +269,15 @@ struct nvdimm *__nvdimm_create(struct nvdimm_bus *nvdimm_bus,
                void *provider_data, const struct attribute_group **groups,
                unsigned long flags, unsigned long cmd_mask, int num_flush,
                struct resource *flush_wpq, const char *dimm_id,
-               const struct nvdimm_security_ops *sec_ops);
+               const struct nvdimm_security_ops *sec_ops,
+               const struct nvdimm_fw_ops *fw_ops);
 static inline struct nvdimm *nvdimm_create(struct nvdimm_bus *nvdimm_bus,
                void *provider_data, const struct attribute_group **groups,
                unsigned long flags, unsigned long cmd_mask, int num_flush,
                struct resource *flush_wpq)
 {
        return __nvdimm_create(nvdimm_bus, provider_data, groups, flags,
-                       cmd_mask, num_flush, flush_wpq, NULL, NULL);
+                       cmd_mask, num_flush, flush_wpq, NULL, NULL, NULL);
 }
 
 const struct nd_cmd_desc *nd_cmd_dimm_desc(int cmd);