|
|
researchv9-SUN3(old)
/* @(#)buserr.h 1.1 86/02/03 SMI */
/*
* Copyright (c) 1985 by Sun Microsystems, Inc.
*/
/*
* Definitions and structures related to 68020 bus error handling for Sun-3.
*/
#ifndef _BUSERR_
#define _BUSERR_
#ifndef LOCORE
/*
* Auxiliary information stacked by hardware on Bus Error or Address Error.
*/
/*
* 68010/68020 "type 0" normal four word stack.
*/
#define SF_NORMAL 0x0
/*
* 68020 "type 1" throwaway four word stack.
*/
#define SF_THROWAWAY 0x1
/*
* 68020 "type 2" normal six word stack frame.
*/
#define SF_NORMAL6 0x2
struct bei_normal6 {
int bei_pc; /* pc where error occurred */
};
/*
* 68020 "type 9" co-processor mid-instruction exception stack frame.
*/
#define SF_COPROC 0x9
struct bei_coproc {
int bei_pc; /* pc where error occured */
int bei_internal; /* an internal register */
int bei_eea; /* evaluated effective address */
};
/*
* 68020 "type A" medium bus cycle fault stack frame.
*/
#define SF_MEDIUM 0xA
struct bei_medium {
short bei_internal; /* an internal register */
u_int bei_faultc: 1; /* fault on stage c of instruction pipe */
u_int bei_faultb: 1; /* fault on stage b of instruction pipe */
u_int bei_rerunc: 1; /* rerun stage c */
u_int bei_rerunb: 1; /* rerun stage b */
u_int : 3;
u_int bei_dfault: 1; /* fault/rerun on data */
u_int bei_rmw : 1; /* read/modify/write */
u_int bei_rw : 1; /* read=1,write=0 */
u_int bei_size : 2; /* size code for data cycle */
u_int : 1;
u_int bei_fcode : 3; /* function code */
short bei_ipsc; /* instruction pipe stage c */
short bei_ipsb; /* instruction pipe stage b */
int bei_fault; /* fault address */
int bei_internal2; /* another internal register */
int bei_dob; /* data output buffer */
int bei_internal3; /* yet another internal register */
};
/*
* 68020 "type B" long bus cycle fault stack frame.
*/
#define SF_LONGB 0xB
struct bei_longb {
short bei_internal; /* an internal register */
u_int bei_faultc: 1; /* fault on stage c of instruction pipe */
u_int bei_faultb: 1; /* fault on stage b of instruction pipe */
u_int bei_rerunc: 1; /* rerun stage c */
u_int bei_rerunb: 1; /* rerun stage b */
u_int : 3;
u_int bei_dfault: 1; /* fault/rerun on data */
u_int bei_rmw : 1; /* read/modify/write */
u_int bei_rw : 1; /* read=1,write=0 */
u_int bei_size : 2; /* size code for data cycle */
u_int : 1;
u_int bei_fcode : 3; /* function code */
short bei_ipsc; /* instruction pipe stage c */
short bei_ipsb; /* instruction pipe stage b */
int bei_fault; /* fault address */
int bei_internal2; /* another internal register */
int bei_dob; /* data output buffer */
int bei_internal3; /* yet another internal register */
int bei_internal4; /* yet another internal register */
int bei_stageb; /* stage B address */
int bei_internal5; /* yet another internal register */
int bei_dib; /* data input buffer */
int bei_internal6[11];/* more internal registers */
};
#endif !LOCORE
/*
* The System Bus Error Register captures the state of the
* system as of the last bus error. The Bus Error Register
* always latches the cause of the most recent bus error.
* Thus, in the case of stacked bus errors, the information
* relating to the earlier bus errors is lost. The Bus Error
* register is read-only and is addressed in FC_MAP space.
* The Bus Error Register is clocked for bus errors for CPU Cycles
* line. The Bus Error Register is not clocked for DVMA cycles
* or for CPU accesses to the floating point chip with the
* chip not enabled.
*
* The be_proterr bit is set only if the valid bit was set AND the
* page protection does not allow the kind of operation attempted.
* The rest of the bits are 1 if they caused the error.
*/
#ifndef LOCORE
struct buserrorreg {
u_int be_invalid :1; /* Page map Valid bit was off */
u_int be_proterr :1; /* Protection error */
u_int be_timeout :1; /* Bus access timed out */
u_int be_vmeberr :1; /* VMEbus bus error */
u_int be_fpaberr :1; /* FPA bus error */
u_int be_fpaena :1; /* FPA enable error */
u_int :1;
u_int be_watchdog :1; /* Watchdog reset */
};
#endif !LOCORE
/*
* Equivalent bits.
*/
#define BE_INVALID 0x80 /* page map was invalid */
#define BE_PROTERR 0x40 /* protection error */
#define BE_TIMEOUT 0x20 /* bus access timed out */
#define BE_VMEBERR 0x10 /* VMEbus bus error */
#define BE_FPABERR 0x08 /* FPA bus error */
#define BE_FPAENA 0x04 /* FPA enable error */
#define BE_WATCHDOG 0x01 /* Watchdog reset */
#define BUSERRREG 0x60000000 /* addr of buserr reg in FC_MAP space */
#define BUSERR_BITS "\20\10INVALID\7PROTERR\6TIMEOUT\5VMEBERR\4FPABERR\3FPAENA\1WATCHDOG"
#endif !_BUSERR_
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.