Merge tag 'pm-5.10-rc1-2' of git://git.kernel.org/pub/scm/linux/kernel/git/rafael...
[sfrench/cifs-2.6.git] / include / linux / pm_domain.h
index 66f3c5d64d818d5adc2bcab897e512cf36c6dc99..1ad0ec4814162ea59de337f238ce39bf16bc8d55 100644 (file)
@@ -68,6 +68,13 @@ enum gpd_status {
        GENPD_STATE_OFF,        /* PM domain is off */
 };
 
+enum genpd_notication {
+       GENPD_NOTIFY_PRE_OFF = 0,
+       GENPD_NOTIFY_OFF,
+       GENPD_NOTIFY_PRE_ON,
+       GENPD_NOTIFY_ON,
+};
+
 struct dev_power_governor {
        bool (*power_down_ok)(struct dev_pm_domain *domain);
        bool (*suspend_ok)(struct device *dev);
@@ -82,6 +89,8 @@ struct genpd_power_state {
        s64 power_off_latency_ns;
        s64 power_on_latency_ns;
        s64 residency_ns;
+       u64 usage;
+       u64 rejected;
        struct fwnode_handle *fwnode;
        ktime_t idle_time;
        void *data;
@@ -112,6 +121,7 @@ struct generic_pm_domain {
        cpumask_var_t cpus;             /* A cpumask of the attached CPUs */
        int (*power_off)(struct generic_pm_domain *domain);
        int (*power_on)(struct generic_pm_domain *domain);
+       struct raw_notifier_head power_notifiers; /* Power on/off notifiers */
        struct opp_table *opp_table;    /* OPP table of the genpd */
        unsigned int (*opp_to_performance_state)(struct generic_pm_domain *genpd,
                                                 struct dev_pm_opp *opp);
@@ -178,6 +188,7 @@ struct generic_pm_domain_data {
        struct pm_domain_data base;
        struct gpd_timing_data td;
        struct notifier_block nb;
+       struct notifier_block *power_nb;
        int cpu;
        unsigned int performance_state;
        void *data;
@@ -204,6 +215,8 @@ int pm_genpd_init(struct generic_pm_domain *genpd,
                  struct dev_power_governor *gov, bool is_off);
 int pm_genpd_remove(struct generic_pm_domain *genpd);
 int dev_pm_genpd_set_performance_state(struct device *dev, unsigned int state);
+int dev_pm_genpd_add_notifier(struct device *dev, struct notifier_block *nb);
+int dev_pm_genpd_remove_notifier(struct device *dev);
 
 extern struct dev_power_governor simple_qos_governor;
 extern struct dev_power_governor pm_domain_always_on_gov;
@@ -251,6 +264,17 @@ static inline int dev_pm_genpd_set_performance_state(struct device *dev,
        return -ENOTSUPP;
 }
 
+static inline int dev_pm_genpd_add_notifier(struct device *dev,
+                                           struct notifier_block *nb)
+{
+       return -ENOTSUPP;
+}
+
+static inline int dev_pm_genpd_remove_notifier(struct device *dev)
+{
+       return -ENOTSUPP;
+}
+
 #define simple_qos_governor            (*(struct dev_power_governor *)(NULL))
 #define pm_domain_always_on_gov                (*(struct dev_power_governor *)(NULL))
 #endif