lkml.org 
[lkml]   [2004]   [Aug]   [12]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[patch] enums to clear suspend-state confusion
    Hi!

    This patch should clear up some confusion between driver model and
    drivers people, and also prepares way to add runtime power managment
    later. Please apply,
    Pavel


    --- linux-mm/drivers/base/power/power.h 2004-07-28 21:29:22.000000000 +0200
    +++ linux-delme/drivers/base/power/power.h 2004-08-12 13:41:12.000000000 +0200
    @@ -1,5 +1,4 @@
    -
    -
    +/* FIXME: This needs explanation... */
    enum {
    DEVICE_PM_ON,
    DEVICE_PM1,
    @@ -66,14 +65,14 @@
    /*
    * suspend.c
    */
    -extern int suspend_device(struct device *, u32);
    +extern int suspend_device(struct device *, enum system_state);


    /*
    * runtime.c
    */

    -extern int dpm_runtime_suspend(struct device *, u32);
    +extern int dpm_runtime_suspend(struct device *, enum system_state);
    extern void dpm_runtime_resume(struct device *);

    #else /* CONFIG_PM */
    @@ -88,7 +87,7 @@

    }

    -static inline int dpm_runtime_suspend(struct device * dev, u32 state)
    +static inline int dpm_runtime_suspend(struct device * dev, enum system_state state)
    {
    return 0;
    }
    --- linux-mm/drivers/base/power/shutdown.c 2004-07-28 21:29:22.000000000 +0200
    +++ linux-delme/drivers/base/power/shutdown.c 2004-08-12 13:42:10.000000000 +0200
    @@ -29,6 +29,7 @@
    dev->driver->shutdown(dev);
    return 0;
    }
    + /* FIXME: It probably should not be cast like this */
    return dpm_runtime_suspend(dev, dev->detach_state);
    }

    --- linux-mm/drivers/base/power/suspend.c 2004-07-28 21:29:22.000000000 +0200
    +++ linux-delme/drivers/base/power/suspend.c 2004-08-12 13:43:08.000000000 +0200
    @@ -28,6 +28,7 @@
    * lists. This way, the ancestors will be accessed before their descendents.
    */

    +/* FIXME: Having both suspend_device and device_suspend is evil */

    /**
    * suspend_device - Save state of one device.
    @@ -35,7 +36,7 @@
    * @state: Power state device is entering.
    */

    -int suspend_device(struct device * dev, u32 state)
    +int suspend_device(struct device * dev, enum system_state state)
    {
    int error = 0;

    @@ -70,7 +71,7 @@
    *
    */

    -int device_suspend(u32 state)
    +int device_suspend(enum system_state state)
    {
    int error = 0;

    @@ -112,7 +113,7 @@
    * done, power down system devices.
    */

    -int device_power_down(u32 state)
    +int device_power_down(enum system_state state)
    {
    int error = 0;
    struct device * dev;
    --- linux-mm/drivers/ide/ide-disk.c 2004-07-28 22:43:29.000000000 +0200
    +++ linux-delme/drivers/ide/ide-disk.c 2004-08-12 13:41:12.000000000 +0200
    @@ -1406,6 +1406,7 @@
    {
    switch (rq->pm->pm_step) {
    case idedisk_pm_flush_cache: /* Suspend step 1 (flush cache) complete */
    + /* FIXME: This is buggy. */
    if (rq->pm->pm_state == 4)
    rq->pm->pm_step = ide_pm_state_completed;
    else
    --- linux-mm/include/linux/pci.h 2004-07-28 22:43:31.000000000 +0200
    +++ linux-delme/include/linux/pci.h 2004-08-12 13:41:12.000000000 +0200
    @@ -637,7 +637,7 @@
    const struct pci_device_id *id_table; /* must be non-NULL for probe to be called */
    int (*probe) (struct pci_dev *dev, const struct pci_device_id *id); /* New device inserted */
    void (*remove) (struct pci_dev *dev); /* Device removed (NULL if not a hot-plug capable driver) */
    - int (*suspend) (struct pci_dev *dev, u32 state); /* Device suspended */
    + int (*suspend) (struct pci_dev *dev, suspend_state_t reason); /* Device suspended */
    int (*resume) (struct pci_dev *dev); /* Device woken up */
    int (*enable_wake) (struct pci_dev *dev, u32 state, int enable); /* Enable wake event */

    @@ -1021,5 +1021,26 @@
    #define PCIPCI_VSFX 16
    #define PCIPCI_ALIMAGIK 32

    +enum pci_state {
    + D0 = 0,
    + D1 = 1,
    + D2 = 2,
    + D3hot = 3,
    + D3cold = 4
    +};
    +
    +static inline enum pci_state to_pci_state(suspend_state_t state)
    +{
    + if (SUSPEND_EQ(state, PM_SUSPEND_ON))
    + return D0;
    + if (SUSPEND_EQ(state, PM_SUSPEND_STANDBY))
    + return D1;
    + if (SUSPEND_EQ(state, PM_SUSPEND_MEM))
    + return D3hot;
    + if (SUSPEND_EQ(state, PM_SUSPEND_DISK))
    + return D3cold;
    + BUG();
    +}
    +
    #endif /* __KERNEL__ */
    #endif /* LINUX_PCI_H */
    --- linux-mm/include/linux/pm.h 2004-07-28 21:29:32.000000000 +0200
    +++ linux-delme/include/linux/pm.h 2004-08-12 13:41:12.000000000 +0200
    @@ -193,14 +193,22 @@
    extern void (*pm_idle)(void);
    extern void (*pm_power_off)(void);

    -enum {
    - PM_SUSPEND_ON,
    - PM_SUSPEND_STANDBY,
    - PM_SUSPEND_MEM,
    - PM_SUSPEND_DISK,
    +enum system_state {
    + PM_SUSPEND_ON = 0,
    + PM_SUSPEND_STANDBY = 1,
    + PM_SUSPEND_MEM = 2,
    + PM_SUSPEND_DISK = 3,
    PM_SUSPEND_MAX,
    };

    +/*
    + * For now, drivers only get system state. Later, this is going to become
    + * structure or something to enable runtime power managment.
    + */
    +typedef enum system_state suspend_state_t;
    +
    +#define SUSPEND_EQ(a, b) (a == b)
    +
    enum {
    PM_DISK_FIRMWARE = 1,
    PM_DISK_PLATFORM,
    @@ -241,8 +249,11 @@

    extern void device_pm_set_parent(struct device * dev, struct device * parent);

    -extern int device_suspend(u32 state);
    -extern int device_power_down(u32 state);
    +/*
    + * apply system suspend policy to all devices
    + */
    +extern int device_suspend(enum system_state reason);
    +extern int device_power_down(enum system_state reason);
    extern void device_power_up(void);
    extern void device_resume(void);

    --
    People were complaining that M$ turns users into beta-testers...
    ...jr ghea gurz vagb qrirybcref, naq gurl frrz gb yvxr vg gung jnl!
    -
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to majordomo@vger.kernel.org
    More majordomo info at http://vger.kernel.org/majordomo-info.html
    Please read the FAQ at http://www.tux.org/lkml/

    \
     
     \ /
      Last update: 2005-03-22 14:05    [W:0.030 / U:61.688 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site