コード例 #1
0
ファイル: timer.c プロジェクト: soap-DEIM/l4android
static void timer_set_mode(enum clock_event_mode mode,
                           struct clock_event_device *clk)
{
    const l4timer_time_t increment = 1000000 / HZ;
    int r;

    switch (mode) {
    case CLOCK_EVT_MODE_SHUTDOWN:
    case CLOCK_EVT_MODE_ONESHOT:
        r = L4XV_FN_i(l4_error(l4timer_stop(timer_srv)));
        if (r)
            printk(KERN_WARNING "l4timer: stop failed (%d)\n", r);
        while (L4XV_FN_i(l4_ipc_error(l4_irq_receive(timer_irq_cap, L4_IPC_BOTH_TIMEOUT_0), l4_utcb())) != L4_IPC_RETIMEOUT)
            ;
        break;
    case CLOCK_EVT_MODE_PERIODIC:
    case CLOCK_EVT_MODE_RESUME:
        r = L4XV_FN_i(l4_error(l4timer_start(timer_srv, 0,
                                             l4lx_kinfo->clock,
                                             increment)));
        if (r)
            printk(KERN_WARNING "l4timer: start failed (%d)\n", r);
        break;
    case CLOCK_EVT_MODE_UNUSED:
        break;
    default:
        printk("l4timer_set_mode: Unknown mode %d\n", mode);
        break;
    }
}
コード例 #2
0
static int kp_irq_func(void)
{
  l4_cap_idx_t irq_cap = l4re_util_cap_alloc();
  l4_cap_idx_t thread_cap = pthread_getl4cap(_pthread);
  l4_msgtag_t tag;

  l4_debugger_set_object_name(thread_cap, "kp-omap3.irq");
  
  if (l4io_request_irq(7, irq_cap) < 0)
    return -2;
  // was L4_IRQ_F_LEVEL_LOW
  tag = l4_irq_attach(irq_cap, 0, thread_cap);
  if (l4_ipc_error(tag, l4_utcb()))
    return -3;

  while (1)
    {
      tag = l4_irq_receive(irq_cap, L4_IPC_NEVER);
      if (l4_ipc_error(tag, l4_utcb()))
	{
	  printf("[KEYP] Error: Receive irq failed\n");
	  continue;
	}

      kp_write(REG_KEYP_IMR1, 0xf);
     
      if (kp_handler)
	scan_key();

      l4_uint8_t value = 0;
      kp_read(REG_KEYP_ISR1, &value);
      kp_write(REG_KEYP_IMR1, 0x0);
    }
}