Thanks Laszlo for the very thorough description of the probable root-cause. It 
helped a lot.

One thing though, which makes me wonder if this is similar to a "Brand X USB3.0 
mass storage drive
doesn't work on my Brand Y USB host machine" case, as on this particular 
machine (also checked on a set of co-located machines),
the tftp server was able to work both with u-boot Bootloader and Linux kernel 
for tftp based file transfer.

So, while I understand this might be a tftp server version issue, do we need to 
fully check the explicit
difference between the tftp command/packet transfer sequence when done by uefi 
and say Linux?

Regards,
Bhupesh


> -----Original Message-----
> From: edk2-devel [mailto:[email protected]] On Behalf Of
> Leekha Shaveta
> Sent: Tuesday, September 29, 2015 3:32 PM
> To: Laszlo Ersek
> Cc: [email protected]; Gary Ching-Pang Lin; Fu, Siyuan; Chris
> Cuthbert
> Subject: Re: [edk2] TFTP issue, Ping 1st packet reply missing
> 
> Hi Laszlo,
> 
> Many Thanks for your help !!
> It actually worked well with latest tftp server (atftpd), so it turned
> out to be a server issue (as you said rightly :) )
> 
> Some replies are inlined
> 
> Thanks and Regards,
> Shaveta
> 
> 
> -----Original Message-----
> From: Laszlo Ersek [mailto:[email protected]]
> Sent: Monday, September 28, 2015 6:30 PM
> To: Leekha Shaveta-B20052 <[email protected]>
> Cc: [email protected] <[email protected]>; Fu, Siyuan
> <[email protected]>; Chris Cuthbert <[email protected]>; Gary Ching-
> Pang Lin <[email protected]>
> Subject: Re: [edk2] TFTP issue, Ping 1st packet reply missing
> 
> On 09/28/15 12:24, Leekha Shaveta wrote:
> > Hi Laszlo,
> >
> > Please find the detailed "tcpdump" on my setup:
> >
> > test@boardfram-OptiPlex-790:/tftpboot$ sudo tcpdump -v -v -n -l -X -e
> > -i eth0
> > tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size
> > 65535 bytes
> > 21:39:42.028524 68:05:ca:04:d5:6a > 18:03:73:15:7b:12, ethertype IPv4
> (0x0800), length 63: (tos 0x0, ttl 64, id 54858, offset 0, flags [none],
> proto UDP (17), length 49)
> >     192.168.3.154.1051 > 192.168.3.221.69: [udp sum ok]  21 RRQ "test"
> octet tsize 0
> >         0x0000:  4500 0031 d64a 0000 4011 1baa c0a8 039a
> E..1.J..@.......
> >         0x0010:  c0a8 03dd 041b 0045 001d d2e6 0001 7465
> .......E......te
> >         0x0020:  7374 006f 6374 6574 0074 7369 7a65 0030
> st.octet.tsize.0
> >         0x0030:  00                                       .
> > 21:39:42.030313 18:03:73:15:7b:12 > 68:05:ca:04:d5:6a, ethertype IPv4
> (0x0800), length 65: (tos 0x0, ttl 64, id 7770, offset 0, flags [DF],
> proto UDP (17), length 51)
> >     192.168.3.221.40480 > 192.168.3.154.1051: [udp sum ok] UDP, length
> 23
> >         0x0000:  4500 0033 1e5a 4000 4011 9398 c0a8 03dd
> E..3.Z@.@.......
> >         0x0010:  c0a8 039a 9e20 041b 001f 169a 0003 0001
> ................
> >         0x0020:  6969 6969 6964 6863 626a 7364 6320 7364
> iiiiidhcbjsdc.sd
> >         0x0030:  6320 0a                                  c..
> > 21:39:42.058922 68:05:ca:04:d5:6a > 18:03:73:15:7b:12, ethertype IPv4
> (0x0800), length 68: (tos 0x0, ttl 64, id 54859, offset 0, flags [none],
> proto UDP (17), length 54)
> >     192.168.3.154.1051 > 192.168.3.221.40480: [udp sum ok] UDP, length
> 26
> >         0x0000:  4500 0036 d64b 0000 4011 1ba4 c0a8 039a
> E..6.K..@.......
> >         0x0010:  c0a8 03dd 041b 9e20 0022 ed64 0005 0004
> .........".d....
> >         0x0020:  5573 6572 2061 626f 7274 6564 2064 6f77
> User.aborted.dow
> >         0x0030:  6e6c 6f61 6400                           nload.
> > ^C
> > 3 packets captured
> > 3 packets received by filter
> > 0 packets dropped by kernel
> >
> >
> > Command I had run for tftp was:
> >
> > Shell> tftp 192.168.3.221 test t4
> > unicast promiscuous.
> > PacketType 4
> > protocol 8
> > Src MAC Address: 18  3 73 15 7B 12
> > Dest MAC Address: 68  5 CA  4 D5 6A
> > Failed to get the size of the file 'test' on 'eth0' - Protocol Error
> > Shell>
> >
> >
> >
> > I have now compiled the code with latest ShellPkg and ran it.
> >
> > Does this log give any pointer, why Token state is getting "ABORTED" in
> tftp?
> 
> The reason I recommended the -X (more precisely, -l -X) options is
> because the packets often contain ASCII strings that the source code can
> be grepped for. (Clearly the source code that is responsible for sending
> out that packet.)
> 
> In this case, the 3rd packet (which is sent by edk2) contains "User
> aborted download":
> 
> $ git grep 'User aborted download'
> 
> The one hit (restricting the results to IPv4) is in
> "MdeModulePkg/Universal/Network/Mtftp4Dxe/Mtftp4Rrq.c", function
> Mtftp4RrqSaveBlock(). The documentation on that function is
> 
>   Deliver the received data block to the user, which can be saved in the
>   user provide buffer or through the CheckPacket callback.
> 
> The textual error message is passed by Mtftp4RrqSaveBlock() to
> Mtftp4SendError(), and this branch depends on the Token->CheckPacket()
> callback *failing*. Thus, we can say that the Token->CheckPacket()
> function call rejects the 2nd packet.
> 
> In addition, the Mtftp4RrqSaveBlock() function documents its own
> EFI_ABORTED retval like this:
> 
>   The user tells to abort by return an error through CheckPacket
> 
> [Shaveta]
> I got to this point by putting some debug logs and it was getting aborted
> from here only:
> if (Token->CheckPacket != NULL) {
>     DEBUG((EFI_D_INFO, " Check packet from HERE: %r\n", Token->Status));
>     Status = Token->CheckPacket (&Instance->Mtftp4, Token, (UINT16) Len,
> Packet);
> 
>     if (EFI_ERROR (Status)) {
>       Mtftp4SendError (
>         Instance,
>         EFI_MTFTP4_ERRORCODE_ILLEGAL_OPERATION,
>         (UINT8 *) "User aborted download"
>         );
> 
>       return EFI_ABORTED;
>     }
>   }
> 
> ... As far as I can see in this directory, EfiMtftp4GetInfo() populates
> the CheckPacket function pointer with the address of
> Mtftp4GetInfoCheckPacket(). So let's see what Mtftp4GetInfoCheckPacket()
> does:
> 
> Apparently, this function *always* returns EFI_ABORTED (which in turn
> always triggers the above branch in Mtftp4RrqSaveBlock()). However,
> remember that it's only EfiMtftp4GetInfo() that sets up the CheckPacket
> callback pointer like this.
> 
> In addition, before returning EFI_ABORTED indiscriminately,
> Mtftp4GetInfoCheckPacket() stores a status code in ((MTFTP4_GETINFO_STATE
> *)Token->Context)->Status.
> 
> Therefore, we can determine the following: when you use
> Mtftp4RrqSaveBlock() as part of a "normal" download, the CheckPacket
> callback ptr is NULL, and this doesn't happen. However, when you use the
> same function as part of querying *metadata* of the remote file, ie.
> initiated from EfiMtftp4GetInfo(), then the callback function is always
> set to Mtftp4GetInfoCheckPacket(), which will (a) abort the transfer
> invariably after the first packet -- which is valid, we only care about
> the metadata in the first packet --, and (b) it will store a status code
> too in the context, "for later", ie. for the actual download that is
> supposed to take place after the metadata have been parsed on the edk2
> side.
> 
> And, in your case, this "actual" download doesn't seem to be happening.
> Why?
> 
> [Shaveta]  Read something similar:
> Errors that are not really Errors.
> TFTP is a file transfer protocol that does not have special provisions
> for telling the client in advance the size of a file the client is
> planning to retrieve. The client sometimes needs this information for
> control or memory allocation purposes, then you will see this kind of log
> sequence:
> 
> In such particular case:
> 
> The client requests the say "abc" file.
> The client quickly aborts the transfer, but it received the "abc" file
> size from the first packet transmitted by the purposely stopped transfer.
> The client verifies the "abc" file size is within the expected values and
> if everything is OK it requests a new transfer.
> This time the transfer is completed.
> 
> 
> 
> But I too was wondering that why Opcode that I am getting is "3" which is
> incorrect, and why the actual download is not taking place. So I got
> stuck :(
> 
> Thanks for such a detailed explanation :) :)
> 
> 
> 
> 
> 
> Well, in your UEFI shell log, I see "Protocol Error" -- in
> Mtftp4GetInfoCheckPacket(), I see exactly one branch that does
> 
>     State->Status = EFI_PROTOCOL_ERROR;
> 
> and that branch corresponds to
> 
>   NTOHS (Packet->OpCode) != EFI_MTFTP4_OPCODE_ERROR &&
>   NTOHS (Packet->OpCode) != EFI_MTFTP4_OPCODE_OACK
> 
> In other words, the TFTP server supposedly sends back an opcode, in the
> 2nd packet, that is neither ERROR (5) nor OACK (6).
> 
> For further analysis, we have to consult various RFCs:
> 
> https://tools.ietf.org/html/rfc1350 -- "basic" TFTP
> https://tools.ietf.org/html/rfc1782 -- TFTP Option Extension
> https://tools.ietf.org/html/rfc2349 -- Transfer Size option
> 
> Here's again the RRQ:
> 
> >     192.168.3.154.1051 > 192.168.3.221.69: [udp sum ok]  21 RRQ "test"
> octet tsize 0
> >         0x0000:  4500 0031 d64a 0000 4011 1baa c0a8 039a
> E..1.J..@.......
> >         0x0010:  c0a8 03dd 041b 0045 001d d2e6 0001 7465
> > .......E......te
>                            ^                   ^    ^
>                            |                   |    |
>        IPv4 header ends here   UDP hdr ends here    |
>                                          OpCode = RRQ
> 
> >         0x0020:  7374 006f 6374 6574 0074 7369 7a65 0030
> > st.octet.tsize.0
>                          ^              ^              ^
>                          |              |              |
>     filename ("test") ends here         |              |
>                                         |              |
>                  mode ("octet") ends here              |
>                                                        |
>                    first TFTP option ("tsize") ends here
> 
> >         0x0030:  00                                       .
>                     ^
>                     |
> first TFTP option value ("0") ends here
> 
> So, in the first packet, edk2 composes a TFTP RRQ. The basic structure is
> governed by RFC 1350. Then, it appends one option (tsize=0). The general
> formatting for options is described in RFC 1782; practically "append a
> sequence of NUL-terminated ASCII strings". The actual option that edk2
> appends is tsize\00\0, which is described in RFC 2349.
> 
> From RFC 2349, the meaning of tsize=0 is:
> 
>    In Read Request packets, a size of "0" is specified in the request
>    and the size of the file, in octets, is returned in the OACK.  If the
>    file is too large for the client to handle, it may abort the transfer
>    with an Error packet (error code 3).  [...]
> 
> Meaning tsize=0 can be used to query the file size in advance.
> 
> Now let's see how a TFTP server is allowed to answer to an RRQ that has
> options (consult RFC 1782, section "Negotiation Protocol"):
> 
>    When the client appends options to the end of a Read Request packet,
>    three possible responses may be returned by the server:
> 
>       OACK  - acknowledge of Read Request and the options;
> 
>       DATA  - acknowledge of Read Request, but not the options;
> 
>       ERROR - the request has been denied.
> 
> Looking at the second packet:
> 
> > 21:39:42.030313 18:03:73:15:7b:12 > 68:05:ca:04:d5:6a, ethertype IPv4
> (0x0800), length 65: (tos 0x0, ttl 64, id 7770, offset 0, flags [DF],
> proto UDP (17), length 51)
> >     192.168.3.221.40480 > 192.168.3.154.1051: [udp sum ok] UDP, length
> 23
> >         0x0000:  4500 0033 1e5a 4000 4011 9398 c0a8 03dd
> E..3.Z@.@.......
> >         0x0010:  c0a8 039a 9e20 041b 001f 169a 0003 0001
> ................
>                                                     ^
>                                                     |
>                                     OpCode = 3 (DATA)
> 
> >         0x0020:  6969 6969 6964 6863 626a 7364 6320 7364
> iiiiidhcbjsdc.sd
> >         0x0030:  6320 0a                                  c..
> 
> 
> This means that the TFTP server acknowledges RRQ, but not the options;
> specifically, tsize=0.
> 
> Meaning the server starts the actual data transfer, instead of just
> responding with the size of the file that the client (edk2) is interested
> in, at the moment.
> 
> This is why the EFI_PROTOCOL_ERROR branch is taken in
> Mtftp4GetInfoCheckPacket(): because the TFTP server is incapable of
> responding with *just* the remote file size, without the actual file
> contents. This makes it very impractical to implement the
> EFI_MTFTP4_PROTOCOL.GetInfo() member function.
> 
> Solution: enable option parsing (according to at least RFC 1782 and RFC
> 2349) in your TFTP server, or use a more modern TFTP server.
> 
> More details: I happen to have a debian box running on my desk. The
> executable name from one of your earlier emails (from the xinetd config
> file) is "/usr/sbin/in.tftpd". I ran the following command:
> 
> $ apt-file search /usr/sbin/in.tftpd
> 
> (I had the impression that you were using Debian or Ubuntu.)
> 
> Three packages were returned by apt-file, as providing that binary:
> "atftpd", "tftpd", and "tftpd-hpa".
> 
> Now look at their package descriptions:
> 
> https://packages.debian.org/atftpd
> 
>     Multi-threaded TFTP server implementing all options (option
>     extension and multicast) as specified in RFC1350, RFC2090, RFC2347,
>     RFC2348 and RFC2349. Atftpd also supports multicast protocol known
>     as mtftp, defined in the PXE specification. [...]
> 
> https://packages.debian.org/tftpd
> 
>     Tftpd is a server which supports the Internet Trivial File Transfer
>     Protocol (RFC 783). The TFTP server operates at the port indicated
>     in the `tftp' service description; see services(5). The server is
>     normally started by inetd(8). Tftpd is not suitable for use with the
>     PXE bootloader; for that, use atftpd or tftpd-hpa.
> 
> https://packages.debian.org/tftpd-hpa
> 
>     Trivial File Transfer Protocol (TFTP) is a file transfer protocol,
>     mainly to serve boot images over the network to other machines
>     (PXE). [...]
> 
> You simply have the wrong package installed! Please install "atftpd"
> instead of "tftpd", and retry.
> 
> ... Once again, it seems proven that (a) most PXE / TFTP issues
> experienced with edk2 exist on the server (or network) side, and (b) you
> can fix many issues simply by reading documentation.
> 
> Of course you can also ask others to read docs for you, and hope they are
> interested... :)
> 
> Laszlo
> 
> >
> > Thanks and Regards,
> > Shaveta
> >
> >
> > -----Original Message-----
> > From: Laszlo Ersek [mailto:[email protected]]
> > Sent: Friday, September 25, 2015 11:09 PM
> > To: Leekha Shaveta-B20052 <[email protected]>
> > Cc: [email protected] <[email protected]>; Fu, Siyuan
> > <[email protected]>; Chris Cuthbert <[email protected]>; Gary
> > Ching-Pang Lin <[email protected]>
> > Subject: Re: [edk2] TFTP issue, Ping 1st packet reply missing
> >
> > On 09/25/15 12:46, Leekha Shaveta wrote:
> >>
> >>
> >> -----Original Message-----
> >> From: Laszlo Ersek [mailto:[email protected]]
> >> Sent: Friday, September 25, 2015 3:11 PM
> >> To: Leekha Shaveta-B20052 <[email protected]>
> >> Cc: [email protected] <[email protected]>; Fu, Siyuan
> >> <[email protected]>; Chris Cuthbert <[email protected]>; Gary
> >> Ching-Pang Lin <[email protected]>
> >> Subject: Re: [edk2] TFTP issue, Ping 1st packet reply missing
> >>
> >> On 09/25/15 09:21, Leekha Shaveta wrote:
> >>>
> >>>
> >>> -----Original Message-----
> >>> From: Laszlo Ersek [mailto:[email protected]]
> >>> Sent: Friday, September 25, 2015 1:04 AM
> >>> To: Leekha Shaveta-B20052 <[email protected]>
> >>> Cc: [email protected] <[email protected]>; Fu, Siyuan
> >>> <[email protected]>; Chris Cuthbert <[email protected]>; Gary
> >>> Ching-Pang Lin <[email protected]>
> >>> Subject: Re: [edk2] TFTP issue, Ping 1st packet reply missing
> >>>
> >>> On 09/24/15 13:08, Laszlo Ersek wrote:
> >>>
> >>>> BTW when I wrote that I had just tested PXE boot, I didn't use the
> >>>> UEFI shell utility; it was a network boot option instead.
> >>>
> >>> Now I tested the shell command too, in my usual virtual network
> environment; it works fine for me.
> >>>
> >>> Thanks
> >>> Laszlo
> >>>
> >>> I Too faced compilation issues, so I picked up
> >>> "Guid/NicIp4ConfigNvData.h" file from tianocore site "
> http://sourceforge.net/p/tianocore/edk2/ci/2638c111076f9a49d4766ca5acbafa
> 0eb7f66a18/tree/MdeModulePkg/Include/Guid/NicIp4ConfigNvData.h"
> >>> Copied it in Guid folder and my code compiled.
> >>>
> >>> Is this the correct file to compile the code with?
> >>
> >> No. Please pull the new commits; Jaben checked in the patch that fixes
> the build (on Windows at least, and I have a pending patch that fixes it
> with gcc too).
> >>
> >> Thanks
> >> Laszlo
> >>
> >>
> >> Thanks Laszlo!
> >>
> >> I am not working on windows, so will wait for the patch that you are
> going to send to fix this.
> >
> > It is SVN r18553 now.
> >
> >>
> >> I had captured TCPDUMP during TFTP on server:
> >> test@boardfram-OptiPlex-790:/tftpboot$ sudo tcpdump -i eth0
> >> tcpdump: verbose output suppressed, use -v or -vv for full protocol
> >> decode
> >
> > Unfortunately, the parameters you passed to tcpdump are not ideal -- I
> had proposed parameters up-thread that are more suitable for debugging;
> please use those.
> >
> >> listening on eth0, link-type EN10MB (Ethernet), capture size 65535
> >> bytes
> >> 22:04:50.929700 ARP, Request who-has 192.168.3.221 tell
> >> 192.168.3.154, length 46
> >> 22:04:50.929720 ARP, Reply 192.168.3.221 is-at 18:03:73:15:7b:12 (oui
> >> Unknown), length 28
> >> 22:04:50.988247 IP 192.168.3.154.ingreslock > 192.168.3.221.tftp:  21
> >> RRQ "test" octet tsize 0
> >> 22:04:50.990025 IP 192.168.3.221.50033 > 192.168.3.154.ingreslock:
> >> UDP, length 23
> >> 22:04:51.013103 IP 192.168.3.154.ingreslock > 192.168.3.221.50033:
> >> UDP, length 26
> >>
> >> Any idea what is this "ingreslock"  in these dump??
> >
> > Sure. You didn't pass "-n" to tcpdump (despite my recommendation :)),
> hence tcpdump tries to resolve both IP addresses to domain names, and
> port numbers to service names (from /etc/services, and any other sources
> configured in /etc/nsswitch.conf for service name resolution).
> > "ingreslock" has no particular meaning here; it is port 1524, but for
> endpoints that you do not bind explicitly, the system "randomly" chooses
> a port number from a suitable range.
> >
> > In the TFTP client case, the target port (where the TFTP server lives)
> is of course well known, but the source port is not bound by the client
> explicitly (there's no reason to), hence the system assigns a "random"
> > source port number. In this case, it happened to be 1524, which is
> "ingreslock", according to /etc/services.
> >
> > Service name resolution is frequently just a distraction with tcpdump,
> > hence my proposal to use "-n". (Please consider the tcpdump parameters
> > I had suggested before.)
> >
> > If, for any reason, you insist on specifying a source port number,
> instead of the system-assigned one, the TFTP command's -l option can
> accommodate that (see its help).
> >
> > ... Also, your dump is missing the DHCP packets that should be captured
> while the ifconfig program (launched from the UEFI shell) brings up the
> interface on which you later use TFTP.
> >
> > Laszlo
> >
> >
> >>
> >> Regards,
> >> Shaveta
> >>
> >>
> >>>
> >>> Regards,
> >>> Shaveta
> >>>
> >>>>
> >>>> ... I tried to build the TFTP shell command into OVMF now, just to
> >>>> test it, but it failed to compile, and the patch that supposedly
> >>>> fixes it is not readable on the list. :(
> >>>>
> >>>> Thanks
> >>>> Laszlo
> >>>>
> >>>>>
> >>>>> Thanks and regards,
> >>>>> Shaveta
> >>>>>
> >>>>> -----Original Message-----
> >>>>> From: Laszlo Ersek [mailto:[email protected]]
> >>>>> Sent: Thursday, September 24, 2015 2:05 PM
> >>>>> To: Leekha Shaveta-B20052 <[email protected]>
> >>>>> Cc: [email protected] <[email protected]>; Fu, Siyuan
> >>>>> <[email protected]>; Chris Cuthbert <[email protected]>; Gary
> >>>>> Ching-Pang Lin <[email protected]>
> >>>>> Subject: Re: [edk2] TFTP issue, Ping 1st packet reply missing
> >>>>>
> >>>>> On 09/24/15 08:04, Leekha Shaveta wrote:
> >>>>>> Hi,
> >>>>>>
> >>>>>> Tftp is also giving issues.
> >>>>>>
> >>>>>> During tftp, as one of its step it calls " GetFileSize"
> >>>>>> Which go through Mtftp4 protocol and calls " Mtftp4->GetInfo"
> >>>>>>
> >>>>>> And this fails.
> >>>>>>
> >>>>>> Any idea what is the issue with tftp command? Has anyone tested it
> successfully?
> >>>>>
> >>>>> I frequently retest TFTP, and I just did it right now as well, on
> top of current master. It works fine. My test environment is a virtual
> network, where OVMF runs in a virtual machine, and DHCP and TFTP are
> configured by libvirt and served by dnsmasq. The edk2 PXE client
> downloads shim, then shim downloads grub (with the PXE Base Code
> protocol), then grub downloads the kernel and the initial ramdisk, for a
> networked linux installation.
> >>>>>
> >>>>> I have encountered and/or investigated quite a few TFTP issues,
> >>>>> and most of the time they have occurred due to problematic DHCP or
> >>>>> TFTP config, or problems in UEFI applications, or lower level
> >>>>> network driver implementations. (In several other cases though,
> >>>>> people contributed edk2 fixes ultimately.)
> >>>>>
> >>>>> Anyhow, the first thing to in such cases is to capture a detailed
> packet log with tcpdump or wireshark, and analyze the packets against the
> DHCP / TFTP server config, the DHCP / PXE specs, and the edk2 code.
> Usually (again, in my experience, although I don't claim to be an
> expert), the DHCP / TFTP server config, or -- possibly -- the network is
> the culprit.
> >>>>>
> >>>>> Please capture some packets, and analyze them. Analyzing DHCP
> packets against the specs and the server config takes forever, but I've
> found it to be the only way. Good luck.
> >>>>>
> >>>>> Thanks
> >>>>> Laszlo
> >>>>>
> >>>>>
> >>>>>>
> >>>>>> Thanks and Regards,
> >>>>>> Shaveta
> >>>>>>
> >>>>>> -----Original Message-----
> >>>>>> From: edk2-devel [mailto:[email protected]] On
> >>>>>> Behalf Of Leekha Shaveta
> >>>>>> Sent: Thursday, September 24, 2015 11:15 AM
> >>>>>> To: [email protected]
> >>>>>> Subject: [edk2] Ping 1st packet reply missing
> >>>>>>
> >>>>>>
> >>>>>> Hi,
> >>>>>>
> >>>>>> My ping is working  with Intel's E1000 driver code.
> >>>>>>
> >>>>>> But everytime 1st packet is not getting received successfully, is
> there some known issue here, or something to be set/missing?
> >>>>>>
> >>>>>> Regards,
> >>>>>> Shaveta
> >>>>>>
> >>>>>> Ping Snippet:
> >>>>>> ===========
> >>>>>> Shell> ping 192.168.3.1ping 192.168.3.1 -n 16
> >>>>>> InstallProtocolInterface: 41D94CD2-35B6-455A-8258-D4E51334AADD
> DF56EA60 Ping 192.168.3.1 16 data bytes.
> >>>>>> GigAdapter->cur_rx_ind: 0
> >>>>>> GigAdapter->cur_rx_ind: 1
> >>>>>> 16 bytes from 192.168.3.1 : icmp_seq=2 ttl=0 time=1ms
> >>>>>> GigAdapter->cur_rx_ind: 2
> >>>>>> 16 bytes from 192.168.3.1 : icmp_seq=3 ttl=0 time=1ms
> >>>>>> GigAdapter->cur_rx_ind: 3
> >>>>>> 16 bytes from 192.168.3.1 : icmp_seq=4 ttl=0 time=1ms
> >>>>>> GigAdapter->cur_rx_ind: 4
> >>>>>> 16 bytes from 192.168.3.1 : icmp_seq=5 ttl=0 time=1ms
> >>>>>> GigAdapter->cur_rx_ind: 5
> >>>>>> 16 bytes from 192.168.3.1 : icmp_seq=6 ttl=0 time=1ms
> >>>>>> GigAdapter->cur_rx_ind: 6
> >>>>>> 16 bytes from 192.168.3.1 : icmp_seq=7 ttl=0 time=1ms
> >>>>>> GigAdapter->cur_rx_ind: 7
> >>>>>> 16 bytes from 192.168.3.1 : icmp_seq=8 ttl=0 time=1ms
> >>>>>> GigAdapter->cur_rx_ind: 0
> >>>>>> 16 bytes from 192.168.3.1 : icmp_seq=9 ttl=0 time=1ms
> >>>>>> GigAdapter->cur_rx_ind: 1
> >>>>>> 16 bytes from 192.168.3.1 : icmp_seq=10 ttl=0 time=1ms
> >>>>>> GigAdapter->cur_rx_ind: 2
> >>>>>> 16 bytes from 192.168.3.1 : icmp_seq=11 ttl=0 time=1ms
> >>>>>> GigAdapter->cur_rx_ind: 3
> >>>>>> 16 bytes from 192.168.3.1 : icmp_seq=12 ttl=0 time=1ms
> >>>>>> GigAdapter->cur_rx_ind: 4
> >>>>>> 16 bytes from 192.168.3.1 : icmp_seq=13 ttl=0 time=1ms
> >>>>>> GigAdapter->cur_rx_ind: 5
> >>>>>> 16 bytes from 192.168.3.1 : icmp_seq=14 ttl=0 time=1ms
> >>>>>> GigAdapter->cur_rx_ind: 6
> >>>>>> 16 bytes from 192.168.3.1 : icmp_seq=15 ttl=0 time=1ms
> >>>>>> GigAdapter->cur_rx_ind: 7
> >>>>>> 16 bytes from 192.168.3.1 : icmp_seq=16 ttl=0 time=1ms
> >>>>>>
> >>>>>> 16 packets transmitted, 15 received, 6% packet loss, time 15ms
> >>>>>>
> >>>>>> Rtt(round trip time) min=1ms max=1ms avg=1ms
> >>>>>>
> >>>>>>  Sent 1 packet:
> >>>>>> Shell> ping 192.168.3.1 -n 1
> >>>>>> InstallProtocolInterface: 41D94CD2-35B6-455A-8258-D4E51334AADD
> DF56EA60 Ping 192.168.3.1 16 data bytes.
> >>>>>> GigAdapter->cur_rx_ind: 4
> >>>>>>
> >>>>>> 1 packets transmitted, 0 received, 100% packet loss, time 0ms
> >>>>>>
> >>>>>>> -----Original Message-----
> >>>>>>> From: Leekha Shaveta-B20052
> >>>>>>> Sent: Saturday, September 12, 2015 11:34 PM
> >>>>>>> To: 'Benjamin Herrenschmidt'
> >>>>>>> <[email protected]<mailto:[email protected]>>;
> >>>>>>> 'Andrew Fish' <[email protected]<mailto:[email protected]>>;
> >>>>>>> '[email protected]'
> >>>>>>> <[email protected]<mailto:[email protected]>>;
> >>>>>>> 'Tian, Feng' <[email protected]<mailto:[email protected]>>
> >>>>>>> Subject: Re: PCI and non-1:1 mapping of MMIO space (Doubt o PCI
> >>>>>>> Root bridge IOMap and IoAllocateBuffer)
> >>>>>>>
> >>>>>>> Hi
> >>>>>>>
> >>>>>>> I was implementing PCI RootBridgeIo protocol and have some doubts
> in "IoMap" and "AllocateBuffer" functions of this protocol.
> >>>>>>>
> >>>>>>> In our platform, PCI space is starting form address
> 0x50_0000_0000 (40 bit addressable) And its mapping on PCI bus is like:
> >>>>>>> 50_0000_0000 => 0000_0000 (32 bit)
> >>>>>>>
> >>>>>>> From where the "AllocateBuffer" function should allocate memory
> when asked by any PCI device?
> >>>>>>> What is the meaning of "Allocates pages that are suitable for an
> >>>>>>> EfiPciOperationBusMasterCommonBuffer or
> >>>>>>> EfiPciOperationBusMasterCommonBuffer64 mapping"
> >>>>>>>
> >>>>>>> How to manage mapping in "RootBridgeIoMap" function?
> >>>>>>>
> >>>>>>> Thanks and Regards,
> >>>>>>> Shaveta
> >>>>>>>
> >>>>>>> -----Original Message-----
> >>>>>>> From: edk2-devel [mailto:[email protected]] On
> >>>>>>> Behalf Of Tian, Feng
> >>>>>>> Sent: Wednesday, August 26, 2015 7:24 AM
> >>>>>>> To: Benjamin Herrenschmidt
> >>>>>>> <[email protected]<mailto:[email protected]>>;
> >>>>>>> Andrew Fish <[email protected]<mailto:[email protected]>>
> >>>>>>> Cc: [email protected]<mailto:[email protected]>
> >>>>>>> <[email protected]<mailto:[email protected]>>; Tian,
> >>>>>>> Feng <[email protected]<mailto:[email protected]>>
> >>>>>>> Subject: Re: [edk2] PCI and non-1:1 mapping of MMIO space
> >>>>>>>
> >>>>>>> Hi, Ben & Andrew
> >>>>>>>
> >>>>>>> The GetBarAttributes() returns a set of ACPI 2.0 resource
> descriptors that describe the current configuration of the BARs of the
> PCI controller.
> >>>>>>>
> >>>>>>> What I understood is the returned value of GetBarAttributes() is
> a CPU address rather than a PCI address. From the view of PciIo, nobody
> needs to know/use Bar's PCI address.
> >>>>>>>
> >>>>>>> Thanks
> >>>>>>> Feng
> >>>>>>>
> >>>>>>> -----Original Message-----
> >>>>>>> From: edk2-devel [mailto:[email protected]] On
> >>>>>>> Behalf Of Benjamin Herrenschmidt
> >>>>>>> Sent: Wednesday, August 26, 2015 07:54
> >>>>>>> To: Andrew Fish
> >>>>>>> Cc: [email protected]<mailto:[email protected]>
> >>>>>>> Subject: Re: [edk2] PCI and non-1:1 mapping of MMIO space
> >>>>>>>
> >>>>>>> (Argh, I keep sending these from my IBM address which isn't the
> one on the list. Sorry Andrew for the duplicates).
> >>>>>>>
> >>>>>>> On Tue, 2015-08-25 at 14:48 -0700, Andrew Fish wrote:
> >>>>>>>
> >>>>>>>>
> >>>>>>>>> So if we stick to the definition of GetBarAttributes() only
> >>>>>>>>> returning a BAR value, then it's impossible to implement a PCI
> >>>>>>>>> GOP driver by following the spec.
> >>>>>>>>>
> >>>>>>>> I came to that conclusion too.
> >>>>>>>
> >>>>>>> :(
> >>>>>>>
> >>>>>>>>> Now, there's one thing that might work, which would be to
> >>>>>>>>> exploit the "AddressTranslationOffset" field of the ACPI
> >>>>>>>>> resource descriptor.
> >>>>>>>>>
> >>>>>>>> How do you represent a system like this in ACPI? It might be a
> >>>>>>>> good idea to solve it in a similar way.
> >>>>>>>
> >>>>>>> Unfortunately, I am not familiar with the details of ACPI, I only
> have a high level understanding of it. Our platforms have been Open
> Firmware based for as far as I've been involved with them and lately, we
> use C -generated flat device-tree along with a custom runtime
> firmwarealled a OPAL).
> >>>>>>>
> >>>>>>> At this point I'm not (yet) considering a move to ACPI. I'm doing
> a proof of concept ppc64 UEFI port to get a feel of the water temperature
> more than anything else (though I'll be happy to contribute things back
> once I get the appropriate legalese sorted internally to IBM).
> >>>>>>>
> >>>>>>>> The PCI IO was designed to not required the 1:1 mapping. The
> >>>>>>>> direct access to the Framebuffer came along later, as was
> >>>>>>>> mostly a fallback for the OS on a safe mode boot kind of thing.
> >>>>>>>> I think we missed passing the frame buffer out on a system that
> was not 1:1.
> >>>>>>>
> >>>>>>> Ok. Well, it will be needed even on non-1:1 systems, we will have
> similar requirements of the OS needing an early boot framebuffer etc...
> >>>>>>> and I suspect the desire to directly access BARs (at least
> >>>>>>> prefetchable
> >>>>>>> ones) from the CPU isn't going away in other areas either.
> >>>>>>>
> >>>>>>> So maybe we should try to address this. I'm trying to figure out
> how to join the appropriate working groups etc... so I can participate in
> the spec side discussion as well (which I'll need to do for other reasons
> anyway if we are ever going to officially defining the ppc64 ABI in the
> spec).
> >>>>>>>
> >>>>>>> Cheers,
> >>>>>>> Ben.
> >>>>>>>
> >>>>>>>> Thanks,
> >>>>>>>>
> >>>>>>>> Andrew Fish
> >>>>>>>>
> >>>>>>>>> Cheers,
> >>>>>>>>> Ben.
> >>>>>>> _______________________________________________
> >>>>>>> edk2-devel mailing list
> >>>>>>> [email protected]<mailto:[email protected]>
> >>>>>>> https://lists.01.org/mailman/listinfo/edk2-devel
> >>>>>>> _______________________________________________
> >>>>>>> edk2-devel mailing list
> >>>>>>> [email protected]<mailto:[email protected]>
> >>>>>>> https://lists.01.org/mailman/listinfo/edk2-devel
> >>>>>> _______________________________________________
> >>>>>> edk2-devel mailing list
> >>>>>> [email protected]
> >>>>>> https://lists.01.org/mailman/listinfo/edk2-devel
> >>>>>> _______________________________________________
> >>>>>> edk2-devel mailing list
> >>>>>> [email protected]
> >>>>>> https://lists.01.org/mailman/listinfo/edk2-devel
> >>>>>>
> >>>>>
> >>>>
> >>>
> >>
> >
> 
> _______________________________________________
> edk2-devel mailing list
> [email protected]
> https://lists.01.org/mailman/listinfo/edk2-devel
_______________________________________________
edk2-devel mailing list
[email protected]
https://lists.01.org/mailman/listinfo/edk2-devel

Reply via email to