solo.h 1.88 KB
/*
 * Copyright (C) 1996-1998 by the Board of Trustees
 *    of Leland Stanford Junior University.
 * 
 * This file is part of the SimOS distribution. 
 * See LICENSE file for terms of the license. 
 *
 */

/*****************************************************************
 * solo.h
 *
 *****************************************************************/
#ifndef SOLO_H
#define SOLO_H

#include "cpu_state.h"
#include "simtypes.h"
#include "eventcallback.h"
#include "machine_params.h"

typedef struct soloState {
   bool inBarrier;
   SimTime syncStallStart;
   EventCallbackHdr syncCallback;
   void (*syncDoneCallback)(int cpuNum);   /* Called when a sync finishes */
  /* For explanations, see solo/syscall.c */
#define SYSCALL_BUF_SIZE        16384
   int syscallNum;              /* Sanity check for syscalls I can't
                                 * handle atomically */
   char syscallBuf[2][SYSCALL_BUF_SIZE];
                                /* Two buffers for syscall array assembly */
   int syscallState[2];         /* Indication of progess for this buffer */
} SoloState;

extern SoloState machineState[];

extern int soloActiveProcs;
extern int soloCPUNum;

/* The soloHighStack and soloLowStack variables will always keep the */
/* bounds of the simulated processor's stack addresses. This provides */
/* flashlite's virtual to physical mapping function to know to put */
/* stack pages local. */
extern VA soloLowStack;
extern VA soloHighStack;
#define IS_STACK_REF(_addr) ((_addr > soloLowStack) && (_addr < soloHighStack)) 
extern int SoloEmulateSyscall(int cpuNum, int syscallNum);

extern void SoloTurnOnCaches(void);
extern void SoloTurnOffCaches(void);
extern bool SoloCachesAreOn(void);

extern void sys_place_range(unsigned start, unsigned stop, int node);
extern unsigned GetTotalMemPerProc(void);
extern void FlashLiteResetStats(void);
extern void SoloBackdoorSyncFinish(int cpuNum);



#endif