Merge pull request #338 from MihaelaStoica/CP-10625

CP-10625: Provide Xencenter user interface to enable/disable integrated GPU passthrough
This commit is contained in:
Gabor Apati-Nagy 2015-02-25 17:11:25 +00:00
commit b78d9ff87a
14 changed files with 1166 additions and 40 deletions

View File

@ -208,10 +208,10 @@ namespace XenAdmin.Dialogs
if (is_pool && Helpers.MidnightRideOrGreater(xenObject.Connection))
ShowTab(PoolPowerONEditPage = new PoolPowerONEditPage());
if (is_pool_or_standalone)
if ((is_pool_or_standalone && Helpers.VGpuCapability(xenObjectCopy.Connection))
|| (is_host && ((Host)xenObjectCopy).CanEnableDisableIntegratedGpu))
{
if (Helpers.VGpuCapability(xenObjectCopy.Connection))
ShowTab(PoolGpuEditPage = new PoolGpuEditPage());
ShowTab(PoolGpuEditPage = new PoolGpuEditPage());
}
if (is_network)

View File

@ -29,12 +29,27 @@
private void InitializeComponent()
{
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(PoolGpuEditPage));
this.labelRubric = new System.Windows.Forms.Label();
this.labelRubric = new XenAdmin.Controls.Common.AutoHeightLabel();
this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel();
this.radioButtonMixture = new System.Windows.Forms.RadioButton();
this.radioButtonDepth = new System.Windows.Forms.RadioButton();
this.radioButtonBreadth = new System.Windows.Forms.RadioButton();
this.tableLayoutPanelMain = new System.Windows.Forms.TableLayoutPanel();
this.groupBoxPlacementPolicy = new System.Windows.Forms.GroupBox();
this.groupBoxIntedratedGpu = new System.Windows.Forms.GroupBox();
this.tableLayoutPanel2 = new System.Windows.Forms.TableLayoutPanel();
this.radioButtonDisable = new System.Windows.Forms.RadioButton();
this.autoHeightLabel3 = new XenAdmin.Controls.Common.AutoHeightLabel();
this.labelCurrentState = new XenAdmin.Controls.Common.AutoHeightLabel();
this.autoHeightLabel1 = new XenAdmin.Controls.Common.AutoHeightLabel();
this.radioButtonEnable = new System.Windows.Forms.RadioButton();
this.optionsLayoutPanel = new System.Windows.Forms.FlowLayoutPanel();
this.tableLayoutPanel1.SuspendLayout();
this.tableLayoutPanelMain.SuspendLayout();
this.groupBoxPlacementPolicy.SuspendLayout();
this.groupBoxIntedratedGpu.SuspendLayout();
this.tableLayoutPanel2.SuspendLayout();
this.optionsLayoutPanel.SuspendLayout();
this.SuspendLayout();
//
// labelRubric
@ -45,8 +60,8 @@
// tableLayoutPanel1
//
resources.ApplyResources(this.tableLayoutPanel1, "tableLayoutPanel1");
this.tableLayoutPanel1.Controls.Add(this.radioButtonMixture, 0, 3);
this.tableLayoutPanel1.Controls.Add(this.labelRubric, 0, 0);
this.tableLayoutPanel1.Controls.Add(this.radioButtonMixture, 0, 3);
this.tableLayoutPanel1.Controls.Add(this.radioButtonDepth, 0, 1);
this.tableLayoutPanel1.Controls.Add(this.radioButtonBreadth, 0, 2);
this.tableLayoutPanel1.Name = "tableLayoutPanel1";
@ -72,24 +87,110 @@
this.radioButtonBreadth.TabStop = true;
this.radioButtonBreadth.UseVisualStyleBackColor = true;
//
// tableLayoutPanelMain
//
resources.ApplyResources(this.tableLayoutPanelMain, "tableLayoutPanelMain");
this.tableLayoutPanelMain.Controls.Add(this.groupBoxPlacementPolicy, 0, 0);
this.tableLayoutPanelMain.Controls.Add(this.groupBoxIntedratedGpu, 0, 1);
this.tableLayoutPanelMain.Name = "tableLayoutPanelMain";
//
// groupBoxPlacementPolicy
//
resources.ApplyResources(this.groupBoxPlacementPolicy, "groupBoxPlacementPolicy");
this.groupBoxPlacementPolicy.Controls.Add(this.tableLayoutPanel1);
this.groupBoxPlacementPolicy.Name = "groupBoxPlacementPolicy";
this.groupBoxPlacementPolicy.TabStop = false;
//
// groupBoxIntedratedGpu
//
resources.ApplyResources(this.groupBoxIntedratedGpu, "groupBoxIntedratedGpu");
this.groupBoxIntedratedGpu.Controls.Add(this.tableLayoutPanel2);
this.groupBoxIntedratedGpu.Name = "groupBoxIntedratedGpu";
this.groupBoxIntedratedGpu.TabStop = false;
//
// tableLayoutPanel2
//
resources.ApplyResources(this.tableLayoutPanel2, "tableLayoutPanel2");
this.tableLayoutPanel2.Controls.Add(this.optionsLayoutPanel, 0, 3);
this.tableLayoutPanel2.Controls.Add(this.autoHeightLabel3, 0, 2);
this.tableLayoutPanel2.Controls.Add(this.labelCurrentState, 0, 1);
this.tableLayoutPanel2.Controls.Add(this.autoHeightLabel1, 0, 0);
this.tableLayoutPanel2.Name = "tableLayoutPanel2";
//
// radioButtonDisable
//
resources.ApplyResources(this.radioButtonDisable, "radioButtonDisable");
this.radioButtonDisable.Name = "radioButtonDisable";
this.radioButtonDisable.TabStop = true;
this.radioButtonDisable.UseVisualStyleBackColor = true;
//
// autoHeightLabel3
//
resources.ApplyResources(this.autoHeightLabel3, "autoHeightLabel3");
this.autoHeightLabel3.Name = "autoHeightLabel3";
//
// labelCurrentState
//
resources.ApplyResources(this.labelCurrentState, "labelCurrentState");
this.labelCurrentState.Name = "labelCurrentState";
//
// autoHeightLabel1
//
resources.ApplyResources(this.autoHeightLabel1, "autoHeightLabel1");
this.autoHeightLabel1.Name = "autoHeightLabel1";
//
// radioButtonEnable
//
resources.ApplyResources(this.radioButtonEnable, "radioButtonEnable");
this.radioButtonEnable.Name = "radioButtonEnable";
this.radioButtonEnable.TabStop = true;
this.radioButtonEnable.UseVisualStyleBackColor = true;
//
// optionsLayoutPanel
//
resources.ApplyResources(this.optionsLayoutPanel, "optionsLayoutPanel");
this.optionsLayoutPanel.Controls.Add(this.radioButtonEnable);
this.optionsLayoutPanel.Controls.Add(this.radioButtonDisable);
this.optionsLayoutPanel.Name = "optionsLayoutPanel";
//
// PoolGpuEditPage
//
resources.ApplyResources(this, "$this");
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi;
this.Controls.Add(this.tableLayoutPanel1);
this.Controls.Add(this.tableLayoutPanelMain);
this.Name = "PoolGpuEditPage";
this.tableLayoutPanel1.ResumeLayout(false);
this.tableLayoutPanel1.PerformLayout();
this.tableLayoutPanelMain.ResumeLayout(false);
this.tableLayoutPanelMain.PerformLayout();
this.groupBoxPlacementPolicy.ResumeLayout(false);
this.groupBoxPlacementPolicy.PerformLayout();
this.groupBoxIntedratedGpu.ResumeLayout(false);
this.groupBoxIntedratedGpu.PerformLayout();
this.tableLayoutPanel2.ResumeLayout(false);
this.tableLayoutPanel2.PerformLayout();
this.optionsLayoutPanel.ResumeLayout(false);
this.optionsLayoutPanel.PerformLayout();
this.ResumeLayout(false);
}
#endregion
private System.Windows.Forms.Label labelRubric;
private XenAdmin.Controls.Common.AutoHeightLabel labelRubric;
private System.Windows.Forms.TableLayoutPanel tableLayoutPanel1;
private System.Windows.Forms.RadioButton radioButtonDepth;
private System.Windows.Forms.RadioButton radioButtonBreadth;
private System.Windows.Forms.RadioButton radioButtonMixture;
private System.Windows.Forms.TableLayoutPanel tableLayoutPanelMain;
private System.Windows.Forms.GroupBox groupBoxPlacementPolicy;
private System.Windows.Forms.GroupBox groupBoxIntedratedGpu;
private System.Windows.Forms.TableLayoutPanel tableLayoutPanel2;
private System.Windows.Forms.RadioButton radioButtonDisable;
private Controls.Common.AutoHeightLabel autoHeightLabel3;
private Controls.Common.AutoHeightLabel labelCurrentState;
private Controls.Common.AutoHeightLabel autoHeightLabel1;
private System.Windows.Forms.RadioButton radioButtonEnable;
private System.Windows.Forms.FlowLayoutPanel optionsLayoutPanel;
}
}

