// 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.

//go:generate stringer -type=Status -output=types_string.go

package zx

import "unsafe"

type Handle uint32   // zx_handle_t
type HandleOp uint32 // zx_handle_op_t;
type Koid uint64     // zx_koid_t
type Signals uint32  // zx_signals_t
type Status int32    // zx_status_t

type Clock uint32   // zx_clock_t,
type Duration int64 // zx_duration_t, nanoseconds
type Ticks int64    // zx_ticks_t
type Time int64     // zx_time_t, nanoseconds

type Paddr uintptr // zx_paddr_t
type Vaddr uintptr // zx_vaddr_t

type Futex int32 // zx_futex_t

type Off uint64              // zx_off_t
type StreamSeekOrigin uint32 // zx_stream_seek_origin_t

type Rights uint32 // zx_rights_t

func (r Rights) Subtract(targetRights Rights) Rights {
	if r == RightSameRights || targetRights == RightSameRights {
		panic("subtraction doesn't make sense for zx.RightSameRights")
	}
	return r &^ targetRights
}

func (r Rights) StrictSupersetOf(targetRights Rights) bool {
	return r.Subtract(targetRights) != 0 && targetRights.Subtract(r) == 0
}

func (r Rights) SupersetOf(targetRights Rights) bool {
	return r.StrictSupersetOf(targetRights) || r == targetRights
}

func (r Rights) SubsetOf(targetRights Rights) bool {
	return targetRights.SupersetOf(r)
}

func (r Rights) StrictSubsetOf(targetRights Rights) bool {
	return targetRights.StrictSupersetOf(r)
}

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
)

const (
	ZX_CACHE_POLICY_CACHED          = 0
	ZX_CACHE_POLICY_UNCACHED        = 1
	ZX_CACHE_POLICY_UNCACHED_DEVICE = 2
	ZX_CACHE_POLICY_WRITE_COMBINING = 3
	ZX_CACHE_POLICY_MASK            = 3
)

const (
	ZX_INFO_VMO_TYPE_PAGED    = 1 << 0
	ZX_INFO_VMO_TYPE_PHYSICAL = 0 << 0
	ZX_INFO_VMO_RESIZABLE     = 1 << 1
	ZX_INFO_VMO_IS_COW_CLONE  = 1 << 2
	ZX_INFO_VMO_VIA_HANDLE    = 1 << 3
	ZX_INFO_VMO_VIA_MAPPING   = 1 << 4
	ZX_INFO_VMO_PAGER_BACKED  = 1 << 5
	ZX_INFO_VMO_CONTIGUOUS    = 1 << 6
	ZX_INFO_VMO_DISCARDABLE   = 1 << 7
	ZX_INFO_VMO_IMMUTABLE     = 1 << 8
)

type InfoHandleBasic struct {
	Koid        uint64
	Rights      Rights
	Type        ObjType
	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 InfoVmo struct {
	Koid                  uint64
	Name                  [ZX_MAX_NAME_LEN]uint8
	SizeBytes             uint64
	ParentKoid            uint64
	NumChildren           uint
	NumMappings           uint
	ShareCount            uint
	Flags                 uint32
	_                     [4]uint8
	CommittedBytes        uint64
	HandleRights          Rights
	CachePolicy           uint32
	MetadataBytes         uint64
	CommittedChangeEvents uint64
} // zx_info_vmo_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 ChannelCallEtcArgs struct {
	WriteBytes      unsafe.Pointer
	WriteHandles    *HandleDisposition
	ReadBytes       unsafe.Pointer
	ReadHandles     *HandleInfo
	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      ObjType
	Rights    Rights
	Result    Status
}

type HandleInfo struct {
	Handle Handle
	Type   ObjType
	Rights Rights
	Unused uint32
}

// 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
	ErrIONotPresent
	_ // -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
	SignalSocketPeerWriteDisabled = SignalObject4
	SignalSocketWriteDisabled     = SignalObject5
	SignalSocketReadThreshold     = SignalObject10
	SignalSocketWriteThreshold    = SignalObject11

	// 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
	RightMap
	RightGetProperty
	RightSetProperty
	RightEnumerate
	RightDestroy
	RightGetPolicy
	RightSetPolicy
	RightSignal
	RightSignalPeer
	RightWait
	RightInspect
	RightManageJob
	RightManageProcess
	RightManageThread
	RightApplyPolicy
	RightManageSocket
	RightSameRights = Rights(1 << 31)
	RightNone       = Rights(0)
)

