Changeset 615 in xtideuniversalbios for trunk/XTIDE_Universal_BIOS/Src/Handlers/Int13h


Ignore:
Timestamp:
Aug 7, 2021, 9:02:29 AM (3 years ago)
Author:
Tomi Tilli
Message:
  • COMMAND_IDLE was not enough to disable standby timer from 1,8" Toshiba HDD. Apparently idle mode is the default mode. Added COMMAND_STAND_BY and that does what COMMAND_IDLE was supposed to do. Without COMMAND_STAND_BY the 1,8" Toshiba HDD experienced some random pauses (=>retry/abort... prompts) especially with Freedos 1.3RC4 but MS-DOS 7.10 (Win98) was mostly OK.
  • Added FEATURE_ENABLE_ADVANCED_POWER_MANAGEMENT command to set drive to maximum performance mode when standby timer is disabled. This feature needs a bit more work. See TODO comments in sources.
Location:
trunk/XTIDE_Universal_BIOS/Src/Handlers/Int13h
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/XTIDE_Universal_BIOS/Src/Handlers/Int13h/AH23h_HFeatures.asm

    r589 r615  
    101101%endif ; MODULE_8BIT_IDE_ADVANCED
    102102%endif ; MODULE_8BIT_IDE
     103
     104
     105;--------------------------------------------------------------------
     106; Enable/disable advanced power management command can be used to scale
     107; power consumption and performance. Drive supporting Enable APM might not
     108; support Disable AMP so we set the drive to max performance if stand by
     109; timer value is 0 (idle/standby disabled)
     110;
     111;
     112; AH23h_EnableOrDisableAdvancedPowerManagement
     113;   Parameters:
     114;       DL:     Stand By timer value (0=disable APM)
     115;       DS:DI:  Ptr to DPT (in RAMVARS segment)
     116;       SS:BP:  Ptr to IDEPACK
     117;   Returns:
     118;       AH:     Int 13h return status
     119;       CF:     0 if successful, 1 if error
     120;   Corrupts registers:
     121;       AL, BX, CX, DX, SI
     122;--------------------------------------------------------------------
     123%ifdef MODULE_POWER_MANAGEMENT
     124AH23h_EnableOrDisableAdvancedPowerManagement:
     125    mov     si, FEATURE_ENABLE_ADVANCED_POWER_MANAGEMENT
     126    test    dl, dl
     127    jnz     SHORT .EnablePowerSave
     128    dec     dx
     129    dec     dx      ; DL = FEh = Maximum performance
     130    jmp     AH23h_SetControllerFeatures
     131   
     132; TODO: We should add power management level to IDEVARS to be adjustable with xtidecfg
     133.EnablePowerSave:
     134    mov     dl, 0BFh    ; For Toshiba 1.8" HDD: 80h...BFh = Mode 1
     135    jmp     AH23h_SetControllerFeatures
     136%endif ; %ifdef MODULE_POWER_MANAGEMENT
  • trunk/XTIDE_Universal_BIOS/Src/Handlers/Int13h/AH9h_HInit.asm

    r589 r615  
    200200    jz      SHORT .NoPowerManagementSupport
    201201
     202    ; Do we need to disable APM?
     203;TODO: We should check APM feature set flag from ATA ID word 83. The above
     204;FLGH_DPT_POWER_MANAGEMENT_SUPPORTED is from ATA ID word 82
     205    mov     dl, [cs:ROMVARS.bIdleTimeout]
     206    push    dx
     207    push    dx
     208    call    AH23h_EnableOrDisableAdvancedPowerManagement
     209
     210    ; COMMAND_IDLE is not enough for Toshiba 1,8" HDD since idle mode is the default mode
     211    ; COMMAND_STAND_BY seemed to do the trick
     212    pop     dx
     213    mov     al, COMMAND_STAND_BY
     214    mov     bx, TIMEOUT_AND_STATUS_TO_WAIT(TIMEOUT_BSY, FLG_STATUS_BSY)
     215    call    Idepack_StoreNonExtParametersAndIssueCommandFromAL
     216    STORE_ERROR_FLAG_TO_DPT     FLG_INITERROR_FAILED_TO_INITIALIZE_STANDBY_TIMER
     217
     218    pop     dx
    202219    mov     al, COMMAND_IDLE
    203     mov     dl, [cs:ROMVARS.bIdleTimeout]
    204220    mov     bx, TIMEOUT_AND_STATUS_TO_WAIT(TIMEOUT_BSY, FLG_STATUS_BSY)
    205221    call    Idepack_StoreNonExtParametersAndIssueCommandFromAL
Note: See TracChangeset for help on using the changeset viewer.