2021-10-11 18:37:13 -03:00

137 lines
4.1 KiB
C

/* @(#)module.h 1.1 94/10/31 SMI */
#ifdef NOPROM
#define ROSS604 0x0010 /* Ross 604 rev c, d, or e */
#define ROSS604f 0x0011 /* Ross 604 rev f */
#define ROSS605b 0x001E /* Ross 605 rev b */
#define ROSS605 0x001F /* Ross 605 rev a, a.1, or a.2 */
#else
#define CPU_ROSS605 0x11
#define CPU_ROSS625 0x1f
#define CPU_VIKING 0x40
#define CPU_TSUNAMI 0x41
#define CPU_VIKING_MXCC 0x41
#define CPU_SWIFT 0x04
#endif
/* mc_type defines */
#define MC_MMC 0x01 /* galaxy MMC */
#define MC_EMC 0x02 /* EMC */
#define MC_LMC 0x03 /* EMC/LEGO */
#define MC_SMC 0x04 /* EMC/SPAM */
/*
* Viking revision defines
*/
#define VIK_REV_1DOT2 1 /* 1.2 vikings */
#define VIK_REV_2DOTX 2 /* 2.X (2.1, 2.2, 2.3, 2.4) Vikings */
#define VIK_REV_3DOT0 3 /* 3.0 Vikings */
#define VIK_REV_3DOT5 4 /* 3.5 Vikings */
#define VOY_REV_1DOT0 8
/*
* Swift revision defines
*/
#define SWIFT_REV_1DOT0 0x00 /* 1.0 Swifts */
#define SWIFT_REV_1DOT1 0x11 /* 1.1 Swifts */
#define SWIFT_REV_2DOT1 0x20 /* 2.0, 2.1 Swifts */
#define SWIFT_REV_3DOT0 0x30 /* 3.0 Swifts */
#ifndef LOCORE
/*
* We can dynamicly add or remove support for
* modules of various sorts by adding them
* to, or removing them from, this table.
*
* The semantics are: VERY VERY early in the
* execution of the kernel, we loop through
* calling the identify_func for each configured
* module. The identify_func is responsible to
* determine if running on that particular
* module type. It should return 0 if not
* that module type and a 1 if the correct type.
* The identify_func must be VERY careful to
* correctly identify module types/revisions.
* The Sun-4M Sys Arch Spec describes how
* modules are identified using the IMPL/VERS
* fields from the PSR or MCR. Some modules
* tend to bump the MCR.REV field for each new silicon
* revision so the primary identifier is usually
* via the PSR.
*/
struct module_linkage {
int (*identify_func)(/* int mcr */);
void (*setup_func)(/* int mcr */);
};
/*
* So we can see the "module_info" table
* where we need it. The table itsself
* is allocated and filled in the file
* machine/module_conf.c
* which is available in binary configurations
* so "module drivers" may be added.
*/
extern struct module_linkage module_info[];
/*
* The following pointers to functions are staticly
* initialized to an innocuous "safe" value.
* In general, MMU related things are set up to
* do the right thing for the SPARC Reference MMU,
* and VAC related things are pointed at an
* empty stub somewhere, but this may change
* without this header file being updated so
* go check it out.
*
* It is the primary job of the "setup_func"
* for a module to change these vectors wherever
* necessary to reference the proper service
* function for the detected module type.
*/
extern int (*v_mmu_getcr)();
extern int (*v_mmu_getctp)();
extern int (*v_mmu_getctx)();
extern int (*v_mmu_probe)();
extern void (*v_mmu_setcr)();
extern void (*v_mmu_setctp)();
extern void (*v_mmu_setctx)();
extern void (*v_mmu_flushall)();
extern void (*v_mmu_flushctx)();
extern void (*v_mmu_flushrgn)();
extern void (*v_mmu_flushseg)();
extern void (*v_mmu_flushpage)();
extern void (*v_mmu_flushpagectx)();
extern void (*v_mmu_getsyncflt)();
extern void (*v_mmu_getasyncflt)();
extern void (*v_mmu_chk_wdreset)();
extern void (*v_mmu_sys_ovf)();
extern void (*v_mmu_sys_unf)();
extern void (*v_mmu_wo)();
extern void (*v_mmu_wu)();
extern void (*v_mmu_log_module_err)();
extern void (*v_mmu_print_sfsr)();
extern u_int (*v_pte_offon)();
extern void (*v_mmu_writeptp)();
extern void (*v_module_wkaround)();
#ifdef VAC
extern void (*v_vac_init)();
extern void (*v_vac_flushall)();
extern void (*v_vac_usrflush)();
extern void (*v_vac_ctxflush)();
extern void (*v_vac_rgnflush)();
extern void (*v_vac_segflush)();
extern void (*v_vac_pageflush)();
extern void (*v_vac_pagectxflush)();
extern void (*v_vac_flush)();
extern void (*v_cache_on)();
extern void (*v_cache_sync)();
extern int (*v_vac_parity_chk_dis)();
#endif VAC
#endif !LOCORE