Пример #1
0
static int chat_readb(FAR struct chat* priv, FAR char* c, int timeout_ms)
{
    struct pollfd fds;
    int ret;

    fds.fd = priv->ctl.fd;
    fds.events = POLLIN;
    fds.revents = 0;

    ret = poll(&fds, 1, timeout_ms);
    if (ret <= 0)
    {
        vdbg("poll timed out\n");
        return -ETIMEDOUT;
    }

    ret = read(priv->ctl.fd, c, 1);
    if (ret != 1)
    {
        vdbg("read failed\n");
        return -EPERM;
    }

    if (priv->ctl.echo)
    {
        fputc(*c, stderr);
    }

    vdbg("read \'%c\' (0x%02X)\n", *c, *c);
    return 0;
}
Пример #2
0
static int stm32_rnginitialize()
{
  uint32_t regval;

  vdbg("Initializing RNG\n");

  memset(&g_rngdev, 0, sizeof(struct rng_dev_s));

  sem_init(&g_rngdev.rd_devsem, 0, 1);

  if (irq_attach(STM32_IRQ_RNG, stm32_interrupt))
    {
      /* We could not attach the ISR to the interrupt */

      vdbg("Could not attach IRQ.\n");

      return -EAGAIN;
    }

  /* Enable interrupts */

  regval = getreg32(STM32_RNG_CR);
  regval |=  RNG_CR_IE;
  putreg32(regval, STM32_RNG_CR);

  up_enable_irq(STM32_IRQ_RNG);

  return OK;
}
Пример #3
0
static enum svc_state svc_initial__master_started(struct svc *svc, struct svc_work *work) {
    vdbg("\n");

    svc_timer_init();

    mhb_send_pm_status_not(MHB_PM_STATUS_PEER_ON);

    if (unipro_p2p_is_link_up()) {
        vdbg("link already up\n");
        /* Link is already up. No need poll link status. */
        svc_send_event(SVC_EVENT_UNIPRO_LINK_UP, 0, 0, 0);
    } else {
        vdbg("link not up\n");
        /* Link is not up. Start up link status check polling */
        g_svc.linkup_poll_tid = svc_set_timer(&svc_unipro_link_timeout_handler,
                                              SVC_LINKUP_POLL_INTERVAL);
        if (g_svc.linkup_poll_tid == SVC_TIMER_INVALID) {
            /* TODO: handle error case */
            dbg("ERROR: invalid link timer\n");
        }
    }

    /* Start up a timer for overall Mod detection */
    g_svc.mod_detect_tid = svc_set_timer(&svc_mod_detect_timeout_handler,
                                         SVC_MOD_DETECT_TIMEOUT);
    if (g_svc.mod_detect_tid == SVC_TIMER_INVALID) {
        /* TODO: handle error case */
        dbg("ERROR: invalid mod timer\n");
    }

