|
|
ru.linux- RU.LINUX --------------------------------------------------------------------- From : Kuzewanow Igor 2:5024/11 07 Sep 2001 13:47:55 To : All Subject : Re: Проблема с RS-232 -------------------------------------------------------------------------------- Serguei A. Vorobiev <ven@tlt.ru> пишет в сообщении:9n6uik$d2l$1@ladem.tlt.ru... > Если порты на одном прерывании и на физически разных платах - это не поможет > Связано с ограничениями шины ISA. ^^^^ ISA здесь совсем не причем ;-) здесь вессь вопрос в том умеет ли драйвер проверять от какой платы пришло прерывание. Вот serial.c из исходников драйвера с вами не согласен ;-) : Процедура обработки прерывания проверяет все порты связанные с соответствующим IRQ. /* * linux/drivers/char/serial.c * [поскипано...] #ifdef CONFIG_SERIAL_SHARE_IRQ /* * This is the serial driver's generic interrupt routine */ static void rs_interrupt(int irq, void *dev_id, struct pt_regs * regs) { [Опять поскипано...] info = IRQ_ports[irq]; if (!info) return; [Опять поскипано...] do { if (!info->tty || (serial_in(info, UART_IIR) & UART_IIR_NO_INT)) { if (!end_mark) end_mark = info; goto next; } end_mark = 0; info->last_active = jiffies; status = serial_inp(info, UART_LSR); #ifdef SERIAL_DEBUG_INTR printk("status = %x...", status); #endif if (status & UART_LSR_DR) receive_chars(info, &status, regs); check_modem_status(info); if (status & UART_LSR_THRE) transmit_chars(info, 0); next: info = info->next_port; if (!info) { info = IRQ_ports[irq]; if (pass_counter++ > RS_ISR_PASS_LIMIT) { #if 0 printk("rs loop break\n"); #endif break; /* Prevent infinite loops */ } continue; } } while (end_mark != info); --- Microsoft Outlook Express 5.00.2615.200 * Origin: Organika (2:5024/11.0) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.linux/30687ec780523.html, оценка из 5, голосов 10
|