View File

@ -29,6 +29,7 @@
* SUCH DAMAGE.
*/
using System.Collections.Generic;
using System.Diagnostics;
using System.Drawing;
using System.Windows.Forms;
@ -45,6 +46,13 @@ namespace XenAdmin.SettingsPanels
private GPU_group[] gpu_groups;
private allocation_algorithm currentAllocationAlgorithm;
private bool showIntegratedGpu;
private bool showPlacementPolicy;
private Host host;
private bool integratedGpuCurrentlyEnabled;
private bool integratedGpuCurrentlyEnabledOnNextReboot;
public PoolGpuEditPage()
{
InitializeComponent();
@ -60,6 +68,14 @@ namespace XenAdmin.SettingsPanels
}
}
public bool EnableIntegratedGpuOnNextReboot
{
get
{
return radioButtonEnable.Checked;
}
}
#region Implementation of VerticalTab
public override string Text
@ -69,10 +85,26 @@ namespace XenAdmin.SettingsPanels
public string SubText
{
get
{
return radioButtonDepth.Checked ? Messages.GPU_PLACEMENT_POLICY_MAX_DENSITY :
radioButtonBreadth.Checked ? Messages.GPU_PLACEMENT_POLICY_MAX_PERFORMANCE : Messages.GPU_PLACEMENT_POLICY_MIXED; }
get
{
var text = "";
if (showPlacementPolicy)
{
text = radioButtonDepth.Checked
? Messages.GPU_PLACEMENT_POLICY_MAX_DENSITY
: radioButtonBreadth.Checked
? Messages.GPU_PLACEMENT_POLICY_MAX_PERFORMANCE
: Messages.GPU_PLACEMENT_POLICY_MIXED;
}
if (showIntegratedGpu)
{
var integratedGpuText = integratedGpuCurrentlyEnabled
? Messages.INTEGRATED_GPU_PASSTHROUGH_ENABLED_SHORT
: Messages.INTEGRATED_GPU_PASSTHROUGH_DISABLED_SHORT;
text = showPlacementPolicy ? string.Join("; ", text, integratedGpuText) : integratedGpuText;
}
return text;
}
}
public Image Image
@ -86,7 +118,18 @@ namespace XenAdmin.SettingsPanels
public AsyncAction SaveSettings()
{
return new SetGpuPlacementPolicyAction(pool, AllocationAlgorithm);
List<AsyncAction> actions = new List<AsyncAction>();
if (HasPlacementPolicyChanged)
actions.Add(new SetGpuPlacementPolicyAction(pool, AllocationAlgorithm));
if (HasIntegratedGpuChanged && host != null)
actions.Add(new UpdateIntegratedGpuPassthroughAction(host, EnableIntegratedGpuOnNextReboot, true));
if (actions.Count == 0)
return null;
return actions.Count == 1 ? actions[0] : new MultipleAction(pool.Connection, "", "", "", actions, true);
}
public void SetXenObjects(IXenObject orig, IXenObject clone)
@ -95,6 +138,13 @@ namespace XenAdmin.SettingsPanels
pool = Helpers.GetPoolOfOne(clone.Connection);
gpu_groups = pool.Connection.Cache.GPU_groups;
bool isPoolOrStandaloneHost = clone is Pool || Helpers.GetPool(clone.Connection) == null;
showPlacementPolicy = isPoolOrStandaloneHost && Helpers.VGpuCapability(clone.Connection);
host = clone as Host; // can be null, if we are on a Pool
showIntegratedGpu = host != null && host.CanEnableDisableIntegratedGpu;
PopulatePage();
}
@ -114,9 +164,19 @@ namespace XenAdmin.SettingsPanels
}
public bool HasChanged
{
get { return HasPlacementPolicyChanged || HasIntegratedGpuChanged; }
}
#endregion
private bool HasPlacementPolicyChanged
{
get
{
if (!showPlacementPolicy)
return false;
var allocationAlgorithm = radioButtonDepth.Checked ?
allocation_algorithm.depth_first :
radioButtonBreadth.Checked ? allocation_algorithm.breadth_first : allocation_algorithm.unknown;
@ -125,9 +185,29 @@ namespace XenAdmin.SettingsPanels
}
}
#endregion
private bool HasIntegratedGpuChanged
{
get
{
if (!showIntegratedGpu)
return false;
return EnableIntegratedGpuOnNextReboot != integratedGpuCurrentlyEnabledOnNextReboot;
}
}
private void PopulatePage()
{
groupBoxPlacementPolicy.Visible = showPlacementPolicy;
groupBoxIntedratedGpu.Visible = showIntegratedGpu;
if (showPlacementPolicy)
PopulatePlacementPolicyPanel();
if (showIntegratedGpu)
PopulateIntegratedGpuPanel();
}
private void PopulatePlacementPolicyPanel()
{
currentAllocationAlgorithm = allocation_algorithm.unknown;
@ -149,5 +229,30 @@ namespace XenAdmin.SettingsPanels
radioButtonMixture.Visible = currentAllocationAlgorithm == allocation_algorithm.unknown;
radioButtonMixture.Enabled = currentAllocationAlgorithm == allocation_algorithm.unknown;
}
private void PopulateIntegratedGpuPanel()
{
if (host == null)
return;
var currentHostDisplay = host.display;
var systemDisplayDeviceGpu = host.SystemDisplayDevice;
var currentPgpuDom0Access = systemDisplayDeviceGpu != null ? systemDisplayDeviceGpu.dom0_access : pgpu_dom0_access.unknown;
bool hostCurrentlyEnabled = currentHostDisplay == host_display.enabled || currentHostDisplay == host_display.disable_on_reboot;
bool hostEnabledOnNextReboot = currentHostDisplay == host_display.enabled || currentHostDisplay == host_display.enable_on_reboot;
bool gpuCurrentlyEnabled = currentPgpuDom0Access == pgpu_dom0_access.enabled || currentPgpuDom0Access == pgpu_dom0_access.disable_on_reboot;
bool gpuEnabledOnNextReboot = currentPgpuDom0Access == pgpu_dom0_access.enabled || currentPgpuDom0Access == pgpu_dom0_access.enable_on_reboot;
integratedGpuCurrentlyEnabled = hostCurrentlyEnabled && gpuCurrentlyEnabled;
integratedGpuCurrentlyEnabledOnNextReboot = hostEnabledOnNextReboot && gpuEnabledOnNextReboot;
labelCurrentState.Text = (integratedGpuCurrentlyEnabled)
? Messages.INTEGRATED_GPU_PASSTHROUGH_ENABLED
: Messages.INTEGRATED_GPU_PASSTHROUGH_DISABLED;
radioButtonEnable.Checked = integratedGpuCurrentlyEnabledOnNextReboot;
radioButtonDisable.Checked = !integratedGpuCurrentlyEnabledOnNextReboot;
}
}
}

View File