    return SVC_WAIT_FOR_UNIPRO;
}
Пример #4
0
static void chat_flush(FAR struct chat* priv)
{
    char c;

    vdbg("starting\n");
    while (chat_readb(priv, (FAR char*) &c, 0) == 0);
    vdbg("done\n");
}
Пример #5
0
static int ehci_arc_resume(struct platform_device *pdev)
{
	struct usb_hcd *hcd = platform_get_drvdata(pdev);
	struct ehci_hcd *ehci = hcd_to_ehci(hcd);
	u32 tmp;
	struct fsl_usb2_platform_data *pdata = pdev->dev.platform_data;

	dbg("%s pdev=0x%p  pdata=0x%p  ehci=0x%p  hcd=0x%p\n",
	    __FUNCTION__, pdev, pdata, ehci, hcd);

	vdbg("%s ehci->regs=0x%p  hcd->regs=0x%p  usbmode=0x%x\n",
	     __FUNCTION__, ehci->regs, hcd->regs, pdata->usbmode);

	tmp = USBMODE_CM_HOST;
	if (ehci_big_endian_mmio(ehci))
		tmp |= USBMODE_BE;

	ehci_writel(ehci, tmp, (u32 *)pdata->usbmode);

	memcpy(ehci->regs, (void *)&usb_ehci_regs, sizeof(struct ehci_regs));

	set_bit(HCD_FLAG_HW_ACCESSIBLE, &hcd->flags);
	hcd->state = HC_STATE_RUNNING;
	pdev->dev.power.power_state = PMSG_ON;

	tmp = ehci_readl(ehci, &ehci->regs->command);
	tmp |= CMD_RUN;
	ehci_writel(ehci, tmp, &ehci->regs->command);

	fsl_platform_set_vbus_power(pdata, 1);

	usb_hcd_resume_root_hub(hcd);

	return 0;
}
Пример #6
0
static int ehci_arc_resume(struct platform_device *pdev)
{
	struct usb_hcd *hcd = platform_get_drvdata(pdev);
	struct ehci_hcd *ehci = hcd_to_ehci(hcd);
	u32 cmd;
	struct arc_usb_config *config =
	    (struct arc_usb_config *)pdev->dev.platform_data;

	dbg("%s pdev=0x%p  config=0x%p  ehci=0x%p  hcd=0x%p\n",
	    __FUNCTION__, pdev, config, ehci, hcd);
	vdbg("%s ehci->regs=0x%p  hcd->regs=0x%p  usbmode=0x%x\n",
	     __FUNCTION__, ehci->regs, hcd->regs, config->usbmode);

	writel(USBMODE_CM_HOST, config->usbmode);
	memcpy(ehci->regs, (void *)&usb_ehci_regs, sizeof(struct ehci_regs));

	hcd->state = HC_STATE_RUNNING;

	cmd = readl(&ehci->regs->command);
	cmd |= CMD_RUN;
	writel(cmd, &ehci->regs->command);

	if (config->set_vbus_power)
		config->set_vbus_power(1);

	return 0;
}
Пример #7
0
/* true - keep retrying. false - retry exhausted */
static bool handle_mod_retry(svc_timer_t tid) {

    if (tid != g_svc.mod_detect_tid) {
        vdbg("ignore tid\n");
        return true;
    }

    g_svc.mod_detect_retry++;

    if (g_svc.mod_detect_retry == SVC_MOD_DETECT_RETRY) {
        lldbg("Mod detection timeout. Giving up.\n");
        svc_delete_timer(g_svc.mod_detect_tid);
        g_svc.mod_detect_tid = SVC_TIMER_INVALID;
        unipro_stop();
        mhb_send_pm_status_not(MHB_PM_STATUS_PEER_DISCONNECTED);
    } else {
        lldbg("Mod detection timeout. Retrying (%d)\n", g_svc.mod_detect_retry);

        unipro_reset();
        if (!svc_restart_timer(tid)) {
            /* TODO: handle error case */
            dbg("ERROR: restart timer failed\n");
        }
        mhb_send_pm_status_not(MHB_PM_STATUS_PEER_RESET);
    }

    return (g_svc.mod_detect_retry < SVC_MOD_DETECT_RETRY) ? true : false;
}
Пример #8
0
static enum svc_state svc_wf_unipro__mod_timeout(struct svc *svc, struct svc_work *work) {
    vdbg("\n");

    svc_timer_t tid = (svc_timer_t)work->parameter0;

    return handle_mod_retry(tid) ? SVC_WAIT_FOR_UNIPRO : SVC_DISCONNECTED;
}
Пример #9
0
static enum svc_state svc__queue_stats(struct svc *svc, struct svc_work *work) {
    vdbg("\n");

    if (g_svc.stats_tid != SVC_TIMER_INVALID) {
        /* The stats timer is already set to expire.  No need to start it again. */
        vdbg("stats timer already running\n");
        return g_svc.state;
    }

    g_svc.stats_tid = svc_set_timer(&svc_stats_timeout_handler, SVC_STATS_TIMEOUT);
    if (g_svc.stats_tid == SVC_TIMER_INVALID) {
        vdbg("ERROR: Failed to send stats.\n");
    }

    return g_svc.state;
}
Пример #10
0
void
handle_xdg_shell_message(struct wldbg_objects_info *oi,
			 struct wldbg_resolved_message *rm, int from)
{
	struct wldbg_object_info *info;
	struct wldbg_resolved_arg *arg;

