dxd - dynax driver framework 2.1.0d48
cross platform open source driver development framework
Loading...
Searching...
No Matches
dxd::ppc Class Reference

PPC device. More...

#include <dxd_pci_ppc.h>

+ Inheritance diagram for dxd::ppc:
+ Collaboration diagram for dxd::ppc:

Public Types

enum  eumb {
  omisr = 0x030 , omimr = 0x034 , ifpqr = 0x040 , ofpqr = 0x044 ,
  odbr = 0x060 , idbr = 0x068 , itwr = 0x310
}
 embedded utility memory block More...
 
enum  i2o { om0i = LE32(0x01) , om1i = LE32(0x02) , odi = LE32(0x08) , opqi = LE32(0x20) }
 

Public Member Functions

template<class client_t = ::IOService, typename return_t = os_result, typename exec_arg_t , typename exec_t >
return_t each_child (exec_arg_t exec_arg, exec_t exec)
 apply executor functor for each child
 
template<class client_t = ::IOUserClient, typename return_t = os_result, typename exec_arg_t , typename exec_t >
return_t each_client (exec_arg_t exec_arg, exec_t exec)
 apply executor functor for each user client
 
volatile unsigned int * eumb (eumb offset)
 pointer to eumb register
 
template<endian endian_t>
void fill32 (unsigned int pattern, unsigned int inbound, size_t size32)
 fill ppc inbound range with 32bit pattern
 
os_result i2o (const unsigned int *msg, size_t size)
 i2o message send
 
template<typename tx_t , typename rx_t >
os_result ioctl (unsigned int ioctl, const tx_t &tx, rx_t &rx)
 convenience ioctl accessor for direct inter-kext IOCTL
 
virtual os_result ioctl (unsigned int ioctl, const void *in, size_t size_in, void *out, size_t size_out, size_t &size)
 device IOCTL handler
 
os_result notify_clients ()
 
 operator::IOPCIDevice * () const
 IOKit IOPCIDevice* implicit cast.
 
template<typename type_t >
os_result property (const char *key, type_t &value) const
 provider property request
 
template<typename type_t >
os_result query (const char *key, type_t &value)
 device property request
 
template<>
os_result query (const char *key, unsigned int &value)
 (defined(doxygen)||defined(DXD_EXTERN))
 
template<endian endian_t>
void read32 (unsigned int *dst, unsigned int inbound, size_t size32)
 read endian corrected 32bit values from ppc
 
template<endian endian_t>
unsigned int read32 (unsigned int inbound)
 read the endian corrected 32bit value from ppc
 
os_result set (const char *key, unsigned int value)
 
template<endian endian_t>
void write32 (const unsigned int *src, unsigned int inbound, size_t size32)
 write endian corrected 32bit values to ppc
 
template<endian endian_t>
void write32 (unsigned int src, unsigned int inbound)
 write endian corrected 32bit value to ppc
 

Protected Member Functions

void conclude () override
 IOKit: Main driver finalization.
 
virtual os_result irq_disable ()
 IOKit: disable hardware irq handler.
 
virtual os_result irq_enable ()
 IOKit: enable hardware irq handler.
 
virtual os_result isr_odi (unsigned int dbr)
 outbound doorbell interrupt handler
 
virtual os_result isr_opqi (unsigned int fpqr)
 outbound messsage interrupt handler
 
os_result launch () override
 IOKit: Main driver entry.
 

Protected Attributes

resources hw
 

Detailed Description

PPC device.

This class provides embedded PPC PCI device driver functionality.

Member Enumeration Documentation

◆ eumb

embedded utility memory block

Register set for use in eumb function to retrieve pointer of device register.

Enumerator
omisr 

outbound message interrupt service indication register

omimr 

outbound message interrupt mask register

ifpqr 

inbound FIFO queue port register

ofpqr 

outbound FIFO queue port register

odbr 

outbound doorbell message register

idbr 

inbound doorbell message register

itwr 

inbound translation window register

◆ i2o

Enumerator
om0i 

outbound message interrupt #0 indication

om1i 

outbound message interrupt #1 indication

odi 

outbound doorbell message interrupt indication

opqi 

Member Function Documentation

◆ conclude()

void dxd::pci::conclude ( )
inlineoverrideprotectedvirtualinherited

IOKit: Main driver finalization.

conclude() is one of the driver-supplied routines that is called before a driver is to be removed. It is responsible for freeing all resource the driver acquired during launch().

Reimplemented from dxd::device.

◆ each_child()

template<class client_t = ::IOService, typename return_t = os_result, typename exec_arg_t , typename exec_t >
return_t dxd::device::each_child ( exec_arg_t exec_arg,
exec_t exec )
inlineinherited

apply executor functor for each child

◆ each_client()

template<class client_t = ::IOUserClient, typename return_t = os_result, typename exec_arg_t , typename exec_t >
return_t dxd::device::each_client ( exec_arg_t exec_arg,
exec_t exec )
inlineinherited

apply executor functor for each user client

◆ eumb()

volatile unsigned int * dxd::ppc::eumb ( eumb offset)
inline

pointer to eumb register

Use with eumb register set for use in eumb function to retrieve pointer of device register.

◆ fill32()

template<endian endian_t>
void dxd::ppc::fill32 ( unsigned int pattern,
unsigned int inbound,
size_t size32 )
inline

fill ppc inbound range with 32bit pattern

Fill the ppc inbound range with a 32bit pattern. Since this function needs to access the inbound translation window this call blocks.

