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 1029853d9e8SJason Beloro /* 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 108*02b4e56cSHaik Aftandilian /* 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