diff options
Diffstat (limited to 'usr/src/uts/common')
24 files changed, 428 insertions, 765 deletions
diff --git a/usr/src/uts/common/io/mem.c b/usr/src/uts/common/io/mem.c index 0569b0ebae..11667e8c59 100644 --- a/usr/src/uts/common/io/mem.c +++ b/usr/src/uts/common/io/mem.c @@ -68,13 +68,15 @@ #include <sys/debug.h> #include <sys/fm/protocol.h> -#ifdef __sparc +#if defined(__sparc) extern int cpu_get_mem_name(uint64_t, uint64_t *, uint64_t, char *, int, int *); extern int cpu_get_mem_info(uint64_t, uint64_t, uint64_t *, uint64_t *, uint64_t *, int *, int *, int *); extern size_t cpu_get_name_bufsize(void); extern int cpu_get_mem_sid(char *, char *, int, int *); extern int cpu_get_mem_addr(char *, char *, uint64_t, uint64_t *); +#elif defined(__i386) || defined(__amd64) +#include <sys/cpu_module.h> #endif /* __sparc */ /* @@ -415,6 +417,9 @@ mmwrite(dev_t dev, struct uio *uio, cred_t *cred) static int mmioctl_vtop(intptr_t data) { +#ifdef _SYSCALL32 + mem_vtop32_t vtop32; +#endif mem_vtop_t mem_vtop; proc_t *p; pfn_t pfn = (pfn_t)PFN_INVALID; @@ -422,13 +427,36 @@ mmioctl_vtop(intptr_t data) struct as *as; struct seg *seg; - if (copyin((void *)data, &mem_vtop, sizeof (mem_vtop_t))) - return (EFAULT); + if (get_udatamodel() == DATAMODEL_NATIVE) { + if (copyin((void *)data, &mem_vtop, sizeof (mem_vtop_t))) + return (EFAULT); + } +#ifdef _SYSCALL32 + else { + if (copyin((void *)data, &vtop32, sizeof (mem_vtop32_t))) + return (EFAULT); + mem_vtop.m_as = (struct as *)vtop32.m_as; + mem_vtop.m_va = (void *)vtop32.m_va; + + if (mem_vtop.m_as != NULL) + return (EINVAL); + } +#endif + if (mem_vtop.m_as == &kas) { pfn = hat_getpfnum(kas.a_hat, mem_vtop.m_va); - } else if (mem_vtop.m_as == NULL) { - return (EIO); } else { + if (mem_vtop.m_as == NULL) { + /* + * Assume the calling process's address space if the + * caller didn't specify one. + */ + p = curthread->t_procp; + if (p == NULL) + return (EIO); + mem_vtop.m_as = p->p_as; + } + mutex_enter(&pidlock); for (p = practive; p != NULL; p = p->p_next) { if (p->p_as == mem_vtop.m_as) { @@ -461,8 +489,18 @@ mmioctl_vtop(intptr_t data) mem_vtop.m_pfn = pfn; if (pfn == PFN_INVALID) return (EIO); - if (copyout(&mem_vtop, (void *)data, sizeof (mem_vtop_t))) - return (EFAULT); + + if (get_udatamodel() == DATAMODEL_NATIVE) { + if (copyout(&mem_vtop, (void *)data, sizeof (mem_vtop_t))) + return (EFAULT); + } +#ifdef _SYSCALL32 + else { + vtop32.m_pfn = mem_vtop.m_pfn; + if (copyout(&vtop32, (void *)data, sizeof (mem_vtop32_t))) + return (EFAULT); + } +#endif return (0); } @@ -533,7 +571,7 @@ mmioctl_page_fmri_retire(int cmd, intptr_t data) if ((err = mm_get_mem_fmri(&mpage, &nvl)) < 0) return (err); - if ((err = mm_get_paddr(nvl, &pa)) < 0) { + if ((err = mm_get_paddr(nvl, &pa)) != 0) { nvlist_free(nvl); return (err); } @@ -1120,7 +1158,7 @@ mm_get_paddr(nvlist_t *nvl, uint64_t *paddr) * If the "offset" member is not present, then the address is * retrieved from the "physaddr" member. */ -#ifdef __sparc +#if defined(__sparc) if (nvlist_lookup_uint64(nvl, FM_FMRI_MEM_OFFSET, &offset) != 0) { if (nvlist_lookup_uint64(nvl, FM_FMRI_MEM_PHYSADDR, &pa) != 0) { @@ -1134,9 +1172,11 @@ mm_get_paddr(nvlist_t *nvl, uint64_t *paddr) if ((err = cpu_get_mem_addr(unum, serids[0], offset, &pa)) != 0) return (err); } -#else /* __i386, __amd64 */ - if (nvlist_lookup_uint64(nvl, FM_FMRI_MEM_PHYSADDR, &pa) != 0) +#elif defined(__i386) || defined(__amd64) + if (cmi_mc_unumtopa(NULL, nvl, &pa) == 0) return (EINVAL); +#else +#error "port me" #endif /* __sparc */ *paddr = pa; diff --git a/usr/src/uts/common/krtld/kobj.c b/usr/src/uts/common/krtld/kobj.c index 6df0916ea0..003022d104 100644 --- a/usr/src/uts/common/krtld/kobj.c +++ b/usr/src/uts/common/krtld/kobj.c @@ -20,7 +20,7 @@ * CDDL HEADER END */ /* - * Copyright 2005 Sun Microsystems, Inc. All rights reserved. + * Copyright 2006 Sun Microsystems, Inc. All rights reserved. * Use is subject to license terms. */ @@ -2970,7 +2970,7 @@ kobj_getelfsym(char *name, void *mp, int *size) } uintptr_t -kobj_lookup(void *mod, char *name) +kobj_lookup(struct module *mod, const char *name) { Sym *sp; diff --git a/usr/src/uts/common/krtld/kobj_stubs.c b/usr/src/uts/common/krtld/kobj_stubs.c index 7bc82c5139..3d972194bb 100644 --- a/usr/src/uts/common/krtld/kobj_stubs.c +++ b/usr/src/uts/common/krtld/kobj_stubs.c @@ -20,7 +20,7 @@ * CDDL HEADER END */ /* - * Copyright 2005 Sun Microsystems, Inc. All rights reserved. + * Copyright 2006 Sun Microsystems, Inc. All rights reserved. * Use is subject to license terms. */ @@ -159,7 +159,7 @@ kobj_searchsym(struct module *mp, uintptr_t value, ulong_t *offset) /*ARGSUSED*/ uintptr_t -kobj_lookup(void *mod, char *name) +kobj_lookup(struct module *mod, const char *name) { return (0); } diff --git a/usr/src/uts/common/os/chip.c b/usr/src/uts/common/os/chip.c index b6fcbe89d2..8b0bfd765d 100644 --- a/usr/src/uts/common/os/chip.c +++ b/usr/src/uts/common/os/chip.c @@ -124,6 +124,18 @@ chip_find(chipid_t chipid) return (NULL); } +chip_t * +chip_lookup(chipid_t chipid) +{ + chip_t *chp; + + mutex_enter(&cpu_lock); + chp = chip_find(chipid); + mutex_exit(&cpu_lock); + + return (chp); +} + #ifndef sun4v /* * Setup the kstats for this chip, if needed diff --git a/usr/src/uts/common/os/cpu.c b/usr/src/uts/common/os/cpu.c index e9f4453f81..674f8bd6e5 100644 --- a/usr/src/uts/common/os/cpu.c +++ b/usr/src/uts/common/os/cpu.c @@ -59,6 +59,9 @@ #include <sys/msacct.h> #include <sys/time.h> #include <sys/archsystm.h> +#if defined(__i386) || defined(__amd64) +#include <sys/x86_archext.h> +#endif extern int mp_cpu_start(cpu_t *); extern int mp_cpu_stop(cpu_t *); @@ -2067,12 +2070,19 @@ static struct { kstat_named_t ci_clock_MHz; kstat_named_t ci_chip_id; kstat_named_t ci_implementation; -#ifdef __sparcv9 + kstat_named_t ci_brandstr; + kstat_named_t ci_core_id; +#if defined(__sparcv9) kstat_named_t ci_device_ID; kstat_named_t ci_cpu_fru; #endif - kstat_named_t ci_brandstr; - kstat_named_t ci_core_id; +#if defined(__i386) || defined(__amd64) + kstat_named_t ci_vendorstr; + kstat_named_t ci_family; + kstat_named_t ci_model; + kstat_named_t ci_step; + kstat_named_t ci_clogid; +#endif } cpu_info_template = { { "state", KSTAT_DATA_CHAR }, { "state_begin", KSTAT_DATA_LONG }, @@ -2081,12 +2091,19 @@ static struct { { "clock_MHz", KSTAT_DATA_LONG }, { "chip_id", KSTAT_DATA_LONG }, { "implementation", KSTAT_DATA_STRING }, -#ifdef __sparcv9 + { "brand", KSTAT_DATA_STRING }, + { "core_id", KSTAT_DATA_LONG }, +#if defined(__sparcv9) { "device_ID", KSTAT_DATA_UINT64 }, { "cpu_fru", KSTAT_DATA_STRING }, #endif - { "brand", KSTAT_DATA_STRING }, - { "core_id", KSTAT_DATA_LONG }, +#if defined(__i386) || defined(__amd64) + { "vendor_id", KSTAT_DATA_STRING }, + { "family", KSTAT_DATA_INT32 }, + { "model", KSTAT_DATA_INT32 }, + { "stepping", KSTAT_DATA_INT32 }, + { "clog_id", KSTAT_DATA_INT32 }, +#endif }; static kmutex_t cpu_info_template_lock; @@ -2132,13 +2149,23 @@ cpu_info_kstat_update(kstat_t *ksp, int rw) cpu_info_template.ci_chip_id.value.l = chip_plat_get_chipid(cp); kstat_named_setstr(&cpu_info_template.ci_implementation, cp->cpu_idstr); -#ifdef __sparcv9 + kstat_named_setstr(&cpu_info_template.ci_brandstr, cp->cpu_brandstr); + +#if defined(__sparcv9) cpu_info_template.ci_device_ID.value.ui64 = cpunodes[cp->cpu_id].device_id; kstat_named_setstr(&cpu_info_template.ci_cpu_fru, cpu_fru_fmri(cp)); #endif - kstat_named_setstr(&cpu_info_template.ci_brandstr, cp->cpu_brandstr); +#if defined(__i386) || defined(__amd64) cpu_info_template.ci_core_id.value.l = chip_plat_get_coreid(cp); + kstat_named_setstr(&cpu_info_template.ci_vendorstr, + cpuid_getvendorstr(cp)); + cpu_info_template.ci_family.value.l = cpuid_getfamily(cp); + cpu_info_template.ci_model.value.l = cpuid_getmodel(cp); + cpu_info_template.ci_step.value.l = cpuid_getstep(cp); + cpu_info_template.ci_clogid.value.l = chip_plat_get_clogid(cp); +#endif + return (0); } @@ -2155,13 +2182,16 @@ cpu_info_kstat_create(cpu_t *cp) zoneid = ALL_ZONES; if ((cp->cpu_info_kstat = kstat_create_zone("cpu_info", cp->cpu_id, NULL, "misc", KSTAT_TYPE_NAMED, - sizeof (cpu_info_template) / sizeof (kstat_named_t), - KSTAT_FLAG_VIRTUAL, zoneid)) != NULL) { + sizeof (cpu_info_template) / sizeof (kstat_named_t), + KSTAT_FLAG_VIRTUAL, zoneid)) != NULL) { cp->cpu_info_kstat->ks_data_size += 2 * CPU_IDSTRLEN; -#ifdef __sparcv9 +#if defined(__sparcv9) cp->cpu_info_kstat->ks_data_size += strlen(cpu_fru_fmri(cp)) + 1; #endif +#if defined(__i386) || defined(__amd64) + cp->cpu_info_kstat->ks_data_size += X86_VENDOR_STRLEN; +#endif cp->cpu_info_kstat->ks_lock = &cpu_info_template_lock; cp->cpu_info_kstat->ks_data = &cpu_info_template; cp->cpu_info_kstat->ks_private = cp; diff --git a/usr/src/uts/common/os/ddifm.c b/usr/src/uts/common/os/ddifm.c index 911a7d9a2f..6edd829ba8 100644 --- a/usr/src/uts/common/os/ddifm.c +++ b/usr/src/uts/common/os/ddifm.c @@ -20,7 +20,7 @@ * CDDL HEADER END */ /* - * Copyright 2004 Sun Microsystems, Inc. All rights reserved. + * Copyright 2006 Sun Microsystems, Inc. All rights reserved. * Use is subject to license terms. */ @@ -477,7 +477,10 @@ ddi_fm_handler_register(dev_info_t *dip, ddi_err_func_t handler, return; } - pdip = (dev_info_t *)DEVI(dip)->devi_parent; + if (dip == ddi_root_node()) + pdip = dip; + else + pdip = (dev_info_t *)DEVI(dip)->devi_parent; ASSERT(pdip); @@ -529,7 +532,10 @@ ddi_fm_handler_unregister(dev_info_t *dip) return; } - pdip = (dev_info_t *)DEVI(dip)->devi_parent; + if (dip == ddi_root_node()) + pdip = dip; + else + pdip = (dev_info_t *)DEVI(dip)->devi_parent; ASSERT(pdip); @@ -581,10 +587,11 @@ ddi_fm_handler_unregister(dev_info_t *dip) * This function must be called from a driver's attach(9E) entry point. */ void -ddi_fm_init(dev_info_t *dip, int *fmcap, ddi_iblock_cookie_t *ibc) +ddi_fm_init(dev_info_t *dip, int *fmcap, ddi_iblock_cookie_t *ibcp) { struct dev_info *devi = DEVI(dip); struct i_ddi_fmhdl *fmhdl; + ddi_iblock_cookie_t ibc; int pcap, newcap = DDI_FM_NOT_CAPABLE; if (!DEVI_IS_ATTACHING(dip)) { @@ -606,11 +613,12 @@ ddi_fm_init(dev_info_t *dip, int *fmcap, ddi_iblock_cookie_t *ibc) * Initialize the default ibc. The parent may change it * depending upon its capabilities. */ - *ibc = (ddi_iblock_cookie_t)ipltospl(FM_ERR_PIL); + ibc = (ddi_iblock_cookie_t)ipltospl(FM_ERR_PIL); - pcap = i_ndi_busop_fm_init(dip, *fmcap, ibc); + pcap = i_ndi_busop_fm_init(dip, *fmcap, &ibc); } else { pcap = *fmcap; + ibc = *ibcp; } /* Initialize the per-device instance FM handle */ @@ -636,7 +644,7 @@ ddi_fm_init(dev_info_t *dip, int *fmcap, ddi_iblock_cookie_t *ibc) fmhdl->fh_acc_cache = NULL; fmhdl->fh_tgts = NULL; fmhdl->fh_dip = dip; - fmhdl->fh_ibc = *ibc; + fmhdl->fh_ibc = ibc; mutex_init(&fmhdl->fh_lock, NULL, MUTEX_DRIVER, fmhdl->fh_ibc); devi->devi_fmhdl = fmhdl; @@ -672,7 +680,7 @@ ddi_fm_init(dev_info_t *dip, int *fmcap, ddi_iblock_cookie_t *ibc) */ if (DDI_FM_DMA_ERR_CAP(*fmcap) && DDI_FM_DMA_ERR_CAP(pcap)) { - i_ndi_fmc_create(&fmhdl->fh_dma_cache, 2, *ibc); + i_ndi_fmc_create(&fmhdl->fh_dma_cache, 2, ibc); /* Set-up dma chk capability prop */ if (ddi_getprop(DDI_DEV_T_ANY, dip, DDI_PROP_DONTPASS, @@ -684,7 +692,7 @@ ddi_fm_init(dev_info_t *dip, int *fmcap, ddi_iblock_cookie_t *ibc) } if (DDI_FM_ACC_ERR_CAP(*fmcap) && DDI_FM_ACC_ERR_CAP(pcap)) { - i_ndi_fmc_create(&fmhdl->fh_acc_cache, 2, *ibc); + i_ndi_fmc_create(&fmhdl->fh_acc_cache, 2, ibc); /* Set-up dma chk capability prop */ if (ddi_getprop(DDI_DEV_T_ANY, dip, DDI_PROP_DONTPASS, "fm-accchk-capable", 0) == 0) @@ -700,6 +708,9 @@ ddi_fm_init(dev_info_t *dip, int *fmcap, ddi_iblock_cookie_t *ibc) */ fmhdl->fh_cap = newcap; *fmcap = newcap; + + if (ibcp != NULL) + *ibcp = ibc; } /* diff --git a/usr/src/uts/common/os/fm.c b/usr/src/uts/common/os/fm.c index 33e8357a88..897697c2dc 100644 --- a/usr/src/uts/common/os/fm.c +++ b/usr/src/uts/common/os/fm.c @@ -20,7 +20,7 @@ * CDDL HEADER END */ /* - * Copyright 2005 Sun Microsystems, Inc. All rights reserved. + * Copyright 2006 Sun Microsystems, Inc. All rights reserved. * Use is subject to license terms. */ @@ -60,7 +60,6 @@ #include <sys/sysevent.h> #include <sys/sysevent_impl.h> #include <sys/nvpair.h> -#include <sys/nvpair_impl.h> #include <sys/cmn_err.h> #include <sys/cpuvar.h> #include <sys/sysmacros.h> @@ -73,6 +72,8 @@ #include <sys/cpuvar.h> #include <sys/console.h> #include <sys/panic.h> +#include <sys/kobj.h> +#include <sys/sunddi.h> #include <sys/systeminfo.h> #include <sys/sysevent/eventdefs.h> #include <sys/fm/util.h> @@ -614,15 +615,13 @@ fm_nvlist_create(nv_alloc_t *nva) void fm_nvlist_destroy(nvlist_t *nvl, int flag) { - nv_alloc_t *nvhdl; - - nvhdl = ((nvpriv_t *)(uintptr_t)nvl->nvl_priv)->nvp_nva; + nv_alloc_t *nva = nvlist_lookup_nv_alloc(nvl); nvlist_free(nvl); - if (nvhdl != NULL) { + if (nva != NULL) { if (flag == FM_NVA_FREE) - fm_nva_xdestroy(nvhdl); + fm_nva_xdestroy(nva); } } @@ -820,53 +819,88 @@ fm_ereport_set(nvlist_t *ereport, int version, const char *erpt_class, atomic_add_64(&erpt_kstat_data.erpt_set_failed.value.ui64, 1); } +/* + * Set-up and validate the members of an hc fmri according to; + * + * Member name Type Value + * =================================================== + * version uint8_t 0 + * auth nvlist_t <auth> + * hc-name string <name> + * hc-id string <id> + * + * Note that auth and hc-id are optional members. + */ + +#define HC_MAXPAIRS 20 +#define HC_MAXNAMELEN 50 + static int -i_fm_fmri_hc_set_v0(nvlist_t *hc, uint32_t size, va_list ap) +fm_fmri_hc_set_common(nvlist_t *fmri, int version, const nvlist_t *auth) { - int i, ret; - const char *name, *id; - nvlist_t **hc_nvl; + if (version != FM_HC_SCHEME_VERSION) { + atomic_add_64(&erpt_kstat_data.fmri_set_failed.value.ui64, 1); + return (0); + } - if (size <= 0) + if (nvlist_add_uint8(fmri, FM_VERSION, version) != 0 || + nvlist_add_string(fmri, FM_FMRI_SCHEME, FM_FMRI_SCHEME_HC) != 0) { + atomic_add_64(&erpt_kstat_data.fmri_set_failed.value.ui64, 1); return (0); + } - hc_nvl = kmem_zalloc(size * sizeof (nvlist_t *), KM_SLEEP); + if (auth != NULL && nvlist_add_nvlist(fmri, FM_FMRI_AUTHORITY, + (nvlist_t *)auth) != 0) { + atomic_add_64(&erpt_kstat_data.fmri_set_failed.value.ui64, 1); + return (0); + } - for (i = 0; i < size; ++i) { - name = va_arg(ap, const char *); - if (name == NULL) { - ret = EINVAL; - goto fail; - } - id = va_arg(ap, const char *); - if ((hc_nvl[i] = fm_nvlist_create( - ((nvpriv_t *)(uintptr_t)hc->nvl_priv)->nvp_nva)) == NULL) { - ret = ENOMEM; - goto fail; + return (1); +} + +void +fm_fmri_hc_set(nvlist_t *fmri, int version, const nvlist_t *auth, + nvlist_t *snvl, int npairs, ...) +{ + nv_alloc_t *nva = nvlist_lookup_nv_alloc(fmri); + nvlist_t *pairs[HC_MAXPAIRS]; + va_list ap; + int i; + + if (!fm_fmri_hc_set_common(fmri, version, auth)) + return; + + npairs = MIN(npairs, HC_MAXPAIRS); + + va_start(ap, npairs); + for (i = 0; i < npairs; i++) { + const char *name = va_arg(ap, const char *); + uint32_t id = va_arg(ap, uint32_t); + char idstr[11]; + + (void) snprintf(idstr, sizeof (idstr), "%u", id); + + pairs[i] = fm_nvlist_create(nva); + if (nvlist_add_string(pairs[i], FM_FMRI_HC_NAME, name) != 0 || + nvlist_add_string(pairs[i], FM_FMRI_HC_ID, idstr) != 0) { + atomic_add_64( + &erpt_kstat_data.fmri_set_failed.value.ui64, 1); } - if ((ret = nvlist_add_string(hc_nvl[i], FM_FMRI_HC_NAME, - name)) != 0) - goto fail; - if ((ret = nvlist_add_string(hc_nvl[i], FM_FMRI_HC_ID, - id)) != 0) - goto fail; } + va_end(ap); - if ((ret = nvlist_add_nvlist_array(hc, FM_FMRI_HC_LIST, hc_nvl, - size)) != 0) - goto fail; + if (nvlist_add_nvlist_array(fmri, FM_FMRI_HC_LIST, pairs, npairs) != 0) + atomic_add_64(&erpt_kstat_data.fmri_set_failed.value.ui64, 1); - kmem_free(hc_nvl, size * sizeof (nvlist_t *)); - return (0); + for (i = 0; i < npairs; i++) + fm_nvlist_destroy(pairs[i], FM_NVA_RETAIN); -fail: - for (i = 0; i < size; ++i) { - if (hc_nvl[i] != NULL) - fm_nvlist_destroy(hc_nvl[i], FM_NVA_RETAIN); + if (snvl != NULL) { + if (nvlist_add_nvlist(fmri, FM_FMRI_HC_SPECIFIC, snvl) != 0) { + atomic_add_64( + &erpt_kstat_data.fmri_set_failed.value.ui64, 1); + } } - - kmem_free(hc_nvl, size * sizeof (nvlist_t *)); - return (ret); } /* @@ -930,47 +964,45 @@ fm_fmri_dev_set(nvlist_t *fmri_dev, int version, const nvlist_t *auth, * cpumask uint8_t <cpu_mask> * serial uint64_t <serial_id> * - * Note that auth is an optional member. + * Note that auth, cpumask, serial are optional members. * */ void fm_fmri_cpu_set(nvlist_t *fmri_cpu, int version, const nvlist_t *auth, - uint32_t cpu_id, uint8_t cpu_mask, uint64_t serial_id) + uint32_t cpu_id, uint8_t *cpu_maskp, const char *serial_idp) { - if (version != CPU_SCHEME_VERSION0) { - atomic_add_64(&erpt_kstat_data.fmri_set_failed.value.ui64, 1); + uint64_t *failedp = &erpt_kstat_data.fmri_set_failed.value.ui64; + + if (version < CPU_SCHEME_VERSION1) { + atomic_add_64(failedp, 1); return; } if (nvlist_add_uint8(fmri_cpu, FM_VERSION, version) != 0) { - atomic_add_64(&erpt_kstat_data.fmri_set_failed.value.ui64, 1); + atomic_add_64(failedp, 1); return; } if (nvlist_add_string(fmri_cpu, FM_FMRI_SCHEME, FM_FMRI_SCHEME_CPU) != 0) { - atomic_add_64(&erpt_kstat_data.fmri_set_failed.value.ui64, 1); + atomic_add_64(failedp, 1); return; } - if (auth != NULL) - if (nvlist_add_nvlist(fmri_cpu, FM_FMRI_AUTHORITY, - (nvlist_t *)auth) != 0) { - atomic_add_64( - &erpt_kstat_data.fmri_set_failed.value.ui64, 1); - } + if (auth != NULL && nvlist_add_nvlist(fmri_cpu, FM_FMRI_AUTHORITY, + (nvlist_t *)auth) != 0) + atomic_add_64(failedp, 1); - if (nvlist_add_uint32(fmri_cpu, FM_FMRI_CPU_ID, cpu_id) != 0) { - atomic_add_64(&erpt_kstat_data.fmri_set_failed.value.ui64, 1); - } + if (nvlist_add_uint32(fmri_cpu, FM_FMRI_CPU_ID, cpu_id) != 0) + atomic_add_64(failedp, 1); - if (nvlist_add_uint8(fmri_cpu, FM_FMRI_CPU_MASK, cpu_mask) != 0) { - atomic_add_64(&erpt_kstat_data.fmri_set_failed.value.ui64, 1); - } + if (cpu_maskp != NULL && nvlist_add_uint8(fmri_cpu, FM_FMRI_CPU_MASK, + *cpu_maskp) != 0) + atomic_add_64(failedp, 1); - if (nvlist_add_uint64(fmri_cpu, FM_FMRI_CPU_SERIAL_ID, serial_id) - != 0) - atomic_add_64(&erpt_kstat_data.fmri_set_failed.value.ui64, 1); + if (serial_idp == NULL || nvlist_add_string(fmri_cpu, + FM_FMRI_CPU_SERIAL_ID, (char *)serial_idp) != 0) + atomic_add_64(failedp, 1); } /* @@ -1159,3 +1191,29 @@ fm_ena_time_get(uint64_t ena) return (time); } + +/* + * Convert a getpcstack() trace to symbolic name+offset, and add the resulting + * string array to a Fault Management ereport as FM_EREPORT_PAYLOAD_NAME_STACK. + */ +void +fm_payload_stack_add(nvlist_t *payload, const pc_t *stack, int depth) +{ + int i; + char *sym; + ulong_t off; + char *stkpp[FM_STK_DEPTH]; + char buf[FM_STK_DEPTH * FM_SYM_SZ]; + char *stkp = buf; + + for (i = 0; i < depth && i != FM_STK_DEPTH; i++, stkp += FM_SYM_SZ) { + if ((sym = kobj_getsymname(stack[i], &off)) != NULL) + (void) snprintf(stkp, FM_SYM_SZ, "%s+%lx", sym, off); + else + (void) snprintf(stkp, FM_SYM_SZ, "%lx", (long)stack[i]); + stkpp[i] = stkp; + } + + fm_payload_set(payload, FM_EREPORT_PAYLOAD_NAME_STACK, + DATA_TYPE_STRING_ARRAY, FM_STK_DEPTH, stkpp, NULL); +} diff --git a/usr/src/uts/common/os/kcpc.c b/usr/src/uts/common/os/kcpc.c index f3bfd93d24..569344e8ca 100644 --- a/usr/src/uts/common/os/kcpc.c +++ b/usr/src/uts/common/os/kcpc.c @@ -19,8 +19,9 @@ * * CDDL HEADER END */ + /* - * Copyright 2005 Sun Microsystems, Inc. All rights reserved. + * Copyright 2006 Sun Microsystems, Inc. All rights reserved. * Use is subject to license terms. */ @@ -1515,41 +1516,12 @@ kcpc_invalidate(kthread_t *t) int kcpc_pcbe_tryload(const char *prefix, uint_t first, uint_t second, uint_t third) { - char modname[PCBE_NAMELEN]; - char stub[PCBE_NAMELEN]; - - if (prefix != NULL) - (void) snprintf(stub, PCBE_NAMELEN, "pcbe.%s", prefix); - else - (void) snprintf(stub, PCBE_NAMELEN, "pcbe"); - - (void) snprintf(modname, PCBE_NAMELEN, "%s.%u.%u.%u", - stub, first, second, third); - - DTRACE_PROBE1(kcpc__pcbe__spec, char *, modname); - - if (modload("pcbe", modname) >= 0) - return (0); - - (void) snprintf(modname, PCBE_NAMELEN, "%s.%u.%u", - stub, first, second); - if (modload("pcbe", modname) >= 0) - return (0); - - (void) snprintf(modname, PCBE_NAMELEN, "%s.%u", stub, first); - if (modload("pcbe", modname) >= 0) - return (0); - - if (prefix == NULL) - /* - * If no prefix was given, we have tried all possible - * PCBE names. - */ - return (-1); + uint_t s[3]; - (void) snprintf(modname, PCBE_NAMELEN, "%s", stub); - if (modload("pcbe", modname) >= 0) - return (0); + s[0] = first; + s[1] = second; + s[2] = third; - return (-1); + return (modload_qualified("pcbe", + "pcbe", prefix, ".", s, 3) < 0 ? -1 : 0); } diff --git a/usr/src/uts/common/os/modconf.c b/usr/src/uts/common/os/modconf.c index 2c033495bc..f270cad2a0 100644 --- a/usr/src/uts/common/os/modconf.c +++ b/usr/src/uts/common/os/modconf.c @@ -20,7 +20,7 @@ * CDDL HEADER END */ /* - * Copyright 2004 Sun Microsystems, Inc. All rights reserved. + * Copyright 2006 Sun Microsystems, Inc. All rights reserved. * Use is subject to license terms. */ @@ -101,6 +101,11 @@ struct mod_ops mod_miscops = { mod_null, mod_null, mod_infonull }; +/* CPU Modules */ +struct mod_ops mod_cpuops = { + mod_null, mod_null, mod_infonull +}; + /* * Cryptographic Modules */ diff --git a/usr/src/uts/common/os/modctl.c b/usr/src/uts/common/os/modctl.c index 73e0447ab1..e776a36310 100644 --- a/usr/src/uts/common/os/modctl.c +++ b/usr/src/uts/common/os/modctl.c @@ -19,6 +19,7 @@ * * CDDL HEADER END */ + /* * Copyright 2006 Sun Microsystems, Inc. All rights reserved. * Use is subject to license terms. @@ -84,15 +85,14 @@ static int modinfo(modid_t, struct modinfo *); static void mod_uninstall_all(void); static int mod_getinfo(struct modctl *, struct modinfo *); -static struct modctl *allocate_modp(char *, char *); +static struct modctl *allocate_modp(const char *, const char *); static int mod_load(struct modctl *, int); static void mod_unload(struct modctl *); static int modinstall(struct modctl *); static int moduninstall(struct modctl *); -static struct modctl *mod_hold_by_name_common(struct modctl *, char *); -static struct modctl *mod_hold_by_id(modid_t); +static struct modctl *mod_hold_by_name_common(struct modctl *, const char *); static struct modctl *mod_hold_next_by_id(modid_t); static struct modctl *mod_hold_loaded_mod(struct modctl *, char *, int *); static struct modctl *mod_hold_installed_mod(char *, int, int *); @@ -1943,6 +1943,71 @@ modload(char *subdir, char *filename) } /* + * Load a module using a series of qualified names from most specific to least + * specific, e.g. for subdir "foo", p1 "bar", p2 "baz", we might try: + * + * foo/bar.baz.1.2.3 + * foo/bar.baz.1.2 + * foo/bar.baz.1 + * + * Return the module ID on success; -1 if no module was loaded. + */ +int +modload_qualified(const char *subdir, const char *p1, + const char *p2, const char *delim, uint_t suffv[], int suffc) +{ + char path[MOD_MAXPATH]; + size_t n, resid = sizeof (path); + char *p = path; + + char **dotv; + int i, rc, id; + modctl_t *mp; + + if (p2 != NULL) + n = snprintf(p, resid, "%s/%s%s%s", subdir, p1, delim, p2); + else + n = snprintf(p, resid, "%s/%s", subdir, p1); + + if (n >= resid) + return (-1); + + p += n; + resid -= n; + dotv = kmem_alloc(sizeof (char *) * (suffc + 1), KM_SLEEP); + + for (i = 0; i < suffc; i++) { + dotv[i] = p; + n = snprintf(p, resid, "%s%u", delim, suffv[i]); + + if (n >= resid) { + kmem_free(dotv, sizeof (char *) * (suffc + 1)); + return (-1); + } + + p += n; + resid -= n; + } + + dotv[suffc] = p; + + for (i = suffc; i >= 0; i--) { + dotv[i][0] = '\0'; + mp = mod_hold_installed_mod(path, 1, &rc); + + if (mp != NULL) { + kmem_free(dotv, sizeof (char *) * (suffc + 1)); + id = mp->mod_id; + mod_release_mod(mp); + return (id); + } + } + + kmem_free(dotv, sizeof (char *) * (suffc + 1)); + return (-1); +} + +/* * Load a module. */ int @@ -2440,7 +2505,7 @@ modadd(struct modctl *mp) /*ARGSUSED*/ static struct modctl * -allocate_modp(char *filename, char *modname) +allocate_modp(const char *filename, const char *modname) { struct modctl *mp; @@ -2473,12 +2538,12 @@ modgetsymname(uintptr_t value, ulong_t *offset) } /* - * Lookup a symbol in a specified module. This is a wrapper routine that - * calls kobj_lookup(). kobj_lookup() may go away but this - * wrapper will prevent callers from noticing. + * Lookup a symbol in a specified module. These are wrapper routines that + * call kobj_lookup(). kobj_lookup() may go away but these wrappers will + * prevent callers from noticing. */ uintptr_t -modlookup(char *modname, char *symname) +modlookup(const char *modname, const char *symname) { struct modctl *modp; uintptr_t val; @@ -2490,6 +2555,14 @@ modlookup(char *modname, char *symname) return (val); } +uintptr_t +modlookup_by_modctl(modctl_t *modp, const char *symname) +{ + ASSERT(modp->mod_ref > 0 || modp->mod_busy); + + return (kobj_lookup(modp->mod_mp, symname)); +} + /* * Ask the user for the name of the system file and the default path * for modules. @@ -3149,9 +3222,9 @@ mod_hold_by_modctl(struct modctl *mp, int f) } static struct modctl * -mod_hold_by_name_common(struct modctl *dep, char *filename) +mod_hold_by_name_common(struct modctl *dep, const char *filename) { - char *modname; + const char *modname; struct modctl *mp; char *curname, *newname; int found = 0; @@ -3232,12 +3305,12 @@ mod_hold_by_name_requisite(struct modctl *dep, char *filename) } struct modctl * -mod_hold_by_name(char *filename) +mod_hold_by_name(const char *filename) { return (mod_hold_by_name_common(NULL, filename)); } -static struct modctl * +struct modctl * mod_hold_by_id(modid_t modid) { struct modctl *mp; diff --git a/usr/src/uts/common/os/panic.c b/usr/src/uts/common/os/panic.c index e085b0e586..87910574f5 100644 --- a/usr/src/uts/common/os/panic.c +++ b/usr/src/uts/common/os/panic.c @@ -20,7 +20,7 @@ * CDDL HEADER END */ /* - * Copyright 2005 Sun Microsystems, Inc. All rights reserved. + * Copyright 2006 Sun Microsystems, Inc. All rights reserved. * Use is subject to license terms. */ @@ -143,6 +143,7 @@ #include <sys/spl.h> #include <sys/errorq.h> #include <sys/panic.h> +#include <sys/fm/util.h> /* * Panic variables which are set once during the QUIESCE state by the diff --git a/usr/src/uts/common/os/policy.c b/usr/src/uts/common/os/policy.c index 0dccc35dce..fe4a5c82df 100644 --- a/usr/src/uts/common/os/policy.c +++ b/usr/src/uts/common/os/policy.c @@ -20,7 +20,7 @@ * CDDL HEADER END */ /* - * Copyright 2005 Sun Microsystems, Inc. All rights reserved. + * Copyright 2006 Sun Microsystems, Inc. All rights reserved. * Use is subject to license terms. */ @@ -1279,6 +1279,12 @@ secpolicy_kmdb(const cred_t *scr) return (PRIV_POLICY(scr, PRIV_ALL, B_FALSE, EPERM, NULL)); } +int +secpolicy_error_inject(const cred_t *scr) +{ + return (PRIV_POLICY(scr, PRIV_ALL, B_FALSE, EPERM, NULL)); +} + /* * Processor sets, cpu configuration, resource pools. */ diff --git a/usr/src/uts/common/sys/Makefile b/usr/src/uts/common/sys/Makefile index bb8e6e8d7a..f82a933903 100644 --- a/usr/src/uts/common/sys/Makefile +++ b/usr/src/uts/common/sys/Makefile @@ -20,7 +20,7 @@ # # -# Copyright 2005 Sun Microsystems, Inc. All rights reserved. +# Copyright 2006 Sun Microsystems, Inc. All rights reserved. # Use is subject to license terms. # # ident "%Z%%M% %I% %E% SMI" @@ -657,12 +657,6 @@ FMHDRS= \ protocol.h \ util.h -sparc_FMCPUHDRS= \ - UltraSPARC-II.h \ - UltraSPARC-III.h \ - UltraSPARC-T1.h -FMCPUHDRS=$($(MACH)_FMCPUHDRS) - FMIOHDRS= \ ddi.h \ pci.h \ @@ -920,7 +914,6 @@ CHECKHDRS= \ $(TAVORHDRS:%.h=ib/adapters/tavor/%.check) \ $(ISOHDRS:%.h=iso/%.check) \ $(FMHDRS:%.h=fm/%.check) \ - $(FMCPUHDRS:%.h=fm/cpu/%.check) \ $(FMIOHDRS:%.h=fm/io/%.check) \ $(FSHDRS:%.h=fs/%.check) \ $(LVMHDRS:%.h=lvm/%.check) \ @@ -955,8 +948,7 @@ CHECKHDRS= \ $(ROOTDCAMHDRS) \ $(ROOTISOHDRS) \ $(ROOTFMHDRS) \ - $(ROOTFMCPUHDRS) \ - $(ROOTFMIOHDRS) \ + $(ROOTFMIOHDRS) \ $(ROOTFSHDRS) \ $(ROOTIBDHDRS) \ $(ROOTIBHDRS) \ @@ -1000,7 +992,6 @@ install_h: \ $(ROOTDCAMHDRS) \ $(ROOTISOHDRS) \ $(ROOTFMHDRS) \ - $(ROOTFMCPUHDRS) \ $(ROOTFMIOHDRS) \ $(ROOTFSHDRS) \ $(ROOTIBDHDRS) \ diff --git a/usr/src/uts/common/sys/chip.h b/usr/src/uts/common/sys/chip.h index e33b521783..80b9541d9a 100644 --- a/usr/src/uts/common/sys/chip.h +++ b/usr/src/uts/common/sys/chip.h @@ -172,6 +172,7 @@ void chip_cpu_fini(cpu_t *); void chip_cpu_assign(cpu_t *); void chip_cpu_unassign(cpu_t *); void chip_cpu_startup(cpu_t *); +chip_t *chip_lookup(chipid_t); void chip_bootstrap_cpu(cpu_t *); void chip_cpu_move_part(cpu_t *, struct cpupart *, diff --git a/usr/src/uts/common/sys/dumphdr.h b/usr/src/uts/common/sys/dumphdr.h index 7be14a40ed..5949b218c8 100644 --- a/usr/src/uts/common/sys/dumphdr.h +++ b/usr/src/uts/common/sys/dumphdr.h @@ -20,7 +20,7 @@ * CDDL HEADER END */ /* - * Copyright 2004 Sun Microsystems, Inc. All rights reserved. + * Copyright 2006 Sun Microsystems, Inc. All rights reserved. * Use is subject to license terms. */ @@ -33,7 +33,6 @@ #include <sys/param.h> #include <sys/utsname.h> #include <sys/log.h> -#include <sys/fm/util.h> #ifdef __cplusplus extern "C" { diff --git a/usr/src/uts/common/sys/fm/cpu/UltraSPARC-II.h b/usr/src/uts/common/sys/fm/cpu/UltraSPARC-II.h deleted file mode 100644 index c6013c9515..0000000000 --- a/usr/src/uts/common/sys/fm/cpu/UltraSPARC-II.h +++ /dev/null @@ -1,65 +0,0 @@ -/* - * CDDL HEADER START - * - * The contents of this file are subject to the terms of the - * Common Development and Distribution License, Version 1.0 only - * (the "License"). You may not use this file except in compliance - * with the License. - * - * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE - * or http://www.opensolaris.org/os/licensing. - * See the License for the specific language governing permissions - * and limitations under the License. - * - * When distributing Covered Code, include this CDDL HEADER in each - * file and include the License file at usr/src/OPENSOLARIS.LICENSE. - * If applicable, add the following below this CDDL HEADER, with the - * fields enclosed by brackets "[]" replaced with your own identifying - * information: Portions Copyright [yyyy] [name of copyright owner] - * - * CDDL HEADER END - */ -/* - * Copyright 2004 Sun Microsystems, Inc. All rights reserved. - * Use is subject to license terms. - */ - -#ifndef _SYS_FM_ULTRASPARC_II_H -#define _SYS_FM_ULTRASPARC_II_H - -#pragma ident "%Z%%M% %I% %E% SMI" - -#ifdef __cplusplus -extern "C" { -#endif - -/* Ereport class subcategories for UltraSPARC I, and II families */ -#define FM_EREPORT_CPU_USI "ultraSPARC-I" -#define FM_EREPORT_CPU_USII "ultraSPARC-II" -#define FM_EREPORT_CPU_USIIe "ultraSPARC-IIe" -#define FM_EREPORT_CPU_USIIi "ultraSPARC-IIi" -#define FM_EREPORT_CPU_UNSUPPORTED "unsupported" - -/* - * FM Ereport definitions. - */ -#define FM_EREPORT_CPU_USII_ISAP "isap" -#define FM_EREPORT_CPU_USII_ETP "etp" -#define FM_EREPORT_CPU_USII_IVUE "ivue" -#define FM_EREPORT_CPU_USII_TO "to" -#define FM_EREPORT_CPU_USII_BERR "berr" -#define FM_EREPORT_CPU_USII_LDP "ldp" -#define FM_EREPORT_CPU_USII_CP "cp" -#define FM_EREPORT_CPU_USII_WP "wp" -#define FM_EREPORT_CPU_USII_EDP "edp" -#define FM_EREPORT_CPU_USII_UE "ue" -#define FM_EREPORT_CPU_USII_CE "ce" -#define FM_EREPORT_CPU_USII_ESCRUB_TAG "escrub-etp" -#define FM_EREPORT_CPU_USII_ESCRUB_DATA "escrub-edp" -#define FM_EREPORT_CPU_USII_UNKNOWN "unknown" - -#ifdef __cplusplus -} -#endif - -#endif /* _SYS_FM_ULTRASPARC_II_H */ diff --git a/usr/src/uts/common/sys/fm/cpu/UltraSPARC-III.h b/usr/src/uts/common/sys/fm/cpu/UltraSPARC-III.h deleted file mode 100644 index 6422868396..0000000000 --- a/usr/src/uts/common/sys/fm/cpu/UltraSPARC-III.h +++ /dev/null @@ -1,446 +0,0 @@ -/* - * CDDL HEADER START - * - * The contents of this file are subject to the terms of the - * Common Development and Distribution License, Version 1.0 only - * (the "License"). You may not use this file except in compliance - * with the License. - * - * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE - * or http://www.opensolaris.org/os/licensing. - * See the License for the specific language governing permissions - * and limitations under the License. - * - * When distributing Covered Code, include this CDDL HEADER in each - * file and include the License file at usr/src/OPENSOLARIS.LICENSE. - * If applicable, add the following below this CDDL HEADER, with the - * fields enclosed by brackets "[]" replaced with your own identifying - * information: Portions Copyright [yyyy] [name of copyright owner] - * - * CDDL HEADER END - */ -/* - * Copyright 2005 Sun Microsystems, Inc. All rights reserved. - * Use is subject to license terms. - */ - -#ifndef _SYS_FM_ULTRASPARC_III_H -#define _SYS_FM_ULTRASPARC_III_H - -#pragma ident "%Z%%M% %I% %E% SMI" - -#ifdef __cplusplus -extern "C" { -#endif - -/* Ereport class subcategories for UltraSPARC III and IV families */ -#define FM_EREPORT_CPU_USIII "ultraSPARC-III" -#define FM_EREPORT_CPU_USIIIplus "ultraSPARC-IIIplus" -#define FM_EREPORT_CPU_USIIIi "ultraSPARC-IIIi" -#define FM_EREPORT_CPU_USIIIiplus "ultraSPARC-IIIiplus" -#define FM_EREPORT_CPU_USIV "ultraSPARC-IV" -#define FM_EREPORT_CPU_USIVplus "ultraSPARC-IVplus" -#define FM_EREPORT_CPU_UNSUPPORTED "unsupported" - -/* - * Ereport payload definitions. - */ -#define FM_EREPORT_PAYLOAD_NAME_AFSR "afsr" -#define FM_EREPORT_PAYLOAD_NAME_AFAR "afar" -#define FM_EREPORT_PAYLOAD_NAME_AFAR_STATUS "afar-status" -#define FM_EREPORT_PAYLOAD_NAME_PC "pc" -#define FM_EREPORT_PAYLOAD_NAME_TL "tl" -#define FM_EREPORT_PAYLOAD_NAME_TT "tt" -#define FM_EREPORT_PAYLOAD_NAME_PRIV "privileged" -#define FM_EREPORT_PAYLOAD_NAME_ME "multiple" -#define FM_EREPORT_PAYLOAD_NAME_SYND "syndrome" -#define FM_EREPORT_PAYLOAD_NAME_SYND_STATUS "syndrome-status" -#define FM_EREPORT_PAYLOAD_NAME_EMU_EMR_SIZE "emu-mask-size" -#define FM_EREPORT_PAYLOAD_NAME_EMU_EMR_DATA "emu-mask-data" -#define FM_EREPORT_PAYLOAD_NAME_EMU_ESR_SIZE "emu-shadow-size" -#define FM_EREPORT_PAYLOAD_NAME_EMU_ESR_DATA "emu-shadow-data" -#define FM_EREPORT_PAYLOAD_NAME_L2_WAYS "l2-cache-ways" -#define FM_EREPORT_PAYLOAD_NAME_L2_DATA "l2-cache-data" -#define FM_EREPORT_PAYLOAD_NAME_L3_WAYS "l3-cache-ways" -#define FM_EREPORT_PAYLOAD_NAME_L3_DATA "l3-cache-data" -#define FM_EREPORT_PAYLOAD_NAME_L1D_WAYS "dcache-ways" -#define FM_EREPORT_PAYLOAD_NAME_L1D_DATA "dcache-data" -#define FM_EREPORT_PAYLOAD_NAME_L1I_WAYS "icache-ways" -#define FM_EREPORT_PAYLOAD_NAME_L1I_DATA "icache-data" -#define FM_EREPORT_PAYLOAD_NAME_L1P_WAYS "pcache-ways" -#define FM_EREPORT_PAYLOAD_NAME_L1P_DATA "pcache-data" -#define FM_EREPORT_PAYLOAD_NAME_ITLB_ENTRIES "itlb-entries" -#define FM_EREPORT_PAYLOAD_NAME_ITLB_DATA "itlb-data" -#define FM_EREPORT_PAYLOAD_NAME_DTLB_ENTRIES "dtlb-entries" -#define FM_EREPORT_PAYLOAD_NAME_DTLB_DATA "dtlb-data" -#define FM_EREPORT_PAYLOAD_NAME_ERR_TYPE "error-type" -#define FM_EREPORT_PAYLOAD_NAME_RESOURCE "resource" -#define FM_EREPORT_PAYLOAD_NAME_VA "va" -#define FM_EREPORT_PAYLOAD_NAME_AFSR_EXT "afsr-ext" -#define FM_EREPORT_PAYLOAD_NAME_COPYFUNCTION "copy-function" -#define FM_EREPORT_PAYLOAD_NAME_INSTRBLOCK "instr-block" -#define FM_EREPORT_PAYLOAD_NAME_HOWDETECTED "how-detected" -#define FM_EREPORT_PAYLOAD_NAME_ERR_DISP "error-disposition" - -#define FM_EREPORT_PAYLOAD_FLAG_AFSR 0x0000000000000001 -#define FM_EREPORT_PAYLOAD_FLAG_AFAR_STATUS 0x0000000000000002 -#define FM_EREPORT_PAYLOAD_FLAG_AFAR 0x0000000000000004 -#define FM_EREPORT_PAYLOAD_FLAG_PC 0x0000000000000008 -#define FM_EREPORT_PAYLOAD_FLAG_TL 0x0000000000000010 -#define FM_EREPORT_PAYLOAD_FLAG_TT 0x0000000000000020 -#define FM_EREPORT_PAYLOAD_FLAG_PRIV 0x0000000000000040 -#define FM_EREPORT_PAYLOAD_FLAG_ME 0x0000000000000080 -#define FM_EREPORT_PAYLOAD_FLAG_SYND 0x0000000000000100 -#define FM_EREPORT_PAYLOAD_FLAG_SYND_STATUS 0x0000000000000200 -#define FM_EREPORT_PAYLOAD_FLAG_EMU_EMR_SIZE 0x0000000000000400 -#define FM_EREPORT_PAYLOAD_FLAG_EMU_EMR_DATA 0x0000000000000800 -#define FM_EREPORT_PAYLOAD_FLAG_EMU_ESR_SIZE 0x0000000000001000 -#define FM_EREPORT_PAYLOAD_FLAG_EMU_ESR_DATA 0x0000000000002000 -#define FM_EREPORT_PAYLOAD_FLAG_L2_WAYS 0x0000000000004000 -#define FM_EREPORT_PAYLOAD_FLAG_L2_DATA 0x0000000000008000 -#define FM_EREPORT_PAYLOAD_FLAG_L1D_WAYS 0x0000000000010000 -#define FM_EREPORT_PAYLOAD_FLAG_L1D_DATA 0x0000000000020000 -#define FM_EREPORT_PAYLOAD_FLAG_L1I_WAYS 0x0000000000040000 -#define FM_EREPORT_PAYLOAD_FLAG_L1I_DATA 0x0000000000080000 -#define FM_EREPORT_PAYLOAD_FLAG_ERR_TYPE 0x0000000000100000 -#define FM_EREPORT_PAYLOAD_FLAG_RESOURCE 0x0000000000200000 -#define FM_EREPORT_PAYLOAD_FLAG_AFSR_EXT 0x0000000000400000 -#define FM_EREPORT_PAYLOAD_FLAG_L1P_WAYS 0x0000000000800000 -#define FM_EREPORT_PAYLOAD_FLAG_L1P_DATA 0x0000000001000000 -#define FM_EREPORT_PAYLOAD_FLAG_ITLB_ENTRIES 0x0000000002000000 -#define FM_EREPORT_PAYLOAD_FLAG_ITLB_DATA 0x0000000004000000 -#define FM_EREPORT_PAYLOAD_FLAG_DTLB_ENTRIES 0x0000000008000000 -#define FM_EREPORT_PAYLOAD_FLAG_DTLB_DATA 0x0000000010000000 -#define FM_EREPORT_PAYLOAD_FLAG_FAULT_VA 0x0000000020000000 -#define FM_EREPORT_PAYLOAD_FLAG_L3_WAYS 0x0000000040000000 -#define FM_EREPORT_PAYLOAD_FLAG_L3_DATA 0x0000000080000000 -#define FM_EREPORT_PAYLOAD_FLAG_COPYFUNCTION 0x0000000100000000 -#define FM_EREPORT_PAYLOAD_FLAG_INSTRBLOCK 0x0000000200000000 -#define FM_EREPORT_PAYLOAD_FLAG_HOWDETECTED 0x0000000400000000 -#define FM_EREPORT_PAYLOAD_FLAG_ERR_DISP 0x0000000800000000 - -#define FM_EREPORT_PAYLOAD_FLAGS_AFAR \ - (FM_EREPORT_PAYLOAD_FLAG_AFAR | \ - FM_EREPORT_PAYLOAD_FLAG_AFAR_STATUS) -#define FM_EREPORT_PAYLOAD_FLAGS_TRAP \ - (FM_EREPORT_PAYLOAD_FLAG_TL | \ - FM_EREPORT_PAYLOAD_FLAG_TT) -#define FM_EREPORT_PAYLOAD_FLAGS_SYND \ - (FM_EREPORT_PAYLOAD_FLAG_SYND | \ - FM_EREPORT_PAYLOAD_FLAG_SYND_STATUS) -#define FM_EREPORT_PAYLOAD_FLAGS_EMU \ - (FM_EREPORT_PAYLOAD_FLAG_EMU_EMR_SIZE | \ - FM_EREPORT_PAYLOAD_FLAG_EMU_EMR_DATA | \ - FM_EREPORT_PAYLOAD_FLAG_EMU_ESR_SIZE | \ - FM_EREPORT_PAYLOAD_FLAG_EMU_ESR_DATA) -#define FM_EREPORT_PAYLOAD_FLAGS_L2 \ - (FM_EREPORT_PAYLOAD_FLAG_L2_WAYS | \ - FM_EREPORT_PAYLOAD_FLAG_L2_DATA) -#define FM_EREPORT_PAYLOAD_FLAGS_L3 \ - (FM_EREPORT_PAYLOAD_FLAG_L3_WAYS | \ - FM_EREPORT_PAYLOAD_FLAG_L3_DATA) -#define FM_EREPORT_PAYLOAD_FLAGS_L1D \ - (FM_EREPORT_PAYLOAD_FLAG_L1D_WAYS | \ - FM_EREPORT_PAYLOAD_FLAG_L1D_DATA) -#define FM_EREPORT_PAYLOAD_FLAGS_L1I \ - (FM_EREPORT_PAYLOAD_FLAG_L1I_WAYS | \ - FM_EREPORT_PAYLOAD_FLAG_L1I_DATA) -#define FM_EREPORT_PAYLOAD_FLAGS_L1P \ - (FM_EREPORT_PAYLOAD_FLAG_L1P_WAYS | \ - FM_EREPORT_PAYLOAD_FLAG_L1P_DATA) -#define FM_EREPORT_PAYLOAD_FLAGS_L1 \ - (FM_EREPORT_PAYLOAD_FLAGS_L1D | \ - FM_EREPORT_PAYLOAD_FLAGS_L1I) -#define FM_EREPORT_PAYLOAD_FLAGS_L1L2 \ - (FM_EREPORT_PAYLOAD_FLAGS_L1 | \ - FM_EREPORT_PAYLOAD_FLAGS_L2) -#define FM_EREPORT_PAYLOAD_FLAGS_ITLB \ - (FM_EREPORT_PAYLOAD_FLAG_ITLB_ENTRIES | \ - FM_EREPORT_PAYLOAD_FLAG_ITLB_DATA) -#define FM_EREPORT_PAYLOAD_FLAGS_DTLB \ - (FM_EREPORT_PAYLOAD_FLAG_DTLB_ENTRIES | \ - FM_EREPORT_PAYLOAD_FLAG_DTLB_DATA) -#define FM_EREPORT_PAYLOAD_FLAGS_TLB \ - (FM_EREPORT_PAYLOAD_FLAGS_ITLB | \ - FM_EREPORT_PAYLOAD_FLAGS_DTLB) -#define FM_EREPORT_PAYLOAD_FLAG_AFSRS \ - (FM_EREPORT_PAYLOAD_FLAG_AFSR | \ - FM_EREPORT_PAYLOAD_FLAG_AFSR_EXT) - - -#define FM_EREPORT_PAYLOAD_UNKNOWN 0 -#define FM_EREPORT_PAYLOAD_INVALID_AFSR (FM_EREPORT_PAYLOAD_FLAG_AFSRS | \ - FM_EREPORT_PAYLOAD_FLAGS_AFAR | \ - FM_EREPORT_PAYLOAD_FLAG_PC | \ - FM_EREPORT_PAYLOAD_FLAGS_TRAP | \ - FM_EREPORT_PAYLOAD_FLAG_PRIV | \ - FM_EREPORT_PAYLOAD_FLAG_ME) -#define FM_EREPORT_PAYLOAD_SYSTEM1 (FM_EREPORT_PAYLOAD_FLAG_AFSRS | \ - FM_EREPORT_PAYLOAD_FLAG_PC | \ - FM_EREPORT_PAYLOAD_FLAGS_TRAP | \ - FM_EREPORT_PAYLOAD_FLAG_PRIV | \ - FM_EREPORT_PAYLOAD_FLAG_ME) -#define FM_EREPORT_PAYLOAD_SYSTEM2 (FM_EREPORT_PAYLOAD_FLAG_AFSRS | \ - FM_EREPORT_PAYLOAD_FLAGS_AFAR | \ - FM_EREPORT_PAYLOAD_FLAG_PC | \ - FM_EREPORT_PAYLOAD_FLAGS_TRAP | \ - FM_EREPORT_PAYLOAD_FLAG_PRIV | \ - FM_EREPORT_PAYLOAD_FLAG_ME | \ - FM_EREPORT_PAYLOAD_FLAGS_EMU) -#define FM_EREPORT_PAYLOAD_SYSTEM3 (FM_EREPORT_PAYLOAD_FLAG_AFSR | \ - FM_EREPORT_PAYLOAD_FLAGS_AFAR | \ - FM_EREPORT_PAYLOAD_FLAG_PC | \ - FM_EREPORT_PAYLOAD_FLAGS_TRAP | \ - FM_EREPORT_PAYLOAD_FLAG_PRIV | \ - FM_EREPORT_PAYLOAD_FLAG_ME | \ - FM_EREPORT_PAYLOAD_FLAGS_L2) -#define FM_EREPORT_PAYLOAD_IO (FM_EREPORT_PAYLOAD_FLAG_AFSR | \ - FM_EREPORT_PAYLOAD_FLAGS_AFAR | \ - FM_EREPORT_PAYLOAD_FLAG_PC | \ - FM_EREPORT_PAYLOAD_FLAGS_TRAP | \ - FM_EREPORT_PAYLOAD_FLAG_PRIV | \ - FM_EREPORT_PAYLOAD_FLAG_ME) -#define FM_EREPORT_PAYLOAD_L2_TAG_PE (FM_EREPORT_PAYLOAD_FLAG_AFSR | \ - FM_EREPORT_PAYLOAD_FLAGS_AFAR | \ - FM_EREPORT_PAYLOAD_FLAG_PC | \ - FM_EREPORT_PAYLOAD_FLAGS_TRAP | \ - FM_EREPORT_PAYLOAD_FLAG_PRIV | \ - FM_EREPORT_PAYLOAD_FLAG_ME | \ - FM_EREPORT_PAYLOAD_FLAGS_L1L2) -#define FM_EREPORT_PAYLOAD_L2_TAG_ECC (FM_EREPORT_PAYLOAD_FLAG_AFSRS | \ - FM_EREPORT_PAYLOAD_FLAGS_AFAR | \ - FM_EREPORT_PAYLOAD_FLAG_PC | \ - FM_EREPORT_PAYLOAD_FLAGS_TRAP | \ - FM_EREPORT_PAYLOAD_FLAG_PRIV | \ - FM_EREPORT_PAYLOAD_FLAG_ME | \ - FM_EREPORT_PAYLOAD_FLAGS_L1L2 | \ - FM_EREPORT_PAYLOAD_FLAGS_L3) -#define FM_EREPORT_PAYLOAD_L3_TAG_ECC (FM_EREPORT_PAYLOAD_FLAG_AFSRS | \ - FM_EREPORT_PAYLOAD_FLAGS_AFAR | \ - FM_EREPORT_PAYLOAD_FLAG_PC | \ - FM_EREPORT_PAYLOAD_FLAGS_TRAP | \ - FM_EREPORT_PAYLOAD_FLAG_PRIV | \ - FM_EREPORT_PAYLOAD_FLAG_ME | \ - FM_EREPORT_PAYLOAD_FLAGS_L1L2 | \ - FM_EREPORT_PAYLOAD_FLAGS_L3) -#define FM_EREPORT_PAYLOAD_L2_DATA (FM_EREPORT_PAYLOAD_FLAG_AFSRS | \ - FM_EREPORT_PAYLOAD_FLAGS_AFAR | \ - FM_EREPORT_PAYLOAD_FLAG_PC | \ - FM_EREPORT_PAYLOAD_FLAGS_TRAP | \ - FM_EREPORT_PAYLOAD_FLAG_PRIV | \ - FM_EREPORT_PAYLOAD_FLAG_ME | \ - FM_EREPORT_PAYLOAD_FLAGS_SYND | \ - FM_EREPORT_PAYLOAD_FLAGS_L1L2 | \ - FM_EREPORT_PAYLOAD_FLAG_RESOURCE | \ - FM_EREPORT_PAYLOAD_FLAGS_L3) -#define FM_EREPORT_PAYLOAD_L3_DATA (FM_EREPORT_PAYLOAD_FLAG_AFSRS | \ - FM_EREPORT_PAYLOAD_FLAGS_AFAR | \ - FM_EREPORT_PAYLOAD_FLAG_PC | \ - FM_EREPORT_PAYLOAD_FLAGS_TRAP | \ - FM_EREPORT_PAYLOAD_FLAG_PRIV | \ - FM_EREPORT_PAYLOAD_FLAG_ME | \ - FM_EREPORT_PAYLOAD_FLAGS_SYND | \ - FM_EREPORT_PAYLOAD_FLAGS_L1L2 | \ - FM_EREPORT_PAYLOAD_FLAG_RESOURCE | \ - FM_EREPORT_PAYLOAD_FLAGS_L3) -#define FM_EREPORT_PAYLOAD_MEMORY (FM_EREPORT_PAYLOAD_FLAG_AFSRS | \ - FM_EREPORT_PAYLOAD_FLAGS_AFAR | \ - FM_EREPORT_PAYLOAD_FLAG_PC | \ - FM_EREPORT_PAYLOAD_FLAGS_TRAP | \ - FM_EREPORT_PAYLOAD_FLAG_PRIV | \ - FM_EREPORT_PAYLOAD_FLAG_ME | \ - FM_EREPORT_PAYLOAD_FLAGS_SYND | \ - FM_EREPORT_PAYLOAD_FLAG_ERR_TYPE | \ - FM_EREPORT_PAYLOAD_FLAG_ERR_DISP | \ - FM_EREPORT_PAYLOAD_FLAGS_L1L2 | \ - FM_EREPORT_PAYLOAD_FLAG_RESOURCE | \ - FM_EREPORT_PAYLOAD_FLAGS_L3) -#define FM_EREPORT_PAYLOAD_ICACHE_PE (FM_EREPORT_PAYLOAD_FLAG_PC | \ - FM_EREPORT_PAYLOAD_FLAGS_TRAP | \ - FM_EREPORT_PAYLOAD_FLAG_PRIV | \ - FM_EREPORT_PAYLOAD_FLAGS_L1I) -#define FM_EREPORT_PAYLOAD_DCACHE_PE (FM_EREPORT_PAYLOAD_FLAG_PC | \ - FM_EREPORT_PAYLOAD_FLAGS_TRAP | \ - FM_EREPORT_PAYLOAD_FLAG_PRIV | \ - FM_EREPORT_PAYLOAD_FLAGS_L1D) -#define FM_EREPORT_PAYLOAD_PCACHE_PE (FM_EREPORT_PAYLOAD_FLAG_PC | \ - FM_EREPORT_PAYLOAD_FLAGS_TRAP | \ - FM_EREPORT_PAYLOAD_FLAG_PRIV | \ - FM_EREPORT_PAYLOAD_FLAGS_L1P) -#define FM_EREPORT_PAYLOAD_ITLB_PE (FM_EREPORT_PAYLOAD_FLAG_PC | \ - FM_EREPORT_PAYLOAD_FLAGS_TRAP | \ - FM_EREPORT_PAYLOAD_FLAG_PRIV | \ - FM_EREPORT_PAYLOAD_FLAGS_ITLB) -#define FM_EREPORT_PAYLOAD_DTLB_PE (FM_EREPORT_PAYLOAD_FLAG_PC | \ - FM_EREPORT_PAYLOAD_FLAGS_TRAP | \ - FM_EREPORT_PAYLOAD_FLAG_PRIV | \ - FM_EREPORT_PAYLOAD_FLAGS_DTLB | \ - FM_EREPORT_PAYLOAD_FLAG_FAULT_VA) -#define FM_EREPORT_PAYLOAD_FPU_HWCOPY (FM_EREPORT_PAYLOAD_FLAG_COPYFUNCTION |\ - FM_EREPORT_PAYLOAD_FLAG_INSTRBLOCK|\ - FM_EREPORT_PAYLOAD_FLAG_HOWDETECTED) -/* - * FM_EREPORT_PAYLOAD_UNKNOWN - */ -#define FM_EREPORT_CPU_USIII_UNKNOWN "unknown" - -/* - * FM_EREPORT_PAYLOAD_INVALID_AFSR - */ -#define FM_EREPORT_CPU_USIII_INVALID_AFSR "invalid-afsr" - -/* - * FM_EREPORT_PAYLOAD_SYSTEM1 - */ -#define FM_EREPORT_CPU_USIII_IVC "ivc" -#define FM_EREPORT_CPU_USIII_IVU "ivu" -#define FM_EREPORT_CPU_USIII_IMC "imc" -#define FM_EREPORT_CPU_USIII_IMU "imu" -#define FM_EREPORT_CPU_USIII_JETO "jeto" -#define FM_EREPORT_CPU_USIII_SCE "sce" -#define FM_EREPORT_CPU_USIII_JEIC "jeic" -#define FM_EREPORT_CPU_USIII_JEIT "jeit" -#define FM_EREPORT_CPU_USIII_JEIS "jeis" -#define FM_EREPORT_CPU_USIII_ISAP "isap" -#define FM_EREPORT_CPU_USIII_IVPE "ivpe" - -/* - * FM_EREPORT_PAYLOAD_SYSTEM2 - */ -#define FM_EREPORT_CPU_USIII_PERR "perr" -#define FM_EREPORT_CPU_USIII_IERR "ierr" - -/* - * FM_EREPORT_PAYLOAD_SYSTEM3 - */ -#define FM_EREPORT_CPU_USIII_BP "bp" -#define FM_EREPORT_CPU_USIII_WBP "wbp" - -/* - * FM_EREPORT_PAYLOAD_IO - */ -#define FM_EREPORT_CPU_USIII_TO "to" -#define FM_EREPORT_CPU_USIII_BERR "berr" -#define FM_EREPORT_CPU_USIII_DTO "dto" -#define FM_EREPORT_CPU_USIII_DBERR "dberr" -#define FM_EREPORT_CPU_USIII_OM "om" -#define FM_EREPORT_CPU_USIII_UMS "ums" - -/* - * FM_EREPORT_PAYLOAD_L2_TAG_PE - */ -#define FM_EREPORT_CPU_USIII_ETP "etp" - -/* - * FM_EREPORT_PAYLOAD_L2_TAG_ECC - */ -#define FM_EREPORT_CPU_USIII_THCE "thce" -#define FM_EREPORT_CPU_USIII_TSCE "tsce" -#define FM_EREPORT_CPU_USIII_TUE "tue" -#define FM_EREPORT_CPU_USIII_TUE_SH "tue-sh" -#define FM_EREPORT_CPU_USIII_ETU "etu" -#define FM_EREPORT_CPU_USIII_ETC "etc" -#define FM_EREPORT_CPU_USIII_ETI "eti" -#define FM_EREPORT_CPU_USIII_ETS "ets" - -/* - * FM_EREPORT_PAYLOAD_L3_TAG_ECC - */ -#define FM_EREPORT_CPU_USIII_L3_THCE "l3-thce" -#define FM_EREPORT_CPU_USIII_L3_TUE "l3-tue" -#define FM_EREPORT_CPU_USIII_L3_TUE_SH "l3-tue-sh" - -/* - * FM_EREPORT_PAYLOAD_L2_DATA - */ -#define FM_EREPORT_CPU_USIII_UCC "ucc" -#define FM_EREPORT_CPU_USIII_UCU "ucu" -#define FM_EREPORT_CPU_USIII_CPC "cpc" -#define FM_EREPORT_CPU_USIII_CPU "cpu" -#define FM_EREPORT_CPU_USIII_WDC "wdc" -#define FM_EREPORT_CPU_USIII_WDU "wdu" -#define FM_EREPORT_CPU_USIII_EDC "edc" -#define FM_EREPORT_CPU_USIII_EDUBL "edu-bl" -#define FM_EREPORT_CPU_USIII_EDUST "edu-st" - -/* - * FM_EREPORT_PAYLOAD_L3_DATA - */ -#define FM_EREPORT_CPU_USIII_L3_UCC "l3-ucc" -#define FM_EREPORT_CPU_USIII_L3_UCU "l3-ucu" -#define FM_EREPORT_CPU_USIII_L3_CPC "l3-cpc" -#define FM_EREPORT_CPU_USIII_L3_CPU "l3-cpu" -#define FM_EREPORT_CPU_USIII_L3_WDC "l3-wdc" -#define FM_EREPORT_CPU_USIII_L3_WDU "l3-wdu" -#define FM_EREPORT_CPU_USIII_L3_EDC "l3-edc" -#define FM_EREPORT_CPU_USIII_L3_EDUBL "l3-edu-bl" -#define FM_EREPORT_CPU_USIII_L3_EDUST "l3-edu-st" -#define FM_EREPORT_CPU_USIII_L3_MECC "l3-mecc" - -/* - * FM_EREPORT_PAYLOAD_MEMORY - */ -#define FM_EREPORT_CPU_USIII_CE "ce" -#define FM_EREPORT_CPU_USIII_RCE "rce" -#define FM_EREPORT_CPU_USIII_FRC "frc" -#define FM_EREPORT_CPU_USIII_EMC "emc" -#define FM_EREPORT_CPU_USIII_UE "ue" -#define FM_EREPORT_CPU_USIII_DUE "due" -#define FM_EREPORT_CPU_USIII_RUE "rue" -#define FM_EREPORT_CPU_USIII_FRU "fru" -#define FM_EREPORT_CPU_USIII_EMU "emu" - -/* - * FM_EREPORT_PAYLOAD_ICACHE_PE - */ -#define FM_EREPORT_CPU_USIII_IPE "ipe" -#define FM_EREPORT_CPU_USIII_IDSPE "idspe" -#define FM_EREPORT_CPU_USIII_ITSPE "itspe" - -/* - * FM_EREPORT_PAYLOAD_DCACHE_PE - */ -#define FM_EREPORT_CPU_USIII_DPE "dpe" -#define FM_EREPORT_CPU_USIII_DDSPE "ddspe" -#define FM_EREPORT_CPU_USIII_DTSPE "dtspe" - -/* - * FM_EREPORT_PAYLOAD_PCACHE_PE - */ -#define FM_EREPORT_CPU_USIII_PDSPE "pdspe" - - -/* - * FM_EREPORT_PAYLOAD_DTLB_PE - */ -#define FM_EREPORT_CPU_USIII_DTLBPE "dtlbpe" - -/* - * FM_EREPORT_PAYLOAD_ITLB_PE - */ -#define FM_EREPORT_CPU_USIII_ITLBPE "itlbpe" - -/* - * FM_EREPORT_PAYLOAD_FPU_HWCOPY - */ -#define FM_EREPORT_CPU_USIII_FPU_HWCOPY "fpu.hwcopy" - -/* - * Magic values for cache dump logflags. - * These flags are used to indicate that the structures - * defined in cheetahregs.h to capture cache data contain - * valid information. - */ -#define EC_LOGFLAG_MAGIC 0xEC0106F1A6 /* =~ EC_LOGFLAG */ -#define DC_LOGFLAG_MAGIC 0xDC0106F1A6 /* =~ DC_LOGFLAG */ -#define IC_LOGFLAG_MAGIC 0x1C0106F1A6 /* =~ IC_LOGFLAG */ -#define PC_LOGFLAG_MAGIC 0x9C0106F1A6 /* =~ PC_LOGFLAG */ -#define IT_LOGFLAG_MAGIC 0x170106F1A6 /* =~ IT_LOGFLAG */ -#define DT_LOGFLAG_MAGIC 0xD70106F1A6 /* =~ DT_LOGFLAG */ - - -#ifdef __cplusplus -} -#endif - -#endif /* _SYS_FM_ULTRASPARC_III_H */ diff --git a/usr/src/uts/common/sys/fm/cpu/UltraSPARC-T1.h b/usr/src/uts/common/sys/fm/cpu/UltraSPARC-T1.h deleted file mode 100644 index e6ffdfe922..0000000000 --- a/usr/src/uts/common/sys/fm/cpu/UltraSPARC-T1.h +++ /dev/null @@ -1,66 +0,0 @@ -/* - * CDDL HEADER START - * - * The contents of this file are subject to the terms of the - * Common Development and Distribution License, Version 1.0 only - * (the "License"). You may not use this file except in compliance - * with the License. - * - * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE - * or http://www.opensolaris.org/os/licensing. - * See the License for the specific language governing permissions - * and limitations under the License. - * - * When distributing Covered Code, include this CDDL HEADER in each - * file and include the License file at usr/src/OPENSOLARIS.LICENSE. - * If applicable, add the following below this CDDL HEADER, with the - * fields enclosed by brackets "[]" replaced with your own identifying - * information: Portions Copyright [yyyy] [name of copyright owner] - * - * CDDL HEADER END - */ -/* - * Copyright 2005 Sun Microsystems, Inc. All rights reserved. - * Use is subject to license terms. - */ - -#ifndef _SYS_FM_ULTRASPARC_T1_H -#define _SYS_FM_ULTRASPARC_T1_H - -#pragma ident "%Z%%M% %I% %E% SMI" - -#ifdef __cplusplus -extern "C" { -#endif - -/* - * header file for Niagara-specific ereports - */ - -#define FM_EREPORT_PAYLOAD_NAME_L2_AFSR "l2-afsr" -#define FM_EREPORT_PAYLOAD_NAME_L2_REAL_AFAR "l2-real-afar" -#define FM_EREPORT_PAYLOAD_NAME_L2_SYND "l2-synd" - -#define FM_EREPORT_PAYLOAD_NAME_DRAM_AFSR "dram-afsr" -#define FM_EREPORT_PAYLOAD_NAME_DRAM_REAL_AFAR "dram-real-afar" -#define FM_EREPORT_PAYLOAD_NAME_DRAM_SYND "dram-synd" - -#define FM_EREPORT_CPU_UST1_DAU "dau" -#define FM_EREPORT_CPU_UST1_DAC "dac" -#define FM_EREPORT_CPU_UST1_DSU "dsu" -#define FM_EREPORT_CPU_UST1_DSC "dsc" - -/* - * The following constants are also defined in UltraSPARC-III.h and - * could possibly be moved into a common header file - */ - -#define FM_EREPORT_PAYLOAD_NAME_RESOURCE "resource" -#define FM_EREPORT_PAYLOAD_NAME_ERR_TYPE "error-type" -#define FM_EREPORT_PAYLOAD_NAME_ERR_DISP "error-disposition" - -#ifdef __cplusplus -} -#endif - -#endif /* _SYS_FM_ULTRASPARC_T1_H */ diff --git a/usr/src/uts/common/sys/fm/protocol.h b/usr/src/uts/common/sys/fm/protocol.h index 32f4d099f0..89b761ef6c 100644 --- a/usr/src/uts/common/sys/fm/protocol.h +++ b/usr/src/uts/common/sys/fm/protocol.h @@ -21,7 +21,7 @@ */ /* - * Copyright 2005 Sun Microsystems, Inc. All rights reserved. + * Copyright 2006 Sun Microsystems, Inc. All rights reserved. * Use is subject to license terms. */ @@ -177,7 +177,8 @@ extern "C" { #define FM_HC_VERS0 0 #define FM_HC_SCHEME_VERSION FM_HC_VERS0 #define CPU_SCHEME_VERSION0 0 -#define FM_CPU_SCHEME_VERSION CPU_SCHEME_VERSION0 +#define CPU_SCHEME_VERSION1 1 +#define FM_CPU_SCHEME_VERSION CPU_SCHEME_VERSION1 #define MEM_SCHEME_VERSION0 0 #define FM_MEM_SCHEME_VERSION MEM_SCHEME_VERSION0 #define MOD_SCHEME_VERSION0 0 @@ -194,6 +195,7 @@ extern "C" { #define FM_FMRI_HC_ROOT "hc-root" #define FM_FMRI_HC_LIST_SZ "hc-list-sz" #define FM_FMRI_HC_LIST "hc-list" +#define FM_FMRI_HC_SPECIFIC "hc-specific" /* hc-list version and member names */ #define FM_FMRI_HC_NAME "hc-name" @@ -202,6 +204,9 @@ extern "C" { #define HC_LIST_VERSION0 0 #define FM_HC_LIST_VERSION HC_LIST_VERSION0 +/* hc-specific member names */ +#define FM_FMRI_HC_SPECIFIC_OFFSET "offset" + /* fmd module scheme member names */ #define FM_FMRI_FMD_NAME "mod-name" #define FM_FMRI_FMD_VERSION "mod-version" @@ -261,13 +266,13 @@ extern void fm_ereport_set(nvlist_t *, int, const char *, uint64_t, const nvlist_t *, ...); extern void fm_payload_set(nvlist_t *, ...); extern int i_fm_payload_set(nvlist_t *, const char *, va_list); -extern void fm_fmri_hc_set(nvlist_t *, int, const nvlist_t *, const char *, - const char *, const char *, const char *, uint32_t, ...); +extern void fm_fmri_hc_set(nvlist_t *, int, const nvlist_t *, nvlist_t *, + int, ...); extern void fm_fmri_dev_set(nvlist_t *, int, const nvlist_t *, const char *, const char *); extern void fm_fmri_de_set(nvlist_t *, int, const nvlist_t *, const char *); extern void fm_fmri_cpu_set(nvlist_t *, int, const nvlist_t *, uint32_t, - uint8_t, uint64_t); + uint8_t *, const char *); extern void fm_fmri_mem_set(nvlist_t *, int, const nvlist_t *, const char *, const char *, uint64_t); extern void fm_authority_set(nvlist_t *, int, const char *, const char *, diff --git a/usr/src/uts/common/sys/fm/util.h b/usr/src/uts/common/sys/fm/util.h index c0dc908ddc..33f5876cab 100644 --- a/usr/src/uts/common/sys/fm/util.h +++ b/usr/src/uts/common/sys/fm/util.h @@ -19,8 +19,9 @@ * * CDDL HEADER END */ + /* - * Copyright 2004 Sun Microsystems, Inc. All rights reserved. + * Copyright 2006 Sun Microsystems, Inc. All rights reserved. * Use is subject to license terms. */ @@ -74,9 +75,14 @@ typedef struct erpt_dump { } erpt_dump_t; #ifdef _KERNEL +#include <sys/systm.h> +#define FM_STK_DEPTH 20 /* maximum stack depth */ +#define FM_SYM_SZ 64 /* maximum symbol size */ #define FM_ERR_PIL 2 /* PIL for ereport_errorq drain processing */ +#define FM_EREPORT_PAYLOAD_NAME_STACK "stack" + extern errorq_t *ereport_errorq; extern void *ereport_dumpbuf; extern size_t ereport_dumplen; @@ -89,6 +95,8 @@ extern void fm_banner(void); extern void fm_ereport_dump(void); extern void fm_ereport_post(nvlist_t *, int); +extern void fm_payload_stack_add(nvlist_t *, const pc_t *, int); + #endif /* _KERNEL */ #ifdef __cplusplus diff --git a/usr/src/uts/common/sys/kobj.h b/usr/src/uts/common/sys/kobj.h index c2f8b2f9cb..7d2bd0922e 100644 --- a/usr/src/uts/common/sys/kobj.h +++ b/usr/src/uts/common/sys/kobj.h @@ -20,7 +20,7 @@ * CDDL HEADER END */ /* - * Copyright 2005 Sun Microsystems, Inc. All rights reserved. + * Copyright 2006 Sun Microsystems, Inc. All rights reserved. * Use is subject to license terms. */ @@ -152,7 +152,7 @@ typedef struct { extern int kobj_load_module(struct modctl *, int); extern void kobj_unload_module(struct modctl *); -extern uintptr_t kobj_lookup(void *, char *); +extern uintptr_t kobj_lookup(struct module *, const char *); extern Sym *kobj_lookup_all(struct module *, char *, int); extern int kobj_addrcheck(void *, caddr_t); extern int kobj_module_to_id(void *); diff --git a/usr/src/uts/common/sys/mem.h b/usr/src/uts/common/sys/mem.h index f6f749ef0e..d1307589a1 100644 --- a/usr/src/uts/common/sys/mem.h +++ b/usr/src/uts/common/sys/mem.h @@ -20,7 +20,7 @@ * CDDL HEADER END */ /* - * Copyright 2005 Sun Microsystems, Inc. All rights reserved. + * Copyright 2006 Sun Microsystems, Inc. All rights reserved. * Use is subject to license terms. */ @@ -55,6 +55,14 @@ typedef struct mem_vtop { pfn_t m_pfn; } mem_vtop_t; +#if defined(_SYSCALL32) +typedef struct mem_vtop32 { + uint32_t m_as; + uint32_t m_va; + uint32_t m_pfn; +} mem_vtop32_t; +#endif + /* * Private ioctls for fmd(1M). These interfaces are Sun Private. Applications * and drivers should not make use of these interfaces: they can change without diff --git a/usr/src/uts/common/sys/modctl.h b/usr/src/uts/common/sys/modctl.h index 06019d5f0f..d2f4cfd803 100644 --- a/usr/src/uts/common/sys/modctl.h +++ b/usr/src/uts/common/sys/modctl.h @@ -62,6 +62,9 @@ struct mod_ops { * The defined set of mod_ops structures for each loadable module type * Defined in modctl.c */ +#if defined(__i386) || defined(__amd64) +extern struct mod_ops mod_cpuops; +#endif extern struct mod_ops mod_cryptoops; extern struct mod_ops mod_driverops; extern struct mod_ops mod_execops; @@ -107,6 +110,17 @@ struct modlfs { struct vfsdef_v3 *fs_vfsdef; /* version may actually vary */ }; +#if defined(__i386) || defined(__amd64) +struct cmi_ops; + +/* For CPU modules */ +struct modlcpu { + struct mod_ops *cpu_modops; + char *cpu_linkinfo; + struct cmi_ops *cpu_cmiops; +}; +#endif + /* For cryptographic providers */ struct modlcrypto { struct mod_ops *crypto_modops; @@ -417,7 +431,7 @@ struct modctl_list { * are replicated in the modctl structure so that mod_containing_pc() * doesn't have to grab any locks (modctls are persistent; modules are not.) */ -struct modctl { +typedef struct modctl { struct modctl *mod_next; /* &modules based list */ struct modctl *mod_prev; int mod_id; @@ -449,7 +463,7 @@ struct modctl { int mod_gencount; /* # times loaded/unloaded */ struct modctl *mod_requisite_loading; /* mod circular dependency */ -}; +} modctl_t; /* * mod_loadflags @@ -479,7 +493,10 @@ extern int moddebug; * this is the head of a doubly linked list. Only the next and prev * pointers are used */ -extern struct modctl modules; +extern modctl_t modules; + +extern int modload_qualified(const char *, + const char *, const char *, const char *, uint_t[], int); extern void mod_setup(void); extern int modload(char *, char *); @@ -494,7 +511,7 @@ extern int mod_remove_by_name(char *); extern int mod_sysvar(const char *, const char *, u_longlong_t *); extern int mod_sysctl(int, void *); struct sysparam; -extern int mod_hold_by_modctl(struct modctl *, int); +extern int mod_hold_by_modctl(modctl_t *, int); #define MOD_WAIT_ONCE 0x01 #define MOD_WAIT_FOREVER 0x02 #define MOD_LOCK_HELD 0x04 @@ -506,13 +523,15 @@ extern void mod_release_stub(struct mod_stub_info *); extern void mod_askparams(void); extern void mod_uninstall_daemon(void); extern void modreap(void); -extern struct modctl *mod_hold_by_name(char *); -extern void mod_release_mod(struct modctl *); -extern uintptr_t modlookup(char *, char *); +extern modctl_t *mod_hold_by_id(modid_t); +extern modctl_t *mod_hold_by_name(const char *); +extern void mod_release_mod(modctl_t *); +extern uintptr_t modlookup(const char *, const char *); +extern uintptr_t modlookup_by_modctl(modctl_t *, const char *); extern char *modgetsymname(uintptr_t, unsigned long *); -extern void mod_release_requisites(struct modctl *); -extern struct modctl *mod_load_requisite(struct modctl *, char *); -extern struct modctl *mod_find_by_filename(char *, char *); +extern void mod_release_requisites(modctl_t *); +extern modctl_t *mod_load_requisite(modctl_t *, char *); +extern modctl_t *mod_find_by_filename(char *, char *); extern uintptr_t modgetsymvalue(char *, int); extern void mod_rele_dev_by_major(major_t); @@ -532,11 +551,11 @@ extern void read_class_file(void); extern void setbootpath(char *); extern void setbootfstype(char *); -extern int install_stubs_by_name(struct modctl *, char *); -extern void install_stubs(struct modctl *); -extern void uninstall_stubs(struct modctl *); -extern void reset_stubs(struct modctl *); -extern struct modctl *mod_getctl(struct modlinkage *); +extern int install_stubs_by_name(modctl_t *, char *); +extern void install_stubs(modctl_t *); +extern void uninstall_stubs(modctl_t *); +extern void reset_stubs(modctl_t *); +extern modctl_t *mod_getctl(struct modlinkage *); extern major_t mod_name_to_major(char *); extern modid_t mod_name_to_modid(char *); extern char *mod_major_to_name(major_t); @@ -550,7 +569,7 @@ extern char *mod_containing_pc(caddr_t); extern int mod_in_autounload(void); extern char *mod_modname(struct modlinkage *); -extern int dev_minorperm(dev_info_t *dip, char *name, mperm_t *rmp); +extern int dev_minorperm(dev_info_t *, char *, mperm_t *); /* * Declarations used for dynamic linking support routines. Interfaces diff --git a/usr/src/uts/common/sys/policy.h b/usr/src/uts/common/sys/policy.h index 3e1b260c1e..9653a58b0e 100644 --- a/usr/src/uts/common/sys/policy.h +++ b/usr/src/uts/common/sys/policy.h @@ -20,7 +20,7 @@ * CDDL HEADER END */ /* - * Copyright 2005 Sun Microsystems, Inc. All rights reserved. + * Copyright 2006 Sun Microsystems, Inc. All rights reserved. * Use is subject to license terms. */ @@ -88,6 +88,7 @@ boolean_t secpolicy_contract_event_choice(const cred_t *); int secpolicy_coreadm(const cred_t *); int secpolicy_cpc_cpu(const cred_t *); int secpolicy_dispadm(const cred_t *); +int secpolicy_error_inject(const cred_t *); int secpolicy_excl_open(const cred_t *); int secpolicy_fs_mount(cred_t *, vnode_t *, struct vfs *); int secpolicy_fs_unmount(cred_t *, struct vfs *); |