@ -112,23 +112,23 @@
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="labelRubric.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Top, Left, Right</value>
</data>
<assembly alias="mscorlib" name="mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<assembly alias="mscorlib" name="mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="labelRubric.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="labelRubric.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<value>NoControl</value>
</data>
<assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="labelRubric.Location" type="System.Drawing.Point, System.Drawing">
<value>3, 0</value>
</data>
@ -136,7 +136,7 @@
<value>0, 3, 0, 10</value>
</data>
<data name="labelRubric.Size" type="System.Drawing.Size, System.Drawing">
<value>412, 39</value>
<value>528, 39</value>
</data>
<data name="labelRubric.TabIndex" type="System.Int32, mscorlib">
<value>2</value>
@ -148,13 +148,19 @@
<value>labelRubric</value>
</data>
<data name="&gt;&gt;labelRubric.Type" xml:space="preserve">
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
<value>XenAdmin.Controls.Common.AutoHeightLabel, XenCenterMain, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;labelRubric.Parent" xml:space="preserve">
<value>tableLayoutPanel1</value>
</data>
<data name="&gt;&gt;labelRubric.ZOrder" xml:space="preserve">
<value>1</value>
<value>0</value>
</data>
<data name="tableLayoutPanel1.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="tableLayoutPanel1.AutoSizeMode" type="System.Windows.Forms.AutoSizeMode, System.Windows.Forms">
<value>GrowAndShrink</value>
</data>
<data name="tableLayoutPanel1.ColumnCount" type="System.Int32, mscorlib">
<value>1</value>
@ -172,7 +178,7 @@
<value>3, 88</value>
</data>
<data name="radioButtonMixture.Size" type="System.Drawing.Size, System.Drawing">
<value>412, 17</value>
<value>528, 17</value>
</data>
<data name="radioButtonMixture.TabIndex" type="System.Int32, mscorlib">
<value>5</value>
@ -184,13 +190,13 @@
<value>radioButtonMixture</value>
</data>
<data name="&gt;&gt;radioButtonMixture.Type" xml:space="preserve">
<value>System.Windows.Forms.RadioButton, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
<value>System.Windows.Forms.RadioButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;radioButtonMixture.Parent" xml:space="preserve">
<value>tableLayoutPanel1</value>
</data>
<data name="&gt;&gt;radioButtonMixture.ZOrder" xml:space="preserve">
<value>0</value>
<value>1</value>
</data>
<data name="radioButtonDepth.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Top, Left, Right</value>
@ -202,7 +208,7 @@
<value>3, 42</value>
</data>
<data name="radioButtonDepth.Size" type="System.Drawing.Size, System.Drawing">
<value>412, 17</value>
<value>528, 17</value>
</data>
<data name="radioButtonDepth.TabIndex" type="System.Int32, mscorlib">
<value>3</value>
@ -214,7 +220,7 @@
<value>radioButtonDepth</value>
</data>
<data name="&gt;&gt;radioButtonDepth.Type" xml:space="preserve">
<value>System.Windows.Forms.RadioButton, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
<value>System.Windows.Forms.RadioButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;radioButtonDepth.Parent" xml:space="preserve">
<value>tableLayoutPanel1</value>
@ -232,7 +238,7 @@
<value>3, 65</value>
</data>
<data name="radioButtonBreadth.Size" type="System.Drawing.Size, System.Drawing">
<value>412, 17</value>
<value>528, 17</value>
</data>
<data name="radioButtonBreadth.TabIndex" type="System.Int32, mscorlib">
<value>4</value>
@ -244,7 +250,7 @@
<value>radioButtonBreadth</value>
</data>
<data name="&gt;&gt;radioButtonBreadth.Type" xml:space="preserve">
<value>System.Windows.Forms.RadioButton, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
<value>System.Windows.Forms.RadioButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;radioButtonBreadth.Parent" xml:space="preserve">
<value>tableLayoutPanel1</value>
@ -256,13 +262,16 @@
<value>Fill</value>
</data>
<data name="tableLayoutPanel1.Location" type="System.Drawing.Point, System.Drawing">
<value>0, 0</value>
<value>3, 16</value>
</data>
<data name="tableLayoutPanel1.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>6, 3, 6, 3</value>
</data>
<data name="tableLayoutPanel1.RowCount" type="System.Int32, mscorlib">
<value>4</value>
</data>
<data name="tableLayoutPanel1.Size" type="System.Drawing.Size, System.Drawing">
<value>418, 289</value>
<value>534, 108</value>
</data>
<data name="tableLayoutPanel1.TabIndex" type="System.Int32, mscorlib">
<value>3</value>
@ -271,30 +280,381 @@
<value>tableLayoutPanel1</value>
</data>
<data name="&gt;&gt;tableLayoutPanel1.Type" xml:space="preserve">
<value>System.Windows.Forms.TableLayoutPanel, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
<value>System.Windows.Forms.TableLayoutPanel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;tableLayoutPanel1.Parent" xml:space="preserve">
<value>$this</value>
<value>groupBoxPlacementPolicy</value>
</data>
<data name="&gt;&gt;tableLayoutPanel1.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<data name="tableLayoutPanel1.LayoutSettings" type="System.Windows.Forms.TableLayoutSettings, System.Windows.Forms">
<value>&lt;?xml version="1.0" encoding="utf-16"?&gt;&lt;TableLayoutSettings&gt;&lt;Controls&gt;&lt;Control Name="radioButtonMixture" Row="3" RowSpan="1" Column="0" ColumnSpan="1" /&gt;&lt;Control Name="labelRubric" Row="0" RowSpan="1" Column="0" ColumnSpan="1" /&gt;&lt;Control Name="radioButtonDepth" Row="1" RowSpan="1" Column="0" ColumnSpan="1" /&gt;&lt;Control Name="radioButtonBreadth" Row="2" RowSpan="1" Column="0" ColumnSpan="1" /&gt;&lt;/Controls&gt;&lt;Columns Styles="Percent,100" /&gt;&lt;Rows Styles="AutoSize,0,AutoSize,0,AutoSize,0,Percent,50" /&gt;&lt;/TableLayoutSettings&gt;</value>
<value>&lt;?xml version="1.0" encoding="utf-16"?&gt;&lt;TableLayoutSettings&gt;&lt;Controls&gt;&lt;Control Name="labelRubric" Row="0" RowSpan="1" Column="0" ColumnSpan="1" /&gt;&lt;Control Name="radioButtonMixture" Row="3" RowSpan="1" Column="0" ColumnSpan="1" /&gt;&lt;Control Name="radioButtonDepth" Row="1" RowSpan="1" Column="0" ColumnSpan="1" /&gt;&lt;Control Name="radioButtonBreadth" Row="2" RowSpan="1" Column="0" ColumnSpan="1" /&gt;&lt;/Controls&gt;&lt;Columns Styles="Percent,100" /&gt;&lt;Rows Styles="AutoSize,0,AutoSize,0,AutoSize,0,Percent,50" /&gt;&lt;/TableLayoutSettings&gt;</value>
</data>
<metadata name="$this.Localizable" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<data name="tableLayoutPanelMain.ColumnCount" type="System.Int32, mscorlib">
<value>1</value>
</data>
<data name="groupBoxPlacementPolicy.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="groupBoxPlacementPolicy.AutoSizeMode" type="System.Windows.Forms.AutoSizeMode, System.Windows.Forms">
<value>GrowAndShrink</value>
</data>
<data name="groupBoxPlacementPolicy.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
<value>Fill</value>
</data>
<data name="groupBoxPlacementPolicy.Location" type="System.Drawing.Point, System.Drawing">
<value>3, 3</value>
</data>
<data name="groupBoxPlacementPolicy.Padding" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>3, 3, 3, 6</value>
</data>
<data name="groupBoxPlacementPolicy.Size" type="System.Drawing.Size, System.Drawing">
<value>540, 130</value>
</data>
<data name="groupBoxPlacementPolicy.TabIndex" type="System.Int32, mscorlib">
<value>0</value>
</data>
<data name="groupBoxPlacementPolicy.Text" xml:space="preserve">
<value>Placement policy</value>
</data>
<data name="&gt;&gt;groupBoxPlacementPolicy.Name" xml:space="preserve">
<value>groupBoxPlacementPolicy</value>
</data>
<data name="&gt;&gt;groupBoxPlacementPolicy.Type" xml:space="preserve">
<value>System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;groupBoxPlacementPolicy.Parent" xml:space="preserve">
<value>tableLayoutPanelMain</value>
</data>
<data name="&gt;&gt;groupBoxPlacementPolicy.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<data name="groupBoxIntedratedGpu.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="groupBoxIntedratedGpu.AutoSizeMode" type="System.Windows.Forms.AutoSizeMode, System.Windows.Forms">
<value>GrowAndShrink</value>
</data>
<data name="tableLayoutPanel2.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="tableLayoutPanel2.AutoSizeMode" type="System.Windows.Forms.AutoSizeMode, System.Windows.Forms">
<value>GrowAndShrink</value>
</data>
<data name="tableLayoutPanel2.ColumnCount" type="System.Int32, mscorlib">
<value>1</value>
</data>
<data name="optionsLayoutPanel.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="optionsLayoutPanel.AutoSizeMode" type="System.Windows.Forms.AutoSizeMode, System.Windows.Forms">
<value>GrowAndShrink</value>
</data>
<data name="radioButtonEnable.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="radioButtonEnable.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<value>NoControl</value>
</data>
<data name="radioButtonEnable.Location" type="System.Drawing.Point, System.Drawing">
<value>3, 3</value>
</data>
<data name="radioButtonEnable.Size" type="System.Drawing.Size, System.Drawing">
<value>226, 19</value>
</data>
<data name="radioButtonEnable.TabIndex" type="System.Int32, mscorlib">
<value>3</value>
</data>
<data name="radioButtonEnable.Text" xml:space="preserve">
<value>This server will use the integrated GPU</value>
</data>
<data name="&gt;&gt;radioButtonEnable.Name" xml:space="preserve">
<value>radioButtonEnable</value>
</data>
<data name="&gt;&gt;radioButtonEnable.Type" xml:space="preserve">
<value>System.Windows.Forms.RadioButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;radioButtonEnable.Parent" xml:space="preserve">
<value>optionsLayoutPanel</value>
</data>
<data name="&gt;&gt;radioButtonEnable.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<data name="radioButtonDisable.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="radioButtonDisable.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<value>NoControl</value>
</data>
<data name="radioButtonDisable.Location" type="System.Drawing.Point, System.Drawing">
<value>3, 28</value>
</data>
<data name="radioButtonDisable.Size" type="System.Drawing.Size, System.Drawing">
<value>247, 19</value>
</data>
<data name="radioButtonDisable.TabIndex" type="System.Int32, mscorlib">
<value>7</value>
</data>
<data name="radioButtonDisable.Text" xml:space="preserve">
<value>This server will not use the integrated GPU</value>
</data>
<data name="&gt;&gt;radioButtonDisable.Name" xml:space="preserve">
<value>radioButtonDisable</value>
</data>
<data name="&gt;&gt;radioButtonDisable.Type" xml:space="preserve">
<value>System.Windows.Forms.RadioButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;radioButtonDisable.Parent" xml:space="preserve">
<value>optionsLayoutPanel</value>
</data>
<data name="&gt;&gt;radioButtonDisable.ZOrder" xml:space="preserve">
<value>1</value>
</data>
<data name="optionsLayoutPanel.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
<value>Fill</value>
</data>
<data name="optionsLayoutPanel.FlowDirection" type="System.Windows.Forms.FlowDirection, System.Windows.Forms">
<value>TopDown</value>
</data>
<data name="optionsLayoutPanel.Font" type="System.Drawing.Font, System.Drawing">
<value>Segoe UI, 9pt</value>
</data>
<data name="optionsLayoutPanel.Location" type="System.Drawing.Point, System.Drawing">
<value>3, 73</value>
</data>
<data name="optionsLayoutPanel.Size" type="System.Drawing.Size, System.Drawing">
<value>528, 50</value>
</data>
<data name="optionsLayoutPanel.TabIndex" type="System.Int32, mscorlib">
<value>8</value>
</data>
<data name="&gt;&gt;optionsLayoutPanel.Name" xml:space="preserve">
<value>optionsLayoutPanel</value>
</data>
<data name="&gt;&gt;optionsLayoutPanel.Type" xml:space="preserve">
<value>System.Windows.Forms.FlowLayoutPanel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;optionsLayoutPanel.Parent" xml:space="preserve">
<value>tableLayoutPanel2</value>
</data>
<data name="&gt;&gt;optionsLayoutPanel.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<data name="autoHeightLabel3.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Top, Left, Right</value>
</data>
<data name="autoHeightLabel3.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="autoHeightLabel3.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<value>NoControl</value>
</data>
<data name="autoHeightLabel3.Location" type="System.Drawing.Point, System.Drawing">
<value>3, 51</value>
</data>
<data name="autoHeightLabel3.Padding" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>0, 3, 0, 3</value>
</data>
<data name="autoHeightLabel3.Size" type="System.Drawing.Size, System.Drawing">
<value>528, 19</value>
</data>
<data name="autoHeightLabel3.TabIndex" type="System.Int32, mscorlib">
<value>6</value>
</data>
<data name="autoHeightLabel3.Text" xml:space="preserve">
<value>After next reboot:</value>
</data>
<data name="&gt;&gt;autoHeightLabel3.Name" xml:space="preserve">
<value>autoHeightLabel3</value>
</data>
<data name="&gt;&gt;autoHeightLabel3.Type" xml:space="preserve">
<value>XenAdmin.Controls.Common.AutoHeightLabel, XenCenterMain, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;autoHeightLabel3.Parent" xml:space="preserve">
<value>tableLayoutPanel2</value>
</data>
<data name="&gt;&gt;autoHeightLabel3.ZOrder" xml:space="preserve">
<value>1</value>
</data>
<data name="labelCurrentState.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Top, Left, Right</value>
</data>
<data name="labelCurrentState.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="labelCurrentState.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<value>NoControl</value>
</data>
<data name="labelCurrentState.Location" type="System.Drawing.Point, System.Drawing">
<value>3, 32</value>
</data>
<data name="labelCurrentState.Padding" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>0, 3, 0, 3</value>
</data>
<data name="labelCurrentState.Size" type="System.Drawing.Size, System.Drawing">
<value>528, 19</value>
</data>
<data name="labelCurrentState.TabIndex" type="System.Int32, mscorlib">
<value>5</value>
</data>
<data name="labelCurrentState.Text" xml:space="preserve">
<value>This server is currently using the integrated GPU.</value>
</data>
<data name="&gt;&gt;labelCurrentState.Name" xml:space="preserve">
<value>labelCurrentState</value>
</data>
<data name="&gt;&gt;labelCurrentState.Type" xml:space="preserve">
<value>XenAdmin.Controls.Common.AutoHeightLabel, XenCenterMain, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;labelCurrentState.Parent" xml:space="preserve">
<value>tableLayoutPanel2</value>
</data>
<data name="&gt;&gt;labelCurrentState.ZOrder" xml:space="preserve">
<value>2</value>
</data>
<data name="autoHeightLabel1.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Top, Left, Right</value>
</data>
<data name="autoHeightLabel1.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="autoHeightLabel1.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<value>NoControl</value>
</data>
<data name="autoHeightLabel1.Location" type="System.Drawing.Point, System.Drawing">
<value>3, 0</value>
</data>
<data name="autoHeightLabel1.Padding" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>0, 3, 0, 3</value>
</data>
<data name="autoHeightLabel1.Size" type="System.Drawing.Size, System.Drawing">
<value>528, 32</value>
</data>
<data name="autoHeightLabel1.TabIndex" type="System.Int32, mscorlib">
<value>2</value>
</data>
<data name="autoHeightLabel1.Text" xml:space="preserve">
<value>Choose whether to enable this server to use the integrated GPU. When a server is using the integrated GPU, that GPU cannot be passed through to a VM.</value>
</data>
<data name="&gt;&gt;autoHeightLabel1.Name" xml:space="preserve">
<value>autoHeightLabel1</value>
</data>
<data name="&gt;&gt;autoHeightLabel1.Type" xml:space="preserve">
<value>XenAdmin.Controls.Common.AutoHeightLabel, XenCenterMain, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;autoHeightLabel1.Parent" xml:space="preserve">
<value>tableLayoutPanel2</value>
</data>
<data name="&gt;&gt;autoHeightLabel1.ZOrder" xml:space="preserve">
<value>3</value>
</data>
<data name="tableLayoutPanel2.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
<value>Fill</value>
</data>
<data name="tableLayoutPanel2.Location" type="System.Drawing.Point, System.Drawing">
<value>3, 16</value>
</data>
<data name="tableLayoutPanel2.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>6, 3, 6, 3</value>
</data>
<data name="tableLayoutPanel2.RowCount" type="System.Int32, mscorlib">
<value>4</value>
</data>
<data name="tableLayoutPanel2.Size" type="System.Drawing.Size, System.Drawing">
<value>534, 126</value>
</data>
<data name="tableLayoutPanel2.TabIndex" type="System.Int32, mscorlib">
<value>4</value>
</data>
<data name="&gt;&gt;tableLayoutPanel2.Name" xml:space="preserve">
<value>tableLayoutPanel2</value>
</data>
<data name="&gt;&gt;tableLayoutPanel2.Type" xml:space="preserve">
<value>System.Windows.Forms.TableLayoutPanel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;tableLayoutPanel2.Parent" xml:space="preserve">
<value>groupBoxIntedratedGpu</value>
</data>
<data name="&gt;&gt;tableLayoutPanel2.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<data name="tableLayoutPanel2.LayoutSettings" type="System.Windows.Forms.TableLayoutSettings, System.Windows.Forms">
<value>&lt;?xml version="1.0" encoding="utf-16"?&gt;&lt;TableLayoutSettings&gt;&lt;Controls&gt;&lt;Control Name="optionsLayoutPanel" Row="3" RowSpan="1" Column="0" ColumnSpan="1" /&gt;&lt;Control Name="autoHeightLabel3" Row="2" RowSpan="1" Column="0" ColumnSpan="1" /&gt;&lt;Control Name="labelCurrentState" Row="1" RowSpan="1" Column="0" ColumnSpan="1" /&gt;&lt;Control Name="autoHeightLabel1" Row="0" RowSpan="1" Column="0" ColumnSpan="1" /&gt;&lt;/Controls&gt;&lt;Columns Styles="Percent,100" /&gt;&lt;Rows Styles="AutoSize,0,AutoSize,0,AutoSize,0,AutoSize,0,Absolute,20,Absolute,20" /&gt;&lt;/TableLayoutSettings&gt;</value>
</data>
<data name="groupBoxIntedratedGpu.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
<value>Fill</value>
</data>
<data name="groupBoxIntedratedGpu.Location" type="System.Drawing.Point, System.Drawing">
<value>3, 139</value>
</data>
<data name="groupBoxIntedratedGpu.Padding" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>3, 3, 3, 6</value>
</data>
<data name="groupBoxIntedratedGpu.Size" type="System.Drawing.Size, System.Drawing">
<value>540, 148</value>
</data>
<data name="groupBoxIntedratedGpu.TabIndex" type="System.Int32, mscorlib">
<value>2</value>
</data>
<data name="groupBoxIntedratedGpu.Text" xml:space="preserve">
<value>Integrated GPU passthrough</value>
</data>
<data name="&gt;&gt;groupBoxIntedratedGpu.Name" xml:space="preserve">
<value>groupBoxIntedratedGpu</value>
</data>
<data name="&gt;&gt;groupBoxIntedratedGpu.Type" xml:space="preserve">
<value>System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;groupBoxIntedratedGpu.Parent" xml:space="preserve">
<value>tableLayoutPanelMain</value>
</data>
<data name="&gt;&gt;groupBoxIntedratedGpu.ZOrder" xml:space="preserve">
<value>1</value>
</data>
<data name="tableLayoutPanelMain.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
<value>Fill</value>
</data>
<data name="tableLayoutPanelMain.Location" type="System.Drawing.Point, System.Drawing">
<value>0, 0</value>
</data>
<data name="tableLayoutPanelMain.RowCount" type="System.Int32, mscorlib">
<value>3</value>
</data>
<data name="tableLayoutPanelMain.Size" type="System.Drawing.Size, System.Drawing">
<value>546, 382</value>
</data>
<data name="tableLayoutPanelMain.TabIndex" type="System.Int32, mscorlib">
<value>4</value>
</data>
<data name="&gt;&gt;tableLayoutPanelMain.Name" xml:space="preserve">
<value>tableLayoutPanelMain</value>
</data>
<data name="&gt;&gt;tableLayoutPanelMain.Type" xml:space="preserve">
<value>System.Windows.Forms.TableLayoutPanel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;tableLayoutPanelMain.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;tableLayoutPanelMain.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<data name="tableLayoutPanelMain.LayoutSettings" type="System.Windows.Forms.TableLayoutSettings, System.Windows.Forms">
<value>&lt;?xml version="1.0" encoding="utf-16"?&gt;&lt;TableLayoutSettings&gt;&lt;Controls&gt;&lt;Control Name="groupBoxPlacementPolicy" Row="0" RowSpan="1" Column="0" ColumnSpan="1" /&gt;&lt;Control Name="groupBoxIntedratedGpu" Row="1" RowSpan="1" Column="0" ColumnSpan="1" /&gt;&lt;/Controls&gt;&lt;Columns Styles="Percent,100" /&gt;&lt;Rows Styles="AutoSize,0,AutoSize,0,AutoSize,0" /&gt;&lt;/TableLayoutSettings&gt;</value>
</data>
<metadata name="$this.Localizable" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<data name="$this.AutoScaleDimensions" type="System.Drawing.SizeF, System.Drawing">
<value>96, 96</value>
</data>
<data name="$this.Size" type="System.Drawing.Size, System.Drawing">
<value>418, 289</value>
<value>546, 382</value>
</data>
<data name="&gt;&gt;$this.Name" xml:space="preserve">
<value>PoolGpuEditPage</value>
</data>
<data name="&gt;&gt;$this.Type" xml:space="preserve">
<value>System.Windows.Forms.UserControl, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
<value>System.Windows.Forms.UserControl, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
</root>

