1 /* 2 * CDDL HEADER START 3 * 4 * The contents of this file are subject to the terms of the 5 * Common Development and Distribution License, Version 1.0 only 6 * (the "License"). You may not use this file except in compliance 7 * with the License. 8 * 9 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 10 * or http://www.opensolaris.org/os/licensing. 11 * See the License for the specific language governing permissions 12 * and limitations under the License. 13 * 14 * When distributing Covered Code, include this CDDL HEADER in each 15 * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 16 * If applicable, add the following below this CDDL HEADER, with the 17 * fields enclosed by brackets "[]" replaced with your own identifying 18 * information: Portions Copyright [yyyy] [name of copyright owner] 19 * 20 * CDDL HEADER END 21 */ 22 /* 23 * Copyright 2005 Sun Microsystems, Inc. All rights reserved. 24 * Use is subject to license terms. 25 */ 26 27 #ifndef _SYS_PLAT_ECC_DIMM_H 28 #define _SYS_PLAT_ECC_DIMM_H 29 30 #pragma ident "%Z%%M% %I% %E% SMI" 31 32 #ifdef __cplusplus 33 extern "C" { 34 #endif 35 36 #include <sys/int_types.h> 37 #include <sys/cheetahregs.h> 38 #include <sys/cpuvar.h> 39 #include <sys/dditypes.h> 40 #include <sys/ddipropdefs.h> 41 #include <sys/ddi_impldefs.h> 42 #include <sys/sunddi.h> 43 #include <sys/platform_module.h> 44 #include <sys/errno.h> 45 #include <sys/conf.h> 46 #include <sys/cmn_err.h> 47 #include <sys/sysmacros.h> 48 #include <sys/mc-us3.h> 49 #include <sys/plat_ecc_unum.h> 50 51 /* 52 * DIMM Serial Ids support for Starcat and Serengeti platforms 53 */ 54 55 #define PLAT_MAX_DIMM_SID_LEN 16 56 #define PLAT_MAX_DIMMS_PER_BOARD 32 57 58 typedef char plat_dimm_sid_t[PLAT_MAX_DIMM_SID_LEN]; 59 60 typedef struct plat_dimm_sid_request_data { 61 plat_ecc_msg_hdr_t pdsrd_header; 62 uint8_t pdsrd_board_num; /* bd# of SIDs requested */ 63 } plat_dimm_sid_request_data_t; 64 65 #define pdsrd_major_version pdsrd_header.emh_major_ver 66 #define pdsrd_minor_version pdsrd_header.emh_minor_ver 67 #define pdsrd_msg_type pdsrd_header.emh_msg_type 68 #define pdsrd_msg_length pdsrd_header.emh_msg_length 69 70 typedef struct plat_dimm_sid_board_data { 71 plat_ecc_msg_hdr_t pdsbd_header; 72 uint32_t pdsbd_errno; /* set if SC failed request */ 73 uint8_t pdsbd_board_num; /* bd where SIDs are located */ 74 uint8_t pdsbd_pad1; 75 uint16_t pdsbd_pad2; 76 uint32_t pdsbd_valid_bitmap; /* map of SIDs returned */ 77 plat_dimm_sid_t pdsbd_dimm_sids[PLAT_MAX_DIMMS_PER_BOARD]; 78 } plat_dimm_sid_board_data_t; 79 80 #define pdsbd_major_version pdsbd_header.emh_major_ver 81 #define pdsbd_minor_version pdsbd_header.emh_minor_ver 82 #define pdsbd_msg_type pdsbd_header.emh_msg_type 83 #define pdsbd_msg_length pdsbd_header.emh_msg_length 84 85 #define PLAT_ECC_DIMM_SID_VERSION_MAJOR 1 86 #define PLAT_ECC_DIMM_SID_VERSION_MINOR 1 87 88 #define PDSB_STATE_INVALID 0x0 89 #define PDSB_STATE_STORE_IN_PROGRESS 0x1 90 #define PDSB_STATE_STORED 0x2 91 #define PDSB_STATE_FAILED_TO_STORE 0x3 92 93 /* DIMM serial id data for one board */ 94 typedef struct plat_dimm_sid_board { 95 kmutex_t pdsb_lock; /* protect data for this bd */ 96 uint8_t pdsb_state; /* current state of data */ 97 uint32_t pdsb_valid_bitmap; /* map of valid SIDs */ 98 plat_dimm_sid_t pdsb_dimm_sids[PLAT_MAX_DIMMS_PER_BOARD]; /* SIDs */ 99 } plat_dimm_sid_board_t; 100 101 extern int plat_request_mem_sids(int boardnum); 102 extern int plat_store_mem_sids(plat_dimm_sid_board_data_t *data); 103 extern int plat_discard_mem_sids(int boardnum); 104 105 extern plat_dimm_sid_board_t domain_dimm_sids[]; 106 107 #ifdef __cplusplus 108 } 109 #endif 110 111 #endif /* _SYS_PLAT_ECC_DIMM_H */ 112