dxd - dynax driver framework 2.1.0d73
cross platform open source driver development framework
Loading...
Searching...
No Matches
dxd::multichannel::stream< channel_t > Class Template Referenceabstract

generic kernel multichannel stream More...

#include <dxd_stream.h>

+ Inheritance diagram for dxd::multichannel::stream< channel_t >:
+ Collaboration diagram for dxd::multichannel::stream< channel_t >:

Classes

class  clock
 
class  in
 kernel stream mapped client reference counted in channel buffers More...
 
class  umap
 stream user mapping More...
 

Public Member Functions

os_result attach (unsigned int iosize, channel_t **channel[2])
 attach user client owned out channels
 
os_result attach (unsigned int iosize, const uint64_t *channel_map)
 create stream local in channels
 
void detach (channel_t **channel[2])
 
void detach (const uint64_t *channel_map)
 
template<typename return_t = os_result, typename exec_t >
return_t each (exec_t exec)
 
void free ()
 kernel map free
 
void free ()
 
os_result initialize (::IOMemoryDescriptor *iokit_memory_descriptor)
 IOKit memory initializer.
 
os_result initialize (::IOMemoryDescriptor *iokit_memory_descriptor)
 IOKit memory initializer.
 
os_result initialize (::IOMemoryDescriptor *iokit_memory_descriptor, size_t offset, size_t size)
 IOKit memory initializer.
 
os_result initialize (::IOMemoryDescriptor *iokit_memory_descriptor, size_t offset, size_t size)
 IOKit memory initializer.
 
os_result initialize (::IOMemoryDescriptor *iokit_memory_descriptor, size_t offset=0)
 IOKit kernel map initializer.
 
os_result initialize (const void *data, size_t size)
 IOKit memory initializer.
 
os_result initialize (const void *data, size_t size)
 IOKit memory initializer.
 
os_result initialize (const::MDL *mdl)
 
os_result initialize (const::MDL *mdl)
 
os_result initialize (const::MDL *mdl, size_t offset, size_t size)
 
os_result initialize (const::MDL *mdl, size_t offset, size_t size)
 
os_result initialize (size_t size, unsigned int limit=64, unsigned int alignment=0, bool contigous=false)
 IOKit buffer initializer.
 
os_result initialize (size_t size, unsigned int limit=64, unsigned int alignment=0, bool contigous=false)
 
os_result initialize (void *data, size_t size)
 IOKit memory initializer.
 
os_result initialize (void *data, size_t size)
 IOKit memory initializer.
 
 operator const dx::circular * () const
 
 operator const::IOMemoryDescriptor * () const
 IOKit IOMemoryDescriptor* implicit cast.
 
 operator const::IOMemoryDescriptor * () const
 IOKit IOMemoryDescriptor* implicit cast.
 
 operator const::IOMemoryMap * () const
 
 operator dx::circular * () const
 
 operator uint64_t () const
 IOKit physical address (only relevant for contigous memory)
 
 operator uint64_t () const
 IOKit physical address (only relevant for contigous memory)
 
dx::circularoperator-> ()
 
const dx::circularoperator-> () const
 operator to use mapping like pointer
 
 operator::IOMemoryDescriptor * ()
 
 operator::IOMemoryDescriptor * ()
 
 operator::IOMemoryMap * ()
 
 operator::MDL * () const
 
 operator::MDL * () const
 
item_t * pop ()
 pop item from head
 
doubly::linked::abstract::eventpop (doubly::linked::abstract::event *item)
 pop item
 
listprint ()
 
doubly::linked::abstract::eventpush (doubly::linked::abstract::event *item)
 push item to head
 
item_t * push (item_t *item)
 push item to head
 
template<typename reference_t >
int release (reference_t &reference)
 
void retain ()
 
void rx (int64_t timestamp)
 
os_result signal ()
 
size_t size () const
 IOKit memory size.
 
size_t size () const
 IOKit memory size.
 
size_t size () const
 kernel mapping size
 
virtual os_result start (bool force=false)=0
 
virtual os_result stop (bool force=false)=0
 
void tx (int64_t timestamp)
 

Public Attributes

struct { 
 
