xref: /illumos-gate/usr/src/uts/sun4v/sys/dr_mem.h (revision 02b4e56c)
19853d9e8SJason Beloro /*
29853d9e8SJason Beloro  * CDDL HEADER START
39853d9e8SJason Beloro  *
49853d9e8SJason Beloro  * The contents of this file are subject to the terms of the
59853d9e8SJason Beloro  * Common Development and Distribution License (the "License").
69853d9e8SJason Beloro  * You may not use this file except in compliance with the License.
79853d9e8SJason Beloro  *
89853d9e8SJason Beloro  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
99853d9e8SJason Beloro  * or http://www.opensolaris.org/os/licensing.
109853d9e8SJason Beloro  * See the License for the specific language governing permissions
119853d9e8SJason Beloro  * and limitations under the License.
129853d9e8SJason Beloro  *
139853d9e8SJason Beloro  * When distributing Covered Code, include this CDDL HEADER in each
149853d9e8SJason Beloro  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
159853d9e8SJason Beloro  * If applicable, add the following below this CDDL HEADER, with the
169853d9e8SJason Beloro  * fields enclosed by brackets "[]" replaced with your own identifying
179853d9e8SJason Beloro  * information: Portions Copyright [yyyy] [name of copyright owner]
189853d9e8SJason Beloro  *
199853d9e8SJason Beloro  * CDDL HEADER END
209853d9e8SJason Beloro  */
219853d9e8SJason Beloro 
229853d9e8SJason Beloro /*
23*02b4e56cSHaik Aftandilian  * Copyright (c) 2009, 2010, Oracle and/or its affiliates. All rights reserved.
249853d9e8SJason Beloro  */
259853d9e8SJason Beloro 
269853d9e8SJason Beloro #ifndef _DR_MEM_H
279853d9e8SJason Beloro #define	_DR_MEM_H
289853d9e8SJason Beloro 
299853d9e8SJason Beloro /*
309853d9e8SJason Beloro  * Memory DR Control Protocol
319853d9e8SJason Beloro  */
329853d9e8SJason Beloro 
339853d9e8SJason Beloro #ifdef __cplusplus
349853d9e8SJason Beloro extern "C" {
359853d9e8SJason Beloro #endif
369853d9e8SJason Beloro 
379853d9e8SJason Beloro /*
389853d9e8SJason Beloro  * Memory DR Message Header
399853d9e8SJason Beloro  */
409853d9e8SJason Beloro typedef struct {
419853d9e8SJason Beloro 	uint32_t	msg_type;	/* message type */
429853d9e8SJason Beloro 	uint32_t	msg_arg;	/* messages argument */
439853d9e8SJason Beloro 	uint64_t	req_num;	/* request number */
449853d9e8SJason Beloro } dr_mem_hdr_t;
459853d9e8SJason Beloro 
469853d9e8SJason Beloro /*
479853d9e8SJason Beloro  * Memory command and response messages
489853d9e8SJason Beloro  */
499853d9e8SJason Beloro 
509853d9e8SJason Beloro #define	DR_MEM_DS_ID		"dr-mem"
519853d9e8SJason Beloro 
529853d9e8SJason Beloro #define	DR_MEM_CONFIGURE	(0x4d43)	/* 'MC' configure mem */
539853d9e8SJason Beloro #define	DR_MEM_UNCONFIGURE	(0x4d55)	/* 'MU' unconfigure  mem */
549853d9e8SJason Beloro #define	DR_MEM_UNCONF_STATUS	(0x4d53)	/* 'MS' get mem unconf status */
559853d9e8SJason Beloro #define	DR_MEM_UNCONF_CANCEL	(0x4d4e)	/* 'MN' cancel mem unconf */
569853d9e8SJason Beloro #define	DR_MEM_QUERY		(0x4d51)	/* 'MQ' query mem info */
579853d9e8SJason Beloro 
589853d9e8SJason Beloro #define	DR_MEM_OK		('o')
599853d9e8SJason Beloro #define	DR_MEM_ERROR		('e')
609853d9e8SJason Beloro 
619853d9e8SJason Beloro typedef struct {
629853d9e8SJason Beloro 	uint64_t	addr;		/* mblk base address */
639853d9e8SJason Beloro 	uint64_t	size;		/* mblk size */
649853d9e8SJason Beloro } dr_mem_blk_t;
659853d9e8SJason Beloro 
669853d9e8SJason Beloro /*
679853d9e8SJason Beloro  * Response Message
689853d9e8SJason Beloro  */
699853d9e8SJason Beloro typedef struct {
709853d9e8SJason Beloro 	uint64_t	addr;		/* mblk base address */
719853d9e8SJason Beloro 	uint64_t	size;		/* mblk size */
729853d9e8SJason Beloro 	uint32_t	result;		/* result of the operation */
739853d9e8SJason Beloro 	uint32_t	status;		/* status of the mblk */
749853d9e8SJason Beloro 	uint32_t	string_off;	/* informational string offset */
759853d9e8SJason Beloro 	uint32_t	reserved;	/* padding */
769853d9e8SJason Beloro } dr_mem_stat_t;
779853d9e8SJason Beloro 
789853d9e8SJason Beloro typedef struct {
799853d9e8SJason Beloro 	uint64_t	addr;		/* query address */
809853d9e8SJason Beloro 	memquery_t	mq;		/* query results */
819853d9e8SJason Beloro } dr_mem_query_t;
829853d9e8SJason Beloro 
839853d9e8SJason Beloro /*
849853d9e8SJason Beloro  * Result Codes
859853d9e8SJason Beloro  */
869853d9e8SJason Beloro #define	DR_MEM_RES_OK			0x0	/* operation succeeded */
879853d9e8SJason Beloro #define	DR_MEM_RES_FAILURE		0x1	/* operation failed */
889853d9e8SJason Beloro #define	DR_MEM_RES_BLOCKED		0x2	/* operation was blocked */
899853d9e8SJason Beloro #define	DR_MEM_RES_NOT_IN_MD		0x3	/* memory not defined in MD */
909853d9e8SJason Beloro #define	DR_MEM_RES_ESPAN		0x4	/* memory already in use */
919853d9e8SJason Beloro #define	DR_MEM_RES_EFAULT		0x5	/* memory access test failed */
929853d9e8SJason Beloro #define	DR_MEM_RES_ERESOURCE		0x6	/* resource not available */
939853d9e8SJason Beloro #define	DR_MEM_RES_PERM			0x7	/* permanent pages in span */
949853d9e8SJason Beloro #define	DR_MEM_RES_EBUSY		0x8	/* memory span busy */
959853d9e8SJason Beloro #define	DR_MEM_RES_ENOTVIABLE		0x9	/* VM viability test failed */
969853d9e8SJason Beloro #define	DR_MEM_RES_ENOWORK		0xA	/* no pages to unconfigure */
979853d9e8SJason Beloro #define	DR_MEM_RES_ECANCELLED		0xB	/* operation cancelled */
989853d9e8SJason Beloro #define	DR_MEM_RES_EREFUSED		0xC	/* operation refused */
999853d9e8SJason Beloro #define	DR_MEM_RES_EDUP			0xD	/* memory span duplicate */
1009853d9e8SJason Beloro #define	DR_MEM_RES_EINVAL		0xE	/* invalid argument */
1019853d9e8SJason Beloro 
102*02b4e56cSHaik Aftandilian /*
103*02b4e56cSHaik Aftandilian  * Sub-Result Codes
104*02b4e56cSHaik Aftandilian  */
105*02b4e56cSHaik Aftandilian #define	DR_MEM_SRES_NONE		0x0	/* no sub-result */
106*02b4e56cSHaik Aftandilian #define	DR_MEM_SRES_OS_SUSPENDED	0x1	/* blocked due to OS suspend */
107*02b4e56cSHaik Aftandilian 
1089853d9e8SJason Beloro /*
1099853d9e8SJason Beloro  * Status Codes
1109853d9e8SJason Beloro  */
1119853d9e8SJason Beloro #define	DR_MEM_STAT_NOT_PRESENT		0x0	/* mblk ID not in MD */
1129853d9e8SJason Beloro #define	DR_MEM_STAT_UNCONFIGURED	0x1	/* mblk unconfigured */
1139853d9e8SJason Beloro #define	DR_MEM_STAT_CONFIGURED		0x2	/* mblk configured */
1149853d9e8SJason Beloro 
1159853d9e8SJason Beloro /*
1169853d9e8SJason Beloro  * Macros to access arrays that follow message header
1179853d9e8SJason Beloro  */
1189853d9e8SJason Beloro #define	DR_MEM_HDR(h)		((dr_mem_hdr_t *)(h))
1199853d9e8SJason Beloro #define	DR_MEM_CMD_MBLKS(h)	((dr_mem_blk_t *)((DR_MEM_HDR(h)) + 1))
1209853d9e8SJason Beloro #define	DR_MEM_RESP_STATS(h)	((dr_mem_stat_t *)((DR_MEM_HDR(h)) + 1))
1219853d9e8SJason Beloro #define	DR_MEM_RESP_DEL_STAT(h)	((memdelstat_t *)(DR_MEM_HDR(h) + 1))
1229853d9e8SJason Beloro #define	DR_MEM_RESP_QUERY(h)	((dr_mem_query_t *)(DR_MEM_HDR(h) + 1))
1239853d9e8SJason Beloro 
1249853d9e8SJason Beloro #ifdef __cplusplus
1259853d9e8SJason Beloro }
1269853d9e8SJason Beloro #endif
1279853d9e8SJason Beloro 
1289853d9e8SJason Beloro #endif /* _DR_MEM_H */
129