void up_initialize(void) { /* The real purpose of the following is to make sure that syslog * is drawn into the link. It is needed by up_tapdev which is linked * separately. */ #ifdef CONFIG_NET syslog(LOG_INFO, "SIM: Initializing"); #endif #if CONFIG_NFILE_DESCRIPTORS > 0 /* Register devices */ #if defined(CONFIG_DEV_NULL) devnull_register(); /* Standard /dev/null */ #endif #if defined(CONFIG_DEV_ZERO) devzero_register(); /* Standard /dev/zero */ #endif #endif /* CONFIG_NFILE_DESCRIPTORS */ #if defined(USE_DEVCONSOLE) /* Start the sumulated UART device */ simuart_start(); /* Register a console (or not) */ up_devconsole(); /* Our private /dev/console */ #elif defined(CONFIG_SYSLOG_CONSOLE) syslog_console_init(); #elif defined(CONFIG_RAMLOG_CONSOLE) ramlog_consoleinit(); #endif #ifdef CONFIG_SYSLOG_CHAR syslog_initialize(); #endif #ifdef CONFIG_RAMLOG_SYSLOG ramlog_sysloginit(); /* System logging device */ #endif #if defined(CONFIG_FS_FAT) && !defined(CONFIG_DISABLE_MOUNTPOINT) up_registerblockdevice(); /* Our FAT ramdisk at /dev/ram0 */ #endif #ifdef CONFIG_NET_ETHERNET netdriver_init(); /* Our "real" network driver */ #endif #if defined(CONFIG_FS_SMARTFS) && defined(CONFIG_SIM_SPIFLASH) up_init_smartfs(); #endif }
void up_initialize(void) { /* The real purpose of the following is to make sure that syslog * is drawn into the link. It is needed by up_tapdev which is linked * separately. */ #ifdef CONFIG_NET syslog("SIM: Initializing"); #endif /* Register devices */ devnull_register(); /* Standard /dev/null */ devzero_register(); /* Standard /dev/zero */ /* Register a console (or not) */ #if defined(USE_DEVCONSOLE) up_devconsole(); /* Our private /dev/console */ #elif defined(CONFIG_RAMLOG_CONSOLE) ramlog_consoleinit(); #endif #ifdef CONFIG_SYSLOG_CHAR syslog_initialize(); #endif #ifdef CONFIG_RAMLOG_SYSLOG ramlog_sysloginit(); /* System logging device */ #endif #if defined(CONFIG_FS_FAT) && !defined(CONFIG_DISABLE_MOUNTPOINT) up_registerblockdevice(); /* Our FAT ramdisk at /dev/ram0 */ #endif #ifdef CONFIG_NET uipdriver_init(); /* Our "real" network driver */ #endif }
void up_initialize(void) { /* Initialize global variables */ current_regs = NULL; /* Calibrate the timing loop */ up_calibratedelay(); /* Add any extra memory fragments to the memory manager */ up_addregion(); /* Initialize the interrupt subsystem */ up_irqinitialize(); /* Initialize the DMA subsystem if the weak function stm32_dmainitialize has been * brought into the build */ #ifdef CONFIG_ARCH_DMA #ifdef CONFIG_HAVE_WEAKFUNCTIONS if (up_dmainitialize) #endif { up_dmainitialize(); } #endif /* Initialize the system timer interrupt */ #if !defined(CONFIG_SUPPRESS_INTERRUPTS) && !defined(CONFIG_SUPPRESS_TIMER_INTS) up_timer_initialize(); #endif /* Register devices */ #if CONFIG_NFILE_DESCRIPTORS > 0 #if defined(CONFIG_DEV_NULL) devnull_register(); /* Standard /dev/null */ #endif #if defined(CONFIG_DEV_ZERO) devzero_register(); /* Standard /dev/zero */ #endif #endif /* CONFIG_NFILE_DESCRIPTORS */ /* Initialize the serial device driver */ #ifdef USE_SERIALDRIVER up_serialinit(); #endif /* Initialize the console device driver (if it is other than the standard * serial driver). */ #if defined(CONFIG_DEV_LOWCONSOLE) lowconsole_init(); #elif defined(CONFIG_SYSLOG_CONSOLE) syslog_console_init(); #elif defined(CONFIG_RAMLOG_CONSOLE) ramlog_consoleinit(); #endif /* Initialize the system logging device */ #ifdef CONFIG_SYSLOG_CHAR syslog_initialize(); #endif #ifdef CONFIG_RAMLOG_SYSLOG ramlog_sysloginit(); #endif #ifndef CONFIG_NETDEV_LATEINIT /* Initialize the network */ up_netinitialize(); #endif #ifdef CONFIG_NETDEV_LOOPBACK /* Initialize the local loopback device */ (void)localhost_initialize(); #endif #ifdef CONFIG_NET_TUN /* Initialize the TUN device */ (void)tun_initialize(); #endif /* Initialize USB -- device and/or host */ up_usbinitialize(); board_led_on(LED_IRQSENABLED); }
void up_initialize(void) { #ifdef CONFIG_SMP int i; /* Initialize global variables */ for (i = 0; i < CONFIG_SMP_NCPUS; i++) { g_current_regs[i] = NULL; } #else CURRENT_REGS = NULL; #endif /* Add any extra memory fragments to the memory manager */ xtensa_add_region(); /* Initialize the interrupt subsystem */ xtensa_irq_initialize(); #ifdef CONFIG_PM /* Initialize the power management subsystem. This MCU-specific function * must be called *very* early in the initialization sequence *before* any * other device drivers are initialized (since they may attempt to register * with the power management subsystem). */ up_pminitialize(); #endif #ifdef CONFIG_ARCH_DMA /* Initialize the DMA subsystem if the weak function xtensa_dma_initialize * has been brought into the build */ #ifdef CONFIG_HAVE_WEAKFUNCTIONS if (xtensa_dma_initialize) #endif { xtensa_dma_initialize(); } #endif #if !defined(CONFIG_SUPPRESS_INTERRUPTS) && !defined(CONFIG_SUPPRESS_TIMER_INTS) /* Initialize the system timer interrupt */ xtensa_timer_initialize(); #endif #ifdef CONFIG_MM_IOB /* Initialize IO buffering */ iob_initialize(); #endif #if CONFIG_NFILE_DESCRIPTORS > 0 /* Register devices */ #if defined(CONFIG_DEV_NULL) devnull_register(); /* Standard /dev/null */ #endif #if defined(CONFIG_DEV_RANDOM) devrandom_register(); /* Standard /dev/random */ #endif #if defined(CONFIG_DEV_URANDOM) devurandom_register(); /* Standard /dev/urandom */ #endif #if defined(CONFIG_DEV_ZERO) devzero_register(); /* Standard /dev/zero */ #endif #if defined(CONFIG_DEV_LOOP) loop_register(); /* Standard /dev/loop */ #endif #endif /* CONFIG_NFILE_DESCRIPTORS */ #if defined(CONFIG_SCHED_INSTRUMENTATION_BUFFER) && \ defined(CONFIG_DRIVER_NOTE) note_register(); /* Non-standard /dev/note */ #endif /* Initialize the serial device driver */ #ifdef USE_SERIALDRIVER xtensa_serial_initialize(); #endif /* Initialize the console device driver (if it is other than the standard * serial driver). */ #if defined(CONFIG_DEV_LOWCONSOLE) lowconsole_init(); #elif defined(CONFIG_CONSOLE_SYSLOG) syslog_console_init(); #elif defined(CONFIG_RAMLOG_CONSOLE) ramlog_consoleinit(); #endif #if CONFIG_NFILE_DESCRIPTORS > 0 && defined(CONFIG_PSEUDOTERM_SUSV1) /* Register the master pseudo-terminal multiplexor device */ (void)ptmx_register(); #endif /* Early initialization of the system logging device. Some SYSLOG channel * can be initialized early in the initialization sequence because they * depend on only minimal OS initialization. */ syslog_initialize(SYSLOG_INIT_EARLY); #if defined(CONFIG_CRYPTO) /* Initialize the HW crypto and /dev/crypto */ up_cryptoinitialize(); #endif #if CONFIG_NFILE_DESCRIPTORS > 0 && defined(CONFIG_CRYPTO_CRYPTODEV) devcrypto_register(); #endif #ifndef CONFIG_NETDEV_LATEINIT /* Initialize the network */ up_netinitialize(); #endif #ifdef CONFIG_NETDEV_LOOPBACK /* Initialize the local loopback device */ (void)localhost_initialize(); #endif #ifdef CONFIG_NET_TUN /* Initialize the TUN device */ (void)tun_initialize(); #endif #ifdef CONFIG_NETDEV_TELNET /* Initialize the Telnet session factory */ (void)telnet_initialize(); #endif /* Initialize USB -- device and/or host */ up_usbinitialize(); board_autoled_on(LED_IRQSENABLED); }
void up_initialize(void) { /* Colorize the interrupt stack */ up_color_intstack(); /* Add any extra memory fragments to the memory manager */ up_addregion(); /* Initialize the interrupt subsystem */ up_irqinitialize(); /* Initialize the system timer interrupt */ #if !defined(CONFIG_SUPPRESS_INTERRUPTS) && !defined(CONFIG_SUPPRESS_TIMER_INTS) && \ !defined(CONFIG_SYSTEMTICK_EXTCLK) riscv_timer_initialize(); #endif #ifdef CONFIG_MM_IOB /* Initialize IO buffering */ iob_initialize(); #endif #if CONFIG_NFILE_DESCRIPTORS > 0 /* Register devices */ #if defined(CONFIG_DEV_NULL) devnull_register(); /* Standard /dev/null */ #endif #if defined(CONFIG_DEV_ZERO) devzero_register(); /* Standard /dev/zero */ #endif #endif /* CONFIG_NFILE_DESCRIPTORS */ /* Initialize the serial device driver */ #ifdef USE_SERIALDRIVER up_serialinit(); #endif /* Initialize the console device driver (if it is other than the standard * serial driver). */ #if defined(CONFIG_DEV_LOWCONSOLE) lowconsole_init(); #elif defined(CONFIG_SYSLOG_CONSOLE) syslog_console_init(); #elif defined(CONFIG_RAMLOG_CONSOLE) ramlog_consoleinit(); #endif #if CONFIG_NFILE_DESCRIPTORS > 0 && defined(CONFIG_PSEUDOTERM_SUSV1) /* Register the master pseudo-terminal multiplexor device */ (void)ptmx_register(); #endif /* Early initialization of the system logging device. Some SYSLOG channel * can be initialized early in the initialization sequence because they * depend on only minimal OS initialization. */ syslog_initialize(SYSLOG_INIT_EARLY); #ifdef CONFIG_RAMLOG_SYSLOG ramlog_sysloginit(); #endif board_autoled_on(LED_IRQSENABLED); }
void up_initialize(void) { /* Initialize global variables */ current_regs = NULL; /* Calibrate the timing loop */ up_calibratedelay(); /* Colorize the interrupt stack */ up_color_intstack(); /* Add any extra memory fragments to the memory manager */ up_addregion(); /* Initialize the interrupt subsystem */ up_irqinitialize(); /* Initialize the power management subsystem. This MCU-specific function * must be called *very* early in the initialization sequence *before* any * other device drivers are initialized (since they may attempt to register * with the power management subsystem). */ #ifdef CONFIG_PM up_pminitialize(); #endif /* Initialize the DMA subsystem if the weak function up_dmainitialize has been * brought into the build */ #ifdef CONFIG_ARCH_DMA #ifdef CONFIG_HAVE_WEAKFUNCTIONS if (up_dmainitialize) #endif { up_dmainitialize(); } #endif /* Initialize the system timer interrupt */ #if !defined(CONFIG_SUPPRESS_INTERRUPTS) && !defined(CONFIG_SUPPRESS_TIMER_INTS) && \ !defined(CONFIG_SYSTEMTICK_EXTCLK) up_timer_initialize(); #endif /* Register devices */ #if CONFIG_NFILE_DESCRIPTORS > 0 #if defined(CONFIG_DEV_NULL) devnull_register(); /* Standard /dev/null */ #endif #if defined(CONFIG_CRYPTO) up_cryptoinitialize(); #endif #if defined(CONFIG_CRYPTO_CRYPTODEV) devcrypto_register(); /* /dev/crypto */ #endif #if defined(CONFIG_DEV_ZERO) devzero_register(); /* Standard /dev/zero */ #endif #endif /* CONFIG_NFILE_DESCRIPTORS */ /* Initialize the serial device driver */ #ifdef USE_SERIALDRIVER up_serialinit(); #endif /* Initialize the console device driver (if it is other than the standard * serial driver). */ #if defined(CONFIG_DEV_LOWCONSOLE) lowconsole_init(); #elif defined(CONFIG_RAMLOG_CONSOLE) ramlog_consoleinit(); #elif defined(CONFIG_ARM_SEMIHOSTING_CONSOLE) semihosting_consoleinit(); #elif defined(CONFIG_ARM_ITM_CONSOLE) itm_consoleinit(); #elif defined(CONFIG_APB_USB_LOG) usb_log_init(); #endif /* Initialize the Random Number Generator (RNG) */ #ifdef CONFIG_DEV_RANDOM up_rnginitialize(); #endif /* Initialize the system logging device */ #ifdef CONFIG_SYSLOG_CHAR syslog_initialize(); #endif #ifdef CONFIG_RAMLOG_SYSLOG ramlog_sysloginit(); #endif /* Initialize the network */ up_netinitialize(); /* Initialize USB -- device and/or host */ up_usbinitialize(); /* Initialize the L2 cache if present and selected */ up_l2ccinitialize(); board_led_on(LED_IRQSENABLED); }
void up_initialize(void) { /* Initialize global variables */ current_regs = NULL; /* Calibrate the timing loop */ up_calibratedelay(); /* Initialize the interrupt subsystem */ up_irqinitialize(); /* Initialize the system timer interrupt */ #if !defined(CONFIG_SUPPRESS_INTERRUPTS) && !defined(CONFIG_SUPPRESS_TIMER_INTS) up_timer_initialize(); #endif /* Register devices */ #if CONFIG_NFILE_DESCRIPTORS > 0 #if defined(CONFIG_DEV_NULL) devnull_register(); /* Standard /dev/null */ #endif #if defined(CONFIG_DEV_ZERO) devzero_register(); /* Standard /dev/zero */ #endif #endif /* CONFIG_NFILE_DESCRIPTORS */ /* Initialize the serial device driver */ #ifdef USE_SERIALDRIVER up_serialinit(); #endif /* Initialize the console device driver (if it is other than the standard * serial driver). NOTE that the naming implies that the console is a serial * driver. That is usually the case, however, if no UARTs are enabled, the * console could als be provided through some other device, such as an LCD. * Architecture-specific logic will have to detect that case. */ #if defined(CONFIG_DEV_LOWCONSOLE) lowconsole_init(); #elif defined(CONFIG_SYSLOG_CONSOLE) syslog_console_init(); #elif defined(CONFIG_RAMLOG_CONSOLE) ramlog_consoleinit(); #endif /* Initialize the system logging device */ #ifdef CONFIG_SYSLOG_CHAR syslog_initialize(); #endif #ifdef CONFIG_RAMLOG_SYSLOG ramlog_sysloginit(); #endif #ifndef CONFIG_NETDEV_LATEINIT /* Initialize the network */ up_netinitialize(); #endif #ifdef CONFIG_NETDEV_LOOPBACK /* Initialize the local loopback device */ (void)localhost_initialize(); #endif #ifdef CONFIG_NET_TUN /* Initialize the TUN device */ (void)tun_initialize(); #endif /* Initialize USB */ up_usbinitialize(); board_led_on(LED_IRQSENABLED); }
void up_initialize(void) { /* Initialize global variables */ g_current_regs = NULL; /* Calibrate the timing loop */ up_calibratedelay(); /* Initialize the interrupt subsystem */ up_irqinitialize(); #ifdef CONFIG_PM /* Initialize the power management subsystem. This MCU-specific function * must be called *very* early in the initialization sequence *before* any * other device drivers are initialized (since they may attempt to register * with the power management subsystem). */ up_pminitialize(); #endif #if !defined(CONFIG_SUPPRESS_INTERRUPTS) && !defined(CONFIG_SUPPRESS_TIMER_INTS) /* Initialize the system timer interrupt */ up_timer_initialize(); #endif /* Register devices */ #if CONFIG_NFILE_DESCRIPTORS > 0 #if defined(CONFIG_DEV_NULL) devnull_register(); /* Standard /dev/null */ #endif #if defined(CONFIG_DEV_RANDOM) devrandom_register(); /* Standard /dev/random */ #endif #if defined(CONFIG_DEV_URANDOM) devurandom_register(); /* Standard /dev/urandom */ #endif #if defined(CONFIG_DEV_ZERO) devzero_register(); /* Standard /dev/zero */ #endif #if defined(CONFIG_DEV_LOOP) loop_register(); /* Standard /dev/loop */ #endif #endif /* CONFIG_NFILE_DESCRIPTORS */ #if defined(CONFIG_SCHED_INSTRUMENTATION_BUFFER) && \ defined(CONFIG_DRIVER_NOTE) note_register(); /* Non-standard /dev/note */ #endif /* Initialize the serial device driver */ #ifdef USE_SERIALDRIVER up_serialinit(); #endif /* Initialize the console device driver (if it is other than the standard * serial driver). NOTE that the naming implies that the console is a serial * driver. That is usually the case, however, if no UARTs are enabled, the * console could als be provided through some other device, such as an LCD. * Architecture-specific logic will have to detect that case. */ #if defined(CONFIG_DEV_LOWCONSOLE) lowconsole_init(); #elif defined(CONFIG_CONSOLE_SYSLOG) syslog_console_init(); #elif defined(CONFIG_RAMLOG_CONSOLE) ramlog_consoleinit(); #endif #if CONFIG_NFILE_DESCRIPTORS > 0 && defined(CONFIG_PSEUDOTERM_SUSV1) /* Register the master pseudo-terminal multiplexor device */ (void)ptmx_register(); #endif /* Early initialization of the system logging device. Some SYSLOG channel * can be initialized early in the initialization sequence because they * depend on only minimal OS initialization. */ syslog_initialize(SYSLOG_INIT_EARLY); #if defined(CONFIG_CRYPTO) /* Initialize the HW crypto and /dev/crypto */ up_cryptoinitialize(); #endif #if CONFIG_NFILE_DESCRIPTORS > 0 && defined(CONFIG_CRYPTO_CRYPTODEV) devcrypto_register(); #endif #ifndef CONFIG_NETDEV_LATEINIT /* Initialize the network */ up_netinitialize(); #endif #ifdef CONFIG_NETDEV_LOOPBACK /* Initialize the local loopback device */ (void)localhost_initialize(); #endif #ifdef CONFIG_NET_TUN /* Initialize the TUN device */ (void)tun_initialize(); #endif #ifdef CONFIG_NETDEV_TELNET /* Initialize the Telnet session factory */ (void)telnet_initialize(); #endif /* Initialize USB */ up_usbinitialize(); board_autoled_on(LED_IRQSENABLED); }
void up_initialize(void) { #ifdef CONFIG_NET /* The real purpose of the following is to make sure that syslog * is drawn into the link. It is needed by up_tapdev which is linked * separately. */ syslog(LOG_INFO, "SIM: Initializing\n"); #endif #ifdef CONFIG_PM /* Initialize the power management subsystem. This MCU-specific function * must be called *very* early in the initialization sequence *before* any * other device drivers are initialized (since they may attempt to register * with the power management subsystem). */ up_pminitialize(); #endif #ifdef CONFIG_MM_IOB /* Initialize IO buffering */ iob_initialize(); #endif #if CONFIG_NFILE_DESCRIPTORS > 0 /* Register devices */ #if defined(CONFIG_DEV_NULL) devnull_register(); /* Standard /dev/null */ #endif #if defined(CONFIG_DEV_RANDOM) devrandom_register(); /* Standard /dev/random */ #endif #if defined(CONFIG_DEV_URANDOM) devurandom_register(); /* Standard /dev/urandom */ #endif #if defined(CONFIG_DEV_ZERO) devzero_register(); /* Standard /dev/zero */ #endif #if defined(CONFIG_DEV_LOOP) loop_register(); /* Standard /dev/loop */ #endif #endif /* CONFIG_NFILE_DESCRIPTORS */ #if defined(CONFIG_SCHED_INSTRUMENTATION_BUFFER) && \ defined(CONFIG_DRIVER_NOTE) note_register(); /* Non-standard /dev/note */ #endif #if defined(USE_DEVCONSOLE) /* Start the sumulated UART device */ simuart_start(); /* Register a console (or not) */ up_devconsole(); /* Our private /dev/console */ #elif defined(CONFIG_CONSOLE_SYSLOG) syslog_console_init(); #elif defined(CONFIG_RAMLOG_CONSOLE) ramlog_consoleinit(); #endif #if CONFIG_NFILE_DESCRIPTORS > 0 && defined(CONFIG_PSEUDOTERM_SUSV1) /* Register the master pseudo-terminal multiplexor device */ (void)ptmx_register(); #endif /* Early initialization of the system logging device. Some SYSLOG channel * can be initialized early in the initialization sequence because they * depend on only minimal OS initialization. */ syslog_initialize(SYSLOG_INIT_EARLY); #if defined(CONFIG_CRYPTO) /* Initialize the HW crypto and /dev/crypto */ up_cryptoinitialize(); #endif #if CONFIG_NFILE_DESCRIPTORS > 0 && defined(CONFIG_CRYPTO_CRYPTODEV) devcrypto_register(); #endif #if defined(CONFIG_FS_FAT) && !defined(CONFIG_DISABLE_MOUNTPOINT) up_registerblockdevice(); /* Our FAT ramdisk at /dev/ram0 */ #endif #if defined(CONFIG_NET_ETHERNET) && defined(CONFIG_SIM_NETDEV) netdriver_init(); /* Our "real" network driver */ #endif #ifdef CONFIG_NETDEV_LOOPBACK /* Initialize the local loopback device */ (void)localhost_initialize(); #endif #ifdef CONFIG_NET_TUN /* Initialize the TUN device */ (void)tun_initialize(); #endif #ifdef CONFIG_NETDEV_TELNET /* Initialize the Telnet session factory */ (void)telnet_initialize(); #endif #if defined(CONFIG_FS_SMARTFS) && (defined(CONFIG_SIM_SPIFLASH) || defined(CONFIG_SIM_QSPIFLASH)) up_init_smartfs(); #endif }
void up_initialize(void) { /* Initialize global variables */ current_regs = NULL; /* Calibrate the timing loop */ up_calibratedelay(); /* Add any extra memory fragments to the memory manager */ #if CONFIG_MM_REGIONS > 1 up_addregion(); #endif /* Initialize the interrupt subsystem */ up_irqinitialize(); /* Initialize the system timer interrupt */ #if !defined(CONFIG_SUPPRESS_INTERRUPTS) && !defined(CONFIG_SUPPRESS_TIMER_INTS) up_timerinit(); #endif /* Register devices */ #if CONFIG_NFILE_DESCRIPTORS > 0 #if defined(CONFIG_DEV_NULL) devnull_register(); /* Standard /dev/null */ #endif #if defined(CONFIG_DEV_ZERO) devzero_register(); /* Standard /dev/zero */ #endif #endif /* CONFIG_NFILE_DESCRIPTORS */ /* Initialize the serial device driver */ #ifdef USE_SERIALDRIVER up_serialinit(); #endif /* Initialize the console device driver (if it is other than the standard * serial driver). */ #if defined(CONFIG_DEV_LOWCONSOLE) lowconsole_init(); #elif defined(CONFIG_RAMLOG_CONSOLE) ramlog_consoleinit(); #endif /* Initialize the system logging device */ #ifdef CONFIG_SYSLOG_CHAR syslog_initialize(); #endif #ifdef CONFIG_RAMLOG_SYSLOG ramlog_sysloginit(); #endif /* Initialize the network */ up_netinitialize(); board_led_on(LED_IRQSENABLED); }
int syslog_putc(int ch) { ssize_t nbytes; uint8_t uch; int errcode; int ret; /* Ignore any output: * * (1) Before the SYSLOG device has been initialized. This could happen * from debug output that occurs early in the boot sequence before * syslog_initialize() is called (SYSLOG_UNINITIALIZED). * (2) While the device is being initialized. The case could happen if * debug output is generated while syslog_initialize() executes * (SYSLOG_INITIALIZING). * (3) While we are generating SYSLOG output. The case could happen if * debug output is generated while syslog_putc() executes * (This case is actually handled inside of syslog_semtake()). * (4) Any debug output generated from interrupt handlers. A disadvantage * of using the generic character device for the SYSLOG is that it * cannot handle debug output generated from interrupt level handlers. * (5) Any debug output generated from the IDLE loop. The character * driver interface is blocking and the IDLE thread is not permitted * to block. * (6) If an irrecoverable failure occurred during initialization. In * this case, we won't ever bother to try again (ever). * * NOTE: That the third case is different. It applies only to the thread * that currently holds the sl_sem sempaphore. Other threads should wait. * that is why that case is handled in syslog_semtake(). */ /* Cases (4) and (5) */ if (up_interrupt_context() || getpid() == 0) { errcode = ENOSYS; goto errout_with_errcode; } /* We can save checks in the usual case: That after the SYSLOG device * has been successfully opened. */ if (g_sysdev.sl_state != SYSLOG_OPENED) { /* Case (1) and (2) */ if (g_sysdev.sl_state == SYSLOG_UNINITIALIZED || g_sysdev.sl_state == SYSLOG_INITIALIZING) { errcode = EAGAIN; /* Can't access the SYSLOG now... maybe next time? */ goto errout_with_errcode; } /* Case (6) */ if (g_sysdev.sl_state == SYSLOG_FAILURE) { errcode = ENXIO; /* There is no SYSLOG device */ goto errout_with_errcode; } /* syslog_initialize() is called as soon as enough of the operating * system is in place to support the open operation... but it is * possible that the SYSLOG device is not yet registered at that time. * In this case, we know that the system is sufficiently initialized * to support an attempt to re-open the SYSLOG device. * * NOTE that the scheduler is locked. That is because we do not have * fully initialized semaphore capability until the SYSLOG device is * successfully initialized */ sched_lock(); if (g_sysdev.sl_state == SYSLOG_REOPEN) { /* Try again to initialize the device. We may do this repeatedly * because the log device might be something that was not ready * the first time that syslog_initializee() was called (such as a * USB serial device that has not yet been connected or a file in * an NFS mounted file system that has not yet been mounted). */ ret = syslog_initialize(); if (ret < 0) { sched_unlock(); errcode = -ret; goto errout_with_errcode; } } sched_unlock(); DEBUGASSERT(g_sysdev.sl_state == SYSLOG_OPENED); } /* Ignore carriage returns */ if (ch == '\r') { return ch; } /* The syslog device is ready for writing and we have something of * value to write. */ ret = syslog_takesem(); if (ret < 0) { /* We probably already hold the semaphore and were probably * re-entered by the logic kicked off by syslog_write(). * We might also have been interrupted by a signal. Either * way, we are outta here. */ errcode = -ret; goto errout_with_errcode; } /* Pre-pend a newline with a carriage return. */ if (ch == '\n') { /* Write the CR-LF sequence */ nbytes = syslog_write(g_syscrlf, 2); /* Synchronize the file when each CR-LF is encountered (i.e., * implements line buffering always). */ #ifndef CONFIG_DISABLE_MOUNTPOINT if (nbytes > 0) { syslog_flush(); } #endif } else { /* Write the non-newline character (and don't flush) */ uch = (uint8_t)ch; nbytes = syslog_write(&uch, 1); } syslog_givesem(); /* Check if the write was successful. If not, nbytes will be * a negated errno value. */ if (nbytes < 0) { errcode = -ret; goto errout_with_errcode; } return ch; errout_with_errcode: set_errno(errcode); return EOF; }
void up_initialize(void) { /* Initialize global variables */ INIT_IRQCONTEXT(); /* Calibrate the timing loop */ up_calibratedelay(); #if CONFIG_MM_REGIONS > 1 /* Add any extra memory fragments to the memory manager */ up_addregion(); #endif /* Initialize the interrupt subsystem */ up_irqinitialize(); #ifdef CONFIG_PM /* Initialize the power management subsystem. This MCU-specific function * must be called *very* early in the initialization sequence *before* any * other device drivers are initialized (since they may attempt to register * with the power management subsystem). */ up_pminitialize(); #endif #if !defined(CONFIG_SUPPRESS_INTERRUPTS) && !defined(CONFIG_SUPPRESS_TIMER_INTS) /* Initialize the system timer interrupt */ z80_timer_initialize(); #endif /* Initialize the CPU for those that use it (only for the Z180). This * needs to be done before any tasks are created). */ #ifdef CONFIG_ARCH_ADDRENV (void)up_mmuinit(); #endif #ifdef CONFIG_MM_IOB /* Initialize IO buffering */ iob_initialize(); #endif #if CONFIG_NFILE_DESCRIPTORS > 0 /* Register devices */ #if defined(CONFIG_DEV_NULL) devnull_register(); /* Standard /dev/null */ #endif #if defined(CONFIG_DEV_RANDOM) devrandom_register(); /* Standard /dev/random */ #endif #if defined(CONFIG_DEV_URANDOM) devurandom_register(); /* Standard /dev/urandom */ #endif #if defined(CONFIG_DEV_ZERO) devzero_register(); /* Standard /dev/zero */ #endif #if defined(CONFIG_DEV_LOOP) loop_register(); /* Standard /dev/loop */ #endif #endif /* CONFIG_NFILE_DESCRIPTORS */ #if defined(CONFIG_SCHED_INSTRUMENTATION_BUFFER) && \ defined(CONFIG_DRIVER_NOTE) note_register(); /* Non-standard /dev/note */ #endif /* Initialize the serial device driver */ #ifdef USE_SERIALDRIVER up_serialinit(); #endif /* Initialize the console device driver (if it is other than the standard * serial driver). */ #if defined(CONFIG_DEV_LOWCONSOLE) lowconsole_init(); #elif defined(CONFIG_CONSOLE_SYSLOG) syslog_console_init(); #elif defined(CONFIG_RAMLOG_CONSOLE) ramlog_consoleinit(); #endif #if CONFIG_NFILE_DESCRIPTORS > 0 && defined(CONFIG_PSEUDOTERM_SUSV1) /* Register the master pseudo-terminal multiplexor device */ (void)ptmx_register(); #endif /* Early initialization of the system logging device. Some SYSLOG channel * can be initialized early in the initialization sequence because they * depend on minimal OS initialization. */ syslog_initialize(SYSLOG_INIT_EARLY); #if defined(CONFIG_CRYPTO) /* Initialize the HW crypto and /dev/crypto */ up_cryptoinitialize(); #endif #if CONFIG_NFILE_DESCRIPTORS > 0 && defined(CONFIG_CRYPTO_CRYPTODEV) devcrypto_register(); #endif #ifndef CONFIG_NETDEV_LATEINIT /* Initialize the network */ up_netinitialize(); #endif #ifdef CONFIG_NETDEV_LOOPBACK /* Initialize the local loopback device */ (void)localhost_initialize(); #endif #ifdef CONFIG_NET_TUN /* Initialize the TUN device */ (void)tun_initialize(); #endif #ifdef CONFIG_NETDEV_TELNET /* Initialize the Telnet session factory */ (void)telnet_initialize(); #endif board_autoled_on(LED_IRQSENABLED); }
void up_initialize(void) { /* Initialize global variables */ g_current_regs = NULL; /* Calibrate the timing loop */ up_calibratedelay(); /* Add any extra memory fragments to the memory manager */ up_addregion(); /* Initialize the interrupt subsystem */ up_irqinitialize(); /* Initialize the DMA subsystem if the weak function stm32_dmainitialize has been * brought into the build */ #ifdef CONFIG_ARCH_DMA #ifdef CONFIG_HAVE_WEAKFUNCTIONS if (up_dmainitialize) #endif { up_dmainitialize(); } #endif /* Initialize the system timer interrupt */ #if !defined(CONFIG_SUPPRESS_INTERRUPTS) && !defined(CONFIG_SUPPRESS_TIMER_INTS) up_timer_initialize(); #endif /* Register devices */ #if CONFIG_NFILE_DESCRIPTORS > 0 #if defined(CONFIG_DEV_NULL) devnull_register(); /* Standard /dev/null */ #endif #if defined(CONFIG_DEV_ZERO) devzero_register(); /* Standard /dev/zero */ #endif #if defined(CONFIG_DEV_LOOP) loop_register(); /* Standard /dev/loop */ #endif #endif /* CONFIG_NFILE_DESCRIPTORS */ #if defined(CONFIG_SCHED_INSTRUMENTATION_BUFFER) && \ defined(CONFIG_DRIVER_NOTE) note_register(); /* Non-standard /dev/note */ #endif /* Initialize the serial device driver */ #ifdef USE_SERIALDRIVER up_serialinit(); #endif /* Initialize the console device driver (if it is other than the standard * serial driver). */ #if defined(CONFIG_DEV_LOWCONSOLE) lowconsole_init(); #elif defined(CONFIG_CONSOLE_SYSLOG) syslog_console_init(); #elif defined(CONFIG_RAMLOG_CONSOLE) ramlog_consoleinit(); #endif #if CONFIG_NFILE_DESCRIPTORS > 0 && defined(CONFIG_PSEUDOTERM_SUSV1) /* Register the master pseudo-terminal multiplexor device */ (void)ptmx_register(); #endif /* Early initialization of the system logging device. Some SYSLOG channel * can be initialized early in the initialization sequence because they * depend on only minimal OS initialization. */ syslog_initialize(SYSLOG_INIT_EARLY); #if defined(CONFIG_CRYPTO) /* Initialize the HW crypto and /dev/crypto */ up_cryptoinitialize(); #endif #if CONFIG_NFILE_DESCRIPTORS > 0 && defined(CONFIG_CRYPTO_CRYPTODEV) devcrypto_register(); #endif #ifdef CONFIG_DEV_RANDOM /* Initialize the Random Number Generator (RNG) */ up_rnginitialize(); #endif #ifndef CONFIG_NETDEV_LATEINIT /* Initialize the network */ up_netinitialize(); #endif #ifdef CONFIG_NETDEV_LOOPBACK /* Initialize the local loopback device */ (void)localhost_initialize(); #endif #ifdef CONFIG_NET_TUN /* Initialize the TUN device */ (void)tun_initialize(); #endif #ifdef CONFIG_NETDEV_TELNET /* Initialize the Telnet session factory */ (void)telnet_initialize(); #endif /* Initialize USB -- device and/or host */ up_usbinitialize(); board_autoled_on(LED_IRQSENABLED); }