]> asedeno.scripts.mit.edu Git - linux.git/blobdiff - drivers/nvdimm/nd-core.h
Merge branch 'next-lockdown' of git://git.kernel.org/pub/scm/linux/kernel/git/jmorris...
[linux.git] / drivers / nvdimm / nd-core.h
index 0ac52b6eb00e114677168d5c1e9597d6bb8b6f8b..25fa121104d04363e35dcad09e7de9a4d57e7956 100644 (file)
@@ -39,53 +39,40 @@ struct nvdimm {
        const char *dimm_id;
        struct {
                const struct nvdimm_security_ops *ops;
-               enum nvdimm_security_state state;
-               enum nvdimm_security_state ext_state;
+               unsigned long flags;
+               unsigned long ext_flags;
                unsigned int overwrite_tmo;
                struct kernfs_node *overwrite_state;
        } sec;
        struct delayed_work dwork;
 };
 
-static inline enum nvdimm_security_state nvdimm_security_state(
+static inline unsigned long nvdimm_security_flags(
                struct nvdimm *nvdimm, enum nvdimm_passphrase_type ptype)
 {
+       u64 flags;
+       const u64 state_flags = 1UL << NVDIMM_SECURITY_DISABLED
+               | 1UL << NVDIMM_SECURITY_LOCKED
+               | 1UL << NVDIMM_SECURITY_UNLOCKED
+               | 1UL << NVDIMM_SECURITY_OVERWRITE;
+
        if (!nvdimm->sec.ops)
-               return -ENXIO;
+               return 0;
 
-       return nvdimm->sec.ops->state(nvdimm, ptype);
+       flags = nvdimm->sec.ops->get_flags(nvdimm, ptype);
+       /* disabled, locked, unlocked, and overwrite are mutually exclusive */
+       dev_WARN_ONCE(&nvdimm->dev, hweight64(flags & state_flags) > 1,
+                       "reported invalid security state: %#llx\n",
+                       (unsigned long long) flags);
+       return flags;
 }
 int nvdimm_security_freeze(struct nvdimm *nvdimm);
 #if IS_ENABLED(CONFIG_NVDIMM_KEYS)
-int nvdimm_security_disable(struct nvdimm *nvdimm, unsigned int keyid);
-int nvdimm_security_update(struct nvdimm *nvdimm, unsigned int keyid,
-               unsigned int new_keyid,
-               enum nvdimm_passphrase_type pass_type);
-int nvdimm_security_erase(struct nvdimm *nvdimm, unsigned int keyid,
-               enum nvdimm_passphrase_type pass_type);
-int nvdimm_security_overwrite(struct nvdimm *nvdimm, unsigned int keyid);
+ssize_t nvdimm_security_store(struct device *dev, const char *buf, size_t len);
 void nvdimm_security_overwrite_query(struct work_struct *work);
 #else
-static inline int nvdimm_security_disable(struct nvdimm *nvdimm,
-               unsigned int keyid)
-{
-       return -EOPNOTSUPP;
-}
-static inline int nvdimm_security_update(struct nvdimm *nvdimm,
-               unsigned int keyid,
-               unsigned int new_keyid,
-               enum nvdimm_passphrase_type pass_type)
-{
-       return -EOPNOTSUPP;
-}
-static inline int nvdimm_security_erase(struct nvdimm *nvdimm,
-               unsigned int keyid,
-               enum nvdimm_passphrase_type pass_type)
-{
-       return -EOPNOTSUPP;
-}
-static inline int nvdimm_security_overwrite(struct nvdimm *nvdimm,
-               unsigned int keyid)
+static inline ssize_t nvdimm_security_store(struct device *dev,
+               const char *buf, size_t len)
 {
        return -EOPNOTSUPP;
 }
@@ -128,13 +115,12 @@ int __init nvdimm_bus_init(void);
 void nvdimm_bus_exit(void);
 void nvdimm_devs_exit(void);
 void nd_region_devs_exit(void);
-void nd_region_probe_success(struct nvdimm_bus *nvdimm_bus, struct device *dev);
 struct nd_region;
+void nd_region_advance_seeds(struct nd_region *nd_region, struct device *dev);
 void nd_region_create_ns_seed(struct nd_region *nd_region);
 void nd_region_create_btt_seed(struct nd_region *nd_region);
 void nd_region_create_pfn_seed(struct nd_region *nd_region);
 void nd_region_create_dax_seed(struct nd_region *nd_region);
-void nd_region_disable(struct nvdimm_bus *nvdimm_bus, struct device *dev);
 int nvdimm_bus_create_ndctl(struct nvdimm_bus *nvdimm_bus);
 void nvdimm_bus_destroy_ndctl(struct nvdimm_bus *nvdimm_bus);
 void nd_synchronize(void);