const (
	RightsBasic    = RightTransfer | RightDuplicate | RightWait | RightInspect
	RightsIO       = RightRead | RightWrite
	RightsProperty = RightGetProperty | RightSetProperty
	RightsPolicy   = RightGetPolicy | RightSetPolicy
)

// Topics for object_get_info
const (
	ObjectInfoHandleNone            = 0
	ObjectInfoHandleValid           = 1
	ObjectInfoHandleBasic           = 2
	ObjectInfoProcess               = 3 | (1 << 28)
	ObjectInfoProcessThreads        = 4
	ObjectInfoResourceChildren      = 5
	ObjectInfoResourceRecords       = 6
	ObjectInfoVMAR                  = 7
	ObjectInfoJobChildren           = 8
	ObjectInfoJobProcesses          = 9
	ObjectInfoThread                = 10
	ObjectInfoThreadExceptionReport = 11
	ObjectInfoTaskStats             = 12
	ObjectInfoProcessMaps           = 13
	ObjectInfoProcessVMOs_V1        = 14 | (0 << 28)
	ObjectInfoProcessVMOs           = 14 | (1 << 28)
	ObjectInfoThreadStats           = 15
	ObjectInfoCpUStats              = 16
	ObjectInfoKMemStats             = 17
	ObjectInfoResource              = 18
	ObjectInfoHandleCount           = 19
	ObjectInfoBTI                   = 20
	ObjectInfoProcessHandleStats    = 21
	ObjectInfoSocket                = 22
	ObjectInfoVMO_V1                = 23 | (0 << 28)
	ObjectInfoVMO                   = 23 | (1 << 28)
)

const (
	ProcessInfoFlagStarted          uint32 = 1 << 0 // ZX_INFO_PROCESS_FLAG_STARTED
	ProcessInfoFlagExited                  = 1 << 1 // ZX_INFO_PROCESS_FLAG_EXITED
	ProcessInfoFlagDebuggerAttached        = 1 << 2 // ZX_INFO_PROCESS_FLAG_DEBUGGER_ATTACHED
)

type ObjType uint32 // zx_obj_type_t

const (
	ObjTypeNone ObjType = iota
	ObjTypeProcess
	ObjTypeThread
	ObjTypeVmo
	ObjTypeChannel
	ObjTypeEvent
	ObjTypePort
	_ // 7
	_ // 8
	ObjTypeInterrupt
	_ // 10
	ObjTypePciDevice
	ObjTypeLog
	_ // 13
	ObjTypeSocket
	ObjTypeResource
	ObjTypeEventPair
	ObjTypeJob
	ObjTypeVmar
	ObjTypeFifo
	ObjTypeGuest
	ObjTypeVcpu
	ObjTypeTimer
	ObjTypeIommu
	ObjTypeBti
	ObjTypeProfile
	ObjTypePmt
	ObjTypeSuspendToken
	ObjTypePager
)

const (
	HandleOpMove      HandleOp = iota // ZX_HANDLE_OP_MOVE
	HandleOpDuplicate                 // ZX_HANDLE_OP_DUPLICATE
)

// Options for socket_create
const (
	SocketStream = iota
	SocketDatagram
)

// Options for socket_read
const (
	SocketPeek = 1 << 3
)

// Options for socket_set_disposition
const (
	_                              = iota // 0
	SocketDispositionWriteDisabled        // ZX_SOCKET_DISPOSITION_WRITE_DISABLED
	SocketDispositionWriteEnabled         // ZX_SOCKET_DISPOSITION_WRITE_ENABLED
)

