Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 13 Feb 2006 19:54:55 +0100
From:      Daniel Thiele <dthiele@gmx.net>
To:        Daniel Thiele <dthiele@gmx.net>
Cc:        freebsd-acpi@FreeBSD.org
Subject:   Re: ACPI S3 and S5 Problem with HDD on ThinkPad R40
Message-ID:  <43F0D5FF.2090308@gmx.net>
In-Reply-To: <43F0D578.3040302@gmx.net>
References:  <43BA5E03.4080306@gmx.net> <43BA7167.2060500@inbox.ru> <43BA88F8.8040506@gmx.net> <43F0D578.3040302@gmx.net>

next in thread | previous in thread | raw e-mail | index | archive | help
Daniel Thiele wrote:
> Daniel Thiele wrote:
>> Rechistov Grigory wrote:
>>> I've heard about some commands (atacontrol ?) which allow to spin 
>>> down hard drive, so maybe we should just put them in shutdown script?
>>>
>>
>> You can use ataidle (sysutils/ataidle) to put a HDD into idle or standby
>> mode, but putting that command into /etc/rc.shutdown will AFAIK not work
>> since /etc/rc.shutdown is called before the kernel syncs the disks at
>> the end of its shutdown process. So if you put them into standby mode
>> before they will spin up again for this final syncing.
>>
>> I do not know if it is possible and/or reasonable to do all the things
>> that ataidle does to put a HDD into standby mode somewhere after the
>> disks are synced in the shutdown and suspend actions the kernel does.
> 
> 
> Hi,
> 
> I have a solution for the problem or at least for the S5 power off
> problem to be precise. I simply looked at the ataidle source code and
> added the standby part from ataidle to the ata driver's shutdown
> function. To do this just change ad_shutdown() in
> /usr/src/sys/dev/ata/ata-disk.c from this:
> 
> 
> static void
> ad_shutdown(device_t dev)
> {
>     struct ata_device *atadev = device_get_softc(dev);
> 
>     if (atadev->param.support.command2 & ATA_SUPPORT_FLUSHCACHE)
>         ata_controlcmd(dev, ATA_FLUSHCACHE, 0, 0, 0);
> }
> 
> 
> to this:
> 
> 
> static void
> ad_shutdown(device_t dev)
> {
>     struct ata_device *atadev = device_get_softc(dev);
> 
>     if (atadev->param.support.command2 & ATA_SUPPORT_FLUSHCACHE)
>         ata_controlcmd(dev, ATA_FLUSHCACHE, 0, 0, 0);
> 
>     if (atadev->param.support.command2 & ATA_SUPPORT_STANDBY)
>         ata_controlcmd(dev, ATA_STANDBY_IMMEDIATE, 0, 0, 0);
> }
> 
> 

And recompile and reinstall the kernel, of course. (sorry I forgot that
in my previous email)



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?43F0D5FF.2090308>