Mario_r4, весь этот хак предназначен для случая "драйвер устройства повесил обработчик на прерывание A, а устройство генерирует прерывание Б". Если управляющему коду приходит прерывание Б и все драйверы, сидящие на Б, говорят "нет, это не моё прерывание", то управляющий код начинает опрашивать всех-всех-всех с остальных прерываний, вдруг кто сознается. Очевидно, что для корректной работы этого механизма нужно, чтобы драйверы не врали в ответ на вопрос "твоё ли это прерывание?" Но некоторые врут, поэтому их нужно исключать при опросах.
Первая часть исключений, с "jz .fail", отвечает за то, чтобы не начинать опрос, если обработчик прерывания А говорит, что прерывание не его, хотя на самом деле оно его: таким свойством обладают А=6, 14, 15 - все они врут в отрицательную сторону. Поэтому отсюда 14 и 15 убирать нельзя, пока нет нормального обработчика.
Вторая часть исключений, с "jz .try_next_irq", отвечает за то, чтобы игнорировать обработчик прерывания Б, который говорит, что прерывание его, хотя на самом деле оно не его. Это как раз legacy ISA, Б=1, 12, где нет возможности проверить, действительно ли прерывание пришло от нужного источника. И сюда 14 и 15 добавить можно, если уж обработчик всегда говорит, что это его прерывание.
_________________ Сделаем мир лучше!
|