	if (from == CLIENT) {
		 if (strcmp(rm->wl_message->name, "get_xdg_surface") == 0) {
			info = create_xdg_surface_info(rm);
			if (!info) {
				fprintf(stderr, "Out of memory, loosing informaiton\n");
				return;
			}

			/* new xdg_surface id */
			arg = wldbg_resolved_message_next_argument(rm);
			/* FIXME check for NULL */
			info->id = *arg->data;

			/* just check -> do it an assertion */
			if (objects_info_get(oi, info->id))
				fprintf(stderr, "Already got an object on id %d, "
					"but now I'm creating xgd_surface\n", info->id);

			/* wl_surface id */
			arg = wldbg_resolved_message_next_argument(rm);
			((struct wldbg_xdg_surface_info *) info->info)->wl_surface_id = *arg->data;

			objects_info_put(oi, info->id, info);
			vdbg("Created xdg_surface, id %u\n", info->id);
		}
	}
}
Пример #11
0
int nsh_romfsetc(void)
{
  int  ret;

  /* Create a ROM disk for the /etc filesystem */

  ret = romdisk_register(CONFIG_NSH_ROMFSDEVNO, romfs_img,
                         NSECTORS(romfs_img_len), CONFIG_NSH_ROMFSSECTSIZE);
  if (ret < 0)
    {
      dbg("nsh: romdisk_register failed: %d\n", -ret);
      return ERROR;
    }

  /* Mount the file system */

  vdbg("Mounting ROMFS filesystem at target=%s with source=%s\n",
       CONFIG_NSH_ROMFSMOUNTPT, MOUNT_DEVNAME);

  ret = mount(MOUNT_DEVNAME, CONFIG_NSH_ROMFSMOUNTPT, "romfs", MS_RDONLY, NULL);
  if (ret < 0)
    {
      dbg("nsh: mount(%s,%s,romfs) failed: %d\n",
          MOUNT_DEVNAME, CONFIG_NSH_ROMFSMOUNTPT, errno);
      return ERROR;
    }
  return OK;
}
Пример #12
0
Файл: main.c Проект: d5h/gah
void
dbg(const char *fmt, ...)
{
  va_list ap;
  va_start(ap, fmt);
  vdbg(fmt, ap);
  va_end(ap);
}
Пример #13
0
static enum svc_state svc_connected__gear_shifted(struct svc *svc, struct svc_work *work) {
    vdbg("\n");

    int err = (int)work->parameter0;
    if (g_svc.gearbox) {
        gearbox_shift_complete(g_svc.gearbox, err);
    }
    return g_svc.state;
}
Пример #14
0
void
dbg(char const *fmt, ...)
{
    va_list args;

    va_start(args, fmt);
    vdbg(fmt, args);
    va_end(args);
}
Пример #15
0
static enum svc_state svc_wf_unipro__link_up(struct svc *svc, struct svc_work *work) {
    vdbg("\n");

    /* Unipro link is up. Starting "unipro_init" stuff now */
    unipro_init_with_event_handler(unipro_evt_handler);
    unipro_p2p_detect_linkloss(true);
    tsb_unipro_set_init_status(INIT_STATUS_OPERATING);
    unipro_attr_local_write(TSB_DME_ES3_SYSTEM_STATUS_14, CONFIG_VERSION, 0);
    return SVC_WAIT_FOR_MOD;
}
Пример #16
0
static enum svc_state svc_initial__slave_started(struct svc *svc, struct svc_work *work) {
    vdbg("\n");

    svc_timer_init();

    mhb_send_pm_status_not(MHB_PM_STATUS_PEER_ON);

    unipro_init_with_event_handler(unipro_evt_handler);

    return SVC_SLAVE_WAIT_FOR_UNIPRO;
}
Пример #17
0
int
get_pid_for_socket(int fd)
{
	struct ucred cr;
	socklen_t len = sizeof cr;

	getsockopt(fd, SOL_SOCKET, SO_PEERCRED, &cr, &len);
	vdbg("Got fd's %d pid: %d\n", fd, cr.pid);

	return cr.pid;
}
Пример #18
0
static enum svc_state svc_wf_unipro__link_timeout(struct svc *svc, struct svc_work *work) {
    vdbg("\n");

