Claims
- 1. A system comprising:
a first channel comprising a first direct memory access (DMA) engine, a second DMA engine, a first random access memory (RAM) and a first processor; and a second channel comprising a third DMA engine, a fourth DMA engine, a second RAM and a second processor.
- 2. The system of claim 1, wherein in a first mode, the first RAM is configured to store input/output (I/O) completions from the first and second DMA engines, the first processor being configured to process I/O completions stored in the first RAM, the second RAM being configured to store I/O completions from the third and fourth DMA engines, the second processor being configured to process I/O completions stored in the second RAM.
- 3. The system of claim 2, wherein in a second mode, the second RAM is configured to store I/O completions from at least the first DMA engine, the second processor being configured to process I/O completions from the first DMA engine that are stored in the second RAM.
- 4. The system of claim 3, wherein the second RAM stores PCI Rx and PCI Tx I/O completions from the first DMA engine.
- 5. The system of claim 3, wherein the second RAM stores Link Rx and Link Tx I/O completions from the first DMA engine.
- 6. The system of claim 2, wherein in a second mode, the second RAM is configured to store I/O completions from the first and second DMA engines, the second processor being configured to process I/O completions from the first and second DMA engines that are stored in the second RAM.
- 7. The system of claim 6, wherein the second RAM stores PCI Tx I/O completions from the first DMA engine and Link Tx I/O completions from the second DMA engine.
- 8. The system of claim 6, wherein the second RAM stores Link Rx I/O completions from the second DMA engine and PCI Rx I/O completions from the first DMA engine.
- 9. The system of claim 6, wherein the second RAM stores PCI Tx I/O completions from the first DMA engine and Link Rx I/O completions from the second DMA engine.
- 10. The system of claim 6, wherein the second RAM stores PCI Rx I/O completions from the first DMA engine and Link Tx I/O completions from the second DMA engine.
- 11. The system of claim 1, wherein the first and third DMA engines are each configured to transfer data between a host memory and an intermediate memory, after each transfer, the first and third DMA engines generate an I/O completion.
- 12. The system of claim 11, further comprising a peripheral component interface bus configured to transfer data to and from the host memory.
- 13. The system of claim 1, wherein the second and fourth DMA engines are each configured to transfer data between an intermediate memory and a Fibre Channel interface, after each transfer, the second and fourth DMA engines generate an I/O completion.
- 14. The system of claim 1, wherein the first and second RAMs are zero-wait-state RAMs.
- 15. The system of claim 1, wherein the first and second RAMs have wait-states.
- 16. The system of claim 1, being configurable to activate the first and second DMA engines or the third and fourth DMA engines; if the first and second DMA engines are inactive, the first RAM is configured to store I/O completions from the third and fourth DMA engines; if the third and fourth DMA engines are inactive, the second RAM is configured to store I/O completions from the first and second DMA engines.
- 17. The system of claim 1, being configured to detect whether the first and second DMA engines or the third and fourth DMA engines are inactive; if the first and second DMA engines are inactive, the first RAM is configured to store I/O completions from the third and fourth DMA engines; if the third and fourth DMA engines are inactive, the second RAM is configured to store I/O completions from the first and second DMA engines.
- 18. The system of claim 1, wherein the second processor is configured to send a message to the first processor after the second processor processes an I/O completion from the first DMA engine that was stored in the second RAM.
- 19. The system of claim 18, wherein the message causes the first processor to further process data related to the I/O completion.
- 20. The system of claim 18, wherein the first RAM is configured to store the message.
- 21. The system of claim 1, wherein the first processor is configured to process I/O completions related to data transferred between a host memory to an intermediate memory; and the second processor is configured to process I/O completions related to data transferred between the intermediate memory and a Fibre Channel interface.
- 22. The system of claim 1, wherein the first processor is configured to process I/O completions related to data transferred from a host memory to an intermediate memory and data transferred from the intermediate memory to a Fibre Channel interface; and the second processor is configured to process I/O completions related to data transferred from the Fibre Channel interface to the intermediate memory and data transferred from the intermediate memory to the host memory.
- 23. The system of claim 1, wherein the first processor is configured to process I/O completions related to data transferred from a host memory to an intermediate memory and data transferred from a Fibre Channel interface to the intermediate memory; and the second processor is configured to process I/O completions related to data transferred from the intermediate memory to the Fibre Channel interface and data transferred from the intermediate memory to the host memory.
- 24. The system of claim 1, wherein hardware is configured to control a type of I/O completions processed by the first and second processors.
- 25. The system of claim 1, wherein firmware is configured to control a type of I/O completions processed by the first and second processors.
- 26. The system of claim 1, wherein the first and second RAMs each comprise a plurality of logical blocks, each logical block being configured to store I/O completions related to a pre-determined type of data transfers.
- 27. The system of claim 26, wherein each channel further comprises control logic configured to generate a notification to the processor when data is stored in the RAM.
- 28. The system of claim 1, wherein the first and second RAMs each comprise a plurality of logical blocks, each logical block being configured to store I/O completions from one of the DMA engines.
- 29. The system of claim 28, further comprising a put pointer and a get pointer for each logical block, the put pointer comprising an address of a location within the logical block for storing a new I/O completion, the get pointer comprising an address of a location within the logical block for retrieving a stored I/O completion.
- 30. The system of claim 1, wherein the first RAM comprises a logical block configured to store messages from the second processor, and the second RAM comprises a logical block configured to store messages from the first processor.
- 31. The system of claim 1, wherein each processor comprises a data tightly coupled memory (DTCM) and a DTCM port.
- 32. The system of claim 1, wherein each channel further comprises control logic coupled to the RAM and configured to control access to the RAM.
- 33. The system of claim 32, wherein each channel further comprises RAM control logic that is configured to synchronize signals from various clock domains, the signals being received by the RAM.
- 34. The system of claim 1, wherein each channel further comprises firmware configured to control pointers that point to addresses of locations within the RAM.
- 35. The system of claim 1, wherein each channel further comprises a plurality of registers between the DMA engines and the RAM, each register being configured to store an I/O completion from a pre-determined DMA engine before the I/O completion is transferred to the RAM.
- 36. The system of claim 35, wherein each channel further comprises an arbitrator configured to arbitrate between a plurality of registers with I/O completions to transfer to the RAM.
- 37. The system of claim 35, wherein each channel further comprises control logic configured to generate a signal to a DMA engine when a register is full.
- 38. The system of claim 1, further comprising a plurality of registers coupled between the first and second processors, the registers configured to allow the first processor to notify the second processor that the first processor has a message to send to the second processor.
- 39. The system of claim 38, wherein the first processor is configured to write a bit in a door-bell-other-channel register, the door-bell-other-channel register being mapped to a door bell register coupled to the second processor, the bit notifying the second processor of a message from the first processor.
- 40. The system of claim 39, wherein the second processor is configured to write a bit in a door-bell-enable register to allow a bit written in the door-bell-other-channel register by the first processor to interrupt the second processor.
- 41. The system of claim 40, wherein the first processor is configured to read the door-bell-enable register of the second processor.
- 42. A channel comprising:
a random access memory (RAM) configured to store input/output completions; first and second engines configured to send input/output completions to the random access memory; and a processor configured to process the input/output completions stored in the random access memory.
- 43. The channel of claim 42, being configured to operate in a first mode in which the random access memory is configured to store input/output completions from the first and second engines and in a second mode in which the random access memory is configured to store input/output completions from at least the third engine.
- 44. A method comprising:
configuring a random access memory (RAM) of a first channel to store input/output (I/O) completions from an engine in a second channel; and processing I/O completions in the RAM of the first channel.
- 45. The method of claim 44, further comprising configuring the RAM of the first channel to store I/O completions from two engines in the second channel.
- 46. The method of claim 44, further comprising:
transferring data between a host memory and an intermediate memory; and generating an input/output completion.
- 47. The method of claim 44, further comprising:
transferring data between an intermediate memory and a Fibre Channel interface; and generating an input/output completion.
- 48. The method of claim 44, further comprising designating a first processor to handle a first type of input/output completions and designating a second processor to handle a second type of I/O completions.
- 49. The method of claim 44, further comprising designating a first processor to handle input/output completions of the first channel and designating a second processor to handle I/O completions of the second channel.
- 50. The method of claim 44, further comprising notifying a first processor when a second processor finishes processing an input/output completion.
- 51. The method of claim 50, wherein notifying a first processor comprises sending a message from the second processor to a random access memory associated with the first processor.
- 52. The method of claim 50, wherein notifying a first processor comprises writing a bit in a first register, the first register being mapped to a second register, the first processor accessing the second register to determine if the second processor has a message for the first processor.
- 53. A method comprising:
detecting whether an engine of a first channel is inactive; if the engine of the first channel is inactive, storing input/output (I/O) completions from an engine in a second channel to a random access memory of the first channel; and processing the I/O completions in the random access memory of the first channel.
- 54. The method of claim 53, further comprising storing input/output (I/O) completions from an engine in a second channel to the random access memory of the second channel.
- 55. A method comprising:
receiving input/output (I/O) completions from a plurality of data paths; storing the I/O completions in a plurality of registers, each register being configured to store an I/O completion from a predetermined data path; and transferring the I/O completions from the registers to a plurality of logical blocks of a random access memory, each logical block being configured to store I/O completions from a predetermined data path.
- 56. The method of claim 55, wherein receiving input/output (I/O) completions from a plurality of data paths comprises receiving I/O completions from a first set of data paths in a first mode, and receiving I/O completions from a second set of data paths in a second mode.
- 57. The method of claim 55, further comprising:
transferring the I/O completions from the registers to an arbitrator; arbitrating which I/O completion to send to a logical block of the random access memory; and sending an I/O completion from the arbitrator to a logical block of the random access memory.
- 58. The method of claim 55, wherein arbitrating involves using a round robin method.
- 59. The method of claim 55, further comprising sending a plurality of ready signals to a plurality of data sources via a plurality of data paths, each ready signal indicating that a register is ready to store an I/O completion.
- 60. The method of claim 59, further comprising detecting a ready signal and generating a write-enable signal if a data source has an I/O completion to write to the random access memory.
- 61. The method of claim 55, further comprising using pointers to determine if there are outstanding completions ready for processing.
- 62. The method of claim 55, further comprising using pointers to determine whether a logical block is full.
- 63. The method of claim 62, further comprising preventing an I/O completion from being written to a logical block if the logical block is full.
- 64. The method of claim 62, further comprising notifying a source coupled to a data path that the logical block and register configured to store I/O completions from the source are full.
CLAIM OF PRIORITY
[0001] The present application claims priority to U.S. Patent application Ser. No. 60/340,386, entitled “Supercharge Message Exchanger,” filed on Dec. 12, 2001, which is incorporated herein by reference in its entirety.
Provisional Applications (1)
|
Number |
Date |
Country |
|
60340386 |
Dec 2001 |
US |