View File

@ -0,0 +1,71 @@
/* Copyright (c) Citrix Systems Inc.
* All rights reserved.
*
* Redistribution and use in source and binary forms,
* with or without modification, are permitted provided
* that the following conditions are met:
*
* * Redistributions of source code must retain the above
* copyright notice, this list of conditions and the
* following disclaimer.
* * Redistributions in binary form must reproduce the above
* copyright notice, this list of conditions and the
* following disclaimer in the documentation and/or other
* materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*/
using System.Collections.Generic;
using XenAPI;
namespace XenAdmin.Actions
{
public class UpdateIntegratedGpuPassthroughAction : PureAsyncAction
{
private bool enable;
public UpdateIntegratedGpuPassthroughAction(Host host, bool enableOnNextReboot, bool suppressHistory)
: base(host.Connection, string.Format(Messages.ACTION_UPDATE_INTEGRATED_GPU_PASSTHROUGH_TITLE, host.Name), null, suppressHistory)
{
Host = host;
enable = enableOnNextReboot;
}
protected override void Run()
{
this.Description = Messages.UPDATING_PROPERTIES;
RelatedTask = enable
? Host.async_enable_display(Session, Host.opaque_ref)
: Host.async_disable_display(Session, Host.opaque_ref);
PollToCompletion(0, 50);
var pGpu = Host.SystemDisplayDevice;
if (pGpu != null)
{
RelatedTask = enable
? PGPU.async_enable_dom0_access(Session, pGpu.opaque_ref)
: PGPU.async_disable_dom0_access(Session, pGpu.opaque_ref);
PollToCompletion(50, 100);
}
PercentComplete = 100;
Description = Messages.UPDATED_PROPERTIES;
}
}
}

