1251767Sgibbs/****************************************************************************** 2251767Sgibbs * save_types.h 3251767Sgibbs * 4251767Sgibbs * Copyright (c) 2007 Isaku Yamahata <yamahata at valinux co jp> 5251767Sgibbs * VA Linux Systems Japan K.K. 6251767Sgibbs * 7251767Sgibbs * Permission is hereby granted, free of charge, to any person obtaining a copy 8251767Sgibbs * of this software and associated documentation files (the "Software"), to 9251767Sgibbs * deal in the Software without restriction, including without limitation the 10251767Sgibbs * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or 11251767Sgibbs * sell copies of the Software, and to permit persons to whom the Software is 12251767Sgibbs * furnished to do so, subject to the following conditions: 13251767Sgibbs * 14251767Sgibbs * The above copyright notice and this permission notice shall be included in 15251767Sgibbs * all copies or substantial portions of the Software. 16251767Sgibbs * 17251767Sgibbs * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 18251767Sgibbs * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 19251767Sgibbs * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 20251767Sgibbs * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 21251767Sgibbs * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 22251767Sgibbs * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 23251767Sgibbs * DEALINGS IN THE SOFTWARE. 24251767Sgibbs */ 25251767Sgibbs 26251767Sgibbs#ifndef __XEN_PUBLIC_HVM_SAVE_IA64_H__ 27251767Sgibbs#define __XEN_PUBLIC_HVM_SAVE_IA64_H__ 28251767Sgibbs 29251767Sgibbs#include "../../hvm/save.h" 30251767Sgibbs#include "../../arch-ia64.h" 31251767Sgibbs 32251767Sgibbs/* 33251767Sgibbs * Save/restore header: general info about the save file. 34251767Sgibbs */ 35251767Sgibbs 36251767Sgibbs/* x86 uses 0x54381286 */ 37251767Sgibbs#define HVM_FILE_MAGIC 0x343641492f6e6558UL /* "Xen/IA64" */ 38251767Sgibbs#define HVM_FILE_VERSION 0x0000000000000001UL 39251767Sgibbs 40251767Sgibbsstruct hvm_save_header { 41251767Sgibbs uint64_t magic; /* Must be HVM_FILE_MAGIC */ 42251767Sgibbs uint64_t version; /* File format version */ 43251767Sgibbs uint64_t changeset; /* Version of Xen that saved this file */ 44251767Sgibbs uint64_t cpuid[5]; /* CPUID[0x01][%eax] on the saving machine */ 45251767Sgibbs}; 46251767Sgibbs 47251767SgibbsDECLARE_HVM_SAVE_TYPE(HEADER, 1, struct hvm_save_header); 48251767Sgibbs 49251767Sgibbs/* 50251767Sgibbs * CPU 51251767Sgibbs */ 52251767Sgibbsstruct hvm_hw_ia64_cpu { 53251767Sgibbs uint64_t ipsr; 54251767Sgibbs}; 55251767SgibbsDECLARE_HVM_SAVE_TYPE(CPU, 2, struct hvm_hw_ia64_cpu); 56251767Sgibbs 57251767Sgibbs/* 58251767Sgibbs * CPU 59251767Sgibbs */ 60251767Sgibbsstruct hvm_hw_ia64_vpd { 61251767Sgibbs struct vpd vpd; 62251767Sgibbs}; 63251767SgibbsDECLARE_HVM_SAVE_TYPE(VPD, 3, struct hvm_hw_ia64_vpd); 64251767Sgibbs 65251767Sgibbs/* 66251767Sgibbs * device dependency 67251767Sgibbs * vacpi => viosapic => vlsapic 68251767Sgibbs */ 69251767Sgibbs/* 70251767Sgibbs * vlsapic 71251767Sgibbs */ 72251767Sgibbsstruct hvm_hw_ia64_vlsapic { 73251767Sgibbs uint64_t insvc[4]; 74251767Sgibbs uint64_t vhpi; // ??? should this be saved in vpd 75251767Sgibbs uint8_t xtp; 76251767Sgibbs uint8_t pal_init_pending; 77251767Sgibbs uint8_t pad[2]; 78251767Sgibbs}; 79251767SgibbsDECLARE_HVM_SAVE_TYPE(VLSAPIC, 4, struct hvm_hw_ia64_vlsapic); 80251767Sgibbs/* set 81251767Sgibbs * unconditionaly set v->arch.irq_new_peding = 1 82251767Sgibbs * unconditionaly set v->arch.irq_new_condition = 0 83251767Sgibbs */ 84251767Sgibbs 85251767Sgibbs/* 86251767Sgibbs * vtime 87251767Sgibbs */ 88251767Sgibbs/* itc, itm, itv are saved by arch vcpu context */ 89251767Sgibbsstruct hvm_hw_ia64_vtime { 90251767Sgibbs uint64_t itc; 91251767Sgibbs uint64_t itm; 92251767Sgibbs 93251767Sgibbs uint64_t last_itc; 94251767Sgibbs uint64_t pending; 95251767Sgibbs}; 96251767SgibbsDECLARE_HVM_SAVE_TYPE(VTIME, 5, struct hvm_hw_ia64_vtime); 97251767Sgibbs/* 98251767Sgibbs * calculate v->vtm.vtm_offset 99251767Sgibbs * ??? Or should vtm_offset be set by leave_hypervisor_tail()? 100251767Sgibbs * start vtm_timer if necessary by vtm_set_itm(). 101251767Sgibbs * ??? Or should vtm_timer be set by leave_hypervisor_tail()? 102251767Sgibbs * 103251767Sgibbs * ??? or should be done by schedule_tail() 104251767Sgibbs * => schedule_tail() should do. 105251767Sgibbs */ 106251767Sgibbs 107251767Sgibbs/* 108251767Sgibbs * viosapic 109251767Sgibbs */ 110251767Sgibbs#define VIOSAPIC_NUM_PINS 48 111251767Sgibbs 112251767Sgibbs/* To share VT-d code which uses vioapic_redir_entry. 113251767Sgibbs * Although on ia64 this is for vsapic, but we have to vioapic_redir_entry 114251767Sgibbs * instead of viosapic_redir_entry. 115251767Sgibbs */ 116251767Sgibbsunion vioapic_redir_entry 117251767Sgibbs{ 118251767Sgibbs uint64_t bits; 119251767Sgibbs struct { 120251767Sgibbs uint8_t vector; 121251767Sgibbs 122251767Sgibbs uint8_t delivery_mode : 3; 123251767Sgibbs uint8_t reserve1 : 1; 124251767Sgibbs uint8_t delivery_status: 1; 125251767Sgibbs uint8_t polarity : 1; 126251767Sgibbs uint8_t reserve2 : 1; 127251767Sgibbs uint8_t trig_mode : 1; 128251767Sgibbs 129251767Sgibbs uint8_t mask : 1; 130251767Sgibbs uint8_t reserve3 : 7; 131251767Sgibbs 132251767Sgibbs uint8_t reserved[3]; 133251767Sgibbs uint16_t dest_id; 134251767Sgibbs } fields; 135251767Sgibbs}; 136251767Sgibbs 137251767Sgibbsstruct hvm_hw_ia64_viosapic { 138251767Sgibbs uint64_t irr; 139251767Sgibbs uint64_t isr; 140251767Sgibbs uint32_t ioregsel; 141251767Sgibbs uint32_t pad; 142251767Sgibbs uint64_t lowest_vcpu_id; 143251767Sgibbs uint64_t base_address; 144251767Sgibbs union vioapic_redir_entry redirtbl[VIOSAPIC_NUM_PINS]; 145251767Sgibbs}; 146251767SgibbsDECLARE_HVM_SAVE_TYPE(VIOSAPIC, 6, struct hvm_hw_ia64_viosapic); 147251767Sgibbs 148251767Sgibbs/* 149251767Sgibbs * vacpi 150251767Sgibbs * PM timer 151251767Sgibbs */ 152251767Sgibbsstruct vacpi_regs { 153251767Sgibbs union { 154251767Sgibbs struct { 155251767Sgibbs uint32_t pm1a_sts:16;/* PM1a_EVT_BLK.PM1a_STS: status register */ 156251767Sgibbs uint32_t pm1a_en:16; /* PM1a_EVT_BLK.PM1a_EN: enable register */ 157251767Sgibbs }; 158251767Sgibbs uint32_t evt_blk; 159251767Sgibbs }; 160251767Sgibbs uint32_t tmr_val; /* PM_TMR_BLK.TMR_VAL: 32bit free-running counter */ 161251767Sgibbs}; 162251767Sgibbs 163251767Sgibbsstruct hvm_hw_ia64_vacpi { 164251767Sgibbs struct vacpi_regs regs; 165251767Sgibbs}; 166251767SgibbsDECLARE_HVM_SAVE_TYPE(VACPI, 7, struct hvm_hw_ia64_vacpi); 167251767Sgibbs/* update last_gtime and setup timer of struct vacpi */ 168251767Sgibbs 169251767Sgibbs/* 170251767Sgibbs * opt_feature: identity mapping of region 4, 5 and 7. 171251767Sgibbs * With the c/s 16396:d2935f9c217f of xen-ia64-devel.hg, 172251767Sgibbs * opt_feature hypercall supports only region 4,5,7 identity mappings. 173251767Sgibbs * structure hvm_hw_ia64_identity_mappings only supports them. 174251767Sgibbs * The new structure, struct hvm_hw_ia64_identity_mappings, is created to 175251767Sgibbs * avoid to keep up with change of the xen/ia64 internal structure, struct 176251767Sgibbs * opt_feature. 177251767Sgibbs * 178251767Sgibbs * If it is enhanced in the future, new structure will be created. 179251767Sgibbs */ 180251767Sgibbsstruct hvm_hw_ia64_identity_mapping { 181251767Sgibbs uint64_t on; /* on/off */ 182251767Sgibbs uint64_t pgprot; /* The page protection bit mask of the pte. */ 183251767Sgibbs uint64_t key; /* A protection key. */ 184251767Sgibbs}; 185251767Sgibbs 186251767Sgibbsstruct hvm_hw_ia64_identity_mappings { 187251767Sgibbs struct hvm_hw_ia64_identity_mapping im_reg4;/* Region 4 identity mapping */ 188251767Sgibbs struct hvm_hw_ia64_identity_mapping im_reg5;/* Region 5 identity mapping */ 189251767Sgibbs struct hvm_hw_ia64_identity_mapping im_reg7;/* Region 7 identity mapping */ 190251767Sgibbs}; 191251767SgibbsDECLARE_HVM_SAVE_TYPE(OPT_FEATURE_IDENTITY_MAPPINGS, 8, struct hvm_hw_ia64_identity_mappings); 192251767Sgibbs 193251767Sgibbs/* 194251767Sgibbs * Largest type-code in use 195251767Sgibbs */ 196251767Sgibbs#define HVM_SAVE_CODE_MAX 8 197251767Sgibbs 198251767Sgibbs#endif /* __XEN_PUBLIC_HVM_SAVE_IA64_H__ */ 199251767Sgibbs 200251767Sgibbs/* 201251767Sgibbs * Local variables: 202251767Sgibbs * mode: C 203251767Sgibbs * c-set-style: "BSD" 204251767Sgibbs * c-basic-offset: 4 205251767Sgibbs * tab-width: 4 206251767Sgibbs * indent-tabs-mode: nil 207251767Sgibbs * End: 208251767Sgibbs */ 209