const (
	_                           = iota // 0
	_                                  // 1
	PropRegisterGS                     // ZX_PROP_REGISTER_GS
	PropName                           // ZX_PROP_NAME
	PropRegisterFS                     // ZX_PROP_REGISTER_FS
	PropProcessDebugAddr               // ZX_PROP_PROCESS_DEBUG_ADDR
	PropProcessVDSOBaseAddress         // ZX_PROP_PROCESS_VDSO_BASE_ADDRESS
	PropProcessBreakOnLoad             // ZX_PROP_PROCESS_BREAK_ON_LOAD
	PropProcessHwTraceContextId        // ZX_PROP_PROCESS_HW_TRACE_CONTEXT_ID
	_                                  // 9
	_                                  // 10
	_                                  // 11
	PropSocketRXThreshold              // ZX_PROP_SOCKET_RX_THRESHOLD
	PropSocketTXThreshold              // ZX_PROP_SOCKET_TX_THRESHOLD
	_                                  // 14
	PropJobKillOnOom                   // ZX_PROP_JOB_KILL_ON_OOM
	PropExceptionState                 // ZX_PROP_EXCEPTION_STATE
	PropVmoContentSize                 // ZX_PROP_VMO_CONTENT_SIZE
	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 VMOChildOption uint32

const (
	// zx_vmo_create_child requires exactly 1 of the following 3 flags:
	VMOChildOptionSnapshot               VMOChildOption = 1 << 0 // ZX_VMO_CHILD_SNAPSHOT
	VMOChildOptionSlice                                 = 1 << 3 // ZX_VMO_CHILD_SLICE
	VMOChildOptionSnapshotAtLeastOnWrite                = 1 << 4 // ZX_VMO_CHILD_SNAPSHOT_AT_LEAST_ON_WRITE

	// optional flags
	VMOChildOptionResizable = 1 << 2 // ZX_VMO_CHILD_RESIZABLE
	VMOChildOptionNoWrite   = 1 << 5 // ZX_VMO_CHILD_NO_WRITE
)

type VmOption uint32

const (
	VmOptionPermRead          VmOption = 1 << 0 // ZX_VM_PERM_READ
	VmOptionPermWrite         VmOption = 1 << 1 // ZX_VM_PERM_WRITE
	VmOptionPermExecute       VmOption = 1 << 2 // ZX_VM_PERM_EXECUTE
	VmOptionCompact           VmOption = 1 << 3 // ZX_VM_COMPACT
	VmOptionSpecific          VmOption = 1 << 4 // ZX_VM_SPECIFIC
	VmOptionSpecificOverwrite VmOption = 1 << 5 // ZX_VM_SPECIFIC_OVERWRITE
	VmOptionCanMapSpecific    VmOption = 1 << 6 // ZX_VM_CAN_MAP_SPECIFIC
	VmOptionCanMapRead        VmOption = 1 << 7 // ZX_VM_CAN_MAP_READ
	VmOptionCanMapWrite       VmOption = 1 << 8 // ZX_VM_CAN_MAP_WRITE
	VmOptionCanMapExecute     VmOption = 1 << 9 // ZX_VM_CAN_MAP_EXECUTE
)

const (
	WaitAsyncOnce      uint32 = 0
	WaitAsyncTimestamp uint32 = 1
	WaitAsyncEdge      uint32 = 2
)

// zx_packet_type_t
type PortPacketType uint32

const (
	PortPacketTypeUser        PortPacketType = 0
	PortPacketTypeSignal      PortPacketType = 1
	PortPacketTypeGuestBell   PortPacketType = 3
	PortPacketTypeGuestMem    PortPacketType = 4
	PortPacketTypeGuestIo     PortPacketType = 5
	PortPacketTypeGuestVcpu   PortPacketType = 6
	PortPacketTypeInterrupt   PortPacketType = 7
	PortPacketTypePageRequest PortPacketType = 9
)

// zx_port_packet_t
type PortPacket struct {
	Key    uint64
	Type   PortPacketType
	Status Status
	Body   PortPacketBody
}

type PortPacketBody struct {
	forAlignment   uint64
	remainingBytes [24]uint8
}

func (p *PortPacketBody) AsSignal() *PortPacketSignal {
	return (*PortPacketSignal)(unsafe.Pointer(p))
}

// zx_port_packet_signal_t
type PortPacketSignal struct {
	Trigger   Signals
	Observed  Signals
	Count     uint64
	Timestamp uint64
	Reserved1 uint64
}

// TODO(fxbug.dev/42061412): Stubbed for now. Properly generate from FIDL library
// zx once properly modeled.
type Iovec struct{}
type PciBar struct{}
type PcieDeviceInfo struct{}
type PciInitArg struct{}
type ProfileInfo struct{}
type StringView struct{}
type SystemPowerctlArg struct{}