View File

@ -2310,6 +2310,15 @@ namespace XenAdmin {
}
}
/// <summary>
/// Looks up a localized string similar to Updating integrated GPU passthrough on &apos;{0}&apos;.
/// </summary>
public static string ACTION_UPDATE_INTEGRATED_GPU_PASSTHROUGH_TITLE {
get {
return ResourceManager.GetString("ACTION_UPDATE_INTEGRATED_GPU_PASSTHROUGH_TITLE", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Virtual disk created.
/// </summary>
@ -17786,6 +17795,42 @@ namespace XenAdmin {
}
}
/// <summary>
/// Looks up a localized string similar to This server is currently not using the integrated GPU..
/// </summary>
public static string INTEGRATED_GPU_PASSTHROUGH_DISABLED {
get {
return ResourceManager.GetString("INTEGRATED_GPU_PASSTHROUGH_DISABLED", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Not using the integrated GPU.
/// </summary>
public static string INTEGRATED_GPU_PASSTHROUGH_DISABLED_SHORT {
get {
return ResourceManager.GetString("INTEGRATED_GPU_PASSTHROUGH_DISABLED_SHORT", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to This server is currently using the integrated GPU..
/// </summary>
public static string INTEGRATED_GPU_PASSTHROUGH_ENABLED {
get {
return ResourceManager.GetString("INTEGRATED_GPU_PASSTHROUGH_ENABLED", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Using the integrated GPU.
/// </summary>
public static string INTEGRATED_GPU_PASSTHROUGH_ENABLED_SHORT {
get {
return ResourceManager.GetString("INTEGRATED_GPU_PASSTHROUGH_ENABLED_SHORT", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Interfaces: {0}.
/// </summary>

View File

@ -867,6 +867,9 @@
<data name="ACTION_TOOLSTACK_RESTART_ON" xml:space="preserve">
<value>Restart toolstack on '{0}'</value>
</data>
<data name="ACTION_UPDATE_INTEGRATED_GPU_PASSTHROUGH_TITLE" xml:space="preserve">
<value>Updating integrated GPU passthrough on '{0}'</value>
</data>
<data name="ACTION_VDI_CREATED" xml:space="preserve">
<value>Virtual disk created</value>
</data>
@ -6194,6 +6197,18 @@ Click Configure HA to alter the settings displayed below.</value>
<data name="INSTANT_VM_CREATE_TITLE" xml:space="preserve">
<value>Instant VM create</value>
</data>
<data name="INTEGRATED_GPU_PASSTHROUGH_DISABLED" xml:space="preserve">
<value>This server is currently not using the integrated GPU.</value>
</data>
<data name="INTEGRATED_GPU_PASSTHROUGH_DISABLED_SHORT" xml:space="preserve">
<value>Not using the integrated GPU</value>
</data>
<data name="INTEGRATED_GPU_PASSTHROUGH_ENABLED" xml:space="preserve">
<value>This server is currently using the integrated GPU.</value>
</data>
<data name="INTEGRATED_GPU_PASSTHROUGH_ENABLED_SHORT" xml:space="preserve">
<value>Using the integrated GPU</value>
</data>
<data name="INTERFACES_COUNT" xml:space="preserve">
<value>Interfaces: {0}</value>
</data>

View File

@ -32,6 +32,7 @@
using System;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using System.Threading;
using Citrix.XenCenter;
using XenAdmin;
@ -418,6 +419,16 @@ namespace XenAPI
return h._RestrictVgpu;
}
private bool _RestrictIntegratedGpuPassthrough
{
get { return BoolKeyPreferTrue(license_params, "restrict_integrated_gpu_passthrough"); }
}
public static bool RestrictIntegratedGpuPassthrough(Host h)
{
return h._RestrictIntegratedGpuPassthrough;
}
private bool _RestrictExportResourceData
{
get
@ -1538,6 +1549,31 @@ namespace XenAPI
}
#endregion
/// <summary>
/// The PGPU that is the system display device or null
/// </summary>
public PGPU SystemDisplayDevice
{
get
{
var pGpus = Connection.ResolveAll(PGPUs);
return pGpus.FirstOrDefault(pGpu => pGpu.is_system_display_device);
}
}
/// <summary>
/// Is the host allowed to enable/disable integrated GPU passthrough or is the feature unavailable/restricted?
/// </summary>
public bool CanEnableDisableIntegratedGpu
{
get
{
return Helpers.CreamOrGreater(Connection)
&& Helpers.GpuCapability(Connection)
&& !Helpers.FeatureForbidden(Connection, RestrictIntegratedGpuPassthrough);
}
}
#region IEquatable<Host> Members
/// <summary>

View File

@ -95,7 +95,8 @@ namespace XenAPI
Dictionary<string, string> chipset_info,
List<XenRef<PCI>> PCIs,
List<XenRef<PGPU>> PGPUs,
Dictionary<string, string> guest_VCPUs_params)
Dictionary<string, string> guest_VCPUs_params,
host_display display)
{
this.uuid = uuid;
this.name_label = name_label;
@ -145,6 +146,7 @@ namespace XenAPI
this.PCIs = PCIs;
this.PGPUs = PGPUs;
this.guest_VCPUs_params = guest_VCPUs_params;
this.display = display;
}
/// <summary>
@ -206,6 +208,7 @@ namespace XenAPI
PCIs = update.PCIs;
PGPUs = update.PGPUs;
guest_VCPUs_params = update.guest_VCPUs_params;
display = update.display;
}
internal void UpdateFromProxy(Proxy_Host proxy)
@ -258,6 +261,7 @@ namespace XenAPI
PCIs = proxy.PCIs == null ? null : XenRef<PCI>.Create(proxy.PCIs);
PGPUs = proxy.PGPUs == null ? null : XenRef<PGPU>.Create(proxy.PGPUs);
guest_VCPUs_params = proxy.guest_VCPUs_params == null ? null : Maps.convert_from_proxy_string_string(proxy.guest_VCPUs_params);
display = proxy.display == null ? (host_display) 0 : (host_display)Helper.EnumParseDefault(typeof(host_display), (string)proxy.display);
}
public Proxy_Host ToProxy()
@ -311,6 +315,7 @@ namespace XenAPI
result_.PCIs = (PCIs != null) ? Helper.RefListToStringArray(PCIs) : new string[] {};
result_.PGPUs = (PGPUs != null) ? Helper.RefListToStringArray(PGPUs) : new string[] {};
result_.guest_VCPUs_params = Maps.convert_to_proxy_string_string(guest_VCPUs_params);
result_.display = host_display_helper.ToString(display);
return result_;
}
@ -368,6 +373,7 @@ namespace XenAPI
PCIs = Marshalling.ParseSetRef<PCI>(table, "PCIs");
PGPUs = Marshalling.ParseSetRef<PGPU>(table, "PGPUs");
guest_VCPUs_params = Maps.convert_from_proxy_string_string(Marshalling.ParseHashTable(table, "guest_VCPUs_params"));
display = (host_display)Helper.EnumParseDefault(typeof(host_display), Marshalling.ParseString(table, "display"));
}
public bool DeepEquals(Host other, bool ignoreCurrentOperations)
@ -426,7 +432,8 @@ namespace XenAPI
Helper.AreEqual2(this._chipset_info, other._chipset_info) &&
Helper.AreEqual2(this._PCIs, other._PCIs) &&
Helper.AreEqual2(this._PGPUs, other._PGPUs) &&
Helper.AreEqual2(this._guest_VCPUs_params, other._guest_VCPUs_params);
Helper.AreEqual2(this._guest_VCPUs_params, other._guest_VCPUs_params) &&
Helper.AreEqual2(this._display, other._display);
}
public override string SaveChanges(Session session, string opaqueRef, Host server)
@ -482,6 +489,10 @@ namespace XenAPI
{
Host.set_guest_VCPUs_params(session, opaqueRef, _guest_VCPUs_params);
}
if (!Helper.AreEqual2(_display, server._display))
{
Host.set_display(session, opaqueRef, _display);
}
return null;
}
@ -1047,6 +1058,17 @@ namespace XenAPI
return Maps.convert_from_proxy_string_string(session.proxy.host_get_guest_vcpus_params(session.uuid, (_host != null) ? _host : "").parse());
}
/// <summary>
/// Get the display field of the given host.
/// First published in .
/// </summary>
/// <param name="session">The session</param>
/// <param name="_host">The opaque_ref of the given host</param>
public static host_display get_display(Session session, string _host)
{
return (host_display)Helper.EnumParseDefault(typeof(host_display), (string)session.proxy.host_get_display(session.uuid, (_host != null) ? _host : "").parse());
}
/// <summary>
/// Set the name/label field of the given host.
/// First published in XenServer 4.0.
@ -1303,6 +1325,18 @@ namespace XenAPI
session.proxy.host_remove_from_guest_vcpus_params(session.uuid, (_host != null) ? _host : "", (_key != null) ? _key : "").parse();
}
/// <summary>
/// Set the display field of the given host.
/// First published in .
/// </summary>
/// <param name="session">The session</param>
/// <param name="_host">The opaque_ref of the given host</param>
/// <param name="_display">New value to set</param>
public static void set_display(Session session, string _host, host_display _display)
{
session.proxy.host_set_display(session.uuid, (_host != null) ? _host : "", host_display_helper.ToString(_display)).parse();
}
/// <summary>
/// Puts the host into a state in which no new VMs can be started. Currently active VMs on the host continue to execute.
/// First published in XenServer 4.0.
@ -2280,6 +2314,50 @@ namespace XenAPI
return XenRef<Task>.Create(session.proxy.async_host_declare_dead(session.uuid, (_host != null) ? _host : "").parse());
}
/// <summary>
/// Enable console output to the physical display device next time this host boots
/// First published in .
/// </summary>
/// <param name="session">The session</param>
/// <param name="_host">The opaque_ref of the given host</param>
public static host_display enable_display(Session session, string _host)
{
return (host_display)Helper.EnumParseDefault(typeof(host_display), (string)session.proxy.host_enable_display(session.uuid, (_host != null) ? _host : "").parse());
}
/// <summary>
/// Enable console output to the physical display device next time this host boots
/// First published in .
/// </summary>
/// <param name="session">The session</param>
/// <param name="_host">The opaque_ref of the given host</param>
public static XenRef<Task> async_enable_display(Session session, string _host)
{
return XenRef<Task>.Create(session.proxy.async_host_enable_display(session.uuid, (_host != null) ? _host : "").parse());
}
/// <summary>
/// Disable console output to the physical display device next time this host boots
/// First published in .
/// </summary>
/// <param name="session">The session</param>
/// <param name="_host">The opaque_ref of the given host</param>
public static host_display disable_display(Session session, string _host)
{
return (host_display)Helper.EnumParseDefault(typeof(host_display), (string)session.proxy.host_disable_display(session.uuid, (_host != null) ? _host : "").parse());
}
/// <summary>
/// Disable console output to the physical display device next time this host boots
/// First published in .
/// </summary>
/// <param name="session">The session</param>
/// <param name="_host">The opaque_ref of the given host</param>
public static XenRef<Task> async_disable_display(Session session, string _host)
{
return XenRef<Task>.Create(session.proxy.async_host_disable_display(session.uuid, (_host != null) ? _host : "").parse());
}
/// <summary>
/// Return a list of all the hosts known to the system.
/// First published in XenServer 4.0.
@ -3181,5 +3259,24 @@ namespace XenAPI
}
}
private Dictionary<string, string> _guest_VCPUs_params;
/// <summary>
/// indicates whether the host is configured to output its console to a physical display device
/// First published in .
/// </summary>
public virtual host_display display
{
get { return _display; }
set
{
if (!Helper.AreEqual(value, _display))
{
_display = value;
Changed = true;
NotifyPropertyChanged("display");
}
}
}
private host_display _display;
}
}