    svc_timer_t tid = (svc_timer_t)work->parameter0;

    if (tid == g_svc.linkup_poll_tid) {
        if (unipro_p2p_is_link_up()) {
            vdbg("link already up\n");
            svc_delete_timer(g_svc.linkup_poll_tid);
            g_svc.linkup_poll_tid = SVC_TIMER_INVALID;
            svc_send_event(SVC_EVENT_UNIPRO_LINK_UP, 0, 0, 0);
        } else {
            vdbg("link not up\n");
            if (!svc_restart_timer(tid)) {
                /* TODO: handle error case */
                dbg("ERROR: restart timer failed\n");
            }
        }
    }
    return SVC_WAIT_FOR_UNIPRO;
}
Пример #19
0
static enum svc_state svc__link_down(struct svc *svc, struct svc_work *work) {
    vdbg("\n");

    /* Cancel timers (if running). */
    if (g_svc.linkup_poll_tid != SVC_TIMER_INVALID) {
        svc_delete_timer(g_svc.linkup_poll_tid);
        g_svc.linkup_poll_tid = SVC_TIMER_INVALID;
    }

    if (g_svc.mod_detect_tid != SVC_TIMER_INVALID) {
        svc_delete_timer(g_svc.mod_detect_tid);
        g_svc.mod_detect_tid = SVC_TIMER_INVALID;
    }

#if CONFIG_RAMLOG_SYSLOG
    mhb_ramlog_disable(true /* force */);
#endif

#if defined(CONFIG_ARCH_CHIP_TSB_I2S_TUNNEL)
    (void)i2s_unipro_tunnel_unipro_unregister();
#endif

#if CONFIG_MHB_IPC_SERVER || CONFIG_MHB_IPC_CLIENT
    ipc_unregister_unipro();
#endif

    if (g_svc.gearbox) {
        gearbox_link_down(g_svc.gearbox);
    }

    /* Disable UniPro interrupt events. */
    unipro_p2p_detect_linkloss(false);

    /* Reset the UniPro link. */
    unipro_reset();

    g_svc.linkup_poll_tid = svc_set_timer(&svc_unipro_link_timeout_handler,
                                          SVC_LINKUP_POLL_INTERVAL);
    if (g_svc.linkup_poll_tid == SVC_TIMER_INVALID) {
        /* TODO: handle error case */
        dbg("ERROR: invalid link timer\n");
    }

    /* Start up a timer for overall Mod detection */
    g_svc.mod_detect_tid = svc_set_timer(&svc_mod_detect_timeout_handler,
                                         SVC_MOD_DETECT_TIMEOUT);
    if (g_svc.mod_detect_tid == SVC_TIMER_INVALID) {
        /* TODO: handle error case */
        dbg("ERROR: invalid mod timer\n");
    }

    return SVC_WAIT_FOR_UNIPRO;
}
Пример #20
0
static int chat_expect(FAR struct chat* priv, FAR const char* s)
{
    char c;
    struct timespec abstime;
    struct timespec endtime;
    int timeout_ms;
    int s_len = strlen(s);
    int i_match = 0; /* index of the next character to be matched in s */
    int ret = 0;

    /* Get initial time and set the end time */

    clock_gettime(CLOCK_REALTIME, (FAR struct timespec*) &abstime);
    endtime.tv_sec  = abstime.tv_sec + priv->ctl.timeout;
    endtime.tv_nsec = abstime.tv_nsec;

    while (!ret && i_match < s_len &&
            (abstime.tv_sec < endtime.tv_sec ||
             (abstime.tv_sec == endtime.tv_sec &&
              abstime.tv_nsec < endtime.tv_nsec)))
    {
        timeout_ms =
            (endtime.tv_sec - abstime.tv_sec) * 1000 +
            (endtime.tv_nsec - abstime.tv_nsec) / 1000000;

        DEBUGASSERT(timeout_ms >= 0);

        ret = chat_readb(priv, &c, timeout_ms);
        if (!ret)
        {
            if (c == s[i_match])
            {
                /* Continue matching the next character */

                i_match++;
            }
            else
            {
                /* Match failed; start anew */

                i_match = 0;
            }

            /* Update current time */

            clock_gettime(CLOCK_REALTIME, (FAR struct timespec*) &abstime);
        }
    }

    vdbg("result %d\n", ret);
    return ret;
}
Пример #21
0
static enum svc_state svc_wf_mod__mod_timeout(struct svc *svc, struct svc_work *work) {
    vdbg("\n");

