1529f529004c61fcfd0d95ab79b0f257d6ad4451Scott Davenport * CDDL HEADER START
1529f529004c61fcfd0d95ab79b0f257d6ad4451Scott Davenport * The contents of this file are subject to the terms of the
1529f529004c61fcfd0d95ab79b0f257d6ad4451Scott Davenport * Common Development and Distribution License (the "License").
1529f529004c61fcfd0d95ab79b0f257d6ad4451Scott Davenport * You may not use this file except in compliance with the License.
1529f529004c61fcfd0d95ab79b0f257d6ad4451Scott Davenport * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
1529f529004c61fcfd0d95ab79b0f257d6ad4451Scott Davenport * or http://www.opensolaris.org/os/licensing.
1529f529004c61fcfd0d95ab79b0f257d6ad4451Scott Davenport * See the License for the specific language governing permissions
1529f529004c61fcfd0d95ab79b0f257d6ad4451Scott Davenport * and limitations under the License.
1529f529004c61fcfd0d95ab79b0f257d6ad4451Scott Davenport * When distributing Covered Code, include this CDDL HEADER in each
1529f529004c61fcfd0d95ab79b0f257d6ad4451Scott Davenport * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
1529f529004c61fcfd0d95ab79b0f257d6ad4451Scott Davenport * If applicable, add the following below this CDDL HEADER, with the
1529f529004c61fcfd0d95ab79b0f257d6ad4451Scott Davenport * fields enclosed by brackets "[]" replaced with your own identifying
1529f529004c61fcfd0d95ab79b0f257d6ad4451Scott Davenport * information: Portions Copyright [yyyy] [name of copyright owner]
1529f529004c61fcfd0d95ab79b0f257d6ad4451Scott Davenport * CDDL HEADER END
1529f529004c61fcfd0d95ab79b0f257d6ad4451Scott Davenport * Copyright 2008 Sun Microsystems, Inc. All rights reserved.
1529f529004c61fcfd0d95ab79b0f257d6ad4451Scott Davenport * Use is subject to license terms.
1529f529004c61fcfd0d95ab79b0f257d6ad4451Scott Davenport * Support routines for managing state related to memory modules.
1529f529004c61fcfd0d95ab79b0f257d6ad4451Scott Davenportgmem_mem_serdnm_create(fmd_hdl_t *hdl, const char *serdbase, const char *serial)
1529f529004c61fcfd0d95ab79b0f257d6ad4451Scott Davenport size_t sz = snprintf(NULL, 0, fmt, serdbase, serial) + 1;
1529f529004c61fcfd0d95ab79b0f257d6ad4451Scott Davenport char *nm = fmd_hdl_alloc(hdl, sz, FMD_SLEEP);
1529f529004c61fcfd0d95ab79b0f257d6ad4451Scott Davenport (void) snprintf(nm, sz, fmt, serdbase, serial);
1529f529004c61fcfd0d95ab79b0f257d6ad4451Scott Davenportgmem_page_serdnm_create(fmd_hdl_t *hdl, const char *serdbase,
1529f529004c61fcfd0d95ab79b0f257d6ad4451Scott Davenport size_t sz = snprintf(NULL, 0, fmt, serdbase, phys_addr) + 1;
1529f529004c61fcfd0d95ab79b0f257d6ad4451Scott Davenport char *nm = fmd_hdl_alloc(hdl, sz, FMD_SLEEP);
1529f529004c61fcfd0d95ab79b0f257d6ad4451Scott Davenport (void) snprintf(nm, sz, fmt, serdbase, phys_addr);
1529f529004c61fcfd0d95ab79b0f257d6ad4451Scott Davenportgmem_mq_serdnm_create(fmd_hdl_t *hdl, const char *serdbase,
1529f529004c61fcfd0d95ab79b0f257d6ad4451Scott Davenport uint64_t phys_addr, uint16_t cw, uint16_t pos)
1529f529004c61fcfd0d95ab79b0f257d6ad4451Scott Davenport size_t sz = snprintf(NULL, 0, fmt, serdbase, phys_addr, cw, pos) + 1;
1529f529004c61fcfd0d95ab79b0f257d6ad4451Scott Davenport char *nm = fmd_hdl_alloc(hdl, sz, FMD_SLEEP);
1529f529004c61fcfd0d95ab79b0f257d6ad4451Scott Davenport (void) snprintf(nm, sz, fmt, serdbase, phys_addr, cw, pos);
1529f529004c61fcfd0d95ab79b0f257d6ad4451Scott Davenport GMEM_ERPT_PAYLOAD_FILTER_RATIO, &erpt_ratio) == 0)
1529f529004c61fcfd0d95ab79b0f257d6ad4451Scott Davenportgmem_page_serd_create(fmd_hdl_t *hdl, gmem_page_t *page, nvlist_t *nvl)
1529f529004c61fcfd0d95ab79b0f257d6ad4451Scott Davenport if (serd_n == DEFAULT_SERDN && serd_t == DEFAULT_SERDT) {
1529f529004c61fcfd0d95ab79b0f257d6ad4451Scott Davenport if (nvlist_lookup_uint32(nvl, GMEM_ERPT_PAYLOAD_SERDN,
1529f529004c61fcfd0d95ab79b0f257d6ad4451Scott Davenport if (nvlist_lookup_uint64(nvl, GMEM_ERPT_PAYLOAD_SERDT,
1529f529004c61fcfd0d95ab79b0f257d6ad4451Scott Davenport page->page_case.cc_serdnm = gmem_page_serdnm_create(hdl, "page",
1529f529004c61fcfd0d95ab79b0f257d6ad4451Scott Davenport fmd_serd_create(hdl, page->page_case.cc_serdnm, serd_n, serd_t);
1529f529004c61fcfd0d95ab79b0f257d6ad4451Scott Davenportgmem_serd_record(fmd_hdl_t *hdl, const char *serdbaser, uint32_t ratio,
1529f529004c61fcfd0d95ab79b0f257d6ad4451Scott Davenport return (fmd_serd_record(hdl, serdbaser, ep));
1529f529004c61fcfd0d95ab79b0f257d6ad4451Scott Davenport for (i = 0; i < ratio; i++) {
1529f529004c61fcfd0d95ab79b0f257d6ad4451Scott Davenportgmem_mem_case_restore(fmd_hdl_t *hdl, gmem_case_t *cc, fmd_case_t *cp,
1529f529004c61fcfd0d95ab79b0f257d6ad4451Scott Davenport gmem_case_restore(hdl, cc, cp, gmem_mem_serdnm_create(hdl, serdbase,
1529f529004c61fcfd0d95ab79b0f257d6ad4451Scott Davenportgmem_mem_retirestat_create(fmd_hdl_t *hdl, fmd_stat_t *st, const char *serial,
1529f529004c61fcfd0d95ab79b0f257d6ad4451Scott Davenport (void) snprintf(st->fmds_name, sizeof (st->fmds_name), "%s%s",
1529f529004c61fcfd0d95ab79b0f257d6ad4451Scott Davenport (void) snprintf(st->fmds_desc, sizeof (st->fmds_desc),