#       $NetBSD: genassym.cf,v 1.51 2024/01/16 03:44:44 thorpej Exp $

#
# Copyright (c) 1982, 1990, 1993
#       The Regents of the University of California.  All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions
# are met:
# 1. Redistributions of source code must retain the above copyright
#    notice, this list of conditions and the following disclaimer.
# 2. Redistributions in binary form must reproduce the above copyright
#    notice, this list of conditions and the following disclaimer in the
#    documentation and/or other materials provided with the distribution.
# 3. Neither the name of the University nor the names of its contributors
#    may be used to endorse or promote products derived from this software
#    without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
# ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
# SUCH DAMAGE.
#
#       @(#)genassym.c  8.3 (Berkeley) 1/4/94
#

include <sys/param.h>
include <sys/buf.h>
include <sys/proc.h>
include <sys/mbuf.h>
include <sys/msgbuf.h>
include <sys/syscall.h>

include <uvm/uvm.h>

include <machine/hp300spu.h>
include <machine/cpu.h>
include <machine/fcode.h>
include <machine/frame.h>
include <machine/intr.h>
include <machine/psl.h>
include <machine/pcb.h>
include <machine/pte.h>

include <hp300/dev/intioreg.h>
include <hp300/dev/dioreg.h>
include <hp300/dev/diodevs.h>
include <hp300/hp300/clockreg.h>

# values for mmutype
define  MMU_68040               MMU_68040
define  MMU_68030               MMU_68030
define  MMU_HP                  MMU_HP
define  MMU_68851               MMU_68851

# MMU configuration options
ifdef M68K_MMU_HP
define  M68K_MMU_HP             1
endif
ifdef M68K_MMU_MOTOROLA
define  M68K_MMU_MOTOROLA       1
endif

# values for cputype
define  CPU_68020               CPU_68020
define  CPU_68030               CPU_68030
define  CPU_68040               CPU_68040

# CPU configuration options
ifdef M68020
define  M68020                  1
endif
ifdef M68030
define  M68030                  1
endif
ifdef M68040
define  M68040                  1
endif

# values for fputype
define  FPU_68881               FPU_68881
define  FPU_68882               FPU_68882
define  FPU_68040               FPU_68040

# values for machineid
define  HP_320                  HP_320
define  HP_330                  HP_330
define  HP_340                  HP_340
define  HP_345                  HP_345
define  HP_350                  HP_350
define  HP_360                  HP_360
define  HP_362                  HP_362
define  HP_370                  HP_370
define  HP_375                  HP_375
define  HP_380                  HP_380
define  HP_382                  HP_382
define  HP_385                  HP_385
define  HP_400                  HP_400
define  HP_425                  HP_425
define  HP_433                  HP_433

# values for mmuid
define  MMUID_345               MMUID_345
define  MMUID_375               MMUID_375
define  MMUID_382               MMUID_382
define  MMUID_385               MMUID_385
define  MMUID_425_T             MMUID_425_T
define  MMUID_425_S             MMUID_425_S
define  MMUID_433_T             MMUID_433_T
define  MMUID_433_S             MMUID_433_S
define  MMUID_425_E             MMUID_425_E

define  MMUID_SHIFT             MMUID_SHIFT
define  MMUID_MASK              MMUID_MASK

# values for ectype
define  EC_PHYS                 EC_PHYS
define  EC_NONE                 EC_NONE
define  EC_VIRT                 EC_VIRT

# Cache type configuration options
ifdef CACHE_HAVE_VAC
define  CACHE_HAVE_VAC          1
endif
ifdef CACHE_HAVE_PAC
define  CACHE_HAVE_PAC          1
endif

# general constants
define  UPAGES                  UPAGES
define  USPACE                  USPACE
define  PAGE_SIZE               PAGE_SIZE
define  PGSHIFT                 PGSHIFT
define  USRSTACK                USRSTACK
define  MAXADDR                 MAXADDR

# MMU configuration constants (from pmap.h)
export  MMU51_SRP_BITS
export  MMU51_CRP_BITS
export  MMU51_TCR_BITS
export  MMU40_TCR_BITS

# lwp & proc fields and values
define  L_PCB                   offsetof(struct lwp, l_addr)
define  L_PROC                  offsetof(struct lwp, l_proc)
define  L_MD_REGS               offsetof(struct lwp, l_md.md_regs)
define  L_MD_FLAGS              offsetof(struct lwp, l_md.md_flags)
define  P_FLAG                  offsetof(struct proc, p_flag)
define  P_RASLIST               offsetof(struct proc, p_raslist)
define  P_VMSPACE               offsetof(struct proc, p_vmspace)