View File

@ -56,7 +56,9 @@ namespace XenAPI
List<XenRef<VGPU_type>> supported_VGPU_types,
List<XenRef<VGPU_type>> enabled_VGPU_types,
List<XenRef<VGPU>> resident_VGPUs,
Dictionary<XenRef<VGPU_type>, long> supported_VGPU_max_capacities)
Dictionary<XenRef<VGPU_type>, long> supported_VGPU_max_capacities,
pgpu_dom0_access dom0_access,
bool is_system_display_device)
{
this.uuid = uuid;
this.PCI = PCI;
@ -67,6 +69,8 @@ namespace XenAPI
this.enabled_VGPU_types = enabled_VGPU_types;
this.resident_VGPUs = resident_VGPUs;
this.supported_VGPU_max_capacities = supported_VGPU_max_capacities;
this.dom0_access = dom0_access;
this.is_system_display_device = is_system_display_device;
}
/// <summary>
@ -89,6 +93,8 @@ namespace XenAPI
enabled_VGPU_types = update.enabled_VGPU_types;
resident_VGPUs = update.resident_VGPUs;
supported_VGPU_max_capacities = update.supported_VGPU_max_capacities;
dom0_access = update.dom0_access;
is_system_display_device = update.is_system_display_device;
}
internal void UpdateFromProxy(Proxy_PGPU proxy)
@ -102,6 +108,8 @@ namespace XenAPI
enabled_VGPU_types = proxy.enabled_VGPU_types == null ? null : XenRef<VGPU_type>.Create(proxy.enabled_VGPU_types);
resident_VGPUs = proxy.resident_VGPUs == null ? null : XenRef<VGPU>.Create(proxy.resident_VGPUs);
supported_VGPU_max_capacities = proxy.supported_VGPU_max_capacities == null ? null : Maps.convert_from_proxy_XenRefVGPU_type_long(proxy.supported_VGPU_max_capacities);
dom0_access = proxy.dom0_access == null ? (pgpu_dom0_access) 0 : (pgpu_dom0_access)Helper.EnumParseDefault(typeof(pgpu_dom0_access), (string)proxy.dom0_access);
is_system_display_device = (bool)proxy.is_system_display_device;
}
public Proxy_PGPU ToProxy()
@ -116,6 +124,8 @@ namespace XenAPI
result_.enabled_VGPU_types = (enabled_VGPU_types != null) ? Helper.RefListToStringArray(enabled_VGPU_types) : new string[] {};
result_.resident_VGPUs = (resident_VGPUs != null) ? Helper.RefListToStringArray(resident_VGPUs) : new string[] {};
result_.supported_VGPU_max_capacities = Maps.convert_to_proxy_XenRefVGPU_type_long(supported_VGPU_max_capacities);
result_.dom0_access = pgpu_dom0_access_helper.ToString(dom0_access);
result_.is_system_display_device = is_system_display_device;
return result_;
}
@ -134,6 +144,8 @@ namespace XenAPI
enabled_VGPU_types = Marshalling.ParseSetRef<VGPU_type>(table, "enabled_VGPU_types");
resident_VGPUs = Marshalling.ParseSetRef<VGPU>(table, "resident_VGPUs");
supported_VGPU_max_capacities = Maps.convert_from_proxy_XenRefVGPU_type_long(Marshalling.ParseHashTable(table, "supported_VGPU_max_capacities"));
dom0_access = (pgpu_dom0_access)Helper.EnumParseDefault(typeof(pgpu_dom0_access), Marshalling.ParseString(table, "dom0_access"));
is_system_display_device = Marshalling.ParseBool(table, "is_system_display_device");
}
public bool DeepEquals(PGPU other)
@ -151,7 +163,9 @@ namespace XenAPI
Helper.AreEqual2(this._supported_VGPU_types, other._supported_VGPU_types) &&
Helper.AreEqual2(this._enabled_VGPU_types, other._enabled_VGPU_types) &&
Helper.AreEqual2(this._resident_VGPUs, other._resident_VGPUs) &&
Helper.AreEqual2(this._supported_VGPU_max_capacities, other._supported_VGPU_max_capacities);
Helper.AreEqual2(this._supported_VGPU_max_capacities, other._supported_VGPU_max_capacities) &&
Helper.AreEqual2(this._dom0_access, other._dom0_access) &&
Helper.AreEqual2(this._is_system_display_device, other._is_system_display_device);
}
public override string SaveChanges(Session session, string opaqueRef, PGPU server)
@ -296,6 +310,28 @@ namespace XenAPI
return Maps.convert_from_proxy_XenRefVGPU_type_long(session.proxy.pgpu_get_supported_vgpu_max_capacities(session.uuid, (_pgpu != null) ? _pgpu : "").parse());
}
/// <summary>
/// Get the dom0_access field of the given PGPU.
/// First published in .
/// </summary>
/// <param name="session">The session</param>
/// <param name="_pgpu">The opaque_ref of the given pgpu</param>
public static pgpu_dom0_access get_dom0_access(Session session, string _pgpu)
{
return (pgpu_dom0_access)Helper.EnumParseDefault(typeof(pgpu_dom0_access), (string)session.proxy.pgpu_get_dom0_access(session.uuid, (_pgpu != null) ? _pgpu : "").parse());
}
/// <summary>
/// Get the is_system_display_device field of the given PGPU.
/// First published in .
/// </summary>
/// <param name="session">The session</param>
/// <param name="_pgpu">The opaque_ref of the given pgpu</param>
public static bool get_is_system_display_device(Session session, string _pgpu)
{
return (bool)session.proxy.pgpu_get_is_system_display_device(session.uuid, (_pgpu != null) ? _pgpu : "").parse();
}
/// <summary>
/// Set the other_config field of the given PGPU.
/// First published in XenServer 6.0.
@ -453,6 +489,50 @@ namespace XenAPI
return XenRef<Task>.Create(session.proxy.async_pgpu_get_remaining_capacity(session.uuid, (_pgpu != null) ? _pgpu : "", (_vgpu_type != null) ? _vgpu_type : "").parse());
}
/// <summary>
///
/// First published in .
/// </summary>
/// <param name="session">The session</param>
/// <param name="_pgpu">The opaque_ref of the given pgpu</param>
public static pgpu_dom0_access enable_dom0_access(Session session, string _pgpu)
{
return (pgpu_dom0_access)Helper.EnumParseDefault(typeof(pgpu_dom0_access), (string)session.proxy.pgpu_enable_dom0_access(session.uuid, (_pgpu != null) ? _pgpu : "").parse());
}
/// <summary>
///
/// First published in .
/// </summary>
/// <param name="session">The session</param>
/// <param name="_pgpu">The opaque_ref of the given pgpu</param>
public static XenRef<Task> async_enable_dom0_access(Session session, string _pgpu)
{
return XenRef<Task>.Create(session.proxy.async_pgpu_enable_dom0_access(session.uuid, (_pgpu != null) ? _pgpu : "").parse());
}
/// <summary>
///
/// First published in .
/// </summary>
/// <param name="session">The session</param>
/// <param name="_pgpu">The opaque_ref of the given pgpu</param>
public static pgpu_dom0_access disable_dom0_access(Session session, string _pgpu)
{
return (pgpu_dom0_access)Helper.EnumParseDefault(typeof(pgpu_dom0_access), (string)session.proxy.pgpu_disable_dom0_access(session.uuid, (_pgpu != null) ? _pgpu : "").parse());
}
/// <summary>
///
/// First published in .
/// </summary>
/// <param name="session">The session</param>
/// <param name="_pgpu">The opaque_ref of the given pgpu</param>
public static XenRef<Task> async_disable_dom0_access(Session session, string _pgpu)
{
return XenRef<Task>.Create(session.proxy.async_pgpu_disable_dom0_access(session.uuid, (_pgpu != null) ? _pgpu : "").parse());
}
/// <summary>
/// Return a list of all the PGPUs known to the system.
/// First published in XenServer 6.0.
@ -638,5 +718,43 @@ namespace XenAPI
}
}
private Dictionary<XenRef<VGPU_type>, long> _supported_VGPU_max_capacities;
/// <summary>
/// The accessibility of this device from dom0
/// First published in .
/// </summary>
public virtual pgpu_dom0_access dom0_access
{
get { return _dom0_access; }
set
{
if (!Helper.AreEqual(value, _dom0_access))
{
_dom0_access = value;
Changed = true;
NotifyPropertyChanged("dom0_access");
}
}
}
private pgpu_dom0_access _dom0_access;
/// <summary>
/// Is this device the system display device
/// First published in .
/// </summary>
public virtual bool is_system_display_device
{
get { return _is_system_display_device; }
set
{
if (!Helper.AreEqual(value, _is_system_display_device))
{
_is_system_display_device = value;
Changed = true;
NotifyPropertyChanged("is_system_display_device");
}
}
}
private bool _is_system_display_device;
}
}

