hw

package
v1.3.3 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jun 11, 2020 License: GPL-2.0, GPL-2.0-or-later Imports: 9 Imported by: 4

README

hw

Code for dealing with hardware & user space Go drivers

Documentation

Overview

Memory mapped register read/write

Index

Constants

View Source
const (
	RefBytes       = 16
	RefHeaderBytes = 1*4 + 2*2
	RefOpaqueBytes = RefBytes - RefHeaderBytes
)
View Source
const (
	// Cache aligned/sized space for buffer header.
	BufferHeaderBytes = cpu.CacheLineBytes
	// Rewrite (prepend) area.
	BufferRewriteBytes = 64
)
View Source
const PhysmemLog2AddressAlign = 32

Variables

View Source
var (
	BasePointer = basePointer()
	BaseAddress = uintptr(BasePointer)
)

Must point to readable memory since compiler may perform read probes (nil checks) as part of memory addressing.

View Source
var DefaultBufferTemplate = &BufferTemplate{
	Size: 1 << 10,
	Ref:  Ref{RefHeader: RefHeader{dataOffset: BufferRewriteBytes}},
}

Functions

func CheckRegAddr

func CheckRegAddr(name string, got, want uint)

func DmaAlloc

func DmaAlloc(n uint) (b []byte, id elib.Index, offset, cap uint)

func DmaAllocAligned

func DmaAllocAligned(n, log2Align uint) (b []byte, id elib.Index, offset, cap uint)

func DmaFree

func DmaFree(id elib.Index)

func DmaGetData

func DmaGetData(id elib.Index) (b []byte)

func DmaGetPointer

func DmaGetPointer(o uint) unsafe.Pointer

func DmaHeapUsage

func DmaHeapUsage() string

func DmaInit

func DmaInit(b []byte)

func DmaIsValidOffset

func DmaIsValidOffset(o uint) bool

func DmaPhysAddress

func DmaPhysAddress(a uintptr) uintptr

func LinkRefs

func LinkRefs(as, bs, cs *RefHeader, chain_len, n uint)

func LoadUint16

func LoadUint16(addr uintptr) (data uint16)

func LoadUint32

func LoadUint32(addr uintptr) (data uint32)

Memory-mapped read/write

func LoadUint64

func LoadUint64(addr uintptr) (data uint64)

func MemoryBarrier

func MemoryBarrier()

func RefFlag1

func RefFlag1(f BufferFlag, r0 *RefHeader) bool

func RefFlag2

func RefFlag2(f BufferFlag, r0, r1 *RefHeader) bool

func RefFlag4

func RefFlag4(f BufferFlag, r0, r1, r2, r3 *RefHeader) bool

func StoreUint16

func StoreUint16(addr uintptr, data uint16)

func StoreUint32

func StoreUint32(addr uintptr, data uint32)

func StoreUint64

func StoreUint64(addr uintptr, data uint64)

Types

type Buffer

type Buffer struct {
	BufferHeader
	Opaque [BufferHeaderBytes - unsafe.Sizeof(BufferHeader{})]byte
}

type BufferFlag

type BufferFlag uint32
const (
	NextValid, Log2NextValid BufferFlag = 1 << iota, iota
	Cloned, Log2Cloned
)

func (BufferFlag) String

func (f BufferFlag) String() string

type BufferHeader

type BufferHeader struct {
	// contains filtered or unexported fields
}

Buffer header.

func (*BufferHeader) GetSave

func (h *BufferHeader) GetSave() BufferSave

func (*BufferHeader) SetSave

func (h *BufferHeader) SetSave(x BufferSave)

type BufferMain

type BufferMain struct {
	sync.Mutex

	PoolByName map[string]*BufferPool
	// contains filtered or unexported fields
}

func (*BufferMain) AddBufferPool

func (m *BufferMain) AddBufferPool(p *BufferPool)

func (*BufferMain) DelBufferPool

func (m *BufferMain) DelBufferPool(p *BufferPool)

func (*BufferMain) Elts

func (p *BufferMain) Elts() uint

func (*BufferMain) Foreach

func (p *BufferMain) Foreach(f func(x *BufferPool))

func (*BufferMain) ForeachIndex

func (p *BufferMain) ForeachIndex(f func(i uint))

func (*BufferMain) GetIndex

func (p *BufferMain) GetIndex() (i uint)

func (*BufferMain) IsFree

func (p *BufferMain) IsFree(i uint) (v bool)

func (*BufferMain) Len

func (p *BufferMain) Len() uint

func (*BufferMain) PutIndex

func (p *BufferMain) PutIndex(i uint) (ok bool)

func (*BufferMain) Reset

func (p *BufferMain) Reset()

func (*BufferMain) Resize

func (p *BufferMain) Resize(n uint)

func (*BufferMain) Validate

func (p *BufferMain) Validate(i uint)

type BufferPool

type BufferPool struct {
	Name string

	ElogName elog.StringRef

	BufferTemplate

	// Number of bytes of dma memory allocated by this pool.
	DmaMemAllocBytes uint64
	// contains filtered or unexported fields
}

func (*BufferPool) AllocCachedRefs

func (p *BufferPool) AllocCachedRefs() (r RefVec)

func (*BufferPool) AllocRefs

func (p *BufferPool) AllocRefs(r *RefHeader, n uint)

func (*BufferPool) AllocRefsStride

func (p *BufferPool) AllocRefsStride(r *RefHeader, want, stride uint)

func (*BufferPool) FreeBytes

func (p *BufferPool) FreeBytes() uint64

func (*BufferPool) FreeLen

func (p *BufferPool) FreeLen() uint

