SATA в режиме IDE - полная поддержка

Internal structure and you change requests/suggestions
  • yogev_ezra
    Просьба протестировать SVN r. 4303 на VMware.
    Всем чмоки в этом проекте! Засуньте эти 11 лет себе в жопу!
  • Mario_r4 wrote:yogev_ezra
    Просьба протестировать SVN r. 4303 на VMware.
    Протестировал SVN r. 4305, теперь вроде устанавливает как и задумано - Hard Disk: DMA, CD-ROM: PIO.
    Как я могу проверить, есть ли разница в скорости между PIO и DMA? Есть какая-то утилита для тестирования?
    Attachments
    PCIDEV.TXT (5.51 KiB)
    Downloaded 237 times
    BOARDLOG.TXT (2.57 KiB)
    Downloaded 235 times
  • Утилит нет, только косвенно - например прочитав/скопировав большой файл и засекая время.
    Если есть желание можешь написать такую утилиту сам.
    Всем чмоки в этом проекте! Засуньте эти 11 лет себе в жопу!
  • Mario_r4 wrote:Утилит нет, только косвенно - например прочитав/скопировав большой файл и засекая время.
    Если есть желание можешь написать такую утилиту сам.
    Ясно. Ну логи-то хоть правильные теперь были?
  • yogev_ezra wrote:Ну логи-то хоть правильные теперь были?
    Да.
    Всем чмоки в этом проекте! Засуньте эти 11 лет себе в жопу!
  • Archive.7z (1.91 KiB)
    pcidev(r3534 sata+pata).txt
    pcidev(r3534 pata).txt
    pcidev(r3502 SATA+PATA).txt
    pcidev(r3502 PATA).txt
    Boardlog(r3534 SATA+PATA).txt
    Boardlog(r3534 pata).txt
    Downloaded 224 times
  • 0CodErr
    Просьба проверить SVN r.4307
    Всем чмоки в этом проекте! Засуньте эти 11 лет себе в жопу!
  • Mario_r4, у меня без изменений. Работает в режиме только SATA.

    В логе пишется, что dma установлен — но это ведь никак не проверяется?
    yogev_ezra wrote:Как я могу проверить, есть ли разница в скорости между PIO и DMA?
    Мне тоже стало интересно. Сделал небольшую программку.
    Spoiler:Создаётся файл "/hd0/1/_t_e_s_t_f_i_l_e_" размером 100 Mb.
    И читается 10 раз полностью в буфер размером 100 Mb.
    Не уверен, в каких именно "попугаях" получается результат, но по ощущениям кажется, что долго.

    Code: Select all

    ORG 0
    BITS 32
    ; ---------------------------------------------------------------------------- ;
    FILE_SIZE              equ (1024 * 1024 * 100)
    LOOP_COUNT             equ 10
    TIMER_TICKS_PER_SECOND equ 100
    BYTES_PER_MEGABYTES    equ 1024 * 1024
    OUT_STRING_LEFT        equ 16
    STACK_SIZE             equ 256
    ; ---------------------------------------------------------------------------- ;
    MENUET01       db 'MENUET01'
    version        dd 1
    program.start  dd START
    program.end    dd END
    program.memory dd END + FILE_SIZE + STACK_SIZE
    program.stack  dd END + FILE_SIZE + STACK_SIZE
    program.params dd 0
    program.path   dd 0
    ; ---------------------------------------------------------------------------- ;
    action_string  dd sz_start
    timer_ticks    dd 0
    result         dd 0
    ; ---------------------------------------------------------------------------- ;
    file_info:
    .action        dd 0
    .position      dd FILE_SIZE ; for "create file"
                   dd 0
    .count         dd 0
    .buffer        dd 0
                   db 0
    .file_path     dd sz_file_path
    ; ---------------------------------------------------------------------------- ;
    sz_caption     db "test",0
    sz_start       db "start..",0
    sz_done        db " done. ",0
    sz_error       db " error ",0
    sz_file_path   db "/hd0/1/_t_e_s_t_f_i_l_e_",0
    ; ---------------------------------------------------------------------------- ;
    START:
    ; set.event:
            mov    eax, 40
            mov    ebx, 5 ; redraw + button
            int    64
            call   On_Redraw
    ; ----------------------------------
            call   StartTest
            call   DrawInfo
    ; ----------------------------------
    WaitEvent:
            mov    eax, 10
            int    64
            dec    eax
            jnz    Terminate
            call   On_Redraw
            jmp    WaitEvent
    Terminate:
            or     eax, -1
            int    64
    ; ---------------------------------------------------------------------------- ;
    On_Redraw:
    ; redraw.start
            mov    eax, 12
            mov    ebx, 1
            int    64
    ; draw.window
            xor    eax, eax
            mov    ebx, 200
            mov    ecx, 100
            mov    edx, 0x34CCDDEE
            mov    edi, sz_caption
            int    64
            call   DrawInfo
    ; redraw.finish
            mov    eax, 12
            mov    ebx, 2
            int    64
            ret
    ; ---------------------------------------------------------------------------- ;
    DrawInfo:
    ; draw action
            mov    eax, 4
            mov    ecx, 0xC0000000
            mov    edi, 0x00CCDDEE
            mov    ebx, (OUT_STRING_LEFT << 16) | 10
            mov    edx, [action_string]
            int    64
    ; draw result
            mov    eax, 47
            mov    ebx, (10 << 16)
            mov    edx, (OUT_STRING_LEFT << 16) | 20
            mov    esi, 0x70000000
            mov    edi, 0x00FFFFFF
            mov    ecx, [result]
            int    64
            ret
    ; ---------------------------------------------------------------------------- ;
    StartTest:
    ; if error then we go to .exit and action_string="error"
    ;                else before .exit action_string="done."
            mov    [action_string], dword sz_error
    ; try create file
            mov    eax, 70
            mov    [file_info.action], dword 2
            lea    ebx, [file_info]
            int    64
            test   eax, eax
            jnz    .exit
    ; try resize created file
            mov    eax, 70
            mov    [file_info.action], dword 4
            lea    ebx, [file_info]
            int    64
            test   eax, eax
            jnz    .exit
    ; get timer ticks
            mov    eax, 26
            mov    ebx, 9
            int    64
            mov    [timer_ticks], eax
    ; read from file
            mov    [file_info.position], dword 0
            mov    [file_info.action], dword 0
            mov    [file_info.count], dword FILE_SIZE
            mov    [file_info.buffer], dword END
            lea    edx, [file_info]
            mov    ecx, LOOP_COUNT
    ; ----------------------------------
    .next:
            mov    eax, 70
            mov    ebx, edx
            int    64
            loop   .next
    ; ----------------------------------
    ; get timer ticks
            mov    eax, 26
            mov    ebx, 9
            int    64
    ; calculate result
    ; result = (FILE_SIZE * LOOP_COUNT / (delta(timer_ticks)) / (BYTES_PER_MEGABYTES * LOOP_COUNT / TIMER_TICKS_PER_SECOND)
            sub    eax, [timer_ticks]
            inc    eax ; to avoid next possible division by zero
            mov    ecx, eax
            mov    eax, FILE_SIZE * LOOP_COUNT
            xor    edx, edx
            div    ecx
            mov    ecx, BYTES_PER_MEGABYTES * LOOP_COUNT / TIMER_TICKS_PER_SECOND
            xor    edx, edx
            div    ecx
            mov    [action_string], dword sz_done
    .exit:
            mov    [result], eax
            ret
    ; ---------------------------------------------------------------------------- ;
    END:
    rdt.kex (498 Bytes)
    Downloaded 215 times
  • 0CodErr wrote:у меня без изменений. Работает в режиме только SATA.
    Значит сброс прерывания надо сделать в другом месте. Я предположительно определил в чем проблема. Поскольку прерывание от контроллера диска не погашено, а на то же прерывание повешен обработчик UHCI, то прерывание бесконечно генерируется, а обработчик UHCI его бесконечно отбрасывает, так как у него нету признака, что прерывание его. Вопрос в том чтобы надежно заглушить остаточное прерывание от IDE DMA. Хоть прерывания от него и запрещены, но видимо твой контроолер имеет собственное мнение на этот счет. :)
    0CodErr wrote:В логе пишется, что dma установлен — но это ведь никак не проверяется?
    Проверки свойств самого диска я не делал, но если бы устройство не поддерживало UltraDMA, то доступа к диску вообще бы не было.
    Всем чмоки в этом проекте! Засуньте эти 11 лет себе в жопу!
  • 0CodErr
    Просьба проверить ядро:
    kernel.7z (86.58 KiB)
    Downloaded 210 times
    Всем чмоки в этом проекте! Засуньте эти 11 лет себе в жопу!
  • Mario_r4, теперь заработало.
    Archive.7z (2.1 KiB)
    pcidev(sata+pata).txt
    pcidev(pata).txt
    Boardlog(sata+pata).txt
    Boardlog(pata).txt
    Downloaded 229 times
  • 0CodErr wrote:Mario_r4, теперь заработало.
    Залил SVN r.4311.
    Всем чмоки в этом проекте! Засуньте эти 11 лет себе в жопу!
  • Samsung rv508 все работает как задуманно. Логи прилагаю.
    Attachments
    samsung_rv508.7z (2.35 KiB)
    Downloaded 226 times
    to infinity and beyond
  • punk_joker wrote:Samsung rv508 все работает как задуманно. Логи прилагаю.
    Вот только PCIDEV явно при других настройках сделан, либо от другой машины. Там нет IDE контроллера, только AHCI.
    Всем чмоки в этом проекте! Засуньте эти 11 лет себе в жопу!
  • Who is online

    Users browsing this forum: Google [Bot] and 3 guests