<div style="line-height:1.7;color:#000000;font-size:14px;font-family:Arial">Hello, Michael,<br><br><div>MAC(3C6A2CB0886A, 0x1) is a hardware device, but not on a PCIe bus. Can iPxe install its own SNP protocol on this kind of device? or iPxe just use the original SNP protocol on the hardware device?</div><div><br></div><div>Thanks</div><br><div style="position:relative;zoom:1">--<br><div>Best Regards</div><div><br></div><div>Feng Libo</div><div>ZD Technology (Beijing) Co., Ltd</div><div style="clear:both"></div></div><br><pre><br>发件人:"Michael Brown" <mcb30@ipxe.org>
发送日期:2020-08-24 18:52:45
收件人:"丰立波" <lbfeng@zd-tech.com.cn>,"Christian Nilsson" <nikize@gmail.com>
抄送人:iPXE <ipxe-devel@lists.ipxe.org>
主题:Re: [ipxe-devel] can snponly.efi run without NII protocol installed?>On 20/08/2020 10:28, 丰立波 wrote:
>> I get a screenshot for debugging:
>> I think iPxe tried to replace the SNP protocol of my UEFI land with its
>> own SNP driver(the driver code is in the directory of
>> ipxe/src/drivers/net/efi/), first ipxe disconnect the my uefi driver,
>> then connect its own driver, but at this point, connection failed.
>>
>> There are two questions:
>> 1. why the new connection failed?
>> 2. Why iPXE try to replace my uefi driver, could iPxe just use the
>> original driver? Thanks.
>
>iPXE needs to disconnect other drivers (e.g. MnpDxe) from the SNP
>handle, so that it can have exclusive access to the network device.
>
> From the screenshot it looks as though your custom UEFI driver stack
>has the incorrect hierarchy of handles. My guess is that you may have
>some platform-specific driver providing the MAC(3C6A2CB0866A,0x1) handle
>as though it were a hardware device, and that your SNP driver then binds
>to this existing handle and installs EFI_SIMPLE_NETWORK_PROTOCOL as an
>additional protocol.
>
>This would be incorrect behaviour: the SNP driver should bind to a
>hardware device handle and then install EFI_SIMPLE_NETWORK_PROTOCOL onto
>a new handle. You can see this in action on a standard x86 UEFI system:
>the hardware device handle will be e.g.
>
> PciRoot(0x0)/Pci(0x3,0x0)
>
>and the SNP device handle will then be e.g.
>
> PciRoot(0x0)/Pci(0x3,0x0)/MAC(525400123456,0x1).
>
>Try building with DEBUG=efi_driver:3 (which will dump additional
>information about the handle before and after disconnection).
>
>Michael
</pre></div>