Computers and computer systems have become ubiquitous. With the great range of computer hardware and software available, it has become important to set a number of standards for connecting various computer devices and communicating among them.
The computer industry has formed organizations of member companies to provide standards that permit compatibility and interoperability. Standards are now available for hardware and software connection between computers and peripherals, for example. Internal computer devices such as disk drives and input/output devices, and external products such as portable devices are attached to computers with standard interface cables and use standard communication protocols. Some widely adopted examples include USB, ATA, and Serial ATA (SATA or eSATA) interfaces.
In each of these systems, the host initiates operations and sends commands to the device, and the device responds to host commands following pre-defined protocols. There is no provision in these interfaces for a device to initiate a command or operation to a host. A device can only send information to a host that has been requested by a host-sent command or otherwise directly caused by a host action.
Such protocols use asymmetric interfaces where host and devices have defined roles of command and response (e.g., the host commands and the device responds) and are unlike peer-to-peer communication protocols where a unit can operate as both an initiator and as a target. SCSI is one standard interface that provides this peer-to-peer support.
Some system interfaces may allow for hardware notification between units via the host to device cable, however new interfaces favor serial communication that cannot provide a dedicated signal on the cable, and are not provided in systems such as Serial ATA or USB.
In a system with a host and a device where there is no provision for a device to notify a host of an important event at any time, the device has only unfavorable options. For example, upon failure conditions or events from which a device cannot recover, some devices may resort to self resetting or aborting outstanding commands in order to force a host to take notice and hopefully recover. This may cause catastrophic loss of data or result in an inoperable system. System timeouts or resets are a last resort to attempt recovery. Additionally, device to host notifications may be desirable before a situation becomes critical, such as environmental conditions or recoverable errors.
The interface between the host computer 11 and the device 13 may be a Universal Serial Bus interface, commonly referred to as a USB interface. The USB interface is also referred to as USB-1, USB-2 or USB-3, and future revisions are expected. Devices may support command queuing, and incorporate a command queue 14. The device 13 may be, for example, an I/O device such as keyboard, printer or mouse; storage device such as a disk drive, solid state drive, CD or DVD player; a communication device such as modems; or a personal entertainment device such as a music or video player.
If a new command was received in block 310, the device checks the command and its associated queue command tag validity in block 325. If the command is invalid or the tag is invalid, the device responds to the host by sending an error status in block 320. If the command and tag are valid, the device accepts the command (block 330) for execution. The device will add the command into the device command queue with any other outstanding commands waiting for completion. In block 340, the device will make a determination which command should be executed next and may reorder the queue for optimal performance as needed, although reordering is not required. The device then executes a command from the command queue in 345.
The flow chart shown in
Methods for providing asynchronous notifications from a device to a host in systems without requiring hardware provision for asynchronous operations are disclosed herein.
In an embodiment of the invention, a method is provided for asynchronous event notification from a device in a system that supports command queuing. The method includes receiving a queued command and queue tag from a host; accepting the queued command from the host without scheduling the command for completion; monitoring device operation for asynchronous events; detecting an asynchronous event; and providing notification of the asynchronous event by scheduling and sending a response comprising the tag to the host.
In another embodiment of the invention, a method is provided for asynchronous event notification from a device in a system that supports command queuing and a command is sent from a host to a device. The device receives the command and an associated queue tag, and determines that the tag is not a valid tag. The device then determines if the command is an asynchronous event notification request type command, and if so, accepts the command as valid. After accepting the command, the device begins monitoring for asynchronous events. If an asynchronous event is detected, the device provides notification of the event by sending a response and the associated tag to the host.
In another embodiment of the invention, a method is provided for asynchronous event notification from a device in a system that supports command queuing and a command is sent from a host to a device to enable unsolicited queue command responses. The device receives the command and assigns or associates a queue tag to the command and enables unsolicited queue command responses. The device begins monitoring for asynchronous events. If an asynchronous event is detected, the device provides notification of the event by sending a response and the associated tag to the host.
Beginning in block 400, a device is operating in a system with a host. In block 405, the device checks for a command reception from the host. If no new commands have been received (block 410) the device advances to block 415 to determine if there are any outstanding commands in the command queue. If the queue is empty, the device returns to 405 to continue checking for new commands. If the queue is not empty, the device continues to execute outstanding commands in block 445.
If a new command was received in block 410, the device checks the command and its associated queue command tag validity in block 412. If the command is invalid or the tag is invalid, the device responds to the host by sending an error status in block 420. If the command and tag are valid, the device accepts the command (block 425). The device checks to determine if the command is an Asynchronous Event Notification command (AEN Command) in block 430. If the command is not an AEN command, the device will add the command into the device command queue (block 435) with any other outstanding commands waiting for completion. In block 440, the device will make a determination which command should be executed next and may reorder the queue for optimal performance as needed. The device then executes a command from the command queue in 445.
Returning to block 430, if the command was an AEN command, the device starts a new process (path 432) comprising blocks 455 through 465. The process beginning in block 455 starts by the device initiating monitoring for asynchronous events. If no event is detected in block 460, the device continues monitoring. If an event is detected in 460, the device will prepare an ending status and transmit the asynchronous event status to the host. Returning again to block 430, if the command was an AEN command, in addition to the new process started in block 455, the process continues processing queue commands by returning to block 405 by path 450.
The embodiment shown in
Returning to block 550, if the command was an AEN command, the device starts a new process (path 551) comprising blocks 530 through 540. The process beginning in block 530 starts by the device accepting the AEN command for processing. The device will initiate monitoring for asynchronous events in block 530. If no event is detected in block 535, the device continues monitoring. If an event is detected in 535, the device will prepare an ending status and transmit the asynchronous event status to the host in block 540 and then return to 505 to continue operation.
Returning again to block 550, if the command was an AEN command, in addition to the new process started in block 530 through path 551, the process continues processing queue commands by returning to block 505 by path 552.
Returning to block 515, if the command and tag are invalid, the process advances to block 520. If the command was an AEN type command the device will initiate monitoring for asynchronous events in block 530. If no event is detected in block 535, the device continues monitoring. If an event is detected in block 535, the device will prepare an ending status and transmit the asynchronous event status to the host in 540 and then return to 505 to continue queue command operation.
Returning again to block 520, in addition to the process started by transitioning to block 530 the device also continues to process queue commands by returning to block 505 through path 522. In block 520, if the command was not an AEN command, the device sends error status to the host and returns to 505 to continue queue command operation.
In the embodiment illustrated in
In another embodiment of the invention, a device may be enabled by a command or by default operation to begin asynchronous event monitoring and reporting. If a host is aware of the feature by device inquiry, the host may enable the device to initiate asynchronous event notification using an agreed upon command tag. The tag may be a valid or an invalid tag value. The host can provide a preferred tag at the same time the feature is enabled. The device may also provide a default tag.
In another embodiment of the invention, any queued command may include an option bit that enables asynchronous event notification. By using this embodiment of the invention, the host does not need to send any commands to the drive, simplifying operation and overhead. Features enabled in a device may be persistent or not persistent across resets and loss of power. This reduces configuration time after startup and reset operations.
In an embodiment of the invention, the enabling of asynchronous event notification may be selected to persist if a device reset occurs.
In an embodiment of the invention, the enabling of asynchronous event notification may be selected to persist after a device has been powered off.
Beginning in block 610, a power or device reset is applied to the device. After the reset is ended, the device will check its configuration information to determine if the asynchronous event notification feature is enabled in block 615. If the feature is not enabled the process ends in 620. If the feature is enabled, the device will assign a tag (block 625) for AEN command status reporting. The assigned tag may be a tag previously provided by a host, or a tag assigned by the device.
The device will initiate monitoring for asynchronous events in block 630. If no event is detected in block 635, the device continues monitoring. If an event is detected in 635, the device will prepare an ending status and transmit the asynchronous event status to the host in 640 and then optionally return to 630 to continue monitoring.
In the embodiments of
An asynchronous monitoring unit 720 may be software operating on the processor 710 or a distinct hardware unit.
In an embodiment, the asynchronous monitoring unit 720 will monitor the asynchronous events through hardware functions or by polling.
In an embodiment, the asynchronous monitoring unit 720 may provide information to the processor 710 by interrupting the processor, or by a processor executing a polling routine.
The asynchronous storage 730 may be any typical memory/data storage distinct from the command queue either thorough separate units, partitions, distinct memory locations, or the like.
In an embodiment of the invention, and as shown at 705 in
temperature;
shock;
vibration;
power;
humidity;
altitude;
gas pressure;
error rate;
wear out, and
delayed completion thresholds.
In another embodiment of the invention and as also shown at 705 in
Although the foregoing has been described in terms of certain embodiments, other embodiments will be apparent to those of ordinary skill in the art from the disclosure herein. For example, in an alternative embodiment, operations may be performed concurrently, rather than sequentially, thereby improving performance. In another embodiment, the asynchronous event monitoring may be performed in a hardware implementation and reported automatically without processor involvement. Alternatives to embody the invention in combinations of hardware and/or software running on a processor, or as a hardware implementation that is reconfigurable to operate in multiple modes would be design choices apparent to those of ordinary skill in the art. As a consequence, the system and method of the present invention may be embodied as software which provides such programming, such as a set of instructions and/or metadata embodied within a computer readable medium. The described embodiments have been presented by way of example only and are not intended to limit the scope of the disclosure. Indeed, the novel methods and systems described herein may be embodied in a variety of other forms without departing from the spirit thereof. Thus, the invention is not limited by any preferred embodiments, but is defined by reference to the appended claims.
Number | Name | Date | Kind |
---|---|---|---|
5249231 | Covey et al. | Sep 1993 | A |
5537417 | Sharma et al. | Jul 1996 | A |
5974541 | Hall et al. | Oct 1999 | A |
6138180 | Zegelin | Oct 2000 | A |
6226741 | Shen et al. | May 2001 | B1 |
6279060 | Luke et al. | Aug 2001 | B1 |
6286061 | Ross | Sep 2001 | B1 |
6378004 | Galloway et al. | Apr 2002 | B1 |
6439464 | Fruhauf et al. | Aug 2002 | B1 |
6457069 | Stanley | Sep 2002 | B1 |
6484219 | Dunn et al. | Nov 2002 | B1 |
6490636 | Kikuchi et al. | Dec 2002 | B1 |
6505268 | Schultz et al. | Jan 2003 | B1 |
6631159 | Morris | Oct 2003 | B1 |
6647452 | Sonoda | Nov 2003 | B1 |
6671765 | Karlsson et al. | Dec 2003 | B1 |
6675243 | Bastiani et al. | Jan 2004 | B1 |
6681282 | Golden et al. | Jan 2004 | B1 |
6704819 | Chrysanthakopoulos | Mar 2004 | B1 |
6704824 | Goodman | Mar 2004 | B1 |
6721885 | Freeman et al. | Apr 2004 | B1 |
6735720 | Dunn et al. | May 2004 | B1 |
6742055 | Matsunaga | May 2004 | B2 |
6754817 | Khatri et al. | Jun 2004 | B2 |
6766480 | Oldfield et al. | Jul 2004 | B2 |
6795872 | Page et al. | Sep 2004 | B2 |
6901473 | Klissner | May 2005 | B2 |
6901596 | Galloway | May 2005 | B1 |
6907458 | Tomassetti et al. | Jun 2005 | B2 |
6910070 | Mishra et al. | Jun 2005 | B1 |
6928562 | Cohen et al. | Aug 2005 | B2 |
6963986 | Briggs et al. | Nov 2005 | B1 |
6976080 | Krishnaswamy et al. | Dec 2005 | B1 |
7013336 | King | Mar 2006 | B1 |
7082598 | Le et al. | Jul 2006 | B1 |
7100040 | Fortin et al. | Aug 2006 | B2 |
7197578 | Jacobs | Mar 2007 | B1 |
7231501 | Azevedo et al. | Jun 2007 | B2 |
7243200 | Day et al. | Jul 2007 | B2 |
7260749 | Cox | Aug 2007 | B2 |
7266625 | Sakaki et al. | Sep 2007 | B2 |
7272745 | Seto | Sep 2007 | B2 |
7281074 | Diefenbaugh et al. | Oct 2007 | B2 |
7451454 | Chen et al. | Nov 2008 | B2 |
7457887 | Winkler et al. | Nov 2008 | B1 |
7457914 | Cordella et al. | Nov 2008 | B2 |
7546357 | Manchester et al. | Jun 2009 | B2 |
7548994 | Ali et al. | Jun 2009 | B2 |
7554274 | Wang et al. | Jun 2009 | B2 |
7565108 | Kotola et al. | Jul 2009 | B2 |
7568132 | Nakayama et al. | Jul 2009 | B2 |
7577748 | Yoshida | Aug 2009 | B2 |
7589629 | Tupman et al. | Sep 2009 | B2 |
7689744 | McCarty et al. | Mar 2010 | B1 |
7706820 | Yamaki | Apr 2010 | B2 |
7752029 | Tamayo et al. | Jul 2010 | B2 |
7752340 | Porat et al. | Jul 2010 | B1 |
7792046 | Kucharczyk et al. | Sep 2010 | B2 |
8165301 | Bruce et al. | Apr 2012 | B1 |
8180931 | Lee et al. | May 2012 | B2 |
8260885 | Lindstrom | Sep 2012 | B2 |
8285923 | Stevens | Oct 2012 | B2 |
20020103943 | Lo et al. | Aug 2002 | A1 |
20030037171 | Madineni et al. | Feb 2003 | A1 |
20030233154 | Kobziar | Dec 2003 | A1 |
20040236897 | Cheng | Nov 2004 | A1 |
20040243737 | Beardsley et al. | Dec 2004 | A1 |
20040243738 | Day et al. | Dec 2004 | A1 |
20040264284 | Priborsky et al. | Dec 2004 | A1 |
20050027894 | Ayyavu et al. | Feb 2005 | A1 |
20050038791 | Ven | Feb 2005 | A1 |
20050086397 | Huffman et al. | Apr 2005 | A1 |
20050160320 | Elez | Jul 2005 | A1 |
20050171970 | Ozzie et al. | Aug 2005 | A1 |
20060053234 | Kumar et al. | Mar 2006 | A1 |
20060067209 | Sheehan et al. | Mar 2006 | A1 |
20060095693 | Aida et al. | May 2006 | A1 |
20060159109 | Lamkin et al. | Jul 2006 | A1 |
20060271676 | Talayco et al. | Nov 2006 | A1 |
20060280149 | Kuhl et al. | Dec 2006 | A1 |
20070011360 | Chang et al. | Jan 2007 | A1 |
20070174509 | Day et al. | Jul 2007 | A1 |
20070204089 | Proctor | Aug 2007 | A1 |
20080005116 | Uno | Jan 2008 | A1 |
20080005311 | Ali et al. | Jan 2008 | A1 |
20080046612 | Beardsley et al. | Feb 2008 | A1 |
20080071940 | Kim et al. | Mar 2008 | A1 |
20080126628 | Mullis et al. | May 2008 | A1 |
20080204089 | Nakasha | Aug 2008 | A1 |
20090037622 | Dheeresh et al. | Feb 2009 | A1 |
20090124375 | Patel | May 2009 | A1 |
20090177815 | Nemazie et al. | Jul 2009 | A1 |
20100057966 | Ambikapathy et al. | Mar 2010 | A1 |
20100115143 | Nakajima | May 2010 | A1 |
20100169686 | Ryoo et al. | Jul 2010 | A1 |
20100298718 | Gilham et al. | Nov 2010 | A1 |
20110029808 | Moshayedi | Feb 2011 | A1 |
20110055494 | Roberts et al. | Mar 2011 | A1 |
20110219163 | Beadnell et al. | Sep 2011 | A1 |
Number | Date | Country |
---|---|---|
2180410 | Apr 2010 | EP |
03023629 | Mar 2003 | WO |
Entry |
---|
PCT Search Report in corresponding application PCT/US 11/34633 dated Jul. 18, 2011, submitted herewith. |
PCT Search Report and Written Opinion in corresponding application PCT/US 11/34633 dated Jul. 18, 2011, 8 pages. |
Number | Date | Country | |
---|---|---|---|
20110271151 A1 | Nov 2011 | US |