Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Запись в регистры PCI-устройства  (Прочитано 8811 раз)
0 Пользователей и 1 Гость смотрят эту тему.
slap
Гость
« : 21-08-2008 18:18 » 

Привет всем! Подскажите, пожалуйста, как отключить кэширование при записи в регистры PCI-устройства, отображенные в память. Пытаюсь записать 4 байта в 32-битный регистр хост-контроллера OHCI (адрес 0xE8004008) и без толку. Если же пишу только в младшие 2 байта этого регистра, то запись проходит (есть нужная реакция)... Правильно ли я понимаю, что дело в кешировании? Или дело в другом?
Записан
Ochkarik
Модератор

ru
Offline Offline
Пол: Мужской

« Ответ #1 : 21-08-2008 20:05 » 

а как вы память регистров в виртуальное адресное пространство памяти процесса мапируете/отображаете?
Записан

RTFM уже хоть раз наконец!  RTFM :[ ну или хотя бы STFW...
slap
Гость
« Ответ #2 : 22-08-2008 17:19 » 

Я на миниксе тренируюсь, там отображать не надо ничего. Страничной адресации нет. Есть специальный системный вызов, в который передается сегмент и смещение источника, сегмент и смещение приемника и размер массива данных. Эти данные отправляются в ядро, которое после преобразований выполняет копирование следующим образом:

! PUBLIC void phys_copy(phys_bytes source, phys_bytes destination,
!         phys_bytes bytecount);
! Copy a block of physical memory.

PC_ARGS   =   4 + 4 + 4 + 4   ! 4 + 4 + 4
!      es edi esi eip    src dst len

   .align   16
_phys_copy:
   cld
   push   esi
   push   edi
   push   es

   mov   eax, FLAT_DS_SELECTOR
   mov   es, ax

   mov   esi, PC_ARGS(esp)
   mov   edi, PC_ARGS+4(esp)
   mov   eax, PC_ARGS+4+4(esp)

   cmp   eax, 10         ! avoid align overhead for small counts
   jb   pc_small
   mov   ecx, esi      ! align source, hope target is too
   neg   ecx
   and   ecx, 3         ! count for alignment
   sub   eax, ecx
   rep
   eseg   movsb
   mov   ecx, eax
   shr   ecx, 2         ! count of dwords
   rep
   eseg   movs
   and   eax, 3
pc_small:
   xchg   ecx, eax      ! remainder
   rep
   eseg   movsb
   pop   es
   pop   edi
   pop   esi
   ret

Может, где-то здесь баг или я должен адреса как-то выровнять? Я в ассемблере не силен... Сделал ради интереса копирование больше 10 байт (12) - запись прошла, а вот ровно 4 - не проходит...
Записан
slap
Гость
« Ответ #3 : 22-08-2008 18:00 » 

Черт, непонятно написал... Как свое сообщение можно отредактировать?
Записан
Ochkarik
Модератор

ru
Offline Offline
Пол: Мужской

« Ответ #4 : 22-08-2008 19:08 » 

slap, а что есть "миниксе"? платформа то какая?

отредактировать - кнопка "изменить" справа над сообщением...(только для зарегистрированных пользователей)

movsb - пересылает байты... может имеет смысл movsd использовать?
eseg   - не помню что за префикс... честно говоря) ?

в железу пофиг, туда приходит адрес какой укажете, и данные, любого размера... а вот от реализации железа зависит - как оно с этими данными обойдется.
возможно реализация 8/16/32 битовых длинн целиком не реализована...
попробуйте напрямую при помощи mov писать. проведите опыт для 8/16/32 битных операндов.
выравнивать - ну на x86 по меньшей мере на 32 бита - хорошо бы) для movsb - пройдет, а для movsd - надо.

PS да, если железо расчитано на 4-байтное выравнивание то при записи байтами по косым адресам - будет каша)
« Последнее редактирование: 22-08-2008 19:12 от Ochkarik » Записан

RTFM уже хоть раз наконец!  RTFM :[ ну или хотя бы STFW...
slap
Гость
« Ответ #5 : 23-08-2008 07:21 » 

Ochkarik, спасибо за ответы.
Minix 3 - микроядерная ОС.

Че-то я не вижу никакой кнопки "редактировать", только "цитировать". Я вроде зарегистрирован...
Записан
Ochkarik
Модератор

ru
Offline Offline
Пол: Мужской

« Ответ #6 : 24-08-2008 15:31 » 

slap, да вроде пока ничего особенного не ответил)
странно... должны быть кнопки... Цитировать, изменить, удалить.
Записан

RTFM уже хоть раз наконец!  RTFM :[ ну или хотя бы STFW...
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #7 : 24-08-2008 20:26 » 

Ochkarik, для новичков редактирование и удаление закрыто. Были деятели которые после ответа все удаляли. Через пару постов откроется редактирование, а позже и удаление.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
slap
Гость
« Ответ #8 : 25-08-2008 16:27 » new

slap, да вроде пока ничего особенного не ответил)
Все так и оказалось, как вы сказали. Переделал с movsb на movs и 4-байтовая запись пошла. Спасибо.
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines