On 18 November 2016 at 13:50, Ard Biesheuvel <ard.biesheu...@linaro.org> wrote: > > On 18 Nov 2016, at 14:39, Ni, Ruiyu <ruiyu...@intel.com> wrote: > >>>>>>>>>> 1. Can you add "PCI" keyword into the protocol name? >>>>>>>>>> e.g.: EDKII_NON_DISCOVERABLE_PCI_DEVICE_PROTOCOL_GUID >>>>>>>>>> >>>>>>>>> >>>>>>>>> No. This protocol does not describe pci devices, and it is a >>>>>>>>> peculiarity of the >>>>>>>>> edk2 driver stack that some non-pci devices can only be driven by pci >>>>>>>>> drivers. >>>>>>>>> >>>>>>>>> in other words, pci is part of the /driver/ side, and it is perfectly >>>>>>>>> possible for, >>>>>>>>> e.g., a non-discoverable ahci device to be driven by a different >>>>>>>>> non-pci driver >>>>>>>>> in the future. >>>>>>>>> >>>>>>>> >>>>>>>> I see. So some types of devices are handled by the current >>>>>>>> NonDiscoveablePciDevice driver, and some other types of devices may be >>>>>>>> handled by a future NonDiscoverableXXXDevice driver. >>>>>>>> Now since the AHCI type is already handled by the >>>>>>>> NonDiscoverablePciDevice >>>>>>>> driver, when there is a new NonDiscoverableXXXDevice driver, how can >>>>>>>> the two >>>>>>>> know whether it should manage the AHCI type device or not? >>>>>>> >>>>>>> Good question. But how does the UEFI driver model deal with that? What >>>>>>> happens if i have two drivers that both support >>>>> the >>>>>>> Ahci Pci class codes? >>>>>> PCI CFG header contains VendorID/DeviceID fields which can be used to >>>>>> distinguish >>>>>> them. >>>>>> >>>>> >>>>> No, that is not what I mean. >>>>> >>>>> Your question is how we should deal with multiple drivers that >>>>> support, for instance, the AHCI non-discoverable device type. My >>>>> answer is that this is not any different from a platform configuration >>>>> that has more than one PCI I/O based driver that supports the AHCI PCI >>>>> class codes. The UEFI driver model has priority rules and protocols to >>>>> decide which driver gets precedence. I don't see how it should be any >>>>> different here. >>>> >>>> I see they are different. Based on PciIo, the *HCI drivers can query >>>> additional information from PCI CFG header, instead of just using >>>> the PCI class code. >>>> >>>> But with the NonDiscoverableDevice protocol, there is no additional >>>> information can help the *HCI drivers decide which to manage. >>>> >>>> I don't see any practical negative point which prevents degrading >>>> NonDiscoverableDevice protocol to NonDiscoverable*Pci*Protocol. >>>> After all, as I said, all *HCI drivers are based on PciIo. >>>> >>> >>> Yes the *drivers* are based on PCI. But that does not make the >>> *devices* PCI devices. That is the whole problem we are trying to deal >>> with. So describing the non-PCI devices as PCI devices is incorrect >>> imo. The fact that we will use PCI drivers to drive non-PCI devices is >>> an implementation detail of EDK2, and is a property of the *driver* >>> side not the *device* side. So using PCI class codes etc to wire up >>> the correct driver should be local to the driver, and not pollute the >>> description of the device. >>> >>> For example, if we would ever split the AHCI driver into a AHCI part >>> and a PCI part (which I know is unlikely to occur), I would want the >>> non-PCI AHCI driver to be used with the same protocol. Perhaps that >>> means we need a protocol for each type of device rather than an enum? >>> In any case, putting PCI-specific metadata into the device description >>> makes the situation worse, because now both the *device* and the >>> *driver* side are forced to use PCI internals to describe devices that >>> have nothing to do with PCI >> >> If I understand correctly, you want the protocol producer can simply >> produce such protocol without the knowledge of PCI. I agree! >> But we do need to make the protocol definition stable enough. I do not >> like to see the enum type being extended in future to support more types >> of devices. >> 1. Can you use different GUIDs for different types of devices? > > Yes that seems like a reasonable approach, in the spirit of EDK2 :-) > >> 2. As I replied as comment #2 to patch 3/5, do you have better way to >> deal with the SDHCI Host controller driver access? >
The best way is to revert to the previous solution. This means two SDHCI slots will be modeled as two separate non-discoverable devices, and will each receive a separate instance of the PCI I/O protocol, describing a SDHCI-PCI device with a single slot. But actually, I don't think that matters at all. The way the SDHCI driver is implemented is debatable anway: I still think it should be a bus driver, with each slot a separate device on this bus. _______________________________________________ edk2-devel mailing list edk2-devel@lists.01.org https://lists.01.org/mailman/listinfo/edk2-devel