1251767Sgibbs/****************************************************************************** 2251767Sgibbs * mem_event.h 3251767Sgibbs * 4251767Sgibbs * Memory event common structures. 5251767Sgibbs * 6251767Sgibbs * Copyright (c) 2009 by Citrix Systems, Inc. (Patrick Colp) 7251767Sgibbs * 8251767Sgibbs * Permission is hereby granted, free of charge, to any person obtaining a copy 9251767Sgibbs * of this software and associated documentation files (the "Software"), to 10251767Sgibbs * deal in the Software without restriction, including without limitation the 11251767Sgibbs * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or 12251767Sgibbs * sell copies of the Software, and to permit persons to whom the Software is 13251767Sgibbs * furnished to do so, subject to the following conditions: 14251767Sgibbs * 15251767Sgibbs * The above copyright notice and this permission notice shall be included in 16251767Sgibbs * all copies or substantial portions of the Software. 17251767Sgibbs * 18251767Sgibbs * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 19251767Sgibbs * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 20251767Sgibbs * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 21251767Sgibbs * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 22251767Sgibbs * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 23251767Sgibbs * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 24251767Sgibbs * DEALINGS IN THE SOFTWARE. 25251767Sgibbs */ 26251767Sgibbs 27251767Sgibbs#ifndef _XEN_PUBLIC_MEM_EVENT_H 28251767Sgibbs#define _XEN_PUBLIC_MEM_EVENT_H 29251767Sgibbs 30251767Sgibbs#include "xen.h" 31251767Sgibbs#include "io/ring.h" 32251767Sgibbs 33251767Sgibbs/* Memory event flags */ 34251767Sgibbs#define MEM_EVENT_FLAG_VCPU_PAUSED (1 << 0) 35251767Sgibbs#define MEM_EVENT_FLAG_DROP_PAGE (1 << 1) 36251767Sgibbs#define MEM_EVENT_FLAG_EVICT_FAIL (1 << 2) 37251767Sgibbs#define MEM_EVENT_FLAG_FOREIGN (1 << 3) 38251767Sgibbs#define MEM_EVENT_FLAG_DUMMY (1 << 4) 39251767Sgibbs 40251767Sgibbs/* Reasons for the memory event request */ 41251767Sgibbs#define MEM_EVENT_REASON_UNKNOWN 0 /* typical reason */ 42251767Sgibbs#define MEM_EVENT_REASON_VIOLATION 1 /* access violation, GFN is address */ 43251767Sgibbs#define MEM_EVENT_REASON_CR0 2 /* CR0 was hit: gfn is CR0 value */ 44251767Sgibbs#define MEM_EVENT_REASON_CR3 3 /* CR3 was hit: gfn is CR3 value */ 45251767Sgibbs#define MEM_EVENT_REASON_CR4 4 /* CR4 was hit: gfn is CR4 value */ 46251767Sgibbs#define MEM_EVENT_REASON_INT3 5 /* int3 was hit: gla/gfn are RIP */ 47251767Sgibbs#define MEM_EVENT_REASON_SINGLESTEP 6 /* single step was invoked: gla/gfn are RIP */ 48251767Sgibbs 49251767Sgibbstypedef struct mem_event_st { 50251767Sgibbs uint32_t flags; 51251767Sgibbs uint32_t vcpu_id; 52251767Sgibbs 53251767Sgibbs uint64_t gfn; 54251767Sgibbs uint64_t offset; 55251767Sgibbs uint64_t gla; /* if gla_valid */ 56251767Sgibbs 57251767Sgibbs uint32_t p2mt; 58251767Sgibbs 59251767Sgibbs uint16_t access_r:1; 60251767Sgibbs uint16_t access_w:1; 61251767Sgibbs uint16_t access_x:1; 62251767Sgibbs uint16_t gla_valid:1; 63251767Sgibbs uint16_t available:12; 64251767Sgibbs 65251767Sgibbs uint16_t reason; 66251767Sgibbs} mem_event_request_t, mem_event_response_t; 67251767Sgibbs 68251767SgibbsDEFINE_RING_TYPES(mem_event, mem_event_request_t, mem_event_response_t); 69251767Sgibbs 70251767Sgibbs#endif 71251767Sgibbs 72251767Sgibbs/* 73251767Sgibbs * Local variables: 74251767Sgibbs * mode: C 75251767Sgibbs * c-set-style: "BSD" 76251767Sgibbs * c-basic-offset: 4 77251767Sgibbs * tab-width: 4 78251767Sgibbs * indent-tabs-mode: nil 79251767Sgibbs * End: 80251767Sgibbs */ 81