1. A method of receiving data from a device, comprising: reading a receive descriptor; extracting a buffer address and buffer length from the descriptor, wherein the buffer address and buffer length define a buffer in system memory; sensing receipt of data by the device; transferring the data from the device to an RX buffer memory; transferring status associated with the data to a status buffer memory; waiting for a predetermined number of data items to accumulate in the RX buffer memory; when a predetermined number of data items have accumulated in the RX buffer memory, reading data from the RX buffer memory, gaining control of a bus to system memory and, while in control of the bus, writing the data read from the RX buffer memory to the buffer in system memory; determining whether the receive descriptor should be closed; and if the receive descriptor should be closed, writing status derived from the status stored in the status buffer memory to the receive descriptor.