am.h 3.2 KB
Newer Older
Y
Yanyan Jiang 已提交
1
/*
2 3
 * The Nexus Abstract Architecture
 * Minmal architectural-independent library for implementing system software
Y
Yanyan Jiang 已提交
4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
 *
 * Please refer to the AM specification
 */
#ifndef __AM_H__
#define __AM_H__

#include <arch.h>

typedef unsigned long  ulong;
typedef unsigned int   uint;
typedef unsigned short ushort;
typedef unsigned char  uchar;

#define MAX_CPU 8

typedef struct _Area {
  void *start, *end;
} _Area; 

Y
Yanyan Jiang 已提交
23 24 25 26
#define _KEYS(_) \
  _(ESCAPE), _(F1), _(F2), _(F3), _(F4), _(F5), _(F6), _(F7), _(F8), _(F9), _(F10), _(F11), _(F12), \
  _(GRAVE), _(1), _(2), _(3), _(4), _(5), _(6), _(7), _(8), _(9), _(0), _(MINUS), _(EQUALS), _(BACKSPACE), \
  _(TAB), _(Q), _(W), _(E), _(R), _(T), _(Y), _(U), _(I), _(O), _(P), _(LEFTBRACKET), _(RIGHTBRACKET), _(BACKSLASH), \
27
  _(CAPSLOCK), _(A), _(S), _(D), _(F), _(G), _(H), _(J), _(K), _(L), _(SEMICOLON), _(APOSTROPHE), _(RETURN), \
Y
Yanyan Jiang 已提交
28
  _(LSHIFT), _(Z), _(X), _(C), _(V), _(B), _(N), _(M), _(COMMA), _(PERIOD), _(SLASH), _(RSHIFT), \
29
  _(LCTRL), _(APPLICATION), _(LALT), _(SPACE), _(RALT), _(RCTRL), \
Y
Yanyan Jiang 已提交
30 31
  _(UP), _(DOWN), _(LEFT), _(RIGHT), _(INSERT), _(DELETE), _(HOME), _(END), _(PAGEUP), _(PAGEDOWN)

32
#define _KEY_NAME(k) _KEY_##k
Y
Yanyan Jiang 已提交
33

Y
Yanyan Jiang 已提交
34 35
enum {
  _KEY_NONE = 0,
36
  _KEYS(_KEY_NAME),
Y
Yanyan Jiang 已提交
37 38 39 40 41 42 43 44 45 46 47
};

typedef struct _Screen {
  int width, height;
} _Screen;

typedef struct _Protect {
  _Area area; 
  void *ptr;
} _Protect;

48 49 50 51
#ifdef __cplusplus
extern "C" {
#endif

Y
Yanyan Jiang 已提交
52
// =======================================================================
Y
Yanyan Jiang 已提交
53
// [0] Turing Machine: code execution & a heap memory
Y
Yanyan Jiang 已提交
54 55 56 57 58 59 60
// =======================================================================

void _putc(char ch);
void _halt(int code);
extern _Area _heap;

// =======================================================================
61
// [1] IO Extension (IOE)
Y
Yanyan Jiang 已提交
62 63 64 65 66
// =======================================================================

void _ioe_init();
ulong _uptime();
ulong _cycles();
Y
Yanyan Jiang 已提交
67
int _read_key();
Y
Yanyan Jiang 已提交
68 69 70 71 72 73 74
typedef u32 _Pixel;
void _draw_p(int x, int y, _Pixel p);
void _draw_f(_Pixel *p); 
void _draw_sync();
extern _Screen _screen;

// =======================================================================
75
// [2] Asynchronous Extension (ASYE)
Y
Yanyan Jiang 已提交
76 77 78 79 80 81 82 83 84 85 86 87
// =======================================================================

void _asye_init();
void _listen(_RegSet* (*l)(int ex, _RegSet *regs));
_RegSet *_make(_Area kstack, void *entry);
void _trap();
void _idle();
void _ienable();
void _idisable();
int _istatus();

// =======================================================================
88
// [3] Protection Extension (PTE)
Y
Yanyan Jiang 已提交
89 90 91 92 93 94
// =======================================================================

void _pte_init(void*(*palloc)(), void (*pfree)(void*));
void _protect(_Protect *p);
void _release(_Protect *p);
void _map(_Protect *p, void *va, void *pa);
Y
Yanyan Jiang 已提交
95
void _unmap(_Protect *p, void *va);
Y
Yanyan Jiang 已提交
96 97 98 99
void _switch(_Protect *p);
_RegSet *_umake(_Area ustack, _Area kstack, void *entry, int argc, char **argv);

// =======================================================================
100
// [4] Multi-Processor Extension (MPE)
Y
Yanyan Jiang 已提交
101 102 103 104 105 106 107 108 109 110 111 112 113 114
// =======================================================================

void _mpe_init(void (*entry)());
int _cpu();
ulong _atomic_xchg(volatile ulong *addr, ulong newval);
void _barrier();
extern int _NR_CPU;

#ifdef __cplusplus
}
#endif

#endif