/*
 * Author   : Kavita Bala 
 * Email    : kaybee@lcs.mit.edu
 * Comment  : Header file with all declarations for the PTLB
 */



#include <mach/mips/vm_param.h>

#ifndef FALSE
#define FALSE                             0
#define TRUE                              1
#endif

#define KB_TMR_K1                           96 + 2048  /* 24 */
#define KB_TMR_T1                          100 + 2048  /* 25 */
#define KB_TMR_AT                          104 + 2048  /* 26 */

#define KB_EXC_FRAME_SP                    108 + 2048  /* 27 */
#define KB_EXC_FRAME_SP_PTR                 27 +  512  /* 27 */
#define KB_EXC_FRAME_PC                    112 + 2048  /* 28 */
#define KB_EXC_FRAME_PC_PTR                 28 +  512  /* 28 */

#define KB_TOTAL_TRAPS                    29*4 + 2048 /* 29 */
#define KB_TOTAL_TRAPS_PTR                29   + 512


#define KB_PID_PTR                                   0
#define KB_PID                                       0


#define MAX_COMMAND                       4

#define KB_PREFETCH_RESET                 0
#define KB_PREFETCH_STATS                 1
#define KB_PREFETCH_START                 2
#define KB_PREFETCH_STOP                  3
#define KB_PREFETCH_TLB_PID               4


#define KB_PAGE_SIZE                      1024*4
#define KB_PTLB_SIZE                      1024*4*16 /* Each entry is of size 4
                                                     */ 
#define KB_PREFETCH_NO_OF_ENTRIES         1024*4

#define KB_PTLB_MASK                     0x7ff8
#define KB_TLB_HI_VPN_MASK               0xfffff000
#define KB_KPTE_ADDR                     KPTEADDR
#define KB_PTLB_SHIFT                     9
#define KB_L1K                            1
#define KB_KPT                            1
#define KB_L2                             0

#define KB_K2SEG_MASK                    0xc0000000
#define KB_K0_OR_K1_SEG_MASK             0x80000000 
#define KB_PTEBASE_MASK                  0xffe00000
#define KB_LO_MASK                       0xfffffffc
#define KB_SW_INDEX_MASK                 0x7ff8 


#define IOC_CTR            0xbf8401e0


#ifndef ASSEMBLER
#include <mach/mach_types.h>
extern int             prefetch_intercept_enabled;
extern int             kb_prefetch_trace_on, kb_prefetch_index;
extern int             kb_server_pc_index, kb_sys_trace_index;

extern unsigned int            kb_overhead_added;


extern vm_offset_t     kb_prefetch_ptr;
extern vm_offset_t     kb_ptlb;
extern vm_offset_t     kb_stlb_tmp_space_ptr; /* kb tmr */

extern int             kb_already_there, kb_prefetch_l2, kb_prefetch_l1k,
                       kb_prefetch_kpt, kb_basic_other;
extern int             kb_basic_user_pt, kb_basic_l2, kb_basic_l1k,
                       kb_basic_kpt;

struct prefetch_stats {
  int                     already_there;
  int                     prefetch_l2;
  int                     prefetch_l1k;
  int                     prefetch_kpt;
  int                     basic_user_pt;
  int                     basic_l2;
  int                     basic_l1k;
  int                     basic_kpt;
  int                     other;
  int                     nested_l2;
  int                     nested_l1k;
  int                     nested_user_pt;

  unsigned int            l2_time;
  unsigned int            other_time;


  int                     tlb_traps;


  int       tmr_max;
  int       tmr_min;
  unsigned int       overhead_added;
};


typedef struct prefetch_stats prefetch_stats_t;
extern prefetch_stats_t kb_stats;
#endif ASSEMBLER









