Patent US6049842A successfully refreshed from Google Patents.
← Back to Patent Explorer
US6049842A Expired / Lapsed US ⏱️ 0.0 years remaining

Efficient data transfer mechanism for input/output devices

Assignee: International Business Machines Corp
•
Filing: 1997-05-01
•
Granted: 2000-04-11
•
Expires: 2017-05-01
📄 Original PDF 🌐 Google Patents 🔄 Sync Now

Abstract

Abstract A method for transferring data between non-contiguous buffers in a memory and an I/O device via a system I/O bus uses a descriptor queue stored in memory. Each descriptor points to a buffer and includes the length of the buffer. The I/O device is provided with the base address of the queue, the length of the queue and a current address which at initialization is the same as the base address. When data is to be transferred a device driver located in the processor sends the number of available descriptors (DescrEnq) to the I/O device which accesses the descriptors individually or in burst mode to gain access to the data buffers identified by the descriptors.

Inventors

  • 👤 Henry Michael Garrett
  • 👤 William G. Holland
  • 👤 Joseph Franklin Logan
  • 👤 Joseph Gerald McDonald
  • 👤 John Kenneth Stacy

Bibliographic Details

Application Number —
Jurisdiction US
Data Source google_patents
Last Synchronized 2026-11-09 07:07
CPC Classifications
G; G06; G06F; G06F5/00; G06F5/06; G06F5/065; G06F3/00; G06F3/06; G06F2205/00; G06F2205/06; G06F2205/064; G06F2205/066

Claims Analysis