Parameters
pattern32bit pattern to be written to inbound ppc range
inboundppc inbound range start address to be filled
size32amount of 32bit values written to inbound range
+ Here is the call graph for this function:

◆ i2o()

os_result dxd::ppc::i2o ( const unsigned int * msg,
size_t size )
inline

i2o message send

Copies the message contents to PCI window and

writes inbound queue to post the message.

◆ ioctl() [1/2]

template<typename tx_t , typename rx_t >
os_result dxd::device::ioctl ( unsigned int ioctl,
const tx_t & tx,
rx_t & rx )
inlineinherited

convenience ioctl accessor for direct inter-kext IOCTL

◆ ioctl() [2/2]

virtual os_result dxd::device::ioctl ( unsigned int ioctl,
const void * in,
size_t size_in,
void * out,
size_t size_out,
size_t & size )
inlinevirtualinherited

device IOCTL handler

virtual ioctl() gets called by the dynax driver framework for device IOCTL handling.

remark: this is rarely done. usually IOCTLs are handled in the user client derivate.

  • dx::version
Parameters
ioctlIOCTL
inbuffer pointer containing data from user mode
size_insize of the buffer containing data from user mode
outbuffer pointer accepting data to be returned to user mode
size_outsize of the buffer accepting data to be returned to user mode
sizeactual size of data to be returned to user mode

Reimplemented in dxd::usb_stream_device.

+ Here is the caller graph for this function:

◆ irq_disable()

virtual os_result dxd::pci::irq_disable ( )
inlineprotectedvirtualinherited

IOKit: disable hardware irq handler.

◆ irq_enable()

virtual os_result dxd::pci::irq_enable ( )
inlineprotectedvirtualinherited

IOKit: enable hardware irq handler.

◆ isr_odi()

virtual os_result dxd::ppc::isr_odi ( unsigned int dbr)
inlineprotectedvirtual

outbound doorbell interrupt handler

Parameters
dbrdoorbell register

◆ isr_opqi()

virtual os_result dxd::ppc::isr_opqi ( unsigned int fpqr)
inlineprotectedvirtual

outbound messsage interrupt handler

Parameters
fpqrFIFO pointer queue register

◆ launch()

os_result dxd::ppc::launch ( )
inlineoverrideprotectedvirtual

IOKit: Main driver entry.

launch() is one of the dynax driver frameword-supplied routines that is called after this driver is loaded. It is responsible for initializing the driver.

Checks if there are exactly two PCI memory windows.

Reimplemented from dxd::pci.

+ Here is the call graph for this function:

◆ notify_clients()

os_result dxd::device::notify_clients ( )
inlineinherited

◆ operator::IOPCIDevice *()

dxd::pci::operator::IOPCIDevice * ( ) const
inlineinherited

IOKit IOPCIDevice* implicit cast.

◆ property()

template<typename type_t >
os_result dxd::device::property ( const char * key,
type_t & value ) const
inlineinherited

provider property request

try if property is an OSString

or, try to get it as OSData

+ Here is the caller graph for this function:

◆ query() [1/2]

template<typename type_t >
os_result dxd::device::query ( const char * key,
type_t & value )
inherited

device property request

device string property request

Todo
move into property class

try if property is an OSString

get it as OSData

◆ query() [2/2]

template<>
os_result dxd::device::query ( const char * key,
unsigned int & value )
inherited

(defined(doxygen)||defined(DXD_EXTERN))

device integer property request

◆ read32() [1/2]

template<endian endian_t>
void dxd::ppc::read32 ( unsigned int * dst,
unsigned int inbound,
size_t size32 )
inline

read endian corrected 32bit values from ppc

Return the endian corrected 32bit values from ppc device. Since this function needs to access the inbound translation window this call blocks.

Parameters
dstbuffer to accept read data
inboundppc inbound address to read from
size32amount of 32bit words to read
+ Here is the call graph for this function:

◆ read32() [2/2]

template<endian endian_t>
unsigned int dxd::ppc::read32 ( unsigned int inbound)
inline

read the endian corrected 32bit value from ppc

Return the endian corrected 32bit value from ppc device. Since this function needs to access the inbound translation window this call blocks.

Parameters
inboundppc inbound address to read from
+ Here is the call graph for this function:

◆ set()

os_result dxd::device::set ( const char * key,
unsigned int value )
inlineinherited

◆ write32() [1/2]

template<endian endian_t>
void dxd::ppc::write32 ( const unsigned int * src,
unsigned int inbound,
size_t size32 )
inline

write endian corrected 32bit values to ppc

Writes the endian corrected 32bit values to ppc device. Since this function needs to access the inbound translation window this call blocks.

Parameters
src32bit buffer containing data to be written to ppc
inboundppc inbound destination address
size32number of 32bit values to be written to ppc
+ Here is the call graph for this function:

◆ write32() [2/2]

template<endian endian_t>
void dxd::ppc::write32 ( unsigned int src,
unsigned int inbound )
inline

write endian corrected 32bit value to ppc

Writes the endian corrected 32bit value to ppc device. Since this function needs to access the inbound translation window this call blocks.

Parameters
src32bit value containing data to be written to ppc
inboundppc inbound destination address
+ Here is the call graph for this function:

Member Data Documentation

◆ dbr

volatile unsigned int dxd::ppc::dbr

doorbell register

◆ hw

resources dxd::pci::hw
protectedinherited

◆ sr

volatile unsigned int dxd::ppc::sr

status register


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

(c) copyright 2009 dynamic acoustics e.U. generated on Fri Feb 23 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.