Reverse message writes and reads
Summary by NHIP
Reverse Message Writing System
The system writes a message in reverse order to memory so the last word occupies the lowest address and the first word occupies a higher address. A second application reads the message sequentially from the first word to the last word, with writing the final word notifying completion.
Claim Score by NHIP
Abstract
A system, method, software and firmware configured to write a message comprising a plurality of words into a memory, such that a last word of the message is written first at a first memory address and a first word of the message is written last at a memory address higher than the first memory address. The system may comprise two software applications sending messages to each other via a bus, such as a PCI bus.

Term
Term ended
Expired 19 April 2024, 2.4 years ago.
- Priority
- Filed
- Granted
- Expired
- Today
26 claims: 4 independent, 22 dependent
- 1A computer system comprising a host processor and one or more memories, the one or more memories further comprising:a first software application;and a second software application, the first software application being configured to write a message in reverse order to a first memory from the one or more memories, such that a last word of the message is written first to a first memory address specifying a location in the first memory and a first word of the message is written last to a second memory address specifying a location in the first memory higher than the first memory address, the second software application being configured to read the message from the first word to the last word.
- 17A device comprising a device memory, the device memory comprising a firmware application executable by a processor, and a message stored in reverse order so that the first word of the message has a higher memory address in the device memory than the last word of the message, the firmware application being configured to store the message in reverse order in a destination memory such that a last word of the message is stored at a first memory address and a first word of the message is stored last at a memory address higher than the first memory address, the storing being performed without reversing the order of the message.
- 21A computer readable media comprising a firmware application executable by a processor, the firmware application being configured to:copy a message comprising a plurality of words from a source memory into a destination memory, such that a in the source memory the message is stored in reverse order so that the first word of the message has a higher memory address in the device memory than the last word of the message and in the destination memory the message is stored in reverse order, so that a last word of the message is written first at a first memory address and a first word of the message is written last at a memory address higher than the first memory address.
- 22Broadest claimClaim Score 72, broad(NHIP)A method comprising:providing a message comprising a plurality of words a source memory, the message being stored in reverse order in the source memory so that the first word of the message has a higher memory address in the source memory than the last word of the message copying the message in a destination memory in reverse order so that the last word of the message is written first at a first memory address and the first word of the message is written last at a memory address higher than the first memory address, the copying step being performed without reversing the order of the message.
Independent claims4
35 paragraphs in 5 sections, as filed
CLAIM OF PRIORITY
0001The present application claims priority to co-assigned U.S. Provisional Patent Application No. 60/421,308, entitled “REVERSE MESSAGE READS FOR EFFICIENT PCI TRANSFERS,” filed on Oct. 24, 2002, which is hereby incorporated by reference.
BACKGROUND
0002A device or application executed by the device may transfer a message to another device via a bus, such as a Peripheral Component Interface (PCI) bus. The first device may have a memory to store messages to be transferred to the second device via the bus. The second device may have a memory to store messages transferred from the first device via the bus.
SUMMARY
0003The application relates to methods, systems, software, firmware and/or hardware for reverse message writes and reads. As an example, firmware source code of a host bus adapter (HBA) may implement the reverse message writes and reads.
0004The system may have a number of advantages. For example, the system may efficiently transfer variable length messages across a bus, such as a PCI bus, and notify a receiving device or application that a transferred message is complete and ready to process. The system may “write” a message with a single PCI transaction and avoid PCI “read” transactions. A reduction in PCI transactions may improve network efficiency and throughput.
0005The system may also provide automatic synchronization by writing a first word of a message last in sequence of words to a receiving buffer. The first word may contain a length of the message. When the first word is received and stored in the buffer, a device (or firmware executed by the device) acknowledges that the message is completely received and ready for processing. The device may begin processing a message when the message is completely received. In contrast, if the first word (with the message length) is written first, the device will not know if the rest of the message has been received and when the message will be complete.
0006An aspect of the application relates to a system comprising a first software application and a second software application. The first software application is configured to write a message in reverse order to a memory, such that a last word of the message is written first to a first memory address and a first word of the message is written last to a memory address higher than the first memory address. The second software application is configured to read the message from the first word to the last word.
0007Another aspect relates to a method of writing a message comprising a plurality of words into a memory, such that a last word of the message is written first at a first memory address and a first word of the message is written last at a memory address higher than the first memory address.
0008The details of one or more embodiments are set forth in the accompanying drawings and the description below. Other features and advantages will be apparent from the description and drawings, and from the claims.
DESCRIPTION OF DRAWINGS
<figref idref="DRAWINGS">FIG. 1</figref> illustrates a system with at least two devices coupled to each other via a bus.
<figref idref="DRAWINGS">FIG. 2</figref> is a more detailed view of a message in a message queue in <figref idref="DRAWINGS">FIG. 1</figref>.
<figref idref="DRAWINGS">FIG. 3</figref> illustrates a method of a reverse message write and read.
0012Like reference symbols in the various drawings indicate like elements.
DETAILED DESCRIPTION
0013<figref idref="DRAWINGS">FIG. 1</figref> illustrates a system <b>100</b> with at least two devices <b>102</b>, <b>104</b> coupled to each other via a bus <b>106</b>. The bus <b>106</b> may be a Peripheral Component Interface (PCI) bus. The devices <b>102</b>, <b>104</b> may be any device configured to receive and/or transmit data via the bus. The devices <b>102</b>, <b>104</b> may be, for example, a host bus adapter (HBA), a network interface card (NIC), a plug-in PCI card, a disk controller, a video card, a graphics card, an audio card, or a host system, such as a server.
0014Each device <b>102</b>, <b>104</b> includes a memory <b>108</b>, <b>110</b> with at least one buffer or circular queue <b>112</b>, <b>114</b>. Each queue <b>112</b>, <b>114</b> may store one or more messages to be transferred across the bus <b>106</b> and/or one or more messages received across the bus <b>106</b>. An HBA and a host may be modeled as devices <b>102</b> and <b>104</b> and each may have a circular message queue <b>112</b>.
0015The messages may have variable lengths, i.e., a variable number of words. Each word may have, for example, 8 bits, 32 bits or any suitable number of bits. The messages may include, for example, commands, control information or interrupts. A specific example of a message is an indication of a completed transfer of data by the device <b>102</b> (e.g., an HBA) to a network <b>120</b> (e.g., Fibre Channel, Small Computer System Interface (SCSI), iSCSI, TCP/IP, Virtual Interface (VI) over IP). The data transfer may involve a Virtual Interface (VI) over Transmission Control Protocol/Internet Protocol (TCP/IP) packet transfer. The message may include a word that identifies a particular VI, and a second word that identifies a type of completion.
0016Each device <b>102</b>, <b>104</b> may have a processor that executes software applications or firmware that read and/or write variable length messages to the queues <b>112</b>, <b>114</b>. For example, an event queue <b>114</b> with variable length messages may be a command queue in a NIC or an interrupt queue in a host system. Firmware executed by the receiving device <b>104</b> may poll the next entry in the queue <b>114</b> (determined by a pointer) to see if there is a message to process.
0017The following description assumes the device <b>102</b> (or an application executed by device <b>102</b>) is a message-transmitting device, and the device <b>104</b> (or an application executed by device <b>104</b>) is a message-receiving device.
0018For certain applications, an application run by the receiving device <b>104</b> should receive the complete message with multiple words in the queue <b>114</b> before the application may begin to process the message. Thus, the receiving device <b>104</b> should know when an entire message has been received. This may be complicated with variable length messages and no invalid bit combinations at the end of a message.
0019Another limitation to improve efficiency may be to “write” a multi-word message from a first device <b>102</b> to a second device <b>104</b> in a single bus (e.g., PCI) transaction and avoid “reads” across the bus <b>106</b> (e.g., PCI bus).
0020A method that attempts to address the above limitations may use an interrupt to notify the receiving device <b>104</b> that a message is ready to process. But the interrupt does not notify the receiving device <b>104</b> of how many messages are in the queue <b>114</b> or how many words are in each message.
0021Another method may write an entire message to the receiving device memory <b>110</b>, except for the first word of the message, then return to write the first word. The first word may contain a length of the message. The receiving device <b>104</b> polls for the first word. This method may require two PCI transactions to write the message without the first word and then write the first word. It may be more efficient to have a single PCI transaction to write a message from one device <b>102</b> to another device <b>104</b> and avoid two PCI transactions.
0022Another method may try to put a length field in the last word of a message. But it may be impractical to put a length field in the last word of a variable length message because firmware may not know which word is the last word of a variable length message.
0023Another method may make all messages of equal length with a valid indication at the end of each message. The receiving device <b>104</b> polls the end of the message to guarantee that the entire message is available at the receiving device <b>104</b> before processing the message. But this method is not practical for devices, software or firmware that use variable length messages.
0024In another method, the transmitting device <b>102</b> writes the message to the receiving device <b>104</b> starting with a last word and ending with a first word of the message. But this method would require a PCI transaction for each word of a multi-word message. Certain buses, such a PCI bus, only work efficiently when the data transfers are in order of ascending/increasing numerical memory addresses. A PCI transfer works by providing a PCI bus with a starting address and a desired amount of data at incrementally higher addresses from the starting address, e.g., transfer word at address 0 first, then word at address 1, address 2, address 3, etc.
0025A solution to the issues described above is to write a message from the end of the message to the beginning of the message in ascending numerical (logical or physical) memory address order to the receiving event queue <b>114</b>. Transferring words in ascending address order conforms with a guideline of the PCI bus <b>106</b>. The end (last word) of a message is written first. The beginning (first word) of a message is written last. Thus, the device <b>102</b> writes in “reverse order” to the queue <b>114</b>, in contrast to a conventional write operation that writes the beginning of a message first in ascending address order.
0026The device <b>104</b> reads the message in the event queue <b>114</b> in order of decreasing addresses starting with the first word (word 0) with the length field. The write and read directions are shown by arrows in <figref idref="DRAWINGS">FIGS. 1 and 2</figref>.
0027<figref idref="DRAWINGS">FIG. 2</figref> illustrates is a more detailed view <b>200</b> of a message in a message queue <b>112</b>, <b>114</b> in <figref idref="DRAWINGS">FIG. 1</figref>. As an example, the device <b>102</b> (or an application run by the device <b>102</b>) wants to transfer and write an eight-word message to the queue <b>114</b> of the device <b>104</b>. The device <b>102</b> first transfers the last word in a message, word 7, which has the lowest address in queue <b>112</b>, across the bus <b>106</b>. The device <b>102</b> then transfers the next-to-last word, word 6, which has a higher address than word 7.
0028As the device <b>104</b> receives the words of the message, the device <b>104</b> first writes the last word of the message, word 7, at an address in the queue <b>114</b>. Then the device <b>104</b> writes the second to last word of the message, word 6, at a higher address in the queue <b>114</b>. The first word, word 0, may contain a length field that specifies the length of the message.
0029When the first word is received and stored in the queue <b>114</b>, the device <b>104</b> (or firmware executed by the device <b>104</b>) acknowledges that the message is completely received and ready for processing. The application or firmware will know if a message is complete in the queue <b>114</b> because the first word (written last) has been received.
0030When the device <b>104</b> starts to read a message in the queue <b>114</b>, the device <b>104</b> knows the beginning of a message is next to the end of a preceding message. The device <b>104</b> reads the first word of the message, word 0, which may include a length field so the device <b>104</b> knows how long the message is. Some applications or firmware executed by the receiving device <b>104</b> may need to know the length of a variable-length message and may expect to find the length of a message in the first word (word 0) of the message.
0031<figref idref="DRAWINGS">FIG. 3</figref> illustrates a method of a reverse message write and read.
0032The method described above may apply to message transfers from an HBA to a host or from a host to an HBA. The method described above may be implemented by software or firmware with an array pointer and negative subscripts in the array to force a negative (descending address) order for “reads.”
0033If the receiving device <b>104</b> is an HBA, it may periodically check the queue <b>114</b> for messages. If the receiving device <b>104</b> is a host, it may wait for an interrupt from an HBA to check the queue <b>114</b> for messages.
0034After the receiving device <b>104</b> processes a message, the receiving device <b>104</b> may erase the message by writing all zeros in the entries of the queue <b>114</b> where the message was stored. The receiving device <b>104</b> may then check the queue <b>114</b> and determine whether any new messages have been entered into the queue <b>114</b>.
0035A number of embodiments have been described. Nevertheless, it will be understood that various modifications may be made without departing from the spirit and scope of the application. For example, the described methods may be applied to a SLI interface. The described methods may be applied to any two software/firmware applications, such as a host application and an HBA application, that communicate with each other through a shared memory. Accordingly, other embodiments are within the scope of the following claims.
Contents5
3 sheets
Sheet 1 Sheet 2 Sheet 3
Every citation, both ways
| Document | Relation | Office | Cited during |
|---|---|---|---|
| US2002112105A1 | Cites | United States of America | Search report |
| US2004052135A1 | Cites | United States of America | Search report |
| US5870551A | Cites | United States of America | Search report |
| US5974516A | Cites | United States of America | Search report |
| US6311259B1 | Cites | United States of America | Search report |
| US6536670B1 | Cites | United States of America | Search report |
| US6892278B1 | Cites | United States of America | Search report |
| “Virtual Interface Architecture Specification,” Version 1.0, Dec. 16, 1997, ©1997 Compaq Computer Corp., Intel Corporation, Microsoft Corporation; pp. 1-83. | Non-patent | – | Third party observation |
| Technology Brief, Virtual Interface Architecture for System Area Networks, Fourth Edition (Jun. 1999) 0184-0699-A, Conpaq Computer Corporation, Prepared by ISSD Technology Communications, TechCom@compaq.com, pp. 1-14. | Non-patent | – | Third party observation |
| “VI/TCP (Internet VI),” Network Working Group, Internet-Draft, Expires Jan. 2001; by S. DiCecco, J. Williams, GigaNet, Inc., Jul. 14, 2000, Internet Engineering Task Force (IEFT), http://www.ietf.org/lid-abstracts.txt, pp. 1-19. | Non-patent | – | Third party observation |
| “VIDF Virtual Interface (VI) Architecture Developer's Guide,” Revision 1.1 Draft; Sep. 26, 2000; © Intel Corporation 1998. 1999, 2000; pp. 1-99. | Non-patent | – | Third party observation |
| "Virtual Interface Architecture Specification," Version 1.0, Dec. 16, 1997, (C)1997 Compaq Computer Corp., Intel Corporation, Microsoft Corporation; pp. 1-83. | Non-patent | – | Applicant |
| Technology Brief, Virtual Interface Architecture for System Area Networks, Fourth Edition (Jun. 1999) 0184-0699-A, Conpaq Computer Corporation, Prepared by ISSD Technology Communications, TechCom@compaq.com, pp. 1-14. | Non-patent | – | Applicant |
| "VI/TCP (Internet VI)," Network Working Group, Internet-Draft, Expires Jan. 2001; by S. DiCecco, J. Williams, GigaNet, Inc., Jul. 14, 2000, Internet Engineering Task Force (IEFT), http://www.ietf.org/lid-abstracts.txt, pp. 1-19. | Non-patent | – | Applicant |
| "VIDF Virtual Interface (VI) Architecture Developer's Guide," Revision 1.1 Draft; Sep. 26, 2000; (C) Intel Corporation 1998. 1999, 2000; pp. 1-99. | Non-patent | – | Applicant |
1 member in 1 office; this record represents the family
Priority claims6
| Document | Office | Kind | Date |
|---|---|---|---|
| 42130802 | United States of America | P | |
| 42130802 | United States of America | P | |
| 42258103 | United States of America | A | |
| 60421308 | – | – | – |
| US20020421308P | – | – | – |
| US20030422581 | – | – | – |
Members1
| Document | Office | Kind | |
|---|---|---|---|
| US7028131B1This record | United States of America | B1 |
32 transactions on the USPTO file
Allowed after 1 non-final rejection.
- Non-final rejections
- 1
- Final rejections
- 0
- RCEs
- 0
- Appeals
- 0
Over time
Point at a mark for the transactionTransactions
| Event | Code | |
|---|---|---|
| Payment of Maintenance Fee, 12th Year, Large EntityM1553 | M1553 | |
| Email NotificationEML_NTR | EML_NTR | |
| Change in Power of Attorney (May Include Associate POA)PA.. | PA.. | |
| Correspondence Address ChangeC.AD | C.AD | |
| Recordation of Patent Grant MailedPGM/ | PGM/ | |
| Patent Issue Date Used in PTA CalculationAllowedPTAC | PTAC | |
| Issue Notification MailedAllowedWPIR | WPIR | |
| Dispatch to FDCD1935 | D1935 | |
| Application Is Considered Ready for IssuePILS | PILS | |
| Entity status set to undiscounted (initial default setting or status change)BIG. | BIG. | |
| Issue Fee Payment VerifiedN084 | N084 | |
| Issue Fee Payment ReceivedIFEE | IFEE | |
| Mail Notice of AllowanceAllowedMN/=. | MN/=. | |
| Notice of Allowance Data Verification CompletedAllowedN/=. | N/=. | |
| Date Forwarded to ExaminerFWDX | FWDX | |
| Response after Non-Final ActionA... | A... | |
| Mail Non-Final RejectionNon-final rejectionMCTNF | MCTNF | |
| Non-Final RejectionNon-final rejectionCTNF | CTNF | |
| Case Docketed to Examiner in GAUDOCK | DOCK | |
| Correspondence Address ChangeC.ADB | C.ADB | |
| IFW TSS Processing by Tech Center CompleteTSSCOMP | TSSCOMP | |
| Correspondence Address ChangeC.AD | C.AD | |
| Change in Power of Attorney (May Include Associate POA)PA.. | PA.. | |
| Case Docketed to Examiner in GAUDOCK | DOCK | |
| Case Docketed to Examiner in GAUDOCK | DOCK | |
| Application Dispatched from OIPEOIPE | OIPE | |
| Application Is Now CompleteCOMP | COMP | |
| IFW Scan & PACR Auto Security ReviewSCAN | SCAN | |
| Rescind Nonpublication Request for Pre Grant PublicationRESC | RESC | |
| Information Disclosure Statement (IDS) FiledM844 | M844 | |
| Information Disclosure Statement (IDS) FiledWIDS | WIDS | |
| Initial Exam Team nnIEXX | IEXX |
14 legal events, as the office reported them to INPADOC
Over the term
Point at a mark for the eventEvents
| Event | Code | |
|---|---|---|
| AssignmentAS | AS | |
| AssignmentAS | AS | |
| Maintenance fee paymentMAFP | MAFP | |
| AssignmentAS | AS | |
| AssignmentAS | AS | |
| AssignmentAS | AS | |
| AssignmentAS | AS | |
| AssignmentAS | AS | |
| AssignmentAS | AS | |
| Fee paymentFPAY | FPAY | |
| Fee paymentFPAY | FPAY | |
| Information on status: patent grantGrantedPATENTED CASESTCF | STCF | |
| AssignmentAS | AS | |
| AssignmentAS | AS |
Numbers
- Publication
- 07028131
- Publication, DOCDB
- 7028131
- Publication, EPODOC
- US7028131
- Application
- 10422581
- Application, DOCDB
- 42258103
- Application, EPODOC
- US20030422581
Titles
- English
- Reverse message writes and reads
Patent term adjustment
- A delay
- +362 daysthe office missed an examination deadline
- Net adjustment
- 362 days
Classification
- CPC, 1
- G06F13/423
- IPC, 1
- G06F13 00
- USPC, 2
- 710310000
- 710052000