   uint64_t   advance = 0 
 
   dxd::buffer< dx::user >   buffer {sizeof(dx::stream::channel::control)} 
 
   bool   in 
 
   unsigned int   iosize = 0 
 
   dxd::map< dx::kernel, dx::stream::channel::control >   map {buffer
 
control 
 
atomic< int > references {}
 
os_result status
 IOKit memory status.
 
os_result status =not_initialized
 IOKit memory status.
 
os_result status
 status of mapping object
 

Protected Member Functions

void __lock ()
 
void __lock ()
 
bool __trylock ()
 
void __unlock ()
 
void __unlock ()
 
 operator const::KSPIN_LOCK & () const
 
 operator const::KSPIN_LOCK * () const
 
 operator::KSPIN_LOCK & ()
 
 operator::KSPIN_LOCK * ()
 
 ~stream ()
 

Protected Attributes

dx::circular_vm
 kernel virtual address mapping
 
union { 
 
   channel_t **   in [2] 
 in channel array [switch] [channels] More...
 
   channel_t *const *const *volatile   out [2] 
 client out channel array [switch] [client] -> umap out channels [channels] More...
 
cache 
 
unsigned int channels = 0
 stream channels
 
dxd::multichannel::stream::in * in [2]
 
::IOMemoryMap * iokit_memory_map
 
atomic< int > out = 0
 client outs atached
 
os_result status =not_initialized
 

Detailed Description

template<typename channel_t = int>
class dxd::multichannel::stream< channel_t >

generic kernel multichannel stream

Constructor & Destructor Documentation

◆ ~stream()

template<typename channel_t = int>
dxd::multichannel::stream< channel_t >::~stream ( )
inlineprotectedvirtual

Reimplemented from dxd::stream.

Member Function Documentation

◆ __lock() [1/2]

void dxd::spinlock::__lock ( )
inlineprotectedinherited

◆ __lock() [2/2]

void dxd::spinlock::__lock ( )
inlineprotectedinherited

◆ __trylock()

bool dxd::spinlock::__trylock ( )
inlineprotectedinherited

◆ __unlock() [1/2]

void dxd::spinlock::__unlock ( )
inlineprotectedinherited

◆ __unlock() [2/2]

void dxd::spinlock::__unlock ( )
inlineprotectedinherited

◆ attach() [1/2]

template<typename channel_t = int>
os_result dxd::multichannel::stream< channel_t >::attach ( unsigned int iosize,
channel_t ** channel[2] )
inline

attach user client owned out channels

◆ attach() [2/2]

template<typename channel_t = int>
os_result dxd::multichannel::stream< channel_t >::attach ( unsigned int iosize,
const uint64_t * channel_map )
inline

create stream local in channels

◆ detach() [1/2]

template<typename channel_t = int>
void dxd::multichannel::stream< channel_t >::detach ( channel_t ** channel[2])
inline

◆ detach() [2/2]

template<typename channel_t = int>
void dxd::multichannel::stream< channel_t >::detach ( const uint64_t * channel_map)
inline

◆ each()

template<typename item_t = link>
template<typename return_t = os_result, typename exec_t >
return_t dxd::linked::list< item_t >::each ( exec_t exec)
inlineinherited

◆ free() [1/2]

void dxd::map< scope_t, dx::circular >::free ( )
inlineinherited

kernel map free

Checks if kernel mapping already exists and

does not call unmap(): IOMemoryMap instances will unmap themselves upon free, ie. when the last client with a reference calls release. unmap() forces the IOMemoryMap to destroy the mapping it represents, regardless of the number of clients. releases the map object.

◆ free() [2/2]

void dxd::buffer< scope_t, 64 , 0 , false >::free ( )
inlineinherited

◆ initialize() [1/15]

os_result dxd::memory< scope_t >::initialize ( ::IOMemoryDescriptor * iokit_memory_descriptor)
inlineinherited

IOKit memory initializer.

◆ initialize() [2/15]

template<dx::scope scope_t = dx::kernel>
os_result dxd::memory< scope_t >::initialize ( ::IOMemoryDescriptor * iokit_memory_descriptor)
inlineinherited

IOKit memory initializer.

+ Here is the call graph for this function:

◆ initialize() [3/15]

os_result dxd::memory< scope_t >::initialize ( ::IOMemoryDescriptor * iokit_memory_descriptor,
size_t offset,
size_t size )
inlineinherited

IOKit memory initializer.

◆ initialize() [4/15]

template<dx::scope scope_t = dx::kernel>
os_result dxd::memory< scope_t >::initialize ( ::IOMemoryDescriptor * iokit_memory_descriptor,
size_t offset,
size_t size )
inlineinherited

IOKit memory initializer.

+ Here is the call graph for this function:

◆ initialize() [5/15]

os_result dxd::map< scope_t, dx::circular >::initialize ( ::IOMemoryDescriptor * iokit_memory_descriptor,
size_t offset = 0 )
inlineinherited

IOKit kernel map initializer.

map<kernel> maps an IOMemoryDescriptor (typically cast of a dxd::memory or buffer class) into the kernel address space.

https://developer.apple.com/library/content/qa/qa1197/_index.html

Allows re-initialization.

Checks buffer object,

maps the buffer into the kernel (will fail if offset is given)

and obtains a kernel virtual address (apply offset here instead).

Parameters
iokit_memory_descriptorIOMemoryDescriptor to be mapped into the kernel address space
offsetoffset into memory descriptor to create mapping

◆ initialize() [6/15]

template<dx::scope scope_t = dx::kernel>
os_result dxd::memory< scope_t >::initialize ( const void * data,
size_t size )
inherited

IOKit memory initializer.

Parameters
datavirtual base address of range to create memory descriptor from
sizesize of range to create memory descriptor from
+ Here is the caller graph for this function:

◆ initialize() [7/15]

os_result dxd::memory< scope_t >::initialize ( const void * data,
size_t size )
inherited

IOKit memory initializer.

Parameters
datavirtual base address of range to create memory descriptor from
sizesize of range to create memory descriptor from

◆ initialize() [8/15]

template<dx::scope scope_t = dx::kernel>
os_result dxd::memory< scope_t >::initialize ( const::MDL * mdl)
inlineinherited

in contrast to an IOKit MemoryDescriptor MDLs do not support reference counting. take care when creating a dxd::memory from a dxd::buffer: although the dxd::memory holds an MDL to the buffer the buffer itself is not retained after the dxd::buffer is released!

+ Here is the call graph for this function:

◆ initialize() [9/15]

os_result dxd::memory< scope_t >::initialize ( const::MDL * mdl)
inlineinherited

in contrast to an IOKit MemoryDescriptor MDLs do not support reference counting. take care when creating a dxd::memory from a dxd::buffer: although the dxd::memory holds an MDL to the buffer the buffer itself is not retained after the dxd::buffer is released!

◆ initialize() [10/15]

template<dx::scope scope_t = dx::kernel>
os_result dxd::memory< scope_t >::initialize ( const::MDL * mdl,
size_t offset,
size_t size )
inlineinherited
+ Here is the call graph for this function:

◆ initialize() [11/15]

os_result dxd::memory< scope_t >::initialize ( const::MDL * mdl,
size_t offset,
size_t size )
inlineinherited

◆ initialize() [12/15]

os_result dxd::buffer< scope_t, 64 , 0 , false >::initialize ( size_t size,
unsigned int limit = limit_t,
unsigned int alignment = alignment_t,
bool contigous = contigous_t )
inlineinherited

IOKit buffer initializer.

Allows re-initialization.

Creates a buffer and associated memory descriptor.

Wires down the backing store memory.

Parameters
sizesize to be alloced by buffer object
limitlimit physical memory address space
alignmentenforce physical memory alignment
contigousenforce contiguos physical memory

◆ initialize() [13/15]

os_result dxd::buffer< scope_t, 64 , 0 , false >::initialize ( size_t size,
unsigned int limit = limit_t,
unsigned int alignment = alignment_t,
bool contigous = contigous_t )
inlineinherited

Allows re-initialization

Parameters
sizesize to be alloced by buffer object
limitlimit physical memory address space
alignmentenforce physical memory alignment
contigousenforce contiguos physical memory

◆ initialize() [14/15]

template<dx::scope scope_t = dx::kernel>
os_result dxd::memory< scope_t >::initialize ( void * data,
size_t size )
inherited

IOKit memory initializer.

Parameters
datavirtual base address of range to create memory descriptor from
sizesize of range to create memory descriptor from

◆ initialize() [15/15]

os_result dxd::memory< scope_t >::initialize ( void * data,
size_t size )
inherited

IOKit memory initializer.

Parameters
datavirtual base address of range to create memory descriptor from
sizesize of range to create memory descriptor from

◆ operator const dx::circular *()

dxd::map< scope_t, dx::circular >::operator const dx::circular * ( ) const
inlineinherited

◆ operator const::IOMemoryDescriptor *() [1/2]

dxd::memory< scope_t >::operator const::IOMemoryDescriptor * ( ) const
inlineinherited

IOKit IOMemoryDescriptor* implicit cast.

◆ operator const::IOMemoryDescriptor *() [2/2]

template<dx::scope scope_t = dx::kernel>
dxd::memory< scope_t >::operator const::IOMemoryDescriptor * ( ) const
inlineinherited

IOKit IOMemoryDescriptor* implicit cast.

◆ operator const::IOMemoryMap *()

dxd::map< scope_t, dx::circular >::operator const::IOMemoryMap * ( ) const
inlineinherited

◆ operator const::KSPIN_LOCK &()

dxd::spinlock::operator const::KSPIN_LOCK & ( ) const
inlineinherited

◆ operator const::KSPIN_LOCK *()

dxd::spinlock::operator const::KSPIN_LOCK * ( ) const
inlineinherited

◆ operator dx::circular *()

dxd::map< scope_t, dx::circular >::operator dx::circular * ( ) const
inlineinherited

◆ operator uint64_t() [1/2]

dxd::memory< scope_t >::operator uint64_t ( ) const
inlineinherited

IOKit physical address (only relevant for contigous memory)

◆ operator uint64_t() [2/2]

template<dx::scope scope_t = dx::kernel>
dxd::memory< scope_t >::operator uint64_t ( ) const
inlineinherited

IOKit physical address (only relevant for contigous memory)

◆ operator->() [1/2]

dx::circular * dxd::map< scope_t, dx::circular >::operator-> ( )
inlineinherited

◆ operator->() [2/2]

const dx::circular * dxd::map< scope_t, dx::circular >::operator-> ( ) const
inlineinherited

operator to use mapping like pointer

◆ operator::IOMemoryDescriptor *() [1/2]

template<dx::scope scope_t = dx::kernel>
dxd::memory< scope_t >::operator::IOMemoryDescriptor * ( )
inlineinherited

◆ operator::IOMemoryDescriptor *() [2/2]

dxd::memory< scope_t >::operator::IOMemoryDescriptor * ( )
inlineinherited

◆ operator::IOMemoryMap *()

dxd::map< scope_t, dx::circular >::operator::IOMemoryMap * ( )
inlineinherited

◆ operator::KSPIN_LOCK &()

dxd::spinlock::operator::KSPIN_LOCK & ( )
inlineinherited

◆ operator::KSPIN_LOCK *()

dxd::spinlock::operator::KSPIN_LOCK * ( )
inlineinherited

◆ operator::MDL *() [1/2]

dxd::memory< scope_t >::operator::MDL * ( ) const
inlineinherited

◆ operator::MDL *() [2/2]

template<dx::scope scope_t = dx::kernel>
dxd::memory< scope_t >::operator::MDL * ( ) const
inlineinherited

◆ pop() [1/2]

template<typename item_t = link>
item_t * dxd::linked::list< item_t >::pop ( )
inlineinherited

pop item from head

+ Here is the caller graph for this function:

◆ pop() [2/2]

◆ print()

◆ push() [1/2]

◆ push() [2/2]

template<typename item_t = link>
item_t * dxd::linked::list< item_t >::push ( item_t * item)
inlineinherited

push item to head

+ Here is the caller graph for this function:

◆ release()

template<typename reference_t >
int dxd::referenced::release ( reference_t & reference)
inlineinherited

◆ retain()

void dxd::referenced::retain ( )
inlineinherited

◆ rx()

template<typename channel_t = int>
void dxd::multichannel::stream< channel_t >::rx ( int64_t timestamp)
inline
+ Here is the call graph for this function:

◆ signal()

os_result dxd::broadcast::signal ( )
inlineinherited
+ Here is the call graph for this function:

◆ size() [1/3]

template<dx::scope scope_t = dx::kernel>
size_t dxd::memory< scope_t >::size ( ) const
inlineinherited

IOKit memory size.

+ Here is the caller graph for this function:

◆ size() [2/3]

size_t dxd::memory< scope_t >::size ( ) const
inlineinherited

IOKit memory size.

◆ size() [3/3]

size_t dxd::map< scope_t, dx::circular >::size ( ) const
inlineinherited

kernel mapping size

◆ start()

virtual os_result dxd::stream::start ( bool force = false)
pure virtualinherited

◆ stop()

virtual os_result dxd::stream::stop ( bool force = false)
pure virtualinherited

Implemented in dxd::usb_stream_device::stream.

+ Here is the caller graph for this function:

◆ tx()

template<typename channel_t = int>
void dxd::multichannel::stream< channel_t >::tx ( int64_t timestamp)
inline
+ Here is the call graph for this function:

Member Data Documentation

◆ _vm

dx::circular * dxd::map< scope_t, dx::circular >::_vm
protectedinherited

kernel virtual address mapping

◆ advance

template<typename channel_t = int>
uint64_t dxd::multichannel::stream< channel_t >::advance = 0

◆ buffer

template<typename channel_t = int>
dxd::buffer<dx::user> dxd::multichannel::stream< channel_t >::buffer {sizeof(dx::stream::channel::control)}

◆ [union]

union { ... } dxd::multichannel::stream< channel_t >::cache

◆ channels

template<typename channel_t = int>
unsigned int dxd::multichannel::stream< channel_t >::channels = 0
protected

stream channels

◆ [struct]

struct { ... } dxd::multichannel::stream< channel_t >::control

◆ in [1/3]

template<typename channel_t = int>
dxd::multichannel::stream::in* dxd::multichannel::stream< channel_t >::in[2]
protected

◆ in [2/3]

template<typename channel_t = int>
channel_t** dxd::multichannel::stream< channel_t >::in[2]

in channel array [switch] [channels]

◆ in [3/3]

template<typename channel_t = int>
bool dxd::multichannel::stream< channel_t >::in

◆ iokit_memory_map

::IOMemoryMap* dxd::map< scope_t, dx::circular >::iokit_memory_map
protectedinherited

◆ iosize

template<typename channel_t = int>
unsigned int dxd::multichannel::stream< channel_t >::iosize = 0

◆ map

template<typename channel_t = int>
dxd::map<dx::kernel, dx::stream::channel::control> dxd::multichannel::stream< channel_t >::map {buffer}

◆ out [1/2]

template<typename channel_t = int>
atomic<int> dxd::multichannel::stream< channel_t >::out = 0
protected

client outs atached

◆ out [2/2]

template<typename channel_t = int>
channel_t* const* const* volatile dxd::multichannel::stream< channel_t >::out[2]

client out channel array [switch] [client] -> umap out channels [channels]

◆ references

atomic<int> dxd::referenced::references {}
inherited

◆ status [1/4]

template<dx::scope scope_t = dx::kernel>
os_result dxd::memory< scope_t >::status =not_initialized
inherited

IOKit memory status.

status of memory object

◆ status [2/4]

os_result dxd::memory< scope_t >::status
inherited

IOKit memory status.

status of memory object

◆ status [3/4]

os_result dxd::map< scope_t, dx::circular >::status
inherited

status of mapping object

◆ status [4/4]

os_result dxd::spinlock::status =not_initialized
inherited

The documentation for this class was generated from the following file:

(c) copyright 2009 dynamic acoustics e.U. generated on Fri Nov 15 2024

a closed source license may be obtained by requesting a written permission from dynamic acoustics e.U.
however - governmental use generally and military use especially is strictly prohibited though.