The Pedigree Project 0.1
Classes | Public Types | Public Member Functions | Static Public Member Functions | Private Member Functions | Static Private Member Functions | Private Attributes | List of all members
UsbHcd::PortChangeRequest Class Reference

#include <PortChangeRequest.h>

+ Collaboration diagram for UsbHcd::PortChangeRequest:

Classes

class  Completion
 
struct  Observation
 

Public Types

enum class  Result {
  Accepted , Coalesced , TokenBusy , QueueStopped ,
  QueueFull , InvalidPriority
}
 

Public Member Functions

bool configure (RequestQueue &queue, size_t priority, uint64_t p1=0, uint64_t p2=0, uint64_t p3=0, uint64_t p4=0, uint64_t p5=0, uint64_t p6=0, uint64_t p7=0)
 
Observation observe ()
 
void acknowledge (size_t generation)
 
void stopAfterQuiesce ()
 
void cancel (size_t generation)
 
bool isIdle () const
 
size_t observedGeneration () const
 
bool hasPublicationFailure () const
 

Static Public Member Functions

static bool canAcknowledge (Result result)
 

Private Member Functions

void released ()
 
Result publishGeneration (size_t generation, bool tryIdle)
 
bool waitUntilAcknowledged (size_t generation)
 
void consume (size_t generation)
 

Static Private Member Functions

static void advance (Atomic< size_t > &value, size_t target)
 
static Result translate (RequestQueue::PreallocatedPublishResult result)
 
static void requestReleased (void *context)
 

Private Attributes

RequestQueue::PreallocatedRequest m_Request
 
RequestQueuem_Queue
 
size_t m_Priority
 
uint64_t m_Parameters [7]
 
Atomic< size_t > m_Configured
 
Atomic< size_t > m_Observed
 
Atomic< size_t > m_Acknowledged
 
Atomic< size_t > m_Consumed
 
Atomic< size_t > m_Stopping
 
Atomic< size_t > m_ReleaseFailures
 
WaitQueue m_AcknowledgementWaiters
 

Detailed Description

One preallocated RequestQueue publication slot for one root-hub port.

configure() fixes the queue payload before the interrupt source is enabled. Each observe() returns a generation that the controller acknowledges only after its hardware W1C has been flushed. Workers cannot sample the port before that generation is acknowledged. Further observations coalesce into one latest-generation follow-up publication without waiting for the current worker to retire its token.

Definition at line 94 of file PortChangeRequest.h.

Member Enumeration Documentation

◆ Result

enum class UsbHcd::PortChangeRequest::Result
strong

Definition at line 96 of file PortChangeRequest.h.

Constructor & Destructor Documentation

◆ PortChangeRequest()

UsbHcd::PortChangeRequest::PortChangeRequest ( )
inline

Definition at line 134 of file PortChangeRequest.h.

Member Function Documentation

◆ acknowledge()

void UsbHcd::PortChangeRequest::acknowledge ( size_t  generation)
inline

Definition at line 184 of file PortChangeRequest.h.

◆ advance()

static void UsbHcd::PortChangeRequest::advance ( Atomic< size_t > &  value,
size_t  target 
)
inlinestaticprivate

Definition at line 232 of file PortChangeRequest.h.

◆ canAcknowledge()

static bool UsbHcd::PortChangeRequest::canAcknowledge ( Result  result)
inlinestatic

Definition at line 223 of file PortChangeRequest.h.

◆ cancel()

void UsbHcd::PortChangeRequest::cancel ( size_t  generation)
inline

Definition at line 211 of file PortChangeRequest.h.

◆ configure()

bool UsbHcd::PortChangeRequest::configure ( RequestQueue queue,
size_t  priority,
uint64_t  p1 = 0,
uint64_t  p2 = 0,
uint64_t  p3 = 0,
uint64_t  p4 = 0,
uint64_t  p5 = 0,
uint64_t  p6 = 0,
uint64_t  p7 = 0 
)
inline

Definition at line 150 of file PortChangeRequest.h.

