return ret;
 }
 
+static int opal_set_new_sid_pw(struct opal_dev *dev, struct opal_new_pw *opal_pw)
+{
+       int ret;
+       struct opal_key *newkey = &opal_pw->new_user_pw.opal_key;
+       struct opal_key *oldkey = &opal_pw->session.opal_key;
+
+       const struct opal_step pw_steps[] = {
+               { start_SIDASP_opal_session, oldkey },
+               { set_sid_cpin_pin, newkey },
+               { end_opal_session, }
+       };
+
+       if (!dev)
+               return -ENODEV;
+
+       mutex_lock(&dev->dev_lock);
+       setup_opal_dev(dev);
+       ret = execute_steps(dev, pw_steps, ARRAY_SIZE(pw_steps));
+       mutex_unlock(&dev->dev_lock);
+
+       return ret;
+}
+
 static int opal_activate_user(struct opal_dev *dev,
                              struct opal_session_info *opal_session)
 {
        case IOC_OPAL_DISCOVERY:
                ret = opal_get_discv(dev, p);
                break;
+       case IOC_OPAL_SET_SID_PW:
+               ret = opal_set_new_sid_pw(dev, p);
+               break;
 
        default:
                break;
 
 #define IOC_OPAL_GET_GEOMETRY       _IOR('p', 238, struct opal_geometry)
 #define IOC_OPAL_DISCOVERY          _IOW('p', 239, struct opal_discovery)
 #define IOC_OPAL_REVERT_LSP         _IOW('p', 240, struct opal_revert_lsp)
+#define IOC_OPAL_SET_SID_PW         _IOW('p', 241, struct opal_new_pw)
 
 #endif /* _UAPI_SED_OPAL_H */