func (*BufferPool) FreeRefs

func (p *BufferPool) FreeRefs(rh *RefHeader, n uint, freeNext bool)

Return all buffers to pool and reset for next usage. freeNext specifies whether or not to follow and free next pointers.

func (*BufferPool) Init

func (p *BufferPool) Init()

func (*BufferPool) InitRefs

func (p *BufferPool) InitRefs(refs []Ref)

Method to over-ride to initialize refs for this buffer pool. This is used for example to set packet lengths, adjust packet fields, etc.

func (*BufferPool) ValidateRefs

func (p *BufferPool) ValidateRefs(h *RefHeader, want BufferState, n, stride uint)

type BufferSave

type BufferSave uint32

type BufferState

type BufferState uint8
const (
	BufferUnknown BufferState = iota
	BufferKnownAllocated
	BufferKnownFree
)

func (BufferState) String

func (s BufferState) String() string

func (BufferState) TraceBuffer

func (s BufferState) TraceBuffer(i int) string

type BufferTemplate

type BufferTemplate struct {
	// Data size of buffers.
	Size uint

	Ref
	Buffer

	// If non-nil buffers will be initialized with this data.
	Data []byte
	// contains filtered or unexported fields
}

func (*BufferTemplate) SizeIncludingOverhead

func (t *BufferTemplate) SizeIncludingOverhead() uint

type BufferTracer

type BufferTracer interface {
	TraceBuffer(e int) string
}

type Ref

type Ref struct {
	RefHeader
	// contains filtered or unexported fields
}

type RefChain

type RefChain struct {
	// contains filtered or unexported fields
}

Chains of buffer references.

func (*RefChain) Append

func (c *RefChain) Append(r *RefHeader)

func (*RefChain) Head

func (c *RefChain) Head() *Ref

func (*RefChain) Len

func (c *RefChain) Len() uint

func (*RefChain) Validate

func (c *RefChain) Validate()

type RefHeader

type RefHeader struct {
	// contains filtered or unexported fields
}

func (*RefHeader) Advance

func (r *RefHeader) Advance(i int) (oldDataOffset int)

func (*RefHeader) Buffer

func (r *RefHeader) Buffer() unsafe.Pointer

func (*RefHeader) ChainLen

func (r *RefHeader) ChainLen() (l uint)

Length in buffer chain.

func (*RefHeader) ChainSlice

func (r *RefHeader) ChainSlice(bʹ []byte) (b []byte)

func (*RefHeader) Data

func (r *RefHeader) Data() unsafe.Pointer

func (*RefHeader) DataLen

func (r *RefHeader) DataLen() uint

func (*RefHeader) DataOffset

func (r *RefHeader) DataOffset(o uint) unsafe.Pointer

func (*RefHeader) DataPhys

func (r *RefHeader) DataPhys() uintptr

func (*RefHeader) DataSlice

func (r *RefHeader) DataSlice() (b []byte)

func (*RefHeader) DataSliceOffset

func (r *RefHeader) DataSliceOffset(o uint) (b []byte)

func (*RefHeader) DataSliceOffsetLen

func (r *RefHeader) DataSliceOffsetLen(o, l uint) (b []byte)

func (*RefHeader) Flags

func (r *RefHeader) Flags() BufferFlag

func (*RefHeader) GetBuffer

func (r *RefHeader) GetBuffer() *Buffer

func (*RefHeader) NextIsValid

func (r *RefHeader) NextIsValid() bool

func (*RefHeader) NextRef

func (r *RefHeader) NextRef() (x *RefHeader)

func (*RefHeader) NextValidFlag

func (r *RefHeader) NextValidFlag() BufferFlag

func (*RefHeader) Restore

func (r *RefHeader) Restore(oldDataOffset int)

func (*RefHeader) SetDataLen

func (r *RefHeader) SetDataLen(l uint)

func (*RefHeader) SetFlags

func (r *RefHeader) SetFlags(f BufferFlag)

func (*RefHeader) String

func (r *RefHeader) String() (s string)

func (*RefHeader) Trace

func (r *RefHeader) Trace(p *BufferPool, i BufferTracer, e int)

func (*RefHeader) Validate

func (h *RefHeader) Validate()

func (*RefHeader) ValidateState

func (r *RefHeader) ValidateState(p *BufferPool, want BufferState)

type RefVec

type RefVec []Ref

func (RefVec) Len

func (p RefVec) Len() uint

func (*RefVec) ResetLen

func (p *RefVec) ResetLen()

func (*RefVec) Resize

func (p *RefVec) Resize(n uint)

func (*RefVec) Validate

func (p *RefVec) Validate(i uint) *Ref

func (*RefVec) ValidateInit

func (p *RefVec) ValidateInit(i uint, zero Ref) *Ref

func (*RefVec) ValidateLen

func (p *RefVec) ValidateLen(l uint) (v *Ref)

func (*RefVec) ValidateLenInit

func (p *RefVec) ValidateLenInit(l uint, zero Ref) (v *Ref)

type U16

type U16 uint16

func (*U16) Offset

func (r *U16) Offset() uintptr

type U32

type U32 uint32

func (*U32) Get

func (r *U32) Get(base uintptr) uint32

func (*U32) Offset

func (r *U32) Offset() uintptr

func (*U32) Set

func (r *U32) Set(base uintptr, x uint32)

type U8

type U8 uint8

Generic 8/16/32 bit registers

func (*U8) Offset

func (r *U8) Offset() uintptr

Byte offsets

Directories

Path Synopsis
Generic devices on PCI bus.
Generic devices on PCI bus.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL