A mechanism for offloading the management of send queues in a split socket
stack environment, including efficient split socket queue flow control
and TCP/IP retransmission support. As consumers initiate send operations,
send work queue entries (SWQEs) are created by an Upper Layer Protocol
(ULP) and written to the send work queue (SWQ). The Internet Protocol
Suite Offload Engine (IPSOE) is notified of a new entry to the SWQ and it
subsequently reads this entry that contains pointers to the data that is
to be transmitted. After the data is transmitted and acknowledgments are
received, the IPSOE creates a completion queue entry (CQE) that is
written into the completion queue (CQ). After the CQE is written, the ULP
subsequently processes the entry and removes it from the CQE, freeing up
a space in both the SWQ and CQ. The number of entries available in the
SWQ are monitored by the ULP so that it does not overwrite any valid
entries. Likewise, the IPSOE monitors the number of entries available in
the CQ, so as not overwrite the CQ. The flow control between the ULP and
the IPSOE is credit based. The passing of CQ credits is the only explicit
mechanism required to manage flow control of both the SWQ and the CQ
between the ULP and the IPSOE.