Patent ID: 7499452

Claim:
A method of communicating with an external device over a bus utilizing one or more virtual channels, at least one of the virtual channels utilizing a transmit buffer to hold commands and data to be sent in packets to the external device, comprising: maintaining a current sequence count for packets to be transmitted to the external device; receiving a packet from the external device indicating an expected sequence count that does not match the current sequence count; and adjusting the current sequence count to match the expected sequence count by modifying one or more pointers into the transmit buffer, wherein the adjusting comprises: setting a first pointer indicating an earliest packet in the transmit buffer that has been sent, but not acknowledged, to the same value as the expected sequence count; adjusting a second pointer indicative of a location in the transmit buffer containing an earliest packet that has been transmitted but not yet cleared from the transmit buffer; once the second pointer has reached a third pointer indicative of a next packet to be sent, adjusting the second and third pointers together; once the second and third pointers have reached a fourth pointer indicative of the next entry in the transmit buffer to be written to, adjusting the second, third and fourth pointers to match the first pointer; and subsequently, transmitting a packet having the expected sequence count to the external device.