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 (the "License"). 6 * You may not use this file except in compliance with the License. 7 * 8 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 9 * or http://www.opensolaris.org/os/licensing. 10 * See the License for the specific language governing permissions 11 * and limitations under the License. 12 * 13 * When distributing Covered Code, include this CDDL HEADER in each 14 * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 15 * If applicable, add the following below this CDDL HEADER, with the 16 * fields enclosed by brackets "[]" replaced with your own identifying 17 * information: Portions Copyright [yyyy] [name of copyright owner] 18 * 19 * CDDL HEADER END 20 */ 21 22 /* 23 * Copyright (c) 2009, 2010, Oracle and/or its affiliates. All rights reserved. 24 */ 25 26 #ifndef _DR_MEM_H 27 #define _DR_MEM_H 28 29 /* 30 * Memory DR Control Protocol 31 */ 32 33 #ifdef __cplusplus 34 extern "C" { 35 #endif 36 37 /* 38 * Memory DR Message Header 39 */ 40 typedef struct { 41 uint32_t msg_type; /* message type */ 42 uint32_t msg_arg; /* messages argument */ 43 uint64_t req_num; /* request number */ 44 } dr_mem_hdr_t; 45 46 /* 47 * Memory command and response messages 48 */ 49 50 #define DR_MEM_DS_ID "dr-mem" 51 52 #define DR_MEM_CONFIGURE (0x4d43) /* 'MC' configure mem */ 53 #define DR_MEM_UNCONFIGURE (0x4d55) /* 'MU' unconfigure mem */ 54 #define DR_MEM_UNCONF_STATUS (0x4d53) /* 'MS' get mem unconf status */ 55 #define DR_MEM_UNCONF_CANCEL (0x4d4e) /* 'MN' cancel mem unconf */ 56 #define DR_MEM_QUERY (0x4d51) /* 'MQ' query mem info */ 57 58 #define DR_MEM_OK ('o') 59 #define DR_MEM_ERROR ('e') 60 61 typedef struct { 62 uint64_t addr; /* mblk base address */ 63 uint64_t size; /* mblk size */ 64 } dr_mem_blk_t; 65 66 /* 67 * Response Message 68 */ 69 typedef struct { 70 uint64_t addr; /* mblk base address */ 71 uint64_t size; /* mblk size */ 72 uint32_t result; /* result of the operation */ 73 uint32_t status; /* status of the mblk */ 74 uint32_t string_off; /* informational string offset */ 75 uint32_t reserved; /* padding */ 76 } dr_mem_stat_t; 77 78 typedef struct { 79 uint64_t addr; /* query address */ 80 memquery_t mq; /* query results */ 81 } dr_mem_query_t; 82 83 /* 84 * Result Codes 85 */ 86 #define DR_MEM_RES_OK 0x0 /* operation succeeded */ 87 #define DR_MEM_RES_FAILURE 0x1 /* operation failed */ 88 #define DR_MEM_RES_BLOCKED 0x2 /* operation was blocked */ 89 #define DR_MEM_RES_NOT_IN_MD 0x3 /* memory not defined in MD */ 90 #define DR_MEM_RES_ESPAN 0x4 /* memory already in use */ 91 #define DR_MEM_RES_EFAULT 0x5 /* memory access test failed */ 92 #define DR_MEM_RES_ERESOURCE 0x6 /* resource not available */ 93 #define DR_MEM_RES_PERM 0x7 /* permanent pages in span */ 94 #define DR_MEM_RES_EBUSY 0x8 /* memory span busy */ 95 #define DR_MEM_RES_ENOTVIABLE 0x9 /* VM viability test failed */ 96 #define DR_MEM_RES_ENOWORK 0xA /* no pages to unconfigure */ 97 #define DR_MEM_RES_ECANCELLED 0xB /* operation cancelled */ 98 #define DR_MEM_RES_EREFUSED 0xC /* operation refused */ 99 #define DR_MEM_RES_EDUP 0xD /* memory span duplicate */ 100 #define DR_MEM_RES_EINVAL 0xE /* invalid argument */ 101 102 /* 103 * Sub-Result Codes 104 */ 105 #define DR_MEM_SRES_NONE 0x0 /* no sub-result */ 106 #define DR_MEM_SRES_OS_SUSPENDED 0x1 /* blocked due to OS suspend */ 107 108 /* 109 * Status Codes 110 */ 111 #define DR_MEM_STAT_NOT_PRESENT 0x0 /* mblk ID not in MD */ 112 #define DR_MEM_STAT_UNCONFIGURED 0x1 /* mblk unconfigured */ 113 #define DR_MEM_STAT_CONFIGURED 0x2 /* mblk configured */ 114 115 /* 116 * Macros to access arrays that follow message header 117 */ 118 #define DR_MEM_HDR(h) ((dr_mem_hdr_t *)(h)) 119 #define DR_MEM_CMD_MBLKS(h) ((dr_mem_blk_t *)((DR_MEM_HDR(h)) + 1)) 120 #define DR_MEM_RESP_STATS(h) ((dr_mem_stat_t *)((DR_MEM_HDR(h)) + 1)) 121 #define DR_MEM_RESP_DEL_STAT(h) ((memdelstat_t *)(DR_MEM_HDR(h) + 1)) 122 #define DR_MEM_RESP_QUERY(h) ((dr_mem_query_t *)(DR_MEM_HDR(h) + 1)) 123 124 #ifdef __cplusplus 125 } 126 #endif 127 128 #endif /* _DR_MEM_H */ 129