class BusDeviceInterface

Defined at line 24 of file ../../src/devices/pci/drivers/pci/bus_device_interface.h

This interface allows for bridges/devices to communicate with the top level

Bus object to add and remove themselves from the device list of their

particular bus instance, obtain their BTIs, and make MSI allocations. This

becomes more important as multiple bus instances with differing segment

groups become a reality.

Public Methods

zx_status_t GetBti (const pci::Device * device, uint32_t index, zx::bti * bti)

Get the BTI at |index| for a device.

uint16_t GetSegmentGroup ()
zx_status_t AllocateMsi (uint32_t count, zx::msi * msi, msi_allocation_info_t * out_info)

Allocate |count| messagge signaled interrupts for a device.

zx_status_t GetMsiHandle (const zx::msi & allocation, uint32_t options, uint16_t msi_id, const zx::vmo & cfg_vmo, uint64_t cfg_offset, zx::interrupt * out_interrupt)
zx_status_t LinkDevice (fbl::RefPtr<pci::Device> device)

Add device to the Bus device tree.

zx_status_t UnlinkDevice (pci::Device * device)

Remove a device from the Bus device tree.

zx_status_t AddToSharedIrqList (pci::Device * device, uint32_t vector, zx::unowned_interrupt irq_handle)

Shared IRQ handler list management for a device's legacy IRQ vector.

Note on lock hierarchy: Called while holding Device::dev_lock_; implementations

acquire Bus::devices_lock_. Note that Bus::HandleLegacyIrq acquires devices_lock_

before dev_lock_; concurrent deadlock is prevented because both operations execute

on the driver's synchronized dispatcher.

zx_status_t RemoveFromSharedIrqList (pci::Device * device, uint32_t vector)
void ~BusDeviceInterface ()

Defined at line 26 of file ../../src/devices/pci/drivers/pci/bus_device_interface.h