tech-kern archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
Re: Musings on MSI
On Aug 17, 2011, at 9:35 AM, David Young wrote:
> On Fri, Aug 05, 2011 at 03:09:53PM -0700, Matt Thomas wrote:
>> I'd like to keep the existing intr framework alone (mostly). Here's a
>> strawman for MI MSI support:
>>
>> int pci_msi_request(const struct pci_attach_args *pa, pci_msi_handle_t
>> *msihp, size_t nmsi, int capid);
>>
>> msih in an opaque handle which is returned.
>> nmsi is the maximum number of msi that can be allocated.
>> capid is either 0 (either), PCI_CAP_MSI, or PCI_CAP_MSIX
>>
>> returns an E* error.
>>
>> int pci_msi_type(pci_chipset_tag_t pc, pci_msi_handle_t msih);
>>
>> return the type of msi allocated (PCI_CAP_MSI or PCI_CAP_MSIX). In the
>> latter case MSI vectors may not be contiguous.
>
> Does it matter to the driver whether or not the vectors are contiguous?
> Presumably there are no gaps in the available msirq?
MSIX doesn't matter, MSI it does.
>> size_t pci_msi_available(pci_chipset_tag_t pc, pci_msi_handle_t msih);
>>
>> returns the number of MSIs allocated (or currently free).
>
> You mean, the minimum of the number of MSIs allocated by
> pci_msi_request(), and the number of MSIs pci_msi_establish()'d but not
> pci_msi_free()'d ?
No. The number of msirqs that can used for pci_msi_establish.
>> void * pci_msi_establish(pci_chipset_tag_t pc, pci_msi_handle_t msih,
>> size_t msirq, int level, int (*handler)(void *), void *arg);
>>
>> establishes the Nth (msirq) MSI (appropriately updating the MSIX vector table
>> if needed). More than one handler may be established on a single MSI.
>>
>> void pci_msi_disestablish(pci_chipset_tag_t pc, void *ih);
>>
>> Disestablishes but does not free the MSI.
>
> You mean, pci_msi_disestablish() does not free to the MSI handle's pool?
> Why not?
It does. But not to the system pool. pci_msi_free does that.
> It may help to see an example of how this is used.
>
> It occurs to me that MSI/MSI-X establishment may need to modify bus
> windows, IOMMU mappings, et cetera.
Depends on the platform but that's transparent to the user. The underlying MD
pci bus code should do that.
Home |
Main Index |
Thread Index |
Old Index