The Pedigree Project 0.1
Classes | Public Member Functions | Static Public Member Functions | Private Types | Private Member Functions | Static Private Member Functions | Private Attributes | Static Private Attributes | Friends | List of all members
UsbPnP Class Reference
+ Collaboration diagram for UsbPnP:

Classes

struct  ActiveInvocation
 
struct  CallbackItem
 
class  Registration
 

Public Member Functions

MUST_USE_RESULT bool registerCallback (uint16_t nVendorId, uint16_t nProductId, callback_t callback, Registration &registration)
 Register a callback for the given vendor and product IDs.
 
MUST_USE_RESULT bool registerCallback (uint8_t nClass, uint8_t nSubclass, uint8_t nProtocol, callback_t callback, Registration &registration)
 Register a callback for the given class, subclass and protocol numbers.
 
bool probeDevice (Device *pDeviceBase)
 Tries to find a suitable driver for the given USB device.
 

Static Public Member Functions

static UsbPnP & instance ()
 Singleton design.
 

Private Types

typedef UsbDevice *(* callback_t) (UsbDevice *)
 Callback function type.
 

Private Member Functions

bool probeDeviceAdmitted (UsbDeviceContainer *container, OperationBarrier::Lease &lease)
 
Device * doProbe (Device *pDeviceBase)
 
bool registerCallbackItem (CallbackItem *item, Registration &registration, bool reprobe)
 
bool unregisterCallback (CallbackItem *item)
 
void retireBindings (CallbackItem *item, bool reprobe)
 
void publishBinding (CallbackItem *item, UsbDeviceContainer *container, OperationBarrier::Lease &binding)
 
void detachBinding (UsbDeviceContainer *container)
 
void unlinkBindingLocked (UsbDeviceContainer *container)
 
bool acquireCallback (UsbDevice *device, size_t afterSequence, CallbackItem *&item, callback_t &callback, size_t &sequence, ActiveInvocation &invocation)
 
void finishCallback (CallbackItem *item, ActiveInvocation &invocation)
 
bool isCallbackContext (void *owner) const
 
bool inCurrentCallbackContext ()
 
void reprobeDevices (Device *pParent)
 Goes down the device tree, reprobing every USB device.
 

Static Private Member Functions

static void * currentInvocationOwner ()
 

Private Attributes

CallbackItem * m_FirstCallback
 
CallbackItem * m_LastCallback
 
size_t m_CallbackCount
 
Spinlock m_CallbackLock
 
Mutex m_BindingLock
 
size_t m_NextCallbackSequence
 
ActiveInvocation * m_ActiveInvocations
 

Static Private Attributes

static UsbPnP m_Instance
 Static instance.
 

Friends

class UsbHub
 
class UsbDeviceContainer
 

Detailed Description

Definition at line 45 of file UsbPnP.h.

Member Typedef Documentation

◆ callback_t

typedef UsbDevice *(* UsbPnP::callback_t) (UsbDevice *)
private

Callback function type.

Definition at line 50 of file UsbPnP.h.

Constructor & Destructor Documentation

◆ UsbPnP()

UsbPnP::UsbPnP ( )

Definition at line 156 of file UsbPnP.cc.

◆ ~UsbPnP()

UsbPnP::~UsbPnP ( )
virtual

Definition at line 165 of file UsbPnP.cc.

Member Function Documentation

◆ acquireCallback()

bool UsbPnP::acquireCallback ( UsbDevice *  device,
size_t  afterSequence,
CallbackItem *&  item,
callback_t &  callback,
size_t &  sequence,
ActiveInvocation &  invocation 
)
private

Definition at line 305 of file UsbPnP.cc.

◆ currentInvocationOwner()

void * UsbPnP::currentInvocationOwner ( )
staticprivate

Definition at line 367 of file UsbPnP.cc.

◆ detachBinding()

void UsbPnP::detachBinding ( UsbDeviceContainer *  container)
private

Definition at line 498 of file UsbPnP.cc.

◆ doProbe()

Device * UsbPnP::doProbe ( Device *  pDeviceBase)
private

Probes a device and returns the new device if it was successfully loaded and owned by a driver, or the original pointer otherwise.

Definition at line 218 of file UsbPnP.cc.

References UsbDevice::getInterface(), Device::getType(), UsbDevice::getUsbState(), UsbDevice::initialiseDriver(), UsbDeviceContainer::replaceUsbDevice(), OperationBarrier::tryAcquire(), and Device::UsbContainer.

◆ finishCallback()

