template <>

class WireServer

Defined at line 953 of file fidling/gen/sdk/fidl/fuchsia.hardware.cqhci/fuchsia.hardware.cqhci/cpp/fidl/fuchsia.hardware.cqhci/cpp/driver/wire_messaging.h

Pure-virtual interface to be implemented by a server.

This interface uses typed channels (i.e. |::fdf::ClientEnd

<

::fuchsia_hardware_cqhci::Cqhci>|

and |::fdf::ServerEnd

<

::fuchsia_hardware_cqhci::Cqhci>|).

Public Methods

void InitializeCommandQueueing (::fuchsia_hardware_sdmmc::wire::CqhciInitializeCommandQueueingRequest * request, fdf::Arena & arena, InitializeCommandQueueingCompleter::Sync & completer)

Initializes the CQHCI driver, providing it with all necessary resources.

This call is expected to be made once. The server should reject any additional calls

until the peer end of `virtual_interrupt_lifeline` closes.

# Interrupt Delegation

While the CQHCI driver is running, it takes over the physical IRQ object from its underlying

driver, and directly handles any CQHCI-specific interrupts. Interrupts which it cannot

service (e.g. SDHCI interrupts) are forwarded to the underlying driver via

`virtual_interrupt`. The server should service interrupts exactly as it normally would.

The CQHCI driver will wait for the virtual IRQ to be acked before acking the physical IRQ.

# Arguments

* `virtual_interrupt` - A virtual interrupt to monitor instead of the physical IRQ.

The CQHCI driver will use this to forward interrupts which it cannot directly service.

* `virtual_interrupt_lifeline` - A lifeline for the virtual interrupt. The CQHCI

driver will destroy the peer end upon shutdown, which should be handled by the server as a

signal to stop monitoring the virtual interrupt and return to monitoring the physical

interrupt.

# Returns

* `cqhci_mmio` and `cqhci_mmio_offset` - An MMIO for the CQHCI register block.

MMIO size minus offset must be at least 512 bytes as per the CQHCI specification.

* `sdhci_mmio` and `sdhci_mmio_offset` - An MMIO for the SDHCI register block.

MMIO size minus offset must be at least 512 bytes as per the SDHCI specification.

* `bti` - The BTI to use for pinning pages for DMA.

* `interrupt` - The physical interrupt to monitor.

void EnableCqhci (fdf::Arena & arena, EnableCqhciCompleter::Sync & completer)

Enables the Command Queueing Engine. The CQHCI driver is expected to already have called

[`InitializeCommandQueueing`] to handle interrupts.

While CQHCI is enabled, it is the caller's responsibility to only submit regular requests

(via [`Request`]) via DCMD, or after disabling CQHCI.

void DisableCqhci (fdf::Arena & arena, DisableCqhciCompleter::Sync & completer)

Disables the Command Queueing Engine. `EnableCqhci` must have previously been called. From

this point onwards, regular requests can be submitted (until `EnableCqhci` is called again).

void HostInfo (fdf::Arena & arena, HostInfoCompleter::Sync & completer)

Get host info.

void WireServer ()

Defined at line 956 of file fidling/gen/sdk/fidl/fuchsia.hardware.cqhci/fuchsia.hardware.cqhci/cpp/fidl/fuchsia.hardware.cqhci/cpp/driver/wire_messaging.h

Handler bind_handler (fdf_dispatcher_t * dispatcher)

|bind_handler| returns a handler that binds incoming connections to this

server implementation.

The returned handler borrows the server instance.

The server must outlive the provided |dispatcher|. Only after

the dispatcher is shutdown will it be safe to destroy the servers.

The server should not be moved.

void ~WireServer ()

Defined at line 957 of file fidling/gen/sdk/fidl/fuchsia.hardware.cqhci/fuchsia.hardware.cqhci/cpp/fidl/fuchsia.hardware.cqhci/cpp/driver/wire_messaging.h