dxd - dynax driver framework  2711
cross platform open source driver development framework
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
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 More...
 
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 More...
 
volatile unsigned int * eumb (eumb offset)
 pointer to eumb register More...
 
template<endian endian_t>
void fill32 (unsigned int pattern, unsigned int inbound, size_t size32)
 fill ppc inbound range with 32bit pattern More...
 
os_result i2o (const unsigned int *msg, size_t size)
 i2o message send More...
 
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 More...
 
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 More...
 
os_result notify_clients ()
 
 operator::IOPCIDevice * () const
 IOKit IOPCIDevice* implicit cast. More...
 
template<typename type_t >
os_result property (const char *key, type_t &value) const
 provider property request More...
 
template<typename type_t >
os_result query (const char *key, type_t &value)
 device property request More...
 
template<>
os_result query (const char *key, unsigned int &value)
 (defined(doxygen)||defined(DXD_EXTERN)) More...
 
template<endian endian_t>
void read32 (unsigned int *dst, unsigned int inbound, size_t size32)
 read endian corrected 32bit values from ppc More...
 
template<endian endian_t>
unsigned int read32 (unsigned int inbound)
 read the endian corrected 32bit value from ppc More...
 
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 More...
 
template<endian endian_t>
void write32 (unsigned int src, unsigned int inbound)
 write endian corrected 32bit value to ppc More...
 

Protected Member Functions

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

Protected Attributes

resources hw
 

Detailed Description

PPC device.

This class provides embedded PPC PCI device driver functionality.

Member Enumeration Documentation

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

Enumerator
om0i 

outbound message interrupt #0 indication

om1i 

outbound message interrupt #1 indication

odi 

outbound doorbell message interrupt indication

opqi 

Member Function Documentation

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.

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

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

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.

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:

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.

+ Here is the call graph for this function:

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.

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.

+ Here is the caller graph for this function:

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

+ Here is the call graph for this function:

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

IOKit: disable hardware irq handler.

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

IOKit: enable hardware irq handler.

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

outbound doorbell interrupt handler

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

outbound messsage interrupt handler

Parameters
fpqrFIFO pointer queue register
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::device.

+ Here is the call graph for this function:

os_result dxd::device::notify_clients ( )
inlineinherited
dxd::pci::operator::IOPCIDevice * ( ) const
inlineinherited

IOKit IOPCIDevice* implicit cast.

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:

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

+ Here is the call graph for this function:

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

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

device integer property request

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:

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:

os_result dxd::device::set ( const char *  key,
unsigned int  value 
)
inlineinherited
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:

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

volatile unsigned int dxd::ppc::dbr

doorbell register

resources dxd::pci::hw
protectedinherited
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 Mon Feb 25 2019

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.