#ifndef __MULTICORE_SYSTEM_HEADER_ #define __MULTICORE_SYSTEM_HEADER_ #include #include /* циклический буффер */ typedef struct { int* buffer; /* по умолчанию 4Kb, кольцевой */ volatile int size; /* его размер */ volatile int overfull; /* 1 - запись данных поверх */ volatile int write_pos; /* позиция на "запись" */ volatile int read_pos; /* позиция на "чтение" */ volatile int lock; /* замочек на изменение данных в структуре*/ } TRoundBuffer; #define STOP_PROCESS_EXCEPTION 0 #define CONTINUE_PROCESS_EXCEPTION 1 struct except_registers { /* cp0 */ unsigned int Epc; unsigned int Cause; unsigned int Status; unsigned int EntryHi; unsigned int EntryLo0; unsigned int EntryLo1; unsigned int Context; unsigned int PageMask; unsigned int Index; unsigned int Random; unsigned int Wired; unsigned int BadVAddr; unsigned int Count; unsigned int Compare; unsigned int ErrorEPC; /* общие */ unsigned int at, v0, v1, a0, a1, a2, a3, t0, t1, t2, t3, t4, t5, t6, t7, s0, s1, s2, s3, s4, s5, s6, s7, t8, t9, k0, k1, gp, sp, fp, ra, lo, hi; }; typedef int (*exception_handler)(struct except_registers*); /* * set_new_handler: * * Возвращает прежний обработчик исключений/прерываний и устанавливает новый. * * */ /* не применяются для обработки аппаратных прерываний! */ #define ADD_TO_TAIL 0x80000000 #define ADD_TO_HEAD 0x40000000 /* Типы обрабатываемых исключений */ #define UNKNOWN_TYPE 0 #define INTERRUPT_TYPE 1 #define TLBMOD_TYPE 2 #define TLBLOAD_TYPE 3 #define TLBSTORE_TYPE 4 #define ADDRLOAD_TYPE 5 #define ADDRSTORE_TYPE 6 #define INSN_BUS_TYPE 7 #define DATA_BUS_TYPE 8 #define SYSCALL_TYPE 9 #define BP_TYPE 10 #define RI_TYPE 11 #define COPROCESSOR_TYPE 12 #define OVERFLOW_TYPE 13 #define TRAP_TYPE 14 #define FLPOINT_TYPE 15 #define COPROCESSOR2_TYPE 16 #define MDMX_TYPE 17 #define WATCH_TYPE 18 #define CACHE_TYPE 19 #define MCHECK_TYPE 20 #define HARD0_TYPE 0x031 #define HARD1_TYPE 0x032 #define HARD2_TYPE 0x033 #define HARD3_TYPE 0x034 #define HARD4_TYPE 0x035 #define HARD5_TYPE 0x036 /* Позиции для обработчиков прерываний от устройств, далее "DEV" */ #define SPORT0_RX 0x0 #define SPORT0_TX 0x1 #define SPORT1_RX 0x2 #define SPORT1_TX 0x3 #define UTRx 0x4 #define UERROR 0x5 #define UIO 0x6 #define LTRx0 0x7 #define LSrq0 0x8 #define LTRx1 0x9 #define LSrq1 0xA #define LTRx2 0xB #define LSrq2 0xC #define LTRx3 0xD #define LSrq3 0xE #define COMPARE 0xF #define MemCh0 0x10 #define MemCh1 0x11 #define MemCh2 0x12 #define MemCh3 0x13 #define TIMER 0x14 #define PI 0x15 #define SBS 0x16 /* Значения по умолчанию: type = */ /* возвращает позицию установленного обработчика */ /* -1 в случае неудачной установки ( нет места для установки ) */ extern int set_new_handler(exception_handler func, int type, int pos); extern void set_extern_clock(unsigned int value); /* выключение и включение прерываний от устройства DEV * если DEV = -1, то будут включены прерывания от всех устройств * */ extern void disable_interrupt(unsigned int DEV); extern void enable_interrupt(unsigned int DEV); /* Получение даты сборки библиотеки */ extern time_t get_build_date(struct tm *); #include #include #include #include #endif /*__MULTICORE_SYSTEM_HEADER_ */