    svc_timer_t tid = (svc_timer_t)work->parameter0;

    if (handle_mod_retry(tid)) {
        vdbg("retry\n");

        /* APBE will be reset && local unipro block is restarted.
           Need to wait for unipro link up again */
        g_svc.linkup_poll_tid = svc_set_timer(&svc_unipro_link_timeout_handler,
                                              SVC_LINKUP_POLL_INTERVAL);
        if (g_svc.linkup_poll_tid == SVC_TIMER_INVALID) {
            /* TODO: handle error case */
            dbg("ERROR: invalid link timer\n");
        }
        return SVC_WAIT_FOR_UNIPRO;
    }

    /* giving up */
    return SVC_DISCONNECTED;
}
Пример #22
0
static enum svc_state svc__send_stats(struct svc *svc, struct svc_work *work) {
    vdbg("\n");

    if (g_svc.stats_tid != SVC_TIMER_INVALID) {
        svc_delete_timer(g_svc.stats_tid);
        g_svc.stats_tid = SVC_TIMER_INVALID;
    }

    mhb_send_unipro_stats_not();
    g_svc.stats_pending = false;

    return g_svc.state;
}
Пример #23
0
int nsh_archinitialize(void)
{
#ifdef NSH_HAVEMMCSD
  int ret;

  /* Card detect */
  bool cd_status;

  /* Configure the card detect GPIO */

  stm32_configgpio(GPIO_SD_CD);

  /* Register an interrupt handler for the card detect pin */

  stm32_gpiosetevent(GPIO_SD_CD, true, true, true, nsh_cdinterrupt);

  /* Mount the SDIO-based MMC/SD block driver */

  /* First, get an instance of the SDIO interface */

  message("nsh_archinitialize: Initializing SDIO slot %d\n",
          CONFIG_NSH_MMCSDSLOTNO);
  g_sdiodev = sdio_initialize(CONFIG_NSH_MMCSDSLOTNO);
  if (!g_sdiodev)
    {
      message("nsh_archinitialize: Failed to initialize SDIO slot %d\n",
              CONFIG_NSH_MMCSDSLOTNO);
      return -ENODEV;
    }

  /* Now bind the SDIO interface to the MMC/SD driver */

  message("nsh_archinitialize: Bind SDIO to the MMC/SD driver, minor=%d\n",
          CONFIG_NSH_MMCSDMINOR);
  ret = mmcsd_slotinitialize(CONFIG_NSH_MMCSDMINOR, g_sdiodev);
  if (ret != OK)
    {
      message("nsh_archinitialize: Failed to bind SDIO to the MMC/SD driver: %d\n", ret);
      return ret;
    }
  dbg("nsh_archinitialize: Successfully bound SDIO to the MMC/SD driver\n");

  /* Use SD card detect pin to check if a card is inserted */

  cd_status = !stm32_gpioread(GPIO_SD_CD);
  vdbg("Card detect : %hhu\n", cd_status);

  sdio_mediachange(g_sdiodev, cd_status);
#endif
  return OK;
}
Пример #24
0
static void svc_handle_event(struct svc *svc, struct svc_work *work) {
    if (!svc || !work) {
        return;
    }

    const enum svc_event event = work->event;

    if (!svc_event_valid(event)) {
        lldbg("ERROR: invalid event, %d\n", event);
        return;
    }

    enum svc_state state = svc->state;
    if (!svc_state_valid(state)) {
        lldbg("ERROR: invalid state, %d\n", state);
        return;
    }

    vdbg("state: %s (%d), event: %s (%d)\n",
         svc_state_to_string(state), state,
         svc_event_to_string(event), event);

    const svc_event_handler handler = SVC_STATES[state][event];
    if (!handler) {
        lldbg("state: %s (%d), event: %s (%d)\n",
            svc_state_to_string(state), state,
            svc_event_to_string(event), event);
        return;
    }

    const enum svc_state new_state = handler(svc, work);
    if (new_state == state) {
        lldbg("state: %s (%d), event: %s (%d)\n",
            svc_state_to_string(state), state,
            svc_event_to_string(event), event);
    } else {
        if (!svc_state_valid(new_state)) {
            lldbg("ERROR: handler, %p, returned an invalid state, %d\n",
                handler, new_state);
            return;
        }

        lldbg("state: %s (%d), event: %s (%d), new state: %s (%d)\n",
            svc_state_to_string(state), state,
            svc_event_to_string(event), event,
            svc_state_to_string(new_state), new_state);

        svc->state = new_state;
    }
}
Пример #25
0
/* Helpers */
static void _svc_bitmask_to_stats(uint32_t *counter, uint32_t value)
{
    vdbg("%p %d\n", counter, value);

    bool delta = false;

    while (value) {
        if (value & 0x1) {
            (*counter)++;
            delta = true;
        }

        value >>= 1;
        counter++;
    }

    if (delta && !g_svc.stats_pending) {
        svc_send_event(SVC_EVENT_QUEUE_STATS, 0, 0, 0);
        g_svc.stats_pending = true;
    } else {
        vdbg("stats pending\n");
    }
}
Пример #26
0
static enum svc_state svc_wf_cports__connected(struct svc *svc, struct svc_work *work) {
    vdbg("\n");

