blob: c365761fa990e8de1b129348a43c0a7c7bafe4a3 [file] [log] [blame]
// Copyright 2016 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
// +build fuchsia
package zx
import "unsafe"
type Status int32 // zx_status_t
type Handle uint32 // zx_handle_t
type Clock uint32 // zx_clock_t,
type Time int64 // zx_time_t, nanoseconds
type Duration int64 // zx_duration_t, nanoseconds
type Signals uint32 // zx_signals_t
type Rights uint32 // zx_rights_t
type Paddr uintptr // zx_paddr_t
type Vaddr uintptr // zx_vaddr_t
type ObjectType uint32 // zx_obj_type_t
type HandleOp uint32 // zx_handle_op_t;
type WaitItem struct {
Handle Handle
WaitFor Signals
Pending Signals
} // zx_wait_item_t
const HandleInvalid = Handle(0)
// deprecated name
const HANDLE_INVALID = Handle(0)
const HandleSize = uint64(unsafe.Sizeof(Handle(0)))
const ZX_MAX_NAME_LEN = 32
const (
ZX_RREC_DELETED = 0
ZX_RREC_SELF = 1
ZX_RREC_DATA = 2
ZX_RREC_IRQ = 3
ZX_RREC_MMIO = 4
ZX_RREC_IOPORT = 5
)
const (
ZX_RACT_ENABLE = 1
ZX_RACT_DISABLE = 2
)
const (
ZX_RREC_SELF_GENERIC = 0
ZX_RREC_SELF_ROOT = 1
)
type InfoHandleBasic struct {
Koid uint64
Rights Rights
Type ObjectType
RelatedKoid uint64
Props uint32
} // zx_info_handle_basic_t
type InfoSocket struct {
Options uint32
RXBufMax int
RXBufSize int
RXBufAvailable int
TXBufMax int
TXBufSize int
} // zx_info_socket_t
type RrecSelf struct {
Type uint16 // ZX_RREC_SELF
Subtype uint16
Options uint32
Koid uint64
RecordCount uint32
ChildCount uint32
_ [2]uint32
Name [ZX_MAX_NAME_LEN]uint8
} // zx_rrec_self_t
type RrecMMIO struct {
Type uint16 // ZX_RREC_MMIO
Subtype uint16
Options uint32
PhysBase uint64
PhysSize uint64
_ [10]uint32
} // zx_rrec_mmio_t
type RrecIRQ struct {
Type uint16 // ZX_RREC_IRQ
Subtype uint16
Options uint32
IRQBase uint32
IRQCount uint32
_ [12]uint32
} // zx_rrec_irq_t
type RrecIOPort struct {
Type uint16 // ZX_RREC_IOPORT
Subtype uint16
Options uint32
PortBase uint32
PortCount uint32
_ [12]uint32
} // zx_rrec_ioport_t
type RrecData struct {
Type uint16
Subtype uint16
Options uint32 // low 4 bits are count
Data [56]uint8
} // zx_rrec_data_t
type Rrec struct {
typ uint16
_ [62]uint8
} // zx_rrec_t
func (r *Rrec) Box() RrecValue {
switch r.typ {
case ZX_RREC_DELETED:
return nil
case ZX_RREC_SELF:
return (*RrecSelf)(unsafe.Pointer(r))
case ZX_RREC_DATA:
return (*RrecData)(unsafe.Pointer(r))
case ZX_RREC_IRQ:
return (*RrecIRQ)(unsafe.Pointer(r))
case ZX_RREC_MMIO:
return (*RrecMMIO)(unsafe.Pointer(r))
case ZX_RREC_IOPORT:
return (*RrecIOPort)(unsafe.Pointer(r))
default:
return nil
}
}
type RrecValue interface {
rrec()
}
func (*RrecSelf) rrec() {}
func (*RrecData) rrec() {}
func (*RrecIRQ) rrec() {}
func (*RrecMMIO) rrec() {}
func (*RrecIOPort) rrec() {}
type ChannelCallArgs struct {
WriteBytes unsafe.Pointer
WriteHandles *Handle
ReadBytes unsafe.Pointer
ReadHandles *Handle
WriteNumBytes uint32
WriteNumHandles uint32
ReadNumBytes uint32
ReadNumHandles uint32
}
type FIFOState struct {
head, tail uint64
}
type SMCParameters struct {
funcID uint32
arg1, arg2, arg3, arg4, arg5, arg6 uint64
clientId, secureOSID uint16
}
type SMCResult struct {
arg0, arg1, arg2, arg3 uint64
}
type HandleDisposition struct {
Operation HandleOp
Handle Handle
Type ObjectType
Rights Rights
Result Status
}
// Status codes. See zircon/system/public/zircon/errors.h
const (
ErrOk Status = -iota
ErrInternal
ErrNotSupported
ErrNoResources
ErrNoMemory
ErrCallFailed
ErrInterruptedRetry
_ // -7
_ // -8
_ // -9
ErrInvalidArgs
ErrBadHandle
ErrWrongType
ErrBadSyscall
ErrOutOfRange
ErrBufferTooSmall
_ // -16
_ // -17
_ // -18
_ // -19
ErrBadState
ErrTimedOut
ErrShouldWait
ErrCanceled
ErrPeerClosed
ErrNotFound
ErrAlreadyExists
ErrAlreadyBound
ErrUnavailable
_ // -29
ErrAccessDenied
_ // -31
_ // -32
_ // -33
_ // -34
_ // -35
_ // -36
_ // -37
_ // -38
_ // -39
ErrIO
ErrIORefused
ErrIODataIntegrity
ErrIODataLoss
_ // -44
_ // -45
_ // -46
_ // -47
_ // -48
_ // -49
ErrBadPath
ErrNotDir
ErrNotFile
ErrFileBig
ErrNoSpace
ErrNotEmpty
_ // -56
_ // -57
_ // -58
_ // -59
ErrStop
ErrNext
_ // -62
_ // -63
_ // -64
_ // -65
_ // -66
_ // -67
_ // -68
_ // -69
ErrProtocolNotSupported
ErrAddressUnreachable
ErrAddressInUse
ErrNotConnected
ErrConnectionRefused
ErrConnectionReset
ErrConnectionAborted
// deprecated
ErrHandleClosed = ErrCanceled
ErrRemoteClosed = ErrPeerClosed
)
const (
SignalObject0 = (1 << iota)
SignalObject1
SignalObject2
SignalObject3
SignalObject4
SignalObject5
SignalObject6
SignalObject7
SignalObject8
SignalObject9
SignalObject10
SignalObject11
SignalObject12
SignalObject13
SignalObject14
SignalObject15
SignalObject16
SignalObject17
SignalObject18
SignalObject19
SignalObject20
SignalObject21
SignalObject22
SignalObject23
SignalUser0
SignalUser1
SignalUser2
SignalUser3
SignalUser4
SignalUser5
SignalUser6
SignalUser7
// Aliases
SignalHandleClosed = SignalObject23
// Event
SignalEventSignaled = SignalObject3
SignalEventMask = SignalUserAll | SignalEventSignaled
// EventPair
SignalEpairSignaled = SignalObject3
SignalEpairPeerClosed = SignalObject2
// Channel
SignalChannelReadable = SignalObject0
SignalChannelWritable = SignalObject1
SignalChannelPeerClosed = SignalObject2
// Socket
SignalSocketReadable = SignalObject0
SignalSocketWritable = SignalObject1
SignalSocketPeerClosed = SignalObject2
SignalSocketReadDisabled = SignalObject4 // Deprecated
SignalSocketPeerWriteDisabled = SignalObject4
SignalSocketWriteDisabled = SignalObject5
SignalSocketControlReadable = SignalObject6
SignalSocketControlWriteable = SignalObject7
SignalSocketAccept = SignalObject8
SignalSocketShare = SignalObject9
// Port
SignalPortReadable = SignalObject0
SignalPortPeerClosed = SignalObject2
SignalPortSignaled = SignalObject3
// Resource
SignalResourceReadable = SignalObject0
SignalResourceWritable = SignalObject1
SignalResourceChildAdded = SignalObject2
// Fifo
SignalFIFOReadable = SignalObject0
SignalFIFOWritable = SignalObject1
SignalFIFOPeerClosed = SignalObject2
SignalFIFOSignalMask = SignalFIFOReadable | SignalFIFOWritable | SignalFIFOPeerClosed
// Task signals (process, thread, job)
SignalTaskTerminated = SignalObject3
SignalTaskSignalMask = SignalObject3
// Job
SignalJobSignaled = SignalObject3
// Process
SignalProccessSignaled = SignalObject3
// Thread
SignalThreadSignaled = SignalObject3
SignalObjectAll = (0xfffff)
SignalUserAll = Signals(15 << 4)
SignalNone = Signals(0)
)
const (
RightDuplicate = Rights(1 << iota)
RightTransfer
RightRead
RightWrite
RightExecute
RightDebug
RightSameRights = Rights(1 << 31)
RightNone = Rights(0)
)
// Topics for object_get_info
const (
_ = iota
ObjectInfoHandleValid
ObjectInfoHandleBasic
ObjectInfoProcess
ObjectInfoProcessThreads
ObjectInfoResourceChildren
ObjectInfoResourceRecords
ObjectInfoVMAR
ObjectInfoJobChildren
ObjectInfoJobProcesses
ObjectInfoThread
ObjectInfoThreadExceptionReport
ObjectInfoTaskStats
ObjectInfoProcessMaps
ObjectInfoProcessVMOs
ObjectInfoThreadStats
ObjectInfoCpUStats
ObjectInfoKMemStats
ObjectInfoResource
ObjectInfoHandleCount
ObjectInfoBTI
ObjectInfoProcessHandleStats
ObjectInfoSocket
)
const (
ObjectTypeNone = ObjectType(iota)
ObjectTypeProcess
ObjectTypeThread
ObjectTypeVmo
ObjectTypeChannel
ObjectTypeEvent
ObjectTypePort
_ // 7
_ // 8
ObjectTypeInterrupt
_ // 10
ObjectTypePciDevice
ObjectTypeLog
_ // 13
ObjectTypeSocket
ObjectTypeResource
ObjectTypeEventPair
ObjectTypeJob
ObjectTypeVmar
ObjectTypeFifo
ObjectTypeGuest
ObjectTypeVcpu
ObjectTypeTimer
ObjectTypeIommu
ObjectTypeBti
ObjectTypeProfile
ObjectTypePmt
ObjectTypeSuspendToken
ObjectTypePager
)
const (
HandleOpMove = HandleOp(iota) // 0
HandleOpDuplicate // 1
)
// Options for socket_create
const (
SocketStream = iota // 0
SocketDatagram = 1 << (iota - 1) // 1
SocketHasControl // 2
SocketHasAccept // 4
)
// Options for socket_write
const (
_ = iota // 0
SocketShutdownWrite // 1
SocketShutdownRead // 2
)
// Options for socket_write and socket_read
const (
SocketControl = 1 << 2
)
const (
_ = iota // 0
_ // 1
PropNumStateKinds // ZX_PROP_NUM_STATE_KINDS
PropName // ZX_PROP_NAME
PropRegisterFS // ZX_PROP_REGISTER_FS
PropProcessDebugAddr // ZX_PROP_PROCESS_DEBUG_ADDR
PropProcessVDSOBaseAddress // ZX_PROP_PROCESS_VDSO_BASE_ADDRESS
PropJobMaxHeight // ZX_PROP_JOB_MAX_HEIGHT
)
const (
TimensecInfinite = Time(0x7FFFFFFFFFFFFFFF)
)
// EOF is used like io.EOF.
//
// When package io is linked in, at initialization this value is
// rewritten to be equivalent to io.EOF, so that the io.Readers
// and io.Writers in this package meet their specs.
var EOF error = eof{}
type eof struct{}
func (eof) Error() string { return "zx.EOF" }
// EPIPE is used like syscall.EPIPE
// When package syscall is linked in, at initialization this value is
// rewritten to be equivalent to syscall.EPIPE.
var EPIPE error = epipe{}
type epipe struct{}
func (epipe) Error() string { return "errno(32)" }
type VMOOption int
const (
VMOOptionResizable VMOOption = 1 << 1 // ZX_VMO_RESIZABLE
)
type VMFlag uint32
const (
VMFlagPermRead VMFlag = 1 << 0 // ZX_VM_PERM_READ
VMFlagPermWrite VMFlag = 1 << 1 // ZX_VM_PERM_WRITE
VMFlagPermExecute VMFlag = 1 << 2 // ZX_VM_PERM_EXECUTE
VMFlagCompact VMFlag = 1 << 3 // ZX_VM_COMPACT
VMFlagSpecific VMFlag = 1 << 4 // ZX_VM_SPECIFIC
VMFlagSpecificOverwrite VMFlag = 1 << 5 // ZX_VM_SPECIFIC_OVERWRITE
VMFlagCanMapSpecific VMFlag = 1 << 6 // ZX_VM_CAN_MAP_SPECIFIC
VMFlagCanMapRead VMFlag = 1 << 7 // ZX_VM_CAN_MAP_READ
VMFlagCanMapWrite VMFlag = 1 << 8 // ZX_VM_CAN_MAP_WRITE
VMFlagCanMapExecute VMFlag = 1 << 9 // ZX_VM_CAN_MAP_EXECUTE
)