static rtems_isr interrupt_handler(rtems_vector_number n) { unsigned char msg[8]; int i; lm32_interrupt_ack(1 << MM_IRQ_USB); while(mouse_consume != COMLOC_MEVT_PRODUCE) { for(i=0;i<4;i++) msg[i] = COMLOC_MEVT(4*mouse_consume+i); rtems_message_queue_send(event_q, msg, 4); mouse_consume = (mouse_consume + 1) & 0x0f; } while(keyboard_consume != COMLOC_KEVT_PRODUCE) { for(i=0;i<8;i++) msg[i] = COMLOC_KEVT(8*keyboard_consume+i); rtems_message_queue_send(event_q, msg, 8); keyboard_consume = (keyboard_consume + 1) & 0x07; } while(midi_consume != COMLOC_MIDI_PRODUCE) { for(i=0;i<3;i++) msg[i] = COMLOC_MIDI(4*midi_consume+i+1); rtems_message_queue_send(event_q, msg, 3); midi_consume = (midi_consume + 1) & 0x0f; } }
static rtems_isr interrupt_handler(rtems_vector_number n) { unsigned short int msg; lm32_interrupt_ack(1 << MM_IRQ_IR); msg = MM_READ(MM_IR_RX); rtems_message_queue_send(ir_q, &msg, 2); }
static rtems_isr rx_interrupt_handler(rtems_vector_number vector) { /* Deassert IRQ line. * The RX daemon will then read all the slots we marked as empty. */ if(MM_READ(MM_MINIMAC_STATE0) == MINIMAC_STATE_PENDING) MM_WRITE(MM_MINIMAC_STATE0, MINIMAC_STATE_EMPTY); if(MM_READ(MM_MINIMAC_STATE1) == MINIMAC_STATE_PENDING) MM_WRITE(MM_MINIMAC_STATE1, MINIMAC_STATE_EMPTY); rtems_bsdnet_event_send(rx_daemon_id, RX_EVENT); lm32_interrupt_ack(1 << MM_IRQ_ETHRX); }
static rtems_isr mmconsole_interrupt(rtems_vector_number n) { char c; while (MM_READ(MM_UART_STAT) & UART_STAT_RX_EVT) { c = MM_READ(MM_UART_RXTX); MM_WRITE(MM_UART_STAT, UART_STAT_RX_EVT); rtems_termios_enqueue_raw_characters(tty, &c, 1); } if (MM_READ(MM_UART_STAT) & UART_STAT_TX_EVT) { MM_WRITE(MM_UART_STAT, UART_STAT_TX_EVT); rtems_termios_dequeue_characters(tty, 1); } lm32_interrupt_ack(1 << MM_IRQ_UART); }
static rtems_isr pcmplay_handler(rtems_vector_number n) { lm32_interrupt_ack(1 << MM_IRQ_AC97DMAR); rtems_message_queue_send(play_q_done, &play_q[play_consume], sizeof(void *)); play_consume = (play_consume + 1) & PLAY_Q_MASK; play_level--; if(play_level > 0) play_start(play_q[play_consume]); else MM_WRITE(MM_AC97_DCTL, 0); }
static rtems_isr pcmrecord_handler(rtems_vector_number n) { lm32_interrupt_ack(1 << MM_IRQ_AC97DMAW); __asm__ volatile( /* Invalidate Level-1 data cache */ "wcsr DCC, r0\n" "nop\n" ); rtems_message_queue_send(record_q_done, &record_q[record_consume], sizeof(void *)); record_consume = (record_consume + 1) & RECORD_Q_MASK; record_level--; if(record_level > 0) record_start(record_q[record_consume]); else MM_WRITE(MM_AC97_UCTL, 0); }
static rtems_isr frame_handler(rtems_vector_number n) { int remaining_attempts; lm32_interrupt_ack(1 << MM_IRQ_VIDEOIN); last_buffer = current_buffer; /* get a new buffer */ remaining_attempts = N_BUFFERS; do { current_buffer++; if(current_buffer == N_BUFFERS) current_buffer = 0; remaining_attempts--; } while(buffers_locked[current_buffer] && (remaining_attempts > 0)); MM_WRITE(MM_BT656_BASE, (unsigned int)buffers[current_buffer]); if(buffers_locked[current_buffer]) printk("Failed to find unlocked buffer\n"); }
static rtems_isr done_handler(rtems_vector_number n) { rtems_semaphore_release(done_sem); lm32_interrupt_ack(1 << MM_IRQ_PFPU); }
static rtems_isr tx_interrupt_handler(rtems_vector_number vector) { lm32_interrupt_ack(1 << MM_IRQ_ETHTX); rtems_bsdnet_event_send(tx_daemon_id, CTS_EVENT); }
static rtems_isr crreply_handler(rtems_vector_number n) { rtems_semaphore_release(cr_read_sem); lm32_interrupt_ack(1 << MM_IRQ_AC97CRREPLY); }
static rtems_isr crrequest_handler(rtems_vector_number n) { rtems_semaphore_release(cr_write_sem); lm32_interrupt_ack(1 << MM_IRQ_AC97CRREQUEST); }