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

Reply via email to