void UsbPnP::finishCallback ( CallbackItem *  item,
ActiveInvocation &  invocation 
)
private

Definition at line 352 of file UsbPnP.cc.

◆ inCurrentCallbackContext()

bool UsbPnP::inCurrentCallbackContext ( )
private

Definition at line 383 of file UsbPnP.cc.

◆ instance()

static UsbPnP & UsbPnP::instance ( )
inlinestatic

Singleton design.

Definition at line 95 of file UsbPnP.h.

◆ isCallbackContext()

bool UsbPnP::isCallbackContext ( void *  owner) const
private

Definition at line 373 of file UsbPnP.cc.

◆ probeDevice()

bool UsbPnP::probeDevice ( Device *  pDeviceBase)

Tries to find a suitable driver for the given USB device.

Definition at line 198 of file UsbPnP.cc.

References Device::getType(), and Device::UsbContainer.

◆ probeDeviceAdmitted()

bool UsbPnP::probeDeviceAdmitted ( UsbDeviceContainer *  container,
OperationBarrier::Lease &  lease 
)
private

Definition at line 208 of file UsbPnP.cc.

◆ publishBinding()

void UsbPnP::publishBinding ( CallbackItem *  item,
UsbDeviceContainer *  container,
OperationBarrier::Lease &  binding 
)
private

Definition at line 457 of file UsbPnP.cc.

◆ registerCallback() [1/2]

bool UsbPnP::registerCallback ( uint16_t  nVendorId,
uint16_t  nProductId,
callback_t  callback,
Registration &  registration 
)

Register a callback for the given vendor and product IDs.

Definition at line 443 of file UsbPnP.cc.

◆ registerCallback() [2/2]

bool UsbPnP::registerCallback ( uint8_t  nClass,
uint8_t  nSubclass,
uint8_t  nProtocol,
callback_t  callback,
Registration &  registration 
)

Register a callback for the given class, subclass and protocol numbers.

Definition at line 450 of file UsbPnP.cc.

◆ registerCallbackItem()

bool UsbPnP::registerCallbackItem ( CallbackItem *  item,
Registration &  registration,
bool  reprobe 
)
private

Definition at line 418 of file UsbPnP.cc.

◆ reprobeDevices()

void UsbPnP::reprobeDevices ( Device *  pParent)
private

Goes down the device tree, reprobing every USB device.

Definition at line 388 of file UsbPnP.cc.

References List< T, nodePoolSize >::count(), Device::foreach(), Device::getType(), List< T, nodePoolSize >::popFront(), List< T, nodePoolSize >::pushBack(), and Device::UsbContainer.

◆ retireBindings()

void UsbPnP::retireBindings ( CallbackItem *  item,
bool  reprobe 
)
private

Definition at line 505 of file UsbPnP.cc.

◆ unlinkBindingLocked()

void UsbPnP::unlinkBindingLocked ( UsbDeviceContainer *  container)
private

Definition at line 474 of file UsbPnP.cc.

◆ unregisterCallback()

bool UsbPnP::unregisterCallback ( CallbackItem *  item)
private

Definition at line 567 of file UsbPnP.cc.

Friends And Related Symbol Documentation

◆ UsbDeviceContainer

friend class UsbDeviceContainer
friend

Definition at line 124 of file UsbPnP.h.

◆ UsbHub

friend class UsbHub
friend

Definition at line 123 of file UsbPnP.h.

Member Data Documentation

◆ m_ActiveInvocations

ActiveInvocation* UsbPnP::m_ActiveInvocations
private

Definition at line 163 of file UsbPnP.h.

◆ m_BindingLock

Mutex UsbPnP::m_BindingLock
private

Definition at line 161 of file UsbPnP.h.

◆ m_CallbackCount

size_t UsbPnP::m_CallbackCount
private

Definition at line 159 of file UsbPnP.h.

◆ m_CallbackLock

Spinlock UsbPnP::m_CallbackLock
private

Definition at line 160 of file UsbPnP.h.

◆ m_FirstCallback

CallbackItem* UsbPnP::m_FirstCallback
private

Definition at line 157 of file UsbPnP.h.

◆ m_Instance

UsbPnP UsbPnP::m_Instance
staticprivate

Static instance.

Definition at line 152 of file UsbPnP.h.

◆ m_LastCallback

CallbackItem* UsbPnP::m_LastCallback
private

Definition at line 158 of file UsbPnP.h.

◆ m_NextCallbackSequence

size_t UsbPnP::m_NextCallbackSequence
private

Definition at line 162 of file UsbPnP.h.


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