/* wait for a ptraced child to get a certain signal */ static int waitpid_thread( struct thread *thread, int signal ) { int res, status; start_watchdog(); for (;;) { if ((res = waitpid( get_ptrace_pid(thread), &status, WUNTRACED | __WALL )) == -1) { if (errno == EINTR) { if (!watchdog_triggered()) continue; if (debug_level) fprintf( stderr, "%04x: *watchdog* waitpid aborted\n", thread->id ); } else if (errno == ECHILD) /* must have died */ { thread->unix_pid = -1; thread->unix_tid = -1; } else perror( "waitpid" ); stop_watchdog(); return 0; } res = handle_child_status( thread, res, status, signal ); if (!res || res == signal) break; } stop_watchdog(); return (thread->unix_pid != -1); }
int main( void ) { stop_watchdog(); setup_finish_ports(); setup_clock(); setup_uart(); rf_init(sizeof(struct packet)); configure_timer_38k(); timer_38k_enable(1); configure_watchdog(); __enable_interrupt(); // Show battery voltage on start display_vcc(); // Setup RF channel setup_channel(); set_state(st_stopped); // Start/stop loop for (;;) { wait_start(); set_state(st_started); beep(SHORT_DELAY_TICKS); detect_finish(); set_state(st_stopped); report_finish(); } }
void hlds_led_cmd_hdlr(struct hlds_ctrl_t *cmd) { struct led_action *action; int gpio_output = 0; action = &hlds_led_action[cmd->device]; switch(cmd->ctrl) { case 0: //close_led(cmd->device); break; case 1: //open_led(cmd->device); break; case 2: //cmd->stats = gpio_read_bit(cmd->device); //printk("the GPIO %d stats is %d\n",cmd->device,cmd->stats); break; case 3: //cmd->reset=reset_irq_num; break; case 4: stop_watchdog(); break; default: break; } }
/* This is normally the Oops function. */ void die_if_kernel(const char *str, struct pt_regs *regs, long err) { if (user_mode(regs)) return; #ifdef CONFIG_ETRAX_WATCHDOG_NICE_DOGGY /* * This printout might take too long and could trigger * the watchdog normally. If NICE_DOGGY is set, simply * stop the watchdog during the printout. */ stop_watchdog(); #endif handle_BUG(regs); printk("%s: %04lx\n", str, err & 0xffff); show_registers(regs); oops_in_progress = 0; #ifdef CONFIG_ETRAX_WATCHDOG_NICE_DOGGY reset_watchdog(); #endif do_exit(SIGSEGV); }
/* This is normally the Oops function. */ void die_if_kernel(const char *str, struct pt_regs *regs, long err) { if (user_mode(regs)) return; #ifdef CONFIG_ETRAX_WATCHDOG_NICE_DOGGY /* * This printout might take too long and could trigger * the watchdog normally. If NICE_DOGGY is set, simply * stop the watchdog during the printout. */ stop_watchdog(); #endif oops_enter(); handle_BUG(regs); pr_err("Linux %s %s\n", utsname()->release, utsname()->version); pr_err("%s: %04lx\n", str, err & 0xffff); show_registers(regs); oops_exit(); oops_in_progress = 0; pr_err("\n"); /* Flush mtdoops. */ #ifdef CONFIG_ETRAX_WATCHDOG_NICE_DOGGY reset_watchdog(); #endif do_exit(SIGSEGV); }
void hard_reset_now(void) { /* * Don't declare this variable elsewhere. We don't want any other * code to know about it than the watchdog handler in entry.S and * this code, implementing hard reset through the watchdog. */ #if defined(CONFIG_ETRAX_WATCHDOG) extern int cause_of_death; #endif printk("*** HARD RESET ***\n"); local_irq_disable(); #if defined(CONFIG_ETRAX_WATCHDOG) cause_of_death = 0xbedead; #else { reg_timer_rw_wd_ctrl wd_ctrl = {0}; stop_watchdog(); wd_ctrl.key = 16; /* Arbitrary key. */ wd_ctrl.cnt = 1; /* Minimum time. */ wd_ctrl.cmd = regk_timer_start; arch_enable_nmi(); REG_WR(timer, regi_timer0, rw_wd_ctrl, wd_ctrl); } #endif while (1) ; /* Wait for reset. */ }
void oops_nmi_handler(struct pt_regs *regs) { stop_watchdog(); oops_in_progress = 1; printk("NMI!\n"); show_registers(regs); oops_in_progress = 0; }
void oops_nmi_handler(struct pt_regs *regs) { stop_watchdog(); oops_in_progress = 1; pr_err("NMI!\n"); show_registers(regs); oops_in_progress = 0; oops_exit(); pr_err("\n"); /* Flush mtdoops. */ }
void watchdog_bite_hook(struct pt_regs *regs) { #ifdef CONFIG_ETRAX_WATCHDOG_NICE_DOGGY local_irq_disable(); stop_watchdog(); show_registers(regs); while(1) /* nothing */; #else show_registers(regs); #endif }
void fand_interrupt(int sig) { int fan; for (fan = 0; fan < total_fans; fan++) { write_fan_speed(fan + fan_offset, fan_max); } syslog(LOG_WARNING, "Shutting down fand on signal %s", strsignal(sig)); if (sig == SIGUSR1) { stop_watchdog(); } exit(3); }
int server_shutdown(const char *why) { int fan; for (fan = 0; fan < total_fans; fan++) { write_fan_speed(fan + fan_offset, fan_max); } syslog(LOG_EMERG, "Shutting down: %s", why); #if defined(CONFIG_WEDGE100) write_device(USERVER_POWER, "0"); sleep(5); write_device(MAIN_POWER, "0"); #endif #if defined(CONFIG_WEDGE) && !defined(CONFIG_WEDGE100) write_device(GPIO_USERVER_POWER_DIRECTION, "out"); write_device(GPIO_USERVER_POWER, "0"); /* * Putting T2 in reset generates a non-maskable interrupt to uS, * the kernel running on uS might panic depending on its version. * sleep 5s here to make sure uS is completely down. */ sleep(5); if (write_device(GPIO_T2_POWER_DIRECTION, "out") || write_device(GPIO_T2_POWER, "1")) { /* * We're here because something has gone badly wrong. If we * didn't manage to shut down the T2, cut power to the whole box, * using the PMBus OPERATION register. This will require a power * cycle (removal of both power inputs) to recover. */ syslog(LOG_EMERG, "T2 power off failed; turning off via ADM1278"); system("rmmod adm1275"); system("i2cset -y 12 0x10 0x01 00"); } #else // TODO(7088822): try throttling, then shutting down server. syslog(LOG_EMERG, "Need to implement actual shutdown!\n"); #endif /* * We have to stop the watchdog, or the system will be automatically * rebooted some seconds after fand exits (and stops kicking the * watchdog). */ stop_watchdog(); sleep(2); exit(2); }
static int harddog_release(struct inode *inode, struct file *file) { spin_lock(&lock); stop_watchdog(harddog_in_fd, harddog_out_fd); harddog_in_fd = -1; harddog_out_fd = -1; timer_alive=0; spin_unlock(&lock); return 0; }
static int harddog_release(struct inode *inode, struct file *file) { /* * Shut off the timer. */ lock_kernel(); stop_watchdog(harddog_in_fd, harddog_out_fd); harddog_in_fd = -1; harddog_out_fd = -1; timer_alive=0; unlock_kernel(); return 0; }
/* Cleanup and then exit */ void terminate_dird(int sig) { static bool already_here = false; if (already_here) { /* avoid recursive temination problems */ bmicrosleep(2, 0); /* yield */ exit(1); } already_here = true; debug_level = 0; /* turn off debug */ stop_watchdog(); db_sql_pool_destroy(); db_flush_backends(); unload_dir_plugins(); write_state_file(me->working_directory, "bareos-dir", get_first_port_host_order(me->DIRaddrs)); delete_pid_file(me->pid_directory, "bareos-dir", get_first_port_host_order(me->DIRaddrs)); term_scheduler(); term_job_server(); if (runjob) { free(runjob); } if (configfile != NULL) { free(configfile); } if (debug_level > 5) { print_memory_pool_stats(); } if (my_config) { my_config->free_resources(); free(my_config); my_config = NULL; } stop_UA_server(); term_msg(); /* terminate message handler */ cleanup_crypto(); close_memory_pool(); /* release free memory in pool */ lmgr_cleanup_main(); sm_dump(false); exit(sig); }
void handle_watchdog_bite(struct pt_regs* regs) { #if defined(CONFIG_ETRAX_WATCHDOG) extern int cause_of_death; raw_printk("Watchdog bite\n"); /* Check if forced restart or unexpected watchdog */ if (cause_of_death == 0xbedead) { while(1); } /* Unexpected watchdog, stop the watchdog and dump registers*/ stop_watchdog(); raw_printk("Oops: bitten by watchdog\n"); show_registers(regs); #ifndef CONFIG_ETRAX_WATCHDOG_NICE_DOGGY reset_watchdog(); #endif while(1) /* nothing */; #endif }
void die_if_kernel(const char *str, struct pt_regs *regs, long err) { if (user_mode(regs)) return; #ifdef CONFIG_ETRAX_WATCHDOG_NICE_DOGGY stop_watchdog(); #endif handle_BUG(regs); printk("%s: %04lx\n", str, err & 0xffff); show_registers(regs); oops_in_progress = 0; #ifdef CONFIG_ETRAX_WATCHDOG_NICE_DOGGY reset_watchdog(); #endif do_exit(SIGSEGV); }
/* This is normally the 'Oops' routine */ void die_if_kernel(const char * str, struct pt_regs * regs, long err) { if(user_mode(regs)) return; #ifdef CONFIG_ETRAX_WATCHDOG_NICE_DOGGY /* This printout might take too long and trigger the * watchdog normally. If we're in the nice doggy * development mode, stop the watchdog during printout. */ stop_watchdog(); #endif raw_printk("%s: %04lx\n", str, err & 0xffff); show_registers(regs); #ifdef CONFIG_ETRAX_WATCHDOG_NICE_DOGGY reset_watchdog(); #endif do_exit(SIGSEGV); }
void main(void) { stop_watchdog(); set_clk_8MHz(); interrupts_enable(); lcd_init(); uart_init(); uart_tx_string("Register Value:"); unsigned char i2creceive[8]; i2c_master_init(); unsigned char data[1] = {0x6F}; lcd_goto(1,0); lcd_print("R: "); lcd_print(int2HEXcharArray(*data)); lcd_goto(2,0); lcd_print("V: "); i2c_writeByte(1,data,0x50); __delay_cycles(300); // delay some time to get a better view on the signals on the scope unsigned char rx_byte = i2c_receiveSingleByte(0x50); __delay_cycles(300); uart_tx_string(int2HEXcharArray(rx_byte)); lcd_print(int2HEXcharArray(rx_byte)); __delay_cycles(300); uart_tx_string("\n"); for (;;) { } }
// used for various testing static int rctest_main(int argc, char *argv[]) { int on; if (argc < 3) { _dprintf("test what?\n"); } else if (strcmp(argv[1], "rc_service")==0) { notify_rc(argv[2]); } else if(strcmp(argv[1], "get_phy_status")==0) { int mask; mask = atoi(argv[2]); TRACE_PT("debug for phy_status %x\n", get_phy_status(mask)); } else if(strcmp(argv[1], "get_phy_speed")==0) { int mask; mask = atoi(argv[2]); TRACE_PT("debug for phy_speed %x\n", get_phy_speed(mask)); } else if(strcmp(argv[1], "set_phy_ctrl")==0) { int mask, ctrl; mask = atoi(argv[2]); ctrl = atoi(argv[3]); TRACE_PT("debug for phy_speed %x\n", set_phy_ctrl(mask, ctrl)); } else if(strcmp(argv[1], "handle_notifications")==0) { handle_notifications(); } else if(strcmp(argv[1], "check_action")==0) { _dprintf("check: %d\n", check_action()); } else if(strcmp(argv[1], "nvramhex")==0) { int i; char *nv; nv = nvram_safe_get(argv[2]); _dprintf("nvram %s(%d): ", nv, strlen(nv)); for(i=0;i<strlen(nv);i++) { _dprintf(" %x", (unsigned char)*(nv+i)); } _dprintf("\n"); } else { on = atoi(argv[2]); _dprintf("%s %d\n", argv[1], on); if (strcmp(argv[1], "vlan") == 0) { if(on) start_vlan(); else stop_vlan(); } else if (strcmp(argv[1], "lan") == 0) { if(on) start_lan(); else stop_lan(); } else if (strcmp(argv[1], "wl") == 0) { if(on) { start_wl(); lanaccess_wl(); } } else if (strcmp(argv[1], "wan") == 0) { if(on) start_wan(); else stop_wan(); } else if (strcmp(argv[1], "firewall") == 0) { //if(on) start_firewall(); //else stop_firewall(); } else if (strcmp(argv[1], "watchdog") == 0) { if(on) start_watchdog(); else stop_watchdog(); } #ifdef RTCONFIG_FANCTRL else if (strcmp(argv[1], "phy_tempsense") == 0) { if(on) start_phy_tempsense(); else stop_phy_tempsense(); } #endif #ifdef RTCONFIG_BCMWL6 #ifdef RTCONFIG_PROXYSTA else if (strcmp(argv[1], "psta_monitor") == 0) { if(on) start_psta_monitor(); else stop_psta_monitor(); } #endif #endif else if (strcmp(argv[1], "qos") == 0) {//qos test if(on){ #ifdef RTCONFIG_RALINK if (module_loaded("hw_nat")) { modprobe_r("hw_nat"); sleep(1); #if 0 system("echo 0 > /proc/sys/net/ipv4/conf/default/force_igmp_version"); system("echo 0 > /proc/sys/net/ipv4/conf/all/force_igmp_version"); #endif } #endif add_iQosRules(get_wan_ifname(0)); start_iQos(); } else { #ifdef RTCONFIG_RALINK if (nvram_get_int("hwnat") && /* TODO: consider RTCONFIG_DUALWAN case */ // !nvram_match("wan0_proto", "l2tp") && // !nvram_match("wan0_proto", "pptp") && // !(nvram_get_int("fw_pt_l2tp") || nvram_get_int("fw_pt_ipsec") && // (nvram_match("wl0_radio", "0") || nvram_get_int("wl0_mrate_x")) && // (nvram_match("wl1_radio", "0") || nvram_get_int("wl1_mrate_x")) && !module_loaded("hw_nat")) { #if 0 system("echo 2 > /proc/sys/net/ipv4/conf/default/force_igmp_version"); system("echo 2 > /proc/sys/net/ipv4/conf/all/force_igmp_version"); #endif modprobe("hw_nat"); sleep(1); } #endif stop_iQos(); del_iQosRules(); } } #ifdef RTCONFIG_WEBDAV else if (strcmp(argv[1], "webdav") == 0) { if(on) start_webdav(); } #endif else if (strcmp(argv[1], "gpiow") == 0) { if(argc>=4) set_gpio(atoi(argv[2]), atoi(argv[3])); } else if (strcmp(argv[1], "gpior") == 0) { _dprintf("%d\n", get_gpio(atoi(argv[2]))); } else if (strcmp(argv[1], "gpiod") == 0) { if(argc>=4) gpio_dir(atoi(argv[2]), atoi(argv[3])); } else if (strcmp(argv[1], "init_switch") == 0) { init_switch(on); } else if (strcmp(argv[1], "set_action") == 0) { set_action(on); } else if (strcmp(argv[1], "pwr_usb") == 0) { set_pwr_usb(atoi(argv[2])); _dprintf("done.\n"); } else { printf("what?\n"); } } return 0; }
void oops_nmi_handler(struct pt_regs* regs) { stop_watchdog(); raw_printk("NMI!\n"); show_registers(regs); }
void main(void) { stop_watchdog(); set_clk_8MHz(); //interrupts_enable(); lcd_init(); uart_init(); /* * Read a regiser (data[1]) and print register and value on the display * */ unsigned char i2creceive[8]; i2c_master_init(); unsigned char data[1] = {0x6F}; lcd_goto(1,0); lcd_print("R: "); lcd_print(int2HEXcharArray(*data)); lcd_goto(2,0); lcd_print("V: "); i2c_writeByte(1,data,0x50); __delay_cycles(300); // delay some time to get a better view on the signals unsigned char rx_byte = i2c_receiveSingleByte(0x50); __delay_cycles(300); lcd_print(int2HEXcharArray(rx_byte)); /* * receive 256 register values via UART and write them to the EEPROM (incrementing address from 0x00 to 0xFF) * */ ///* unsigned char write_byte[2]; unsigned int write_counter = 0; while(write_counter < 255) { lcd_goto(2,0); write_byte[0] = write_counter; write_byte[1] = uart_rx_char(); lcd_print(int2HEXcharArray(write_byte[1])); i2c_writeByte(2,write_byte,0x50); write_counter = write_counter + 1; } //*/ /* * Read out a register value and print it on the display to verify the write process * */ lcd_goto(2,0); lcd_print("V: "); i2c_writeByte(1,data,0x50); rx_byte = i2c_receiveSingleByte(0x50); __delay_cycles(300); lcd_print(int2HEXcharArray(rx_byte)); __delay_cycles(300); for (;;) { } }
// used for various testing static int rctest_main(int argc, char *argv[]) { int on; if (argc < 2) { _dprintf("test what?\n"); } else if (strcmp(argv[1], "rc_service")==0) { notify_rc(argv[2]); } else if(strcmp(argv[1], "get_phy_status")==0) { int mask; mask = atoi(argv[2]); TRACE_PT("debug for phy_status %x\n", get_phy_status(mask)); } else if(strcmp(argv[1], "get_phy_speed")==0) { int mask; mask = atoi(argv[2]); TRACE_PT("debug for phy_speed %x\n", get_phy_speed(mask)); } else if(strcmp(argv[1], "set_phy_ctrl")==0) { int mask, ctrl; mask = atoi(argv[2]); ctrl = atoi(argv[3]); TRACE_PT("debug for phy_speed %x\n", set_phy_ctrl(mask, ctrl)); } else if(strcmp(argv[1], "handle_notifications")==0) { handle_notifications(); } else if(strcmp(argv[1], "check_action")==0) { _dprintf("check: %d\n", check_action()); } else if(strcmp(argv[1], "nvramhex")==0) { int i; char *nv; nv = nvram_safe_get(argv[2]); _dprintf("nvram %s(%d): ", nv, strlen(nv)); for(i=0;i<strlen(nv);i++) { _dprintf(" %x", (unsigned char)*(nv+i)); } _dprintf("\n"); } else { on = atoi(argv[2]); _dprintf("%s %d\n", argv[1], on); if (strcmp(argv[1], "vlan") == 0) { if(on) start_vlan(); else stop_vlan(); } else if (strcmp(argv[1], "lan") == 0) { if(on) start_lan(); else stop_lan(); } else if (strcmp(argv[1], "wl") == 0) { if(on) { start_wl(); lanaccess_wl(); } } else if (strcmp(argv[1], "wan") == 0) { if(on) start_wan(); else stop_wan(); } else if (strcmp(argv[1], "wan_port") == 0) { if(on) start_wan_port(); else stop_wan_port(); } else if (strcmp(argv[1], "firewall") == 0) { //if(on) start_firewall(); //else stop_firewall(); } else if (strcmp(argv[1], "watchdog") == 0) { if(on) start_watchdog(); else stop_watchdog(); } #if ! (defined(RTCONFIG_QCA) || defined(RTCONFIG_RALINK)) else if (strcmp(argv[1], "watchdog02") == 0) { if(on) start_watchdog02(); else stop_watchdog02(); } #endif /* ! (RTCONFIG_QCA || RTCONFIG_RALINK) */ else if (strcmp(argv[1], "sw_devled") == 0) { if(on) start_sw_devled(); else stop_sw_devled(); } #ifdef RTCONFIG_FANCTRL else if (strcmp(argv[1], "phy_tempsense") == 0) { if(on) start_phy_tempsense(); else stop_phy_tempsense(); } #endif #ifdef RTCONFIG_BCMWL6 #ifdef RTCONFIG_PROXYSTA else if (strcmp(argv[1], "psta_monitor") == 0) { if(on) start_psta_monitor(); else stop_psta_monitor(); } #endif #endif #ifdef RTCONFIG_IPERF else if (strcmp(argv[1], "monitor") == 0) { if(on) start_monitor(); else stop_monitor(); } #endif else if (strcmp(argv[1], "qos") == 0) {//qos test if(on){ #ifdef RTCONFIG_RALINK if (module_loaded("hw_nat")) { modprobe_r("hw_nat"); sleep(1); #if 0 f_write_string("/proc/sys/net/ipv4/conf/default/force_igmp_version", "0", 0, 0); f_write_string("/proc/sys/net/ipv4/conf/all/force_igmp_version", "0", 0, 0); #endif } #endif add_iQosRules(get_wan_ifname(wan_primary_ifunit())); #ifdef RTCONFIG_BWDPI if(nvram_get_int("qos_type") == 1) { start_dpi_engine_service(); // force to rebuild firewall to avoid some loopback issue if (nvram_match("fw_nat_loopback", "2")) start_firewall(wan_primary_ifunit(), 0); } else #endif start_iQos(); } else { #ifdef RTCONFIG_RALINK if (nvram_get_int("hwnat") && /* TODO: consider RTCONFIG_DUALWAN case */ // !nvram_match("wan0_proto", "l2tp") && // !nvram_match("wan0_proto", "pptp") && // !(nvram_get_int("fw_pt_l2tp") || nvram_get_int("fw_pt_ipsec") && // (nvram_match("wl0_radio", "0") || nvram_get_int("wl0_mrate_x")) && // (nvram_match("wl1_radio", "0") || nvram_get_int("wl1_mrate_x")) && !module_loaded("hw_nat")) { #if 0 f_write_string("/proc/sys/net/ipv4/conf/default/force_igmp_version", "2", 0, 0); f_write_string("/proc/sys/net/ipv4/conf/all/force_igmp_version", "2", 0, 0); #endif #if defined(RTN14U) || defined(RTAC52U) || defined(RTAC51U) || defined(RTN11P) || defined(RTN300) || defined(RTN54U) || defined(RTAC1200HP) || defined(RTN56UB1) || defined(RTAC54U) || defined(RTN56UB2) if (!(!nvram_match("switch_wantag", "none")&&!nvram_match("switch_wantag", ""))) #endif { modprobe("hw_nat"); sleep(1); } } #endif #ifdef RTCONFIG_BWDPI if(nvram_get_int("qos_type") == 1){ stop_dpi_engine_service(1); } else #endif stop_iQos(); del_iQosRules(); } } #ifdef RTCONFIG_WEBDAV else if (strcmp(argv[1], "webdav") == 0) { if(on) start_webdav(); } #endif #ifdef RTCONFIG_TUNNEL else if (strcmp(argv[1], "mastiff") == 0) { if(on) start_mastiff(); } #endif else if (strcmp(argv[1], "gpiow") == 0) { if(argc>=4) set_gpio(atoi(argv[2]), atoi(argv[3])); } else if (strcmp(argv[1], "gpior") == 0) { printf("%d\n", get_gpio(atoi(argv[2]))); } else if (strcmp(argv[1], "gpiod") == 0) { if(argc>=4) gpio_dir(atoi(argv[2]), atoi(argv[3])); } else if (strcmp(argv[1], "init_switch") == 0) { init_switch(); } else if (strcmp(argv[1], "set_action") == 0) { set_action(on); } else if (strcmp(argv[1], "pwr_usb") == 0) { set_pwr_usb(atoi(argv[2])); _dprintf("done.\n"); } else if (strcmp(argv[1], "enc_chk") == 0) { unsigned char enc_buf[ENC_WORDS_LEN]; unsigned char dec_buf[DATA_WORDS_LEN + 1]; _dprintf("get enc str:[%s]\n", enc_str(argv[2], (char *) enc_buf)); _dprintf("get dec str:[%s]\n", dec_str((char *) enc_buf, (char *) dec_buf)); _dprintf("done(%d)\n", strcmp(argv[2], (const char *) dec_buf)); } #ifdef RTCONFIG_BCMFA else if (strcmp(argv[1], "fa_rev") == 0) { _dprintf("(%d) done.\n", get_fa_rev()); } else if (strcmp(argv[1], "fa_dump") == 0) { _dprintf("(%d) done.\n", get_fa_dump()); } #endif else { printf("what?\n"); } } return 0; }
static void __exit hlds_ctrl_exit(void) { stop_watchdog(); misc_deregister(&hlds_ctrl_dev); }