    unsigned int cport = (unsigned int)work->parameter0;
    if (cport != CONFIG_MHB_IPC_CPORT_ID) {
        return g_svc.state;
    }

#if CONFIG_RAMLOG_SYSLOG
    mhb_ramlog_enable();
#endif

    mhb_send_pm_status_not(MHB_PM_STATUS_PEER_CONNECTED);
    mhb_send_id_not();
    return SVC_SLAVE_CONNECTED;
}
Пример #27
0
static void chat_tokens_free(FAR struct chat_token* first_tok)
{
    FAR struct chat_token* next_tok;

    while (first_tok)
    {
        next_tok = first_tok->next;

        DEBUGASSERT(first_tok->string != NULL);
        free(first_tok->string);
        free(first_tok);
        first_tok = next_tok;
    }

    vdbg("tokens freed\n");
}
Пример #28
0
int svc_init(void) {
    vdbg("\n");

    g_svc.state = SVC_WAIT_FOR_AP;
    g_svc.mod_detect_tid = SVC_TIMER_INVALID;
    g_svc.linkup_poll_tid = SVC_TIMER_INVALID;
    g_svc.mod_detect_retry = 0;

#if CONFIG_MODS_MHB_SERVER_GEARBOX
    g_svc.gearbox = gearbox_initialize();
#endif

    mhb_uart_init();
    mhb_unipro_init(g_svc.gearbox);

    return 0;
}
Пример #29
0
static void svc_work_callback(FAR void *arg) {
    struct svc_work *svc_work = (struct svc_work *)arg;
    if (!svc_work) {
        lldbg("ERROR: invalid work\n");
        return;
    }

    vdbg("event: %s (%d), %p %p %p\n",
         svc_event_to_string(svc_work->event), svc_work->event,
         svc_work->parameter0,
         svc_work->parameter1,
         svc_work->parameter2);

    svc_handle_event(svc_work->svc, svc_work);

    kmm_free(svc_work);
}
Пример #30
0
static int chat_send(FAR struct chat* priv, FAR const char* s)
{
    int ret = 0;
    int len = strlen(s);

    /* 'write' returns the number of successfully written characters */

    ret = write(priv->ctl.fd, s, len);
    vdbg("wrote %d out of %d bytes of \'%s\'\n", ret, len, s);
    if (ret > 0)
    {
        /* Just SUCCESS */

        ret = 0;
    }

    return ret;
}