root/sys/arch/vax/include/rpb.h
/*      $NetBSD: rpb.h,v 1.10 2017/05/22 17:12:11 ragge Exp $ */
/*
 * Copyright (c) 1995 Ludd, University of Lule}, Sweden.
 * All rights reserved.
 *
 * This code is derived from software contributed to Ludd by Bertram Barth.
 *
 * 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.
 *
 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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.
 */
#ifndef _VAX_RPB_H_
#define _VAX_RPB_H_

/*
 * Look at "VAX/VMS Internals and Data Structures" around page 907
 * to get more info about RPB.
 */

struct rpb {            /* size         description */
        struct rpb *rpb_base;   /* 4  physical base address of block */
        void  (*rpb_restart)(void);/* 4  physical address of restart routine */
        long    rpb_chksum;/* 4  checksum of first 31 longwords of restart */
        long    rpb_rstflg;     /* 4  Restart in progress flag */
        long    rpb_haltpc;     /* 4  PC at HALT/restart */
                        /* offset: 20 */
        long    rpb_haltpsl;/* 4  PSL at HALT/restart */
        long    rpb_haltcode;/* 4  reason for restart */
        long    rpb_bootr0;/* 24  Saved bootstrap parameters (R0 through R5) */
        long    rpb_bootr1;
        long    rpb_bootr2;
        long    rpb_bootr3;
        long    rpb_bootr4;
        long    rpb_bootr5;
        long    iovec;  /* 4  Address of bootstrap driver */
        long    iovecsz;/* 4  Size (in bytes) of bootstrap driver */
                        /* offset: 60 */
        long    fillbn; /* 4  LBN of seconday bootstrap file */
        long    filsiz; /* 4  Size (in blocks) of seconday bootstrap file */
        long    pfnmap[2];      /* 8  Descriptor of PFN bitmap */
        long    pfncnt; /* 4  Count of physical pages */
                        /* offset: 80 */
        long    svaspt; /* 4  system virtual address of system page table */
        long    csrphy; /* 4  Physical Address of UBA device CSR */
        long    csrvir; /* 4  Virtual Address of UBA device CSR */
        long    adpphy; /* 4  Physical Address of adapter configurate reg. */
        long    adpvir; /* 4  Virtual Address of adapter configurate reg. */
                        /* offset: 100 */
        short   unit;   /* 2  Bootstrap device unit number */
        u_char  devtyp; /* 1  Bootstrap device type code */
        u_char  slave;  /* 1  Bootstrap device slave unit number */
        char    file[40];       /* 40  Secondary bootstrap file name */
        u_char  confreg[16];    /* 16  Byte array of adapter types */
                        /* offset: 160 */
#if 0
        u_char  hdrpgcnt; /* 1  Count of header pages in 2nd bootstrap image */
        short   bootndt;/* 2  Type of boot adapter */
        u_char  flags;  /* 1  Miscellaneous flag bits */
#else
        long    align;  /* if the compiler doesnt proper alignment */
#endif
        long    max_pfn;/* 4  Absolute highest PFN */
        long    sptep;  /* 4  System space PTE prototype register */
        long    sbr;    /* 4  Saved system base register */
        long    cpudbvec;/* 4  Physical address of per-CPU database vector */
                        /* offset: 180 */
        long    cca_addr;       /* 4  Physical address of CCA */
        long    slr;    /* 4  Saved system length register */
        long    memdesc[16];    /* 64  Longword array of memory descriptors */
        long    smp_pc; /* 4  SMP boot page physical address */
        long    wait;   /* 4  Bugcheck loop code for attached processor */
                        /* offset: 260 */
        long    badpgs; /* 4  Number of bad pages found in memory scan */
        u_char  ctrlltr;/* 1  Controller letter designation */
        u_char  scbpagct;       /* 1  SCB page count */
        u_char  reserved[6];    /* 6  -- */
        long    vmb_revision;   /* 4  VMB revision label */
};

/*
 * Bootstrap device number encoding.
 */
#define BDEV_HP         0
#define BDEV_RK         1
#define BDEV_RL         2
#define BDEV_IDC        3
#define BDEV_UDA        17
#define BDEV_TK         18
#define BDEV_HSC        32
#define BDEV_KDB        33
#define BDEV_KRB        34
#define BDEV_NK         35
#define BDEV_RD         36      /* ST506/MFM disk on HDC9224 */
#define BDEV_ST         37      /* SCSI tape on NCR5380 */
#define BDEV_SD         42      /* SCSI disk on NCR5380 */
#define BDEV_SDN        46      /* SCSI disk on NCR5394 (VS4000) */
#define BDEV_CNSL       64
#define BDEV_QE         96
#define BDEV_DE         97
#define BDEV_NI         98
#define BDEV_LE         99
#define BDEV_ZE         100

#ifdef _KERNEL
extern struct rpb rpb;
#endif

#endif /* _VAX_RPB_H_ */