gmem_page.h revision 8346:ecea0dd9d4ce
159191Skris/*
259191Skris * CDDL HEADER START
359191Skris *
459191Skris * The contents of this file are subject to the terms of the
568651Skris * Common Development and Distribution License (the "License").
659191Skris * You may not use this file except in compliance with the License.
759191Skris *
859191Skris * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
959191Skris * or http://www.opensolaris.org/os/licensing.
1068651Skris * See the License for the specific language governing permissions
1159191Skris * and limitations under the License.
1259191Skris *
1368651Skris * When distributing Covered Code, include this CDDL HEADER in each
1468651Skris * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
1568651Skris * If applicable, add the following below this CDDL HEADER, with the
1668651Skris * fields enclosed by brackets "[]" replaced with your own identifying
17160814Ssimon * information: Portions Copyright [yyyy] [name of copyright owner]
1868651Skris *
1968651Skris * CDDL HEADER END
2068651Skris */
21194206Ssimon/*
2259191Skris * Copyright 2008 Sun Microsystems, Inc.  All rights reserved.
2359191Skris * Use is subject to license terms.
2468651Skris */
2559191Skris
2659191Skris#ifndef _GMEM_PAGE_H
2759191Skris#define	_GMEM_PAGE_H
2859191Skris
2959191Skris
3059191Skris/*
3168651Skris * Routines for the creation of page retirement faults and for the management of
3268651Skris * page-related state.
3359191Skris */
3459191Skris
3559191Skris#include <gmem_state.h>
3659191Skris#include <gmem_fmri.h>
3759191Skris
3859191Skris#include <fm/fmd_api.h>
3959191Skris#include <sys/types.h>
4068651Skris
4168651Skris#ifdef __cplusplus
4259191Skrisextern "C" {
4359191Skris#endif
4459191Skris
4559191Skris#define	PAGE_MKVERSION(version)	(version)
4659191Skris
4768651Skris#define	CMD_PAGE_VERSION_0	PAGE_MKVERSION(0)
4868651Skris#define	CMD_PAGE_VERSION	CMD_PAGE_VERSION_0
4968651Skris
5068651Skris#define	CMD_PAGE_VERSIONED(page)	((page)->page_version)
5168651Skris
5268651Skristypedef struct gmem_page_pers {
5368651Skris	gmem_header_t pagep_header;	/* Nodetype must be CMD_NT_PAGE */
5468651Skris	uint_t pagep_version;
5568651Skris	gmem_fmri_t pagep_asru;		/* ASRU for this DIMM */
5668651Skris	uint64_t pagep_physbase;	/* base phys addr for page */
5768651Skris	uint64_t pagep_offset;		/* page offset */
5868651Skris	uint_t pagep_flags;		/* CMD_MEM_F_* */
5968651Skris} gmem_page_pers_t;
6068651Skris
6168651Skristypedef struct gmem_page {
6268651Skris	gmem_page_pers_t page_pers;
6368651Skris	gmem_case_t page_case;		/* Open CE case against this page */
64160814Ssimon} gmem_page_t;
65160814Ssimon
66160814Ssimon#define	CMD_PAGE_MAXSIZE sizeof (gmem_page_pers_t)
67160814Ssimon#define	CMD_PAGE_MINSIZE sizeof (gmem_page_pers_t)
68160814Ssimon
6968651Skris#define	page_header		page_pers.pagep_header
7068651Skris#define	page_nodetype		page_pers.pagep_header.hdr_nodetype
71237658Sjkim#define	page_bufname		page_pers.pagep_header.hdr_bufname
7268651Skris#define	page_version		page_pers.pagep_version
7368651Skris#define	page_asru		page_pers.pagep_asru
7468651Skris#define	page_asru_nvl		page_pers.pagep_asru.fmri_nvl
7568651Skris#define	page_flags		page_pers.pagep_flags
7668651Skris#define	page_physbase		page_pers.pagep_physbase
7768651Skris#define	page_offset		page_pers.pagep_offset
7868651Skris#define	page_list		page_header.hdr_list
7968651Skris
8068651Skris/*
8168651Skris * Page retirement
82194206Ssimon *
83194206Ssimon * When a page is to be retired, these routines are called to generate and
84194206Ssimon * manage a fault.memory.page against the page.
85194206Ssimon */
8668651Skrisextern int gmem_page_fault(fmd_hdl_t *, nvlist_t *, nvlist_t *, fmd_event_t *,
8768651Skris    uint64_t, uint64_t);
8868651Skrisextern void gmem_page_close(fmd_hdl_t *, void *);
8968651Skris
9068651Skrisextern gmem_page_t *gmem_page_create(fmd_hdl_t *, nvlist_t *, uint64_t,
9168651Skris    uint64_t);
9268651Skrisextern gmem_page_t *gmem_page_lookup(uint64_t);
9368651Skris
9459191Skrisextern void gmem_page_dirty(fmd_hdl_t *, gmem_page_t *);
9559191Skrisextern void *gmem_page_restore(fmd_hdl_t *, fmd_case_t *, gmem_case_ptr_t *);
9659191Skrisextern void gmem_page_validate(fmd_hdl_t *);
9759191Skrisextern void gmem_page_destroy(fmd_hdl_t *, gmem_page_t *);
9859191Skrisextern void gmem_page_fini(fmd_hdl_t *);
9959191Skris
10059191Skris#ifdef __cplusplus
10159191Skris}
10259191Skris#endif
10359191Skris
10459191Skris#endif /* _GMEM_PAGE_H */
10559191Skris