コード例 #1
0
        public SsboBootFlags(bool parameterLocked, BootFlags bootFlags,
                             BootType bootType, BootLocks bootLocks,
                             BootOverrides bootOverrides, byte bootInstance)
        {
            //  Ipmi Spec on Instance:
            //  10001b to 11111b = internal device instance number 1 to 15, respectively
            if (bootInstance != 0)
            {
                bootInstance = (byte)((bootInstance ^ 0x10) & 0x1F);
            }

            this.parameterLocked = parameterLocked;

            this.parameterSelector =
                (byte)SystemBootOptionsParameter.BootFlags;

            this.parameterData = new byte[5] {
                (byte)bootFlags, (byte)bootType,
                (byte)bootLocks, (byte)bootOverrides, (byte)bootInstance
            };
        }
        /// <summary>
        /// The helper for several boot type setting methods, as they
        /// essentially send the same sequence of messages.
        /// </summary>
        /// <param name="bootType">The desired boot type.</param>
        public virtual NextBoot SetNextBoot(BootType bootType, bool uefi, bool persistent, byte instance, bool requireCommit = false)
        {
            byte completionCode = 0x00;

            SsboSetInProgress req = new SsboSetInProgress(
                false, SboSetInProgress.SetInProgress);

            SetSystemBootOptionsResponse response =
                (SetSystemBootOptionsResponse)this.IpmiSendReceive(
                    req, typeof(SetSystemBootOptionsResponse));

            completionCode = response.CompletionCode;

            SsboBootInfoAcknowledge ack = new SsboBootInfoAcknowledge(
                false,
                SboBootInfoAcknowledgeMask.EnableWriteBiosFlag,
                SboBootInfoAcknowledgeData.None);

            response = (SetSystemBootOptionsResponse)this.IpmiSendReceive(
                ack, typeof(SetSystemBootOptionsResponse));

            if (completionCode == 0x00)
            {
                completionCode = response.CompletionCode;
            }


            BootFlags bootFlags = BootFlags.BootFlagsValid;

            if (persistent)
            {
                bootFlags = (bootFlags | BootFlags.AllSubsequentBoots);
            }

            if (uefi)
            {
                bootFlags = (bootFlags | BootFlags.EfiBootType);
            }

            SsboBootFlags flags = new SsboBootFlags(
                false, bootFlags, bootType, 0, 0, instance);

            response = (SetSystemBootOptionsResponse)this.IpmiSendReceive(
                flags, typeof(SetSystemBootOptionsResponse));


            if (completionCode == 0x00)
            {
                completionCode = response.CompletionCode;
            }

            if (requireCommit)
            {
                req = new SsboSetInProgress(false, SboSetInProgress.CommitWrite);

                response = (SetSystemBootOptionsResponse)this.IpmiSendReceive(
                    req, typeof(SetSystemBootOptionsResponse));

                if (completionCode == 0x00)
                {
                    completionCode = response.CompletionCode;
                }
            }

            req = new SsboSetInProgress(false, SboSetInProgress.SetComplete);

            response = (SetSystemBootOptionsResponse)this.IpmiSendReceive(
                req, typeof(SetSystemBootOptionsResponse));

            if (completionCode == 0x00)
            {
                completionCode = response.CompletionCode;
            }

            NextBoot nextboot = new NextBoot(completionCode);

            nextboot.BootDevice = bootType;

            return(nextboot);
        }
コード例 #3
0
        public SsboBootFlags(bool parameterLocked, BootFlags bootFlags,
            BootType bootType, BootLocks bootLocks,
            BootOverrides bootOverrides, byte bootInstance)
        {
            //  Ipmi Spec on Instance:
            //  10001b to 11111b = internal device instance number 1 to 15, respectively
            if(bootInstance != 0)
                bootInstance = (byte)((bootInstance ^ 0x10) & 0x1F);

            this.parameterLocked = parameterLocked;

            this.parameterSelector =
                (byte)SystemBootOptionsParameter.BootFlags;

            this.parameterData = new byte[5] { (byte)bootFlags, (byte)bootType,
                (byte)bootLocks, (byte)bootOverrides, (byte)bootInstance };
        }