void process_check_rtt (void) { #ifdef __m6809__ if (task_getpid () >= (task_t *)0x2000) fatal (ERR_TASK_LOCKUP); #endif }
void task_init (void) { memset (task_data_table, 0, sizeof (task_data_table)); struct sched_param sched_param; sched_param.sched_priority = 1; sched_setscheduler (0, SCHED_FIFO, &sched_param); task_data_table[0].pid = task_getpid (); task_data_table[0].gid = GID_FIRST_TASK; task_data_table[0].duration = TASK_DURATION_INF; pthread_attr_init (&attr_default); attr_task = attr_default; pthread_attr_setdetachstate (&attr_task, PTHREAD_CREATE_DETACHED); pthread_attr_setinheritsched (&attr_task, PTHREAD_EXPLICIT_SCHED); pthread_attr_setschedpolicy (&attr_task, SCHED_FIFO); sched_param.sched_priority = 1; pthread_attr_setschedparam (&attr_task, &sched_param); attr_input = attr_task; sched_param.sched_priority = 2; pthread_attr_setschedparam (&attr_input, &sched_param); attr_interrupt = attr_task; sched_param.sched_priority = 8; pthread_attr_setschedparam (&attr_interrupt, &sched_param); }
void task_init (void) { memset (task_data_table, 0, sizeof (task_data_table)); pth_init (); task_data_table[0].pid = task_getpid (); task_data_table[0].gid = GID_FIRST_TASK; task_data_table[0].duration = TASK_DURATION_INF; }
task_gid_t task_getgid (void) { int i; for (i=0; i < NUM_TASKS; i++) { if (task_data_table[i].pid == task_getpid ()) return task_data_table[i].gid; } return 255; }
void *task_get_pointer_arg (void) { int i; for (i=0; i < NUM_TASKS; i++) { if (task_data_table[i].pid == task_getpid ()) return task_data_table[i].arg.ptr; } fatal (ERR_CANT_GET_HERE); }
__noreturn__ void task_exit (void) { int i; #ifdef PTHDEBUG printf ("task_exit: pid=%p\n", task_getpid ()); #endif for (i=0; i < NUM_TASKS; i++) if (task_data_table[i].pid == task_getpid ()) { task_data_table[i].pid = 0; #ifdef CONFIG_UI ui_write_task (i, 0); #endif for (;;) pth_exit (0); } fatal (ERR_TASK_KILL_FAILED); }
void task_setgid (task_gid_t gid) { int i; for (i=0; i < NUM_TASKS; i++) if (task_data_table[i].pid == task_getpid ()) { task_data_table[i].gid = gid; break; } }
__noreturn__ void task_exit (void) { int i; pthread_debug ("task_exit: pid=%u\n", (unsigned)task_getpid ()); for (i=0; i < NUM_TASKS; i++) if (task_data_table[i].pid == task_getpid ()) { task_data_table[i].pid = 0; #ifdef CONFIG_SIM ui_write_task (i, 0); #endif pthread_debug ("pthread_exit: index=%d\n", i); for (;;) pthread_exit (0); } fatal (ERR_TASK_KILL_FAILED); }
void task_remove_duration (U8 flags) { int i; for (i=0; i < NUM_TASKS; i++) { if (task_data_table[i].pid == task_getpid ()) { task_data_table[i].duration &= ~flags; break; } } }
void bpt_display (void) { #if (MACHINE_DMD == 1) dmd_alloc_low_clean (); sprintf ("%p", bpt_mem_addr); font_render_string_left (&font_bitmap8, 0, 0, sprintf_buffer); sprintf ("%02X %02X %02X %02X", bpt_mem_addr[0], bpt_mem_addr[1], bpt_mem_addr[2], bpt_mem_addr[3]); font_render_string_left (&font_bitmap8, 40, 0, sprintf_buffer); if (new_fatal_error) { sprintf ("ERR %d GID %d", (U8)system_audits.lockup1_addr, (U8)system_audits.lockup1_pid_lef); font_render_string_left (&font_bitmap8, 0, 8, sprintf_buffer); } else if (task_getpid ()) { sprintf ("PID %p GID %d", task_getpid (), task_getgid ()); font_render_string_left (&font_bitmap8, 0, 8, sprintf_buffer); sprintf ("%02X%02X %02X", bpt_addr[0], bpt_addr[1]-2, bpt_addr[2]); font_render_string_left (&font_bitmap8, 0, 16, sprintf_buffer); } else { font_render_string_left (&font_bitmap8, 0, 8, "BREAK"); } sprintf ("C%04lX", prev_log_callset); font_render_string_left (&font_bitmap8, 0, 24, sprintf_buffer); dmd_show_low (); #endif }
bool task_kill_gid (task_gid_t gid) { int i; bool rc = FALSE; for (i=0; i < NUM_TASKS; i++) { if ((task_data_table[i].gid == gid) && (task_data_table[i].pid != 0) && (task_data_table[i].pid != task_getpid ())) { task_kill_pid (task_data_table[i].pid); rc = TRUE; } } return (rc); }
void task_dump (void) { int i; dbprintf ("PID GID ARG FLAGS\n"); for (i=0; i < NUM_TASKS; i++) { aux_task_data_t *td = &task_data_table[i]; if (td->pid != 0) { dbprintf ("%p%c %d %08X %02X\n", td->pid, (td->pid == task_getpid ()) ? '*' : ' ', td->gid, td->arg.u16, td->duration); } } }