ref: f801657f77f3923ec2388c25bdcb036c8019ba89
dir: /dat.h/
/* general constants */
static int hex[16] = { '0', '1', '2', '3', '4', '5', '6', '7',
'8', '9', 'A', 'B', 'C', 'D', 'E', 'F' };
extern char etext[];
//extern char btext[];
extern char edata[];
extern char bdata[];
extern char end[];
/* clock constants */
#define SYSTICK_LOAD 4200000000UL
//#define SYSTICK_LOAD 24000000UL
/* GPIO configuration and definitions */
typedef
enum
{
GpioPortA,
GpioPortB,
GpioPortC,
GpioPortD,
} GpioPort;
typedef
struct GpioLine
{
GpioPort port;
char pin;
char mode;
} GpioLine;
/* USART configuration and definitions */
typedef
enum
{
Usart1,
Usart2,
} UsartLine;
/* DMA definitions */
#define DMA_BUFSIZE 128
typedef
enum
{
DmaChan1 = 0,
DmaChan2,
DmaChan3,
DmaChan4,
DmaChan5,
DmaChan6,
DmaChan7,
DmaChannelCount
} DmaChannel;
/* synchronization */
typedef struct Lock Lock;
typedef struct Label Label;
struct Lock
{
ulong key;
ulong sr;
ulong pc;
int pri;
};
struct Label
{
ulong sp;
ulong pc;
};
/* operating system prep */
/* used typedefs */
typedef struct Conf Conf;
typedef struct Ureg Ureg;
typedef struct Mach Mach;
/* portdat.h depends on dat.h */
#define ERRMAX 16
#define KNAMELEN 16
#include "port/portdat.h"
/* machine */
#define MACHP(n) (n == 0 ? (Mach*)(MACHADDR) : (Mach*)0)
struct Mach
{
ulong splpc; /* pc of last caller to splhi */
int machno; /* physical id of processor */
Proc* proc; /* current process on this processor */
ulong ticks; /* of the clock since boot time */
Label sched; /* scheduler wakeup */
int intr;
uvlong fastclock; /* last sampled value */
int cpumhz;
ulong cpuhz;
uvlong cyclefreq; /* Frequency of user readable cycle counter */
u32int inidle;
u32int idleticks;
};
extern Mach *m;
extern Proc *up;
/* operating system configuration */
struct Conf
{
ulong nmach; /* processors */
ulong nproc; /* processes */
ulong ialloc; /* max interrupt time allocation in bytes */
ulong topofmem; /* top addr of memory */
int monitor; /* flag */
};
struct
{
Lock;
int machs; /* bitmap of active CPUs */
int exiting; /* shutdown */
} active;