In one example, NID 100 is used to retrieve three portions of data 118–120 from host storage 121 and to output them to network 102 in the form of a data payload of a packet. In the situation where the three portions 118–120 are stored on different pages in host storage 121, it may be necessary to move the data to DRAM 106 individually. The three portions 118–120 are to all be present in DRAM 106 before packet transmission begins.
In the device of
In the example of
To move the first portion of data 118 from host storage 121 to DRAM 106, processor 109 writes a DMA command into SRAM 112. DMA controller 115 retrieves the DMA command from SRAM 112 via SRAM controller 111 and lines 124. DMA controller 115 then executes the command by sending a request to PCI bus interface 114 via lines 125. PCI bus interface 114 responds by retrieving data 118 from a particular address X1 and supplying that data to SRAM controller 111 via lines 126. PCI bus interface 114 reports completion of this action by returning an acknowledge signal to DMA controller 115 via line 127. SRAM controller 111 writes the data into the buffer in SRAM 112. DMA controller 115 then issues a request to DRAM controller 113 via lines 128. Data from SRAM 112 is then transferred via SRAM controller 111, lines 129, and DRAM controller 113 to a location 130 (address Z1) in DRAM 106. When this action is complete, DRAM controller 113 returns an acknowledge signal to DMA controller 115 via line 131. DMA controller 115 sets a bit corresponding to this completed DMA command in the DMA command complete register 117. In this way, each of the three portions of data 118–120 is moved through SRAM 112 and into DRAM 106. Although the three data portions are illustrated being stored in DRAM 106 at different locations Z1, Z2 and Z3, this need not be the case. All three data portions are sometimes stored in one continuous block.
In the particular NID 100 of
It may be undesirable for processor 109 on network interface device 100 to have to monitor a set of multiple DMA commands to make sure that all of the DMA commands in the set have been executed. Monitoring a set of multiple DMA commands can be complex. Monitoring multiple such DMA commands can involve multiple processor instructions and consequently can slow processor execution.
In accordance with one embodiment of the present invention, a DMA command queue is maintained on a network interface device. A processor on the network interface device pushes values onto the DMA command queue. Although a value pushed onto the queue can be a DMA command itself in some embodiments, each value pushed preferably includes an address that identifies a location where a particular DMA command is stored. The DMA command queue is popped such that a DMA controller on the network interface device executes DMA commands in the order in which the processor pushed the associated values onto the DMA command queue. Complications associated with DMA commands being issued by the processor in one order but being completed by the DMA controller in another order are thereby alleviated or avoided.
In one embodiment, a DMA command complete queue is also maintained by dedicated queue manager hardware on the network interface device. Upon completing a DMA command, the DMA controller pushes a value onto the DMA command complete queue. The value identifies the DMA command completed. The processor determines which DMA commands have been completed by popping the DMA command complete queue. In a situation where a set of multiple DMA commands must be executed before software executing on the processor takes a particular software branch, the processor does not monitor each of the multiple DMA commands to make sure that all of the commands have been completed. Rather, the processor monitors the values popped off the DMA command complete queue. When the value popped off the DMA command complete queue is the value indicative of the last DMA command of the multiple DMA commands, then the processor takes the particular branch. In one embodiment, the multiple DMA commands are commands to move portions of data from different pages in host storage onto the network interface device, where those portions of data are to be put together on the network interface device to form a data payload of a network packet. All the portions of data are moved onto the network interface device before the processor takes the software branch that causes the packet to be formed and output from the network interface device.
In some embodiments, the network interface device maintains multiple DMA command queues. Some of the DMA command queues are for moving data from one location on the network interface device to another location on the network interface device. For example, multiple frames of a session layer message are, in one embodiment, received onto the network interface device and stored in DRAM. A first part of each of the frames is then moved from DRAM to SRAM (from a first location on the network interface device to a second location on the network interface device, the first location being the DRAM and second location being the SRAM), where each DMA move is carried out by a DMA controller on the network interface device executing an associated DMA command from a DMA command queue. The DMA command queue is maintained by hardware queue manager circuitry on the network interface device. Alternatively, the DMA command queue is a software queue maintained on the network interface device. The first parts of the frames are moved into SRAM so that a processor on the network interface device can then examine the headers of the frames and determine from those headers what to do with the associated frames. In some embodiments, there is a separate DMA controller for each DMA command queue.
Other embodiments are described. This summary does not purport to define the invention. The claims, and not this summary, define the invention.
Although not illustrated in
The particular network interface device 200 of
Network interface device 200 performs transport and network layer protocol processing on certain network traffic using hardware specially-designed to speed such protocol processing (fast-path processing), thereby accelerating the processing of this traffic and thereby off-loading the main protocol processing stack (slow-path processing) on the host computer. For additional details on the structure and operation of one particular embodiment of the network interface device 200, see U.S. patent application Ser. No. 09/464,283, filed Dec. 15, 1999 (the subject matter of which is incorporated herein by reference). For additional details on the structure and operation of one embodiment of queue manager hardware 209, see U.S. patent application Ser. No. 09/416,925, filed Oct. 13, 1999 (the subject matter of which is incorporated herein by reference).
Queue manager hardware 209 maintains a DMA command queue 217 and a DMA command complete queue 218. Although the DMA command queue 217 and the DMA command complete queue 218 are illustrated in
Processor 210 can cause values to be pushed onto the DMA command queue 217 and can cause values to be popped off the DMA command complete queue 218. DMA controller 216 can cause values to be popped off the DMA command queue 217 and can cause values to be pushed onto the DMA command complete queue 218.
In one example, processor 210 proceeds down a software thread whereby a first portion of data 219 (at address X1) and a second portion of data 220 (at address X2) respectively in host storage 204 are to be moved into local memory 207 to locations Z1 and Z2, respectively. Only after both of the data portions 219–220 are present in local memory 207 does the software executed by processor 210 branch into the instructions that cause the two data portions to be output from the network interface device 200. After the branch, the two data portions 219 and 220 are output in the form of a data payload (or a portion of a data payload) of a network communication such as a TCP/IP packet. The network communication is output via media access control circuitry 208 and physical layer interface circuitry 205.
In the illustrated embodiment, there can be up to thirty-two pending DMA commands 221 stored in SRAM 213. Although the DMA commands 221 are illustrated in
By placing DMA commands into SRAM 213, writing to the queue control register and then writing to the queue data register, processor 209 pushes two values onto DMA command queue 217. The first value is indicative of a first DMA command to move the first portion of data 219 from host storage 204 to local memory 207. The second value is indicative of a second DMA command to move the second portion of data 220 from host storage 204 to local memory 207.
DMA controller 216 causes a value to be popped off (step 301) the DMA command queue 217. In the present example, this first value points to the location in SRAM 213 where the first DMA command is stored. DMA controller 216 retrieves the first DMA command via SRAM controller 212 and lines 223 and executes the first DMA command. DMA controller 216 issues a request to PCI bus interface 215 via lines 224. PCI bus interface 215 in turn retrieves the first portion of data 219, supplies that first portion of data to SRAM controller 212 via lines 225, and returns an acknowledge signal to DMA controller 216 via line 226. SRAM controller 212 in turn writes the first portion of data 219 into SRAM 213. DMA controller 216 then issues a request to DRAM controller 214 via lines 227 to place the first portion of data into DRAM 207. The first portion of data passes from SRAM 213 via SRAM controller 212, lines 228, and DRAM controller 214 to DRAM 207. When the move is complete, DRAM controller 214 returns an acknowledge signal to DMA controller 216 via line 229. When the first data is present in local memory 207 at address Z1, the first DMA command is complete. DMA controller 216 pushes the termination value for the first DMA command onto the DMA command complete queue 218 (DMA command complete queue 218 is the queue identified by the termination queue identifier associated with the first DMA command).
The pushing of values onto the DMA command queue, the popping the values off the DMA command queue, and the executing of DMA commands indicated by the popped values is repeated (step 302) in such an order and fashion that the first and second portions of data are transferred to local memory. In the presently described example, two values are pushed onto the DMA command queue, then the first value is popped from the DMA command queue, and then the second value is popped from the DMA command queue. This need not be the case, however. The first value may be pushed onto the DMA command queue, then the first value may be popped from the DMA queue, then the second value may be pushed onto the DMA command queue, then the second value may be popped from the DMA command queue. Both orders of pushing and popping are encompassed by the flowchart of
In the presently described example, DMA controller 216 retrieves the second DMA command and executes the second DMA command such that the second portion of data 220 is moved into local memory 207 via SRAM 213. When the second portion of data is present in local memory 207, DMA controller 216 pushes the termination value for the second DMA command onto the DMA command complete queue 218 (DMA command complete queue 218 is the queue identified by the termination queue identifier associated with the first DMA command).
Only after both portions of data 219 and 220 are present on the network interface device 200, does processor 210 branch to the instructions that cause the data of portions 219 and 220 to be output from the network interface device in the form of a data payload of a network communcation. To ensure that all of the necessary data portions have been moved to the network interface device 200, processor 210 need not monitor the complete status of all the DMA commands involved as in the prior art example of
In the presently described example, processor 210 monitors the values popped from DMA command complete queue 218 and when the value popped is the termination value for the second DMA command, then processor 210 (step 303) executes instructions that cause the first and second data portions 219 and 220 to be output from the network interface device 200. The data from local memory 207 passes via lines 230 to a transmit sequencer in sequencers block 211, and then through media access control circuitry 208 and physcial layer interface circuitry 205 to the network 202.
Where a set of multiple DMA commands are to be executed before processor 210 takes a software branch, processor 210 can be pushing values onto the DMA command queue 217 at the same time that DMA controller 216 is executing DMA commands. Although the movement of data from host storage 204 to local memory 207 involves temporary storage in SRAM 213 in this example, there need not be any such temporary storage. For example, in some embodiments data is transferred directly from host storage 204 to local memory 207. Data being transferred is buffered in SRAM 213 in the embodiment of
Although the functionality of the network interface device 200 is described here as being carried out on an expansion card, it is to be understood that in some embodiments the network interface device is part of the host computer itself. In some embodiments, the network interface device is realized on a motherboard of the host computer. In some embodiments, the network interface device is integrated into a memory controller integrated circuit of the host computer such that data from host storage 204 is transferred to the network interface device without passing over a PCI bus or to an expansion card. For example, the network interface device may be integrated into the Intel 82815 Graphics and Memory Controller Hub, the Intel 440BX chipset, or the Apollo VT8501 MVP4 North Bridge chip. In some embodiments, the network interface device is part of an I/O integrated circuit chip such as, for example, the Intel 82801 integrated circuit of the Intel 820 chip set. In some embodiments where the network interface device functionality is embodied in an I/O integrated circuit chip, data from host storage 204 is transferred to the network interface device without passing over a PCI bus or to an expansion card. Rather the data passes through the host computer local bus, onto the I/O integrated circuit chip, and from the I/O integrated circuit chip's network interface port substantially directly to network 202 (through a physical layer interface device (PHY)) without passing over any expansion card bus.
Although the present invention has been described in connection with certain specific embodiments for instructional purposes, the present invention is not limited thereto. The use of a DMA command queue on a network interface device to alleviate or solve problems associated with DMA commands being completed out of order (in an order other than the order in which the processor issued the DMA commands) is not limited to the transfer of data from host storage 204 to network interface device 200. A DMA command queue is employed in some embodiments to move data from one location on network interface device 200 to another location on network interface device 200. Queue manager hardware 209 may maintain multiple DMA command queues at the same time. A separate DMA controller may be provided on the network interface device 200 for each such DMA command queue. Accordingly, various modifications, adaptations, and combinations of various features of the described embodiments can be practiced without departing from the scope of the invention as set forth in the claims.
This application is a continuation of and claims the benefit under 35 U.S.C. §120 of U.S. patent application Ser. No. 09/464,283, filed Dec. 15, 1999, by Laurence B. Boucher et al., now U.S. Pat. No. 6,427,173, which in turn is a continuation of and claims the benefit under 35 U.S.C. §120 of U.S. patent application Ser. No. 09/439,603, filed Nov. 12, 1999, by Laurence B. Boucher et al., now U.S. Pat. No. 6,247,060, which in turn claims the benefit under 35 U.S.C. § 119(e)(1) of the Provisional Application Ser. No. 60/061,809, filed on Oct. 14, 1997. This application also is a continuation of and claims the benefit under 35 U.S.C. §120 of U.S. patent application Ser. No. 09/384,792, filed Aug. 27, 1999, now U.S. Pat. No. 6,434,620, which in turn claims the benefit under 35 U.S.C. § 119(e)(1) of the Provisional Application Ser. No. 60/098,296, filed Aug. 27, 1998. This application also is a continuation of and claims the benefit under 35 U.S.C. §120 of U.S. patent application Ser. No. 09/067,544, filed Apr. 27, 1998, now U.S. Pat. No. 6,226,680. This application also is a continuation of and claims the benefit under 35 U.S.C. §120 of U.S. patent application Ser. No. 09/416,925, filed Oct. 13, 1999, now U.S. Pat. No. 6,470,415. The subject matter of all the above-identified patent applications, and of the two above-identified provisional applications, is incorporated by reference herein.
Number | Name | Date | Kind |
---|---|---|---|
4366538 | Johnson et al. | Dec 1982 | A |
4589063 | Shah et al. | May 1986 | A |
4991133 | Davis et al. | Feb 1991 | A |
5056058 | Hirata et al. | Oct 1991 | A |
5058110 | Beach et al. | Oct 1991 | A |
5097442 | Ward et al. | Mar 1992 | A |
5163131 | Row et al. | Nov 1992 | A |
5212778 | Dally et al. | May 1993 | A |
5280477 | Trapp | Jan 1994 | A |
5289580 | Latif et al. | Feb 1994 | A |
5303344 | Yokoyama et al. | Apr 1994 | A |
5412782 | Hausman et al. | May 1995 | A |
5418912 | Christenson | May 1995 | A |
5448566 | Richter et al. | Sep 1995 | A |
5485579 | Hitz et al. | Jan 1996 | A |
5506966 | Ban | Apr 1996 | A |
5511169 | Suda | Apr 1996 | A |
5517668 | Szwerinski et al. | May 1996 | A |
5524250 | Chesson et al. | Jun 1996 | A |
5535375 | Eshel | Jul 1996 | A |
5548730 | Young et al. | Aug 1996 | A |
5566170 | Bakke et al. | Oct 1996 | A |
5588121 | Reddin et al. | Dec 1996 | A |
5590328 | Seno et al. | Dec 1996 | A |
5592622 | Isfeld et al. | Jan 1997 | A |
5598410 | Stone | Jan 1997 | A |
5619650 | Bach et al. | Apr 1997 | A |
5629933 | Delp et al. | May 1997 | A |
5633780 | Cronin | May 1997 | A |
5634099 | Andrews et al. | May 1997 | A |
5634127 | Cloud et al. | May 1997 | A |
5642482 | Pardillos | Jun 1997 | A |
5664114 | Krech, Jr. et al. | Sep 1997 | A |
5671355 | Collins | Sep 1997 | A |
5678060 | Yokoyama et al. | Oct 1997 | A |
5682534 | Kapoor et al. | Oct 1997 | A |
5692130 | Shobu et al. | Nov 1997 | A |
5699317 | Sartore et al. | Dec 1997 | A |
5701434 | Nakagawa | Dec 1997 | A |
5701516 | Cheng et al. | Dec 1997 | A |
5708779 | Graziano et al. | Jan 1998 | A |
5727142 | Chen | Mar 1998 | A |
5742765 | Wong et al. | Apr 1998 | A |
5749095 | Hagersten | May 1998 | A |
5751715 | Chan et al. | May 1998 | A |
5752078 | Delp et al. | May 1998 | A |
5758084 | Silverstein et al. | May 1998 | A |
5758089 | Gentry et al. | May 1998 | A |
5758186 | Hamilton et al. | May 1998 | A |
5758194 | Kuzma | May 1998 | A |
5771349 | Picazo, Jr. et al. | Jun 1998 | A |
5778013 | Jedwab | Jul 1998 | A |
5778419 | Hansen et al. | Jul 1998 | A |
5790804 | Osborne | Aug 1998 | A |
5794061 | Hansen et al. | Aug 1998 | A |
5802258 | Chen | Sep 1998 | A |
5802580 | McAlpice | Sep 1998 | A |
5809328 | Nogales et al. | Sep 1998 | A |
5812775 | Van Seters et al. | Sep 1998 | A |
5815646 | Purcell et al. | Sep 1998 | A |
5848293 | Gentry | Dec 1998 | A |
5872919 | Wakeland | Feb 1999 | A |
5878225 | Bilansky et al. | Mar 1999 | A |
5892903 | Klaus | Apr 1999 | A |
5898713 | Melzer et al. | Apr 1999 | A |
5913028 | Wang et al. | Jun 1999 | A |
5920566 | Hendel et al. | Jul 1999 | A |
5930830 | Mendelson et al. | Jul 1999 | A |
5931918 | Row et al. | Aug 1999 | A |
5935205 | Murayama et al. | Aug 1999 | A |
5937169 | Connery et al. | Aug 1999 | A |
5941969 | Ram et al. | Aug 1999 | A |
5941972 | Hoese et al. | Aug 1999 | A |
5950203 | Stakuis et al. | Sep 1999 | A |
5991299 | Radogna et al. | Nov 1999 | A |
5996024 | Blumenau | Nov 1999 | A |
6005849 | Roach et al. | Dec 1999 | A |
6009478 | Panner et al. | Dec 1999 | A |
6016513 | Lowe | Jan 2000 | A |
6021446 | Gentry, Jr. | Feb 2000 | A |
6021507 | Chen | Feb 2000 | A |
6026452 | Pitts | Feb 2000 | A |
6034963 | Minami et al. | Mar 2000 | A |
6038562 | Anjur et al. | Mar 2000 | A |
6041058 | Flanders et al. | Mar 2000 | A |
6044438 | Olnowich | Mar 2000 | A |
6047323 | Krause | Apr 2000 | A |
6047356 | Anderson et al. | Apr 2000 | A |
6049528 | Hendel et al. | Apr 2000 | A |
6057863 | Olarig | May 2000 | A |
6061368 | Hitzelberger | May 2000 | A |
6065096 | Day et al. | May 2000 | A |
6067569 | Khaki et al. | May 2000 | A |
6070200 | Gates et al. | May 2000 | A |
6078733 | Osborne | Jun 2000 | A |
6097734 | Gotesman et al. | Aug 2000 | A |
6101555 | Goshey et al. | Aug 2000 | A |
6115615 | Ota et al. | Sep 2000 | A |
6122670 | Bennett et al. | Sep 2000 | A |
6141705 | Anand et al. | Oct 2000 | A |
6145017 | Ghaffari | Nov 2000 | A |
6157955 | Narad et al. | Dec 2000 | A |
6172980 | Flanders et al. | Jan 2001 | B1 |
6173333 | Jolitz et al. | Jan 2001 | B1 |
6202105 | Gates et al. | Mar 2001 | B1 |
6226680 | Boucher et al. | May 2001 | B1 |
6233242 | Mayer et al. | May 2001 | B1 |
6246683 | Connery et al. | Jun 2001 | B1 |
6247060 | Boucher et al. | Jun 2001 | B1 |
6279051 | Gates et al. | Aug 2001 | B1 |
6289023 | Dowling et al. | Sep 2001 | B1 |
6298403 | Suri et al. | Oct 2001 | B1 |
6334153 | Boucher et al. | Dec 2001 | B1 |
6345301 | Burns et al. | Feb 2002 | B1 |
6345302 | Bennett et al. | Feb 2002 | B1 |
6356951 | Gentry, Jr. | Mar 2002 | B1 |
6385647 | Willis et al. | May 2002 | B1 |
6389468 | Muller et al. | May 2002 | B1 |
6389479 | Boucher | May 2002 | B1 |
6393487 | Boucher et al. | May 2002 | B1 |
6421742 | Tillier | Jul 2002 | B1 |
6427169 | Elzur | Jul 2002 | B1 |
6434651 | Gentry, Jr. | Aug 2002 | B1 |
6449656 | Elzur et al. | Sep 2002 | B1 |
6453360 | Muller et al. | Sep 2002 | B1 |
6480489 | Muller et al. | Nov 2002 | B1 |
6487654 | Dowling | Nov 2002 | B1 |
6490631 | Teich et al. | Dec 2002 | B1 |
6526446 | Yang et al. | Feb 2003 | B1 |
6591310 | Johnson | Jul 2003 | B1 |
6650640 | Muller et al. | Nov 2003 | B1 |
6681364 | Calvignac et al. | Jan 2004 | B1 |
6697868 | Craft et al. | Feb 2004 | B1 |
6807581 | Starr et al. | Oct 2004 | B1 |
6912522 | Edgar | Jun 2005 | B1 |
6941386 | Craft et al. | Sep 2005 | B1 |
20010004354 | Jolitz | Jun 2001 | A1 |
20010013059 | Dawson et al. | Aug 2001 | A1 |
20010014892 | Gaither et al. | Aug 2001 | A1 |
20010025315 | Jolitz | Sep 2001 | A1 |
20010048681 | Bilic et al. | Dec 2001 | A1 |
20010053148 | Bilic et al. | Dec 2001 | A1 |
20030066011 | Oren | Apr 2003 | A1 |
20030165160 | Minami et al. | Sep 2003 | A1 |
20040054814 | McDaniel | Mar 2004 | A1 |
20040153578 | Elzur | Aug 2004 | A1 |
Number | Date | Country |
---|---|---|
PCTUS9717257 | May 1998 | WO |
PCTUS9808719 | Nov 1998 | WO |
PCTUS9824943 | Nov 1998 | WO |
PCTUS9814729 | Jan 1999 | WO |
WO 9965219 | Dec 1999 | WO |
WO 0104770 | Jan 2001 | WO |
WO 0105107 | Jan 2001 | WO |
WO 0105116 | Jan 2001 | WO |
WO 0105123 | Jan 2001 | WO |
WO 0140960 | Jun 2001 | WO |
WO 0159966 | Aug 2001 | WO |
WO 0186430 | Nov 2001 | WO |
Number | Date | Country | |
---|---|---|---|
20010021949 A1 | Sep 2001 | US |
Number | Date | Country | |
---|---|---|---|
60098296 | Aug 1998 | US | |
60061809 | Oct 1997 | US |
Number | Date | Country | |
---|---|---|---|
Parent | 09464283 | Dec 1999 | US |
Child | 09855979 | US | |
Parent | 09439603 | Nov 1999 | US |
Child | 09464283 | US | |
Parent | 09384792 | Aug 1999 | US |
Child | 09439603 | US | |
Parent | 09067544 | Apr 1998 | US |
Child | 09384792 | US | |
Parent | 09416925 | Oct 1999 | US |
Child | 09067544 | US |