◆ consume()

void UsbHcd::PortChangeRequest::consume ( size_t  generation)
inlineprivate

Definition at line 319 of file PortChangeRequest.h.

◆ hasPublicationFailure()

bool UsbHcd::PortChangeRequest::hasPublicationFailure ( ) const
inline

Definition at line 227 of file PortChangeRequest.h.

◆ isIdle()

bool UsbHcd::PortChangeRequest::isIdle ( ) const
inline

Definition at line 215 of file PortChangeRequest.h.

◆ observe()

Observation UsbHcd::PortChangeRequest::observe ( )
inline

Definition at line 170 of file PortChangeRequest.h.

◆ observedGeneration()

size_t UsbHcd::PortChangeRequest::observedGeneration ( ) const
inline

Definition at line 219 of file PortChangeRequest.h.

◆ publishGeneration()

Result UsbHcd::PortChangeRequest::publishGeneration ( size_t  generation,
bool  tryIdle 
)
inlineprivate

Definition at line 283 of file PortChangeRequest.h.

◆ released()

void UsbHcd::PortChangeRequest::released ( )
inlineprivate

Definition at line 262 of file PortChangeRequest.h.

◆ requestReleased()

static void UsbHcd::PortChangeRequest::requestReleased ( void *  context)
inlinestaticprivate

Definition at line 258 of file PortChangeRequest.h.

◆ stopAfterQuiesce()

void UsbHcd::PortChangeRequest::stopAfterQuiesce ( )
inline

Releases workers waiting for hardware acknowledgement and suppresses follow-up publication.

The controller must first close and drain the interrupt or timer source that calls observe(). No observe() may overlap or follow this call.

Definition at line 201 of file PortChangeRequest.h.

◆ translate()

static Result UsbHcd::PortChangeRequest::translate ( RequestQueue::PreallocatedPublishResult  result)
inlinestaticprivate

Definition at line 241 of file PortChangeRequest.h.

◆ waitUntilAcknowledged()

bool UsbHcd::PortChangeRequest::waitUntilAcknowledged ( size_t  generation)
inlineprivate

Definition at line 299 of file PortChangeRequest.h.

Member Data Documentation

◆ m_Acknowledged

Atomic<size_t> UsbHcd::PortChangeRequest::m_Acknowledged
private

Definition at line 329 of file PortChangeRequest.h.

◆ m_AcknowledgementWaiters

WaitQueue UsbHcd::PortChangeRequest::m_AcknowledgementWaiters
private

Definition at line 333 of file PortChangeRequest.h.

◆ m_Configured

Atomic<size_t> UsbHcd::PortChangeRequest::m_Configured
private

Definition at line 327 of file PortChangeRequest.h.

◆ m_Consumed

Atomic<size_t> UsbHcd::PortChangeRequest::m_Consumed
private

Definition at line 330 of file PortChangeRequest.h.

◆ m_Observed

Atomic<size_t> UsbHcd::PortChangeRequest::m_Observed
private

Definition at line 328 of file PortChangeRequest.h.

◆ m_Parameters

uint64_t UsbHcd::PortChangeRequest::m_Parameters[7]
private

Definition at line 326 of file PortChangeRequest.h.

◆ m_Priority

size_t UsbHcd::PortChangeRequest::m_Priority
private

Definition at line 325 of file PortChangeRequest.h.

◆ m_Queue

RequestQueue* UsbHcd::PortChangeRequest::m_Queue
private

Definition at line 324 of file PortChangeRequest.h.

◆ m_ReleaseFailures

Atomic<size_t> UsbHcd::PortChangeRequest::m_ReleaseFailures
private

Definition at line 332 of file PortChangeRequest.h.

◆ m_Request

RequestQueue::PreallocatedRequest UsbHcd::PortChangeRequest::m_Request
private

Definition at line 323 of file PortChangeRequest.h.

◆ m_Stopping

Atomic<size_t> UsbHcd::PortChangeRequest::m_Stopping
private

Definition at line 331 of file PortChangeRequest.h.


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