@ -9480,8 +9480,10 @@ hcall ( const uint64 H_SEND_LOGICAL_LAN, /* Send a message on the logical LAN */
uint64 buff-5, /* with a control byte of “invalid” indicates the end of */
uint64 buff-5, /* with a control byte of “invalid” indicates the end of */
uint64 buff-6, /* the message (only the number of buffers needed are */
uint64 buff-6, /* the message (only the number of buffers needed are */
/* used). */
/* used). */
uint64 continue-token /* value of 0 on first call, value returned in R4 on */
uint64 continue-token, /* value of 0 on first call, value returned in R4 on */
/* H_Busy */
/* H_Busy */
uint64 mss /* The Maximum Segment Size to use when segmenting */
/* the message */
);]]></programlisting>
);]]></programlisting>
<para>The H_Dropped return code indicates to the sender that one or more
<para>The H_Dropped return code indicates to the sender that one or more
@ -9527,6 +9529,11 @@ hcall ( const uint64 H_SEND_LOGICAL_LAN, /* Send a message on the logical LAN */
again but use the value returned in R4 from the previous call as the
again but use the value returned in R4 from the previous call as the
value of continue-token.</para>
value of continue-token.</para>
</listitem>
</listitem>
<listitem>
<para>mss: The Maximum Segment Size to use if segmenting of the message
is necessary.</para>
</listitem>
</itemizedlist>
</itemizedlist>
</simplesect>
</simplesect>
@ -9548,10 +9555,22 @@ hcall ( const uint64 H_SEND_LOGICAL_LAN, /* Send a message on the logical LAN */
proceeding.</para>
proceeding.</para>
</listitem>
</listitem>
<listitem>
<para>If the caller has enabled large send/receive, verify the MSS is
0 or at least 16 – else H_Parameter.</para>
</listitem>
<listitem>
<listitem>
<para>Verifies the VLAN number -- else H_Parameter.</para>
<para>Verifies the VLAN number -- else H_Parameter.</para>
</listitem>
</listitem>
<listitem>
<para>If the caller has enabled large send/receive and the MSS is not 0,
verify the message contains an Ethernet packet using IPv4 or IPv6 and
TCP – else H_Parameter. The complete TCP header must be within the
first 4096 bytes of the frame.</para>
</listitem>
<listitem>
<listitem>
<para>Proceeds down the 6 buffer descriptors until the first one that
<para>Proceeds down the 6 buffer descriptors until the first one that
has a length of 0</para>
has a length of 0</para>
@ -9642,6 +9661,15 @@ hcall ( const uint64 H_SEND_LOGICAL_LAN, /* Send a message on the logical LAN */
</listitem>
</listitem>
<listitem>
<para>If the MSS parameter is being used, the receiver IOA is not enabled for large receive, and the TCP payload in the frame is larger than the value of the mss parameter, the TCP payload of the message is divided into separate messages with copies of the MAC, VLAN, IP, and TCP headers in each.</para>
</listitem>
<listitem>
<para>For each message segment (packets without an MSS will be sent
as a single segment):</para>
<itemizedlist>
<listitem>
<listitem>
<para>Searches the receiver’s receive queue for a suitable buffer
<para>Searches the receiver’s receive queue for a suitable buffer
and atomically dequeues it:</para>
and atomically dequeues it:</para>
@ -9655,6 +9683,37 @@ hcall ( const uint64 H_SEND_LOGICAL_LAN, /* Send a message on the logical LAN */
</itemizedlist>
</itemizedlist>
</listitem>
</listitem>
<listitem>
<para>If the receiver has enabled large-receive support, write
the MSS value in the second 8 bytes of the selected receive
buffer.</para>
</listitem>
<listitem>
<para>If segmentation is required, firmware will update portions
of the IP and TCP headers as necessary.
<itemizedlist>
<listitem>
<para>If the packet is using IPv4, firmware will always
regenerate the checksum for each segment.</para>
</listitem>
<listitem>
<para>For each segment, firmware will increment the IP
ident field by 1. It is the sender's responsibility
to ensure that no other packets are sent with the
colliding ident values.</para>
</listitem>
<listitem>
<para>If the receiver has not enabled checksum offload,
firmware will update the checksum in the TCP header.</para>
</listitem>
</itemizedlist>
</para>
</listitem>
<listitem>
<listitem>
<para>Copy the send data in to the selected receive buffer, build a
<para>Copy the send data in to the selected receive buffer, build a
receive queue entry, and generate an interrupt to the receiver if the
receive queue entry, and generate an interrupt to the receiver if the
@ -9665,8 +9724,13 @@ hcall ( const uint64 H_SEND_LOGICAL_LAN, /* Send a message on the logical LAN */
<listitem>
<listitem>
<para>If any frames were dropped return H_Dropped else return
<para>If any frames were dropped return H_Dropped else return
H_Success.</para>
H_Success. This may happen if the receiver is low on buffers of the
correct size.</para>
</listitem>
</listitem>
</itemizedlist>
</listitem>
</itemizedlist>
</itemizedlist>
<para><emphasis role="bold">Firmware Implementation Note:</emphasis> If during the
<para><emphasis role="bold">Firmware Implementation Note:</emphasis> If during the
@ -10005,7 +10069,9 @@ hcall ( const uint64 H_CHANGE_LOGICAL_LAN_MAC, /* Change the MAC address */
<para>This bit is implemented when PHYP supports sending TCP
<para>This bit is implemented when PHYP supports sending TCP
packets with a non-zero TCP checksum field when bit 6 of the
packets with a non-zero TCP checksum field when bit 6 of the
buffer descriptor (the "No Checksum" bit) is set. This bit
buffer descriptor (the "No Checksum" bit) is set. This bit