Помогите пожалуйста, как из ABAR получить адрес регистров AHCI контролёра? Если брать со смещения 31:13, как написана в спецификации, ничего ни получается. Что можете подсказать? За ранее спасибо.
это как? от куда уверенность, что это не то-что нужно? Сам адрес ABAR от куда был считан? AHCI Base Address - это 32 битный адрес в памяти, и если у тебя есть биты 31:13, значит остальные биты 12:0 нужно обнулить. Получишь выравнивание адреса на границу 213= 8 КБ
работай с портами: 0CF8h - порт адреса, 0CFCh - порт данных. класс контролёра AHCI = 010601h: ClassSub-ClassInterfaceMeaning100SCSI bus controller1xxhIDE controller20Floppy disk controller30IPI bus controller40RAID controller520hATA Controller с одиночным DMA630hATA Controller с цепочкой DMA70SATA Controller80h1SATA AHCI Controller70SAS Controller80h0Other Mass Storage ControllerТимур, там есть редактор таблиц
Есть элементарные алгоритмы для работы с MMIO из реального режима. Кидаешь 4-Гбайтный дескриптор в любой из сегментных регистров ES/GS/FS, и через него читаешь/пишешь память. Адрес берёшь из указанного выше порта 0CFCh. Если не хочешь возиться с портами, используй fn.0B1h INT-1Ah (должна быть поддержка биосом).
Я и так в защищёнам рижиме, я ни понил к чему ты это написал? ABAR кстати от туда и доставал. Я палагал что парты SATA кантралёра праицируютса на памить до первава мегабайта, и их можна дастать из реальнава рижима. А оказалась что BA(базавый адрис) всеволеш выравниваитса, как в маём случии на границу в 4096 байт.
тебя не поймёшь.. то ты думал, что из реального режима можна читать (см.пост 3), теперь ты оказывается в защищённом и не поймёшь, к чему я упоминаю то, от куда ты ABAR доставал - вообще туши свет. ты из под винды читаешь там порты чтоли, или свою ось пишешь и перешёл в PM?
Я ни знал что ризервныи биты абнулять надо для выравниванья. И тупа обращался по диапазону адрисов реального режима 31:13, как написана в intel-авской "Serial ATA AHCI 1.3 Specification".