|
|
ru.linux- RU.LINUX --------------------------------------------------------------------- From : Alexandr Goncharov 2:5020/400 14 Nov 2002 08:35:25 To : "Alexandr S. Agranovsky" Subject : Re: вопрос к обладателям NE2000 ISA -------------------------------------------------------------------------------- Alexandr S. Agranovsky <llb@udmnet.ru> wrote: ASA> Hi, Andrey Melnikov AM>> SS> Только IO, IRQ автоматически определяется(обычно). AM>> Hа NE2000 ISA в non pci моде ? Окстись. ASA> От такого слышу. Если NE2000-совместимая карточка нормальная, и ASA> нет конфликтов по прерываниям, то при верно указанном io порте ASA> IRQ действительно определяется автоматически. Hа пару сообщений назад отмотать не судьба, да? Цитирую: >alexander yuzhakoff wrote: >Это если он есть, иначе придется методом проб и ошибок перебрать все >варианты io (примерно от 220 до 380) и irq (3-12), причем если под ДОСом >такая карта заведется несмотря на конфликт прерываний то под могут ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ >быть проблемы ASA> --- ASA> Alexandr S. Agranovsky llb@udmnet.ru Вот это заявление и вызывает вопрос - а понимает ли автор, что такое прерывание и конфликт прерываний. И если понимает - что в таком случае понимается под термином "заведется". Вообще-то обнаружение устройства и "заведется" - несколько разные вещи, не находишь? Что до определения irq в не-pci режиме (у ISA карт) - допускаю, что в каких-то моделях эту информацию можно вынуть из какого-то регистра состояний. Hо вообще-то в ISA картах этот кусок схемы строился примерно таким образом (от простого к сложному): 1) событие,вызывающее прерывание -> схема выдачи запроса ->поле джамперов -> линии прерываний шины. 2) тоже самое, но вместо поля джамперов - программируемый коммутатор, определяющий, с какой из линий шины скоммутировать вход. (jamperless-режим). Доступ к программированию коммутатора - через конфигуратор 3) pnp - к программированию коммутатора и, что немаловажно - к его текущему состоянию, имеет доступ операционная система. Так вот, если не иметь доступа через регистры io карты к информации коммутатора или не знать, в каком именно месте эта информация находится, то единственный способ узнать реальный irq карты - поставить ловушку прерываний и вызвать событие, генерирующее прерывание. А затем в ловушке посмотреть - а какое (в смысле номера) именно прерывание произошло. В основном это внешние события, типа прихода пакета, нажатия клавиши или перемещения мыши. Hе все из них и не на каждой карте можно сымитировать программным способом. Плюс к этому, если есть конфликт прерываний - не существует универсального и простого способа определить карту, выдавшую запрос прерывания. Поэтому универсального способа _определить_ irq при опросе шины не существует. А частные методы отличаются от устройства к устройству и тратить время при загрузке системы на их перебор - вряд ли разработчики ОС на это пойдут. Методы, которые применяются в pnp и pci - есть не _определение_, а _назначение_ прерывания устройствам. И, насколько мне известно, при сканировании устройств ISA шины происходит очень простая вешь. Делается запрос по адресу и в случае ответа - считается, что обнаружено устройство. Какое - смотрим в ядре. Если у ожидаемого на этом адресе устройства можно вычитать через регистр данных какую-то информацию - пытаемся считать и сверить с ожидаемой. Если совпало - значит обнаружили то, что ожидали. Данные irq берутся из драйвера и обработчик прерывания регистрируется. И т.д. После загрузки все начинает работать, пакеты бегать и пр. Вдруг процессору прилетает прерывание, зарегистрированное за этой картой. Он прерывает текущую задачу и начинает обрабатывать прерывание по заданной драйвером карты программе. А оказывается, что прерывание-то вызвала совсем другая карта.... В результате - в одну карту могут уйти данные, предназначенные другой, а эта другая не дождется ответа за свой запрос и может потерять данные. Вот это и есть конфликт прерываний. И произойдет он (если произойдет) независимо от используемой ОС. Всякие pnp, pci - это просто способ устанить проблему _до_ ее возникновения. По возможности - средствами ОС, без вмешательства человека. Первые NE2000, сколько мне помнится, соответствовали варианту настройки 1) Словосочетание NE2000-compatible наводит на мысль, что вряд ли в совместимость входит и способы конфигурации адресов IO и IRQ. Скорее, это относится к назначению портов IO и алгоритмам работы с картой в ее основном режиме. Впрочем, готов поверить в то, что в какой-то из регистров данных может транслироваться даже состояние поля джамперов. P.S. Все вышеизложенное является ответом не на данное конкретное сообщение, а скорее развернутая реплика на несколько некорректных фраз, проскочивших у участников треда в процессе обсуждения. И не является ответом на первоначальный вопрос - "как?". Hа него ответы уже были. -- Alexandr V. Goncharov, | Digital Networks, Tomsktelecom AGV-RIPE, | agv@tomsknet.ru AGV3-RIPN | phonе: +7(382-2)662510 --- ifmail v.2.15dev5 * Origin: Tomsktelecom - Digital Networks (2:5020/400) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.linux/122327d8bb0ba.html, оценка из 5, голосов 10
|