ALT Linux Team development discussions
 help / color / mirror / Atom feed
From: Sergey Vlasov <vsu@mivlgu.murom.ru>
To: devel@altlinux.ru
Cc: hihin@rambler.ru, smi@altlinux.ru
Subject: Re: [devel] Агат
Date: Fri, 22 Feb 2002 19:33:51 +0300
Message-ID: <20020222193351.2328e7b8.vsu@mivlgu.murom.ru> (raw)
In-Reply-To: <1012136912.20020220040338@rambler.ru>

On Wed, 20 Feb 2002 04:03:38 +0300
hihin_rambler <hihin@rambler.ru> wrote:

> У нас на "Агате" накопилось к Вам несколько вопросов:
> 
> По разработке драйверов нестандартных устройств:
> 
> 1. Возможность работы с ПДП в Linux (МСВС).
>    Существует устройство, ведущее обмен информацией по прямому доступу.
> Для передачи / приема информации надо указать устройству 24х-разрядный
> адрес (ISA) из области памяти (для контроллера прямого доступа).
>    ВОПРОС: Как преобразовать 32х-разрядный адрес выделенной памяти  к
> необходимому виду  или как выделить память, находящуюся  в  границах
> 24 разрядов? Будет ли этот адрес постоянным в процессе работы?
> Как это сделать на уровне ядра и на уровне пользователя?

char *buffer = kmalloc (size, GFP_KERNEL | GFP_DMA)
unsigned long buffer_phys = virt_to_bus (buffer);

Физические адреса такого блока фиксируются в момент выделения и
в дальнейшем не меняются.

На пользовательском уровне это не делается - только через
написание драйвера для ядра.  

> 2.Обработка аппаратных прерываний.
>  Если прерывания обрабатываются на уровне ядра,как организовать 
> синхронную передачу информации в пользовательский процесс?

Что такое "синхронная передача" в Вашем понимании?  Если Вы
хотите обрабатывать прерывания в пользовательском процессе - это
невозможно.  Обработчик прерывания в ядре может активизировать
процесс, находящийся в состоянии ожидания, но это не означает,
что этот процесс начнет немедленно выполняться.  Поэтому в любом
случае необходима буферизация на уровне ядра.

Стандартный подход следующий: процесс выполняет системный вызов
(read или ioctl), запрашивая данные.  Если в этот момент есть
готовые данные, они копируются в буфер пользовательского
процесса, и выполнение системного вызова завершается.  Если
данные не готовы - в зависимости от состояния флага O_NONBLOCK
либо процессу немедленно возвращается ошибка EAGAIN, либо
процесс переводится в состояние ожидания до поступления данных
(либо прихода сигнала).  Кроме того, процесс может проверять
готовность с помощью системных вызовов select или poll.
Наконец, можно установить O_ASYNC и получать сигнал при
готовности устройства.  Разумеется, для всего этого должна быть
соответствующая поддержка в драйвере.



  reply	other threads:[~2002-02-22 16:33 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2002-02-20  1:03 hihin_rambler
2002-02-22 16:33 ` Sergey Vlasov [this message]
2002-02-22 22:47   ` [devel] Re[2]: " hihin_rambler

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20020222193351.2328e7b8.vsu@mivlgu.murom.ru \
    --to=vsu@mivlgu.murom.ru \
    --cc=devel@altlinux.ru \
    --cc=hihin@rambler.ru \
    --cc=smi@altlinux.ru \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link

ALT Linux Team development discussions

This inbox may be cloned and mirrored by anyone:

	git clone --mirror http://lore.altlinux.org/devel/0 devel/git/0.git

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V2 devel devel/ http://lore.altlinux.org/devel \
		devel@altlinux.org devel@altlinux.ru devel@lists.altlinux.org devel@lists.altlinux.ru devel@linux.iplabs.ru mandrake-russian@linuxteam.iplabs.ru sisyphus@linuxteam.iplabs.ru
	public-inbox-index devel

Example config snippet for mirrors.
Newsgroup available over NNTP:
	nntp://lore.altlinux.org/org.altlinux.lists.devel


AGPL code for this site: git clone https://public-inbox.org/public-inbox.git