URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 6172
[ Назад ]

Исходное сообщение
"таймер для FreeBSD kernel"

Отправлено pvl , 15-Фев-07 10:15 
вопросик вот такой к многоуважаемым..

по ходу фунциклирования самодельного модуля ядра нужно реализовать опрос регистра на внешней шине, с таймаутом.
посему нужен таймер.. чета я запарился совсем его искать.. и гугля (выдавая 10^10 ссылок) молчит.
точности особой не нужно - таймаут в пределах 500-2500 us некритичен.
собственно решение приходит само и описывается при старте системы так
Timecounter "i8254" frequency 1193182 Hz quality 0
тока еще бы найти точку входа в литературу по ентому поводу.. ну или в исходники.

допоможите плз. чем сильны


Содержание

Сообщения в этом обсуждении
"таймер для FreeBSD kernel"
Отправлено BigHo , 17-Фев-07 01:39 
>вопросик вот такой к многоуважаемым..
>
>по ходу фунциклирования самодельного модуля ядра нужно реализовать опрос регистра на внешней
>шине, с таймаутом.
>посему нужен таймер.. чета я запарился совсем его искать.. и гугля (выдавая
>10^10 ссылок) молчит.
>точности особой не нужно - таймаут в пределах 500-2500 us некритичен.
>собственно решение приходит само и описывается при старте системы так
>Timecounter "i8254" frequency 1193182 Hz quality 0
>тока еще бы найти точку входа в литературу по ентому поводу.. ну
>или в исходники.
>
>допоможите плз. чем сильны


возможно помогут функции из серии sleepq_* (например sleepq_set_timeout(9)), но не уверен. Что именно нужно от таймеров ?


"таймер для FreeBSD kernel"
Отправлено pvl , 19-Фев-07 11:44 
>возможно помогут функции из серии sleepq_* (например sleepq_set_timeout(9)), но не
>уверен. Что именно нужно от таймеров ?

нужно опрашивать битик в регистре на PCI шине.
смысл такой что бит этот софтверно мною устанавливается (железяка ресеится) а потом хардверно сбрасывается через какое-то время. По докам время сброса не более 250us, но практика показывает что у инфинеонов все делается через жопу и при разных температурах этот бит ведет ся поразному.. а в некоторых девайсах ваще никада не снимается.

поэтому опрашивать его нужно с таймаутом и, если через 500-900us ничего не сбросилось, нахально его командой убирать.

короче хочется такого эффекта как в нижепреведенной абстракции

  for ( time0=timeT ;  ( timeT<(time0+10) ) && (conf1 & CONF1_IIP) ; )
  { /* Wait for IIP (or timeout) */
    conf1=m256[devID].regBase->conf1;
  }

тута timeT - какой-то freeruning таймер
(conf1 & CONF1_IIP) - как раз тот самый битик

вот так вобщем

а тупая задержка не подходит потому что факт "неопускания" бита нужно просигнализировать юзермоду


"таймер для FreeBSD kernel"
Отправлено Michelnok , 19-Фев-07 16:10 
>а тупая задержка не подходит потому что факт "неопускания" бита нужно просигнализировать
>юзермоду

Ничего не понял из обьяснения.


"таймер для FreeBSD kernel"
Отправлено pvl , 19-Фев-07 16:54 
>Ничего не понял из обьяснения.

а чтоже тут непонятного.

если бит не опустился сам, то инициализация не вылняется, а отлаживается до того времени когда юзерское приложение запустится и само, мануал так сказать, просмотрит все регистры и сконфижит их как нужно.

а сам факт "неопускания" бита нужно запомнить и потом выдать по соответствующему ioctl



"таймер для FreeBSD kernel"
Отправлено Michelnok , 19-Фев-07 17:37 
>а сам факт "неопускания" бита нужно запомнить и потом выдать по соответствующему
>ioctl

Все равно не понял, почему не подходит "тупая задержка". timeout вместо DELAY я не советовал, т.к. ты оперируешь микросекундами, а timeout оперирует тиками (1-10 миллисекунд, частота определяется константой HZ при компиляции ядра). Хотя, если речь идет всего лишь про инициализацию, то все равно каким способом делать задержку и сколько времени она продлится, не так ли?


"таймер для FreeBSD kernel"
Отправлено Michelnok , 17-Фев-07 14:29 
>нужно реализовать опрос регистра на внешней шине, с таймаутом.

man 9 DELAY


"таймер для FreeBSD kernel"
Отправлено timeout , 19-Фев-07 17:01 
>вопросик вот такой к многоуважаемым..
>
>по ходу фунциклирования самодельного модуля ядра нужно реализовать опрос регистра на внешней
>шине, с таймаутом.
>посему нужен таймер.. чета я запарился совсем его искать.. и гугля (выдавая
>10^10 ссылок) молчит.
>точности особой не нужно - таймаут в пределах 500-2500 us некритичен.
>собственно решение приходит само и описывается при старте системы так
>Timecounter "i8254" frequency 1193182 Hz quality 0
>тока еще бы найти точку входа в литературу по ентому поводу.. ну
>или в исходники.
>
>допоможите плз. чем сильны


man 9 timeout


"таймер для FreeBSD kernel"
Отправлено pvl , 19-Фев-07 17:21 

>man 9 timeout


премного дякую