# interrupt event counters
define  SIZEOF_EVCNT            sizeof(struct evcnt)
define  EV_COUNT                offsetof(struct evcnt, ev_count)

# interrupt/fault metering
define  CI_NINTR                offsetof(struct cpu_info, ci_data.cpu_nintr)

# PSL values (should just include psl.h?)
define  PSL_S                   PSL_S
define  PSL_IPL7                PSL_IPL7
define  PSL_LOWIPL              PSL_LOWIPL
define  PSL_HIGHIPL             PSL_HIGHIPL
define  PSL_USER                PSL_USER
define  PSL_TS                  PSL_T | PSL_S
define  SPL1                    PSL_S | PSL_IPL1
define  SPL2                    PSL_S | PSL_IPL2
define  SPL3                    PSL_S | PSL_IPL3
define  SPL4                    PSL_S | PSL_IPL4
define  SPL5                    PSL_S | PSL_IPL5
define  SPL6                    PSL_S | PSL_IPL6

# magic
define  FC_USERD                FC_USERD
define  INTIOBASE               INTIOBASE
define  MMUBASE                 MMUBASE
define  MMUSTAT                 MMUSTAT
define  MMUCMD                  MMUCMD
define  MMUSSTP                 MMUSSTP
define  MMUUSTP                 MMUUSTP
define  MMUTBINVAL              MMUTBINVAL
define  MMU_BERR                MMU_BERR
define  MMU_ENAB                MMU_ENAB
define  MMU_FAULT               MMU_FAULT
define  MMU_CEN                 MMU_CEN
define  MMU_IEN                 MMU_IEN
define  MMU_FPE                 MMU_FPE
define  DC_FREEZE               DC_FREEZE
define  CACHE40_ON              CACHE40_ON
define  CACHE_ON                CACHE_ON
define  CACHE_OFF               CACHE_OFF
define  CACHE_CLR               CACHE_CLR
define  IC_CLEAR                IC_CLEAR
define  DC_CLEAR                DC_CLEAR

# pte/ste bits
define  PG_V                    PG_V
define  PG_NV                   PG_NV
define  PG_RO                   PG_RO
define  PG_RW                   PG_RW
define  PG_CI                   PG_CI
define  PG_PROT                 PG_PROT
define  PG_FRAME                PG_FRAME
define  SG_V                    SG_V
define  SG_NV                   SG_NV
define  SG_RW                   SG_RW
define  SG_FRAME                SG_FRAME
define  SG_ISHIFT               SG_ISHIFT

# frame fields
define  TF_PC                   offsetof(struct frame, f_pc)

# pcb fields
define  PCB_PS                  offsetof(struct pcb, pcb_ps)
define  PCB_USP                 offsetof(struct pcb, pcb_usp)
define  PCB_REGS                offsetof(struct pcb, pcb_regs)
define  PCB_ONFAULT             offsetof(struct pcb, pcb_onfault)
define  PCB_FPCTX               offsetof(struct pcb, pcb_fpregs)
define  SIZEOF_PCB              sizeof(struct pcb)

# exception frame offset/sizes
define  FR_SP                   offsetof(struct frame, f_regs[15])
define  FR_HW                   offsetof(struct frame, f_sr)
define  FR_ADJ                  offsetof(struct frame, f_stackadj)
define  FR_SIZE                 sizeof(struct trapframe)

# FP frame offsets
define  FPF_REGS                offsetof(struct fpframe, fpf_regs[0])
define  FPF_FPCR                offsetof(struct fpframe, fpf_fpcr)

# system calls
define  SYS_exit                SYS_exit
define  SYS_execve              SYS_execve
define  SYS_compat_16___sigreturn14     SYS_compat_16___sigreturn14
define  SYS_compat_13_sigreturn13 SYS_compat_13_sigreturn13

# clock registers
define  CLKSR                   CLKSR
define  CLKMSB1                 CLKMSB1
define  CLKMSB3                 CLKMSB3

# DIO macro (to identify HP362)
define  DIOII_BASE              DIOII_BASE
define  DIO_IDOFF               DIO_IDOFF
define  DIO_SECIDOFF            DIO_SECIDOFF
define  DIO_DEVICE_ID_FRAMEBUFFER       DIO_DEVICE_ID_FRAMEBUFFER