Total Claims: 28
Claim 1
Independent Claim 236 words
In a computer system having a processor, a memory and a system bus for connecting an input/output (I/O) device through a single channel I/O adapter to said memory and processor, a method for transferring data between non-contiguous buffers in the memory and the single channel I/O adapter comprising the steps: defining with a device driver a descriptor queue (DQ) in the memory having a base address (DescrBase) and an n descriptor capacity (DescrCount); at initialization using said device driver to store in the I/O device the DescrBase, the DescrCount and a third value DescrCurrent which at initialization equals the value of the DescrBase; building with the device driver one or more descriptors in the DQ, each corresponding to a different one of the data buffers, said descriptors including at least the starting address of the buffer and a byte count; adding the number of descriptors built to a descriptor enqueue (DescrEnq) value maintained at the I/O device; using a state machine to examine the DescrEnq value for a non-zero condition and fetching with said state machine a number of descriptors from the DQ corresponding to the DescrEnq value starting at the address specified by the DescrCurrent value and incrementing the DescrCurrent value and decrementing the DescrEnq value each time a descriptor is fetched; and using the state machine to read in memory and to transfer across the system bus the buffers specified by the fetched descriptors.
Claim 2
Dependent Claim 236 words
In a computer system having a processor, a memory and a system bus for connecting an input/output (I/O) device through a single channel I/O adapter to said memory and processor, a method for transferring data between non-contiguous buffers in the memory and the single channel I/O adapter comprising the steps: defining with a device driver a descriptor queue (DQ) in the memory having a base address (DescrBase) and an n descriptor capacity (DescrCount); at initialization using said device driver to store in the I/O device the DescrBase, the DescrCount and a third value DescrCurrent which at initialization equals the value of the DescrBase; building with the device driver one or more descriptors in the DQ, each corresponding to a different one of the data buffers, said descriptors including at least the starting address of the buffer and a byte count; adding the number of descriptors built to a descriptor enqueue (DescrEnq) value maintained at the I/O device; using a state machine to examine the DescrEnq value for a non-zero condition and fetching with said state machine a number of descriptors from the DQ corresponding to the DescrEnq value starting at the address specified by the DescrCurrent value and incrementing the DescrCurrent value and decrementing the DescrEnq value each time a descriptor is fetched; and using the state machine to read in memory and to transfer across the system bus the buffers specified by the fetched descriptors.
Claim 3
Dependent Claim 243 words
In a computer system having a processor, a memory and a system bus for connecting an input/output (I/O) device to said memory and processor, a method for transferring data between non-contiguous buffers in the memory and the I/O device comprising the steps: defining a descriptor queue (DQ) in the memory having a base address (DescrBase) and an n descriptor capacity (DescrCount); at initialization storing in the I/O device the DescrBase and the DescrCount and storing a third value DescrCurrent which at initialization equals the value of the DescrBase; effecting transfer of data stored in one or more buffers in the memory to the I/O device by; building one or more descriptors in the DQ, each corresponding to a different one of the data buffers, said descriptors including at least the starting address of the buffer and a byte count, adding the number of descriptors built since last added to a descriptor enqueue (DescrEnq) value maintained at the I/O device; at the I/O device using a state machine to examine the DescrEnq value for a non-zero condition and fetching a number of descriptors from the DQ corresponding to the DescrEnq value starting at the address specified by the DescrCurrent value and incrementing the DescrCurrent value each time a descriptor is fetched and decrementing the DescrEnq value each time a descriptor is fetched; and using the state machine to read in memory and transferring across the system bus the buffers specified by the fetched descriptors.
Claim 4
Dependent Claim 243 words
In a computer system having a processor, a memory and a system bus for connecting an input/output (I/O) device to said memory and processor, a method for transferring data between non-contiguous buffers in the memory and the I/O device comprising the steps: defining a descriptor queue (DQ) in the memory having a base address (DescrBase) and an n descriptor capacity (DescrCount); at initialization storing in the I/O device the DescrBase and the DescrCount and storing a third value DescrCurrent which at initialization equals the value of the DescrBase; effecting transfer of data stored in one or more buffers in the memory to the I/O device by; building one or more descriptors in the DQ, each corresponding to a different one of the data buffers, said descriptors including at least the starting address of the buffer and a byte count, adding the number of descriptors built since last added to a descriptor enqueue (DescrEnq) value maintained at the I/O device; at the I/O device using a state machine to examine the DescrEnq value for a non-zero condition and fetching a number of descriptors from the DQ corresponding to the DescrEnq value starting at the address specified by the DescrCurrent value and incrementing the DescrCurrent value each time a descriptor is fetched and decrementing the DescrEnq value each time a descriptor is fetched; and using the state machine to read in memory and transferring across the system bus the buffers specified by the fetched descriptors.
Claim 5
Dependent Claim 189 words
In a computer system having a processor, a memory and a system bus for connecting an input/output (I/O) device to said memory and processor, a method for transferring data between an I/O device and non-contiguous buffers in the memory comprising the steps: defining a descriptor queue (DQ) in the memory having a base address (DescrBase) and an n descriptor capacity (DescrCount); at initialization storing in the I/O device the DescrBase, the DescrCount and storing a third value DescrCurrent which at initialization equals the value of the DescrBase; building a number of descriptors in the DQ and loading a descriptor enqueue (DescrEnq) value at the I/O device indicating the number of descriptors built and available; examining by a state machine the DescrEnq value for a non-zero condition and fetching by the state machine during said non-zero condition descriptors as required from the DQ starting at the address specified by the DescrCurrent value and incrementing the DescrCurrent value and decrementing the DescrEnq value each time a descriptor is fetched; and transferring by the state machine across the system bus received data for storage in the buffers specified by the fetched descriptors.
Claim 6
Dependent Claim 189 words
In a computer system having a processor, a memory and a system bus for connecting an input/output (I/O) device to said memory and processor, a method for transferring data between an I/O device and non-contiguous buffers in the memory comprising the steps: defining a descriptor queue (DQ) in the memory having a base address (DescrBase) and an n descriptor capacity (DescrCount); at initialization storing in the I/O device the DescrBase, the DescrCount and storing a third value DescrCurrent which at initialization equals the value of the DescrBase; building a number of descriptors in the DQ and loading a descriptor enqueue (DescrEnq) value at the I/O device indicating the number of descriptors built and available; examining by a state machine the DescrEnq value for a non-zero condition and fetching by the state machine during said non-zero condition descriptors as required from the DQ starting at the address specified by the DescrCurrent value and incrementing the DescrCurrent value and decrementing the DescrEnq value each time a descriptor is fetched; and transferring by the state machine across the system bus received data for storage in the buffers specified by the fetched descriptors.
Claim 7
Dependent Claim 230 words
In a computer system having a processor including an input/output (I/O) device driver, a memory, host bridge logic and a system bus for connecting an (I/O) device to said memory and processor via said host bridge logic, a method for transferring data between non-contiguous buffers in the memory and the I/O device comprising the steps: defining a descriptor queue (DQ) in the memory having a base address (DescrBase) and an n descriptor capacity (DescrCount); at initialization storing in the I/O device the DescrBase and the DescrCount and storing a third value DescrCurrent which at initialization equals the value of the DescrBase; building a number of descriptors in the DQ, each corresponding to a different one of the data buffers, said descriptors including at least the starting address of the buffer and a byte count and loading a descriptor enqueue (DescrEnq) value at the I/O device indicating the number of descriptors built and available; at the I/O device using a state machine to examine the DescrEnq value for a non-zero condition and fetching during said non-zero condition descriptors as required from the DQ starting at the address specified by the DescrCurrent value and incrementing the DescrCurrent value and decrementing the DescrEnq value each time a descriptor is fetched; and using the state machine to transfer across the system bus received data for storage in the buffers specified by the fetched descriptors.
Claim 8
Dependent Claim 230 words
In a computer system having a processor including an input/output (I/O) device driver, a memory, host bridge logic and a system bus for connecting an (I/O) device to said memory and processor via said host bridge logic, a method for transferring data between non-contiguous buffers in the memory and the I/O device comprising the steps: defining a descriptor queue (DQ) in the memory having a base address (DescrBase) and an n descriptor capacity (DescrCount); at initialization storing in the I/O device the DescrBase and the DescrCount and storing a third value DescrCurrent which at initialization equals the value of the DescrBase; building a number of descriptors in the DQ, each corresponding to a different one of the data buffers, said descriptors including at least the starting address of the buffer and a byte count and loading a descriptor enqueue (DescrEnq) value at the I/O device indicating the number of descriptors built and available; at the I/O device using a state machine to examine the DescrEnq value for a non-zero condition and fetching during said non-zero condition descriptors as required from the DQ starting at the address specified by the DescrCurrent value and incrementing the DescrCurrent value and decrementing the DescrEnq value each time a descriptor is fetched; and using the state machine to transfer across the system bus received data for storage in the buffers specified by the fetched descriptors.
Claim 9
Independent Claim 48 words
The method set forth in any one of claims 1-4 including the steps: using the state machine to count the number of descriptor fetches; and, using the state machine to change the DescrCurrent value to the DescrBase value when the number of descriptor fetches exceeds the DescrCount value.
Claim 10
Independent Claim 85 words
A device driver comprising: a substrate on which a computer program is recorded, said computer program including a first code module that builds a stack of N descriptors, wherein N≧1 and each descriptor describes a data buffer; a second code module that writes N in a register; a third code module that increments a pointer from a first position to a tail position in said stack; and a fourth code module that monitors a selected position of a status queue to detect a predetermined condition.
Claim 11
Independent Claim 85 words
A device driver comprising: a substrate on which a computer program is recorded, said computer program including a first code module that builds a stack of N descriptors, wherein N≧1 and each descriptor describes a data buffer; a second code module that writes N in a register; a third code module that increments a pointer from a first position to a tail position in said stack; and a fourth code module that monitors a selected position of a status queue to detect a predetermined condition.
Claim 12
Dependent Claim 27 words
The device driver of claim 6 further including a fifth code module that processes data in said data buffer if the predetermined condition includes a non-zero integer.
Claim 13
Dependent Claim 26 words
The device driver of claim 7 wherein the fifth code module returns the data buffers, from which data as been processed, to a free buffer pool.
Claim 14
Dependent Claim 29 words
The device driver of claim 6 further including a sixth code module that resets the non-zero integer to zero after the data in said data buffer has been processed.
Claim 15
Dependent Claim 35 words
The device driver of claim 9 further including a seventh code module that increments a printer associated with the status queue from a last process position to a current position whereat processing is to begin.
Claim 16
Dependent Claim 153 words
A controller for transferring data between a host system and external devices that are connected to the network controller the host system having memory with data buffers, a descriptor queue and a receive status queue, the controller comprising: a first register that maintains a number of descriptors that are currently available in the descriptor queue for use in a direct memory access (DMA) transfer; a second register that maintains an address of the location of the first descriptor of the currently available descriptors in the descriptor queue; a buffer for temporarily storing currently available descriptors that are obtained from the descriptor queue; and hardware circuitry that controls obtaining the currently available descriptors from the descriptor queue for temporary storage in the descriptor FIFO, the circuitry retrieving as many currently available descriptors as possible to fill the descriptor FIFO, based on the number in the first register and the address in the second register.
Claim 17
Dependent Claim 153 words
A controller for transferring data between a host system and external devices that are connected to the network controller the host system having memory with data buffers, a descriptor queue and a receive status queue, the controller comprising: a first register that maintains a number of descriptors that are currently available in the descriptor queue for use in a direct memory access (DMA) transfer; a second register that maintains an address of the location of the first descriptor of the currently available descriptors in the descriptor queue; a buffer for temporarily storing currently available descriptors that are obtained from the descriptor queue; and hardware circuitry that controls obtaining the currently available descriptors from the descriptor queue for temporary storage in the descriptor FIFO, the circuitry retrieving as many currently available descriptors as possible to fill the descriptor FIFO, based on the number in the first register and the address in the second register.
Claim 18
Dependent Claim 13 words
The controller of claim 11 wherein the hardware circuitry includes a state machine.
Claim 19
Dependent Claim 34 words
The controller of claim 12 wherein the state machine decrements the number of said first register by a value equal to the number of descriptors removed from said descriptor queue by the state machine.
Claim 20
Dependent Claim 102 words
A network interface card comprising: a single channel operatively coupling said card to at least one device; a first register that holds a base address whereat a descriptor queue is located in a memory; a second register that holds a count indicating the number of entries in the descriptor queue; a storage that stores descriptors transferred from the descriptor queue; and a state machine that controls transferring currently available descriptors from the descriptor queue for temporary storage in the storage wherein the number of descriptors transferred is based upon the number in the second register and the address in the first register.
Claim 21
Dependent Claim 102 words
A network interface card comprising: a single channel operatively coupling said card to at least one device; a first register that holds a base address whereat a descriptor queue is located in a memory; a second register that holds a count indicating the number of entries in the descriptor queue; a storage that stores descriptors transferred from the descriptor queue; and a state machine that controls transferring currently available descriptors from the descriptor queue for temporary storage in the storage wherein the number of descriptors transferred is based upon the number in the second register and the address in the first register.
Claim 22
Dependent Claim 34 words
The controller of claim 11 or the network interface card of claim 14 further including a third register that holds an address indicating the current position in the queue whereat processing is being done.
Claim 23
Dependent Claim 71 words
The controller of claim 11 or the network interface card of claim 14 further including: a status base register that holds a base address whereat a status queue is located in memory; a status count register that holds a count representative of the number of entries in the status queue; and a status current register holding an address indicating a current position in said status register whereat processing is being done.
Claim 24
Dependent Claim 85 words
A host system comprising: a memory; a plurality of data buffers that store data distributed throughout said memory; a device driver that generates a descriptor queue containing entries identifying locations of data buffer and actions to be taken relative to data in said buffers; and a status queue that holds information regarding actions done to data in said registers wherein said device driver monitors the status queue and return buffers to a free buffer pool based upon a predetermined condition detected at said status queue.
Claim 25
Dependent Claim 85 words
A host system comprising: a memory; a plurality of data buffers that store data distributed throughout said memory; a device driver that generates a descriptor queue containing entries identifying locations of data buffer and actions to be taken relative to data in said buffers; and a status queue that holds information regarding actions done to data in said registers wherein said device driver monitors the status queue and return buffers to a free buffer pool based upon a predetermined condition detected at said status queue.
Claim 26
Dependent Claim 153 words
A data transfer mechanism for use in a computer comprising: a memory; a descriptor queue position in said memory; a device driver that generates and loads entries in said descriptor queue, said entries at least indicating locations whereat data buffers are located in the memory; a single channel adapter; a bus operatively coupling the single channel adapter to the memory; a descriptor base address register positioned in the adapter; a descriptor count register positioned in the adapter; a descriptor current address register positioned in the adapter; a descriptor enqueue register positioned in the adapter wherein each of the registers is loaded with control information by said device driver at an initialization period; a memory, in said adapter, that temporarily stores descriptors; and a state machine that accesses selected ones of the registers and transfer descriptors from the descriptor queue to the memory based upon information contained in said selected ones of the registers.
Claim 27
Dependent Claim 153 words
A data transfer mechanism for use in a computer comprising: a memory; a descriptor queue position in said memory; a device driver that generates and loads entries in said descriptor queue, said entries at least indicating locations whereat data buffers are located in the memory; a single channel adapter; a bus operatively coupling the single channel adapter to the memory; a descriptor base address register positioned in the adapter; a descriptor count register positioned in the adapter; a descriptor current address register positioned in the adapter; a descriptor enqueue register positioned in the adapter wherein each of the registers is loaded with control information by said device driver at an initialization period; a memory, in said adapter, that temporarily stores descriptors; and a state machine that accesses selected ones of the registers and transfer descriptors from the descriptor queue to the memory based upon information contained in said selected ones of the registers.
Claim 28
Dependent Claim 38 words
The data transfer mechanism of claim 18 wherein the state machine further causes data to be transferred from the adapter across the bus into the data buffers or from the data buffers across the bus into the adapter.

References Cited (Backward Citations)

US4905184A Cited
US4888691A Cited
US5050066A Cited
US5459839A Cited
US5566352A Cited
US5708779A Cited
US5717952A Cited
US5870627A Cited
US5828901A Cited

USPTO Annuity & Maintenance Windows

Annuity Stage Window Opens Payment Deadline Surcharge Period Until Estimated Fee Status
3.5 Years (Year 4) 2003-04-11 2003-10-11 2004-04-11 $2000.00 Window Closed / Lapsed
7.5 Years (Year 8) 2007-04-11 2007-10-11 2008-04-11 $3760.00 Window Closed / Lapsed
11.5 Years (Year 12) 2011-04-11 2011-10-11 2012-04-11 $7700.00 Window Closed / Lapsed

Assigned Categories & Tags

No categories assigned to this patent yet.

Assign Category Tag