View File

@ -2812,6 +2812,10 @@ namespace XenAPI
Response<Object>
host_get_guest_vcpus_params(string session, string _host);
[XmlRpcMethod("host.get_display")]
Response<string>
host_get_display(string session, string _host);
[XmlRpcMethod("host.set_name_label")]
Response<string>
host_set_name_label(string session, string _host, string _label);
@ -2896,6 +2900,10 @@ namespace XenAPI
Response<string>
host_remove_from_guest_vcpus_params(string session, string _host, string _key);
[XmlRpcMethod("host.set_display")]
Response<string>
host_set_display(string session, string _host, string _display);
[XmlRpcMethod("host.disable")]
Response<string>
host_disable(string session, string _host);
@ -3236,6 +3244,22 @@ namespace XenAPI
Response<string>
async_host_declare_dead(string session, string _host);
[XmlRpcMethod("host.enable_display")]
Response<string>
host_enable_display(string session, string _host);
[XmlRpcMethod("Async.host.enable_display")]
Response<string>
async_host_enable_display(string session, string _host);
[XmlRpcMethod("host.disable_display")]
Response<string>
host_disable_display(string session, string _host);
[XmlRpcMethod("Async.host.disable_display")]
Response<string>
async_host_disable_display(string session, string _host);
[XmlRpcMethod("host.get_all")]
Response<string []>
host_get_all(string session);
@ -6220,6 +6244,14 @@ namespace XenAPI
Response<Object>
pgpu_get_supported_vgpu_max_capacities(string session, string _pgpu);
[XmlRpcMethod("PGPU.get_dom0_access")]
Response<string>
pgpu_get_dom0_access(string session, string _pgpu);
[XmlRpcMethod("PGPU.get_is_system_display_device")]
Response<bool>
pgpu_get_is_system_display_device(string session, string _pgpu);
[XmlRpcMethod("PGPU.set_other_config")]
Response<string>
pgpu_set_other_config(string session, string _pgpu, Object _other_config);
@ -6272,6 +6304,22 @@ namespace XenAPI
Response<string>
async_pgpu_get_remaining_capacity(string session, string _pgpu, string _vgpu_type);
[XmlRpcMethod("PGPU.enable_dom0_access")]
Response<string>
pgpu_enable_dom0_access(string session, string _pgpu);
[XmlRpcMethod("Async.PGPU.enable_dom0_access")]
Response<string>
async_pgpu_enable_dom0_access(string session, string _pgpu);
[XmlRpcMethod("PGPU.disable_dom0_access")]
Response<string>
pgpu_disable_dom0_access(string session, string _pgpu);
[XmlRpcMethod("Async.PGPU.disable_dom0_access")]
Response<string>
async_pgpu_disable_dom0_access(string session, string _pgpu);
[XmlRpcMethod("PGPU.get_all")]
Response<string []>
pgpu_get_all(string session);
@ -6855,6 +6903,7 @@ namespace XenAPI
public string [] PCIs;
public string [] PGPUs;
public Object guest_VCPUs_params;
public string display;
}
[XmlRpcMissingMapping(MappingAction.Ignore)]
@ -7285,6 +7334,8 @@ namespace XenAPI
public string [] enabled_VGPU_types;
public string [] resident_VGPUs;
public Object supported_VGPU_max_capacities;
public string dom0_access;
public bool is_system_display_device;
}
[XmlRpcMissingMapping(MappingAction.Ignore)]

