1// Copyright 2016-2017 VMware, Inc. All Rights Reserved. 2// 3// Licensed under the Apache License, Version 2.0 (the "License"); 4// you may not use this file except in compliance with the License. 5// You may obtain a copy of the License at 6// 7// http://www.apache.org/licenses/LICENSE-2.0 8// 9// Unless required by applicable law or agreed to in writing, software 10// distributed under the License is distributed on an "AS IS" BASIS, 11// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12// See the License for the specific language governing permissions and 13// limitations under the License. 14 15package bdoor 16 17import "unsafe" 18 19type UInt32 struct { 20 High uint16 21 Low uint16 22} 23 24func (u *UInt32) Word() uint32 { 25 return uint32(u.High)<<16 + uint32(u.Low) 26} 27 28func (u *UInt32) SetWord(w uint32) { 29 u.High = uint16(w >> 16) 30 u.Low = uint16(w) 31} 32 33func (u *UInt32) AsUInt32() *UInt32 { 34 return u 35} 36 37func (u *UInt32) Value() uint32 { 38 return u.Word() 39} 40 41func (u *UInt32) SetValue(val uint32) { 42 u.SetWord(val) 43} 44 45func (u *UInt32) SetPointer(p unsafe.Pointer) { 46 u.SetWord(uint32(uintptr(p))) 47} 48 49type UInt64 struct { 50 High UInt32 51 Low UInt32 52} 53 54func (u *UInt64) Quad() uint64 { 55 return uint64(u.High.Word())<<32 + uint64(u.Low.Word()) 56} 57 58func (u *UInt64) SetQuad(w uint64) { 59 u.High.SetWord(uint32(w >> 32)) 60 u.Low.SetWord(uint32(w)) 61} 62 63func (u *UInt64) AsUInt32() *UInt32 { 64 return &u.Low 65} 66 67func (u *UInt64) Value() uint64 { 68 return u.Quad() 69} 70 71func (u *UInt64) SetValue(val uint64) { 72 u.SetQuad(val) 73} 74 75func (u *UInt64) SetPointer(p unsafe.Pointer) { 76 u.SetQuad(uint64(uintptr(p))) 77} 78