View File

@ -0,0 +1,62 @@
/*
* Copyright (c) Citrix Systems, Inc.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1) Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* 2) Redistributions in binary form must reproduce the above
* copyright notice, this list of conditions and the following
* disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
* COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
* INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
* OF THE POSSIBILITY OF SUCH DAMAGE.
*/
using System;
using System.Collections.Generic;
namespace XenAPI
{
public enum host_display
{
enabled, disable_on_reboot, disabled, enable_on_reboot, unknown
}
public static class host_display_helper
{
public static string ToString(host_display x)
{
switch (x)
{
case host_display.enabled:
return "enabled";
case host_display.disable_on_reboot:
return "disable_on_reboot";
case host_display.disabled:
return "disabled";
case host_display.enable_on_reboot:
return "enable_on_reboot";
default:
return "unknown";
}
}
}
}

View File

@ -0,0 +1,62 @@
/*
* Copyright (c) Citrix Systems, Inc.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1) Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* 2) Redistributions in binary form must reproduce the above
* copyright notice, this list of conditions and the following
* disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
* COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
* INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
* OF THE POSSIBILITY OF SUCH DAMAGE.
*/
using System;
using System.Collections.Generic;
namespace XenAPI
{
public enum pgpu_dom0_access
{
enabled, disable_on_reboot, disabled, enable_on_reboot, unknown
}
public static class pgpu_dom0_access_helper
{
public static string ToString(pgpu_dom0_access x)
{
switch (x)
{
case pgpu_dom0_access.enabled:
return "enabled";
case pgpu_dom0_access.disable_on_reboot:
return "disable_on_reboot";
case pgpu_dom0_access.disabled:
return "disabled";
case pgpu_dom0_access.enable_on_reboot:
return "enable_on_reboot";
default:
return "unknown";
}
}
}
}

View File

@ -76,6 +76,7 @@
<Compile Include="Actions\Host\ShutdownHostAction.cs" />
<Compile Include="Actions\Host\SystemStatusAction.cs" />
<Compile Include="Actions\Host\TestLocationInstallerAction.cs" />
<Compile Include="Actions\Host\UpdateIntegratedGpuPassthroughAction.cs" />
<Compile Include="Actions\Message\DestroyMessageAction.cs" />
<Compile Include="Actions\Host\HostBackupRestoreAction.cs" />
<Compile Include="Actions\Host\SingleHostStatusAction.cs" />
@ -321,10 +322,12 @@
<Compile Include="XenAPI\bond_mode.cs" />
<Compile Include="XenAPI\DR_task.cs" />
<Compile Include="XenAPI\GPU_group.cs" />
<Compile Include="XenAPI\host_display.cs" />
<Compile Include="XenAPI\ipv6_configuration_mode.cs" />
<Compile Include="XenAPI\network_default_locking_mode.cs" />
<Compile Include="XenAPI\PCI.cs" />
<Compile Include="XenAPI\PGPU.cs" />
<Compile Include="XenAPI\pgpu_dom0_access.cs" />
<Compile Include="XenAPI\primary_address_type.cs" />
<Compile Include="XenAPI\VGPU.cs" />
<Compile Include="XenAPI\VGPU_type.cs" />