The background description provided herein is for the purpose of generally presenting the context of the disclosure. Work of the presently named inventors, to the extent it is described in this background section, as well as aspects of the description that may not otherwise qualify as prior art at the time of filing, are neither expressly nor impliedly admitted as prior art against the present disclosure.
Computing and electronic devices often include various types of memory for storing data of operating systems, applications, or user files. Before an operating system and applications are run on the device, however, low-level code is used to configure and boot the device. When booting a device, the low-level code is typically copied from one of the memories and executed by a processor in order to configure the components of the device for operation. The memory storing the low-level code is often a non-volatile memory, from which the low-level code is copied into another memory prior to execution. Due to recent advances in memory-controller technology, this low-level code may be streamed to the other memory with minimal initialization or overhead, which may increase a speed at which the device boots.
Memory controllers capable of streaming the low-level code from the non-volatile memory, however, stream the low-level code to contiguous locations of the other memory. This other memory, however, may not have enough capacity to receive all of the low-level code or be a memory from which execution of some of the low-level code is not optimal. Accordingly, some partial solutions prevent streaming until the memory controller is fully initialized. Waiting until the memory controller is fully initialized, however, often consumes considerable time and processing resources, which results in slower device boot times.
This summary is provided to introduce subject matter that is further described below in the Detailed Description and Drawings. Accordingly, this Summary should not be considered to describe essential features nor used to limit the scope of the claimed subject matter.
A method is described for stalling a memory controller that is streaming, via a direct memory access (DMA) operation, multiple boot images from a first memory to a second memory, generating, while the memory controller is stalled, a descriptor for streaming a second one of the multiple boot images from the first memory to a non-contiguous memory location, and resuming the memory controller effective to cause the memory controller to stream, based on the descriptor and via another DMA operation, the second boot image to the non-contiguous memory location.
A memory storage device is described that includes memory storage media storing multiple boot images executable by a processor of a host device to initialize components of the host device during a boot sequence, a header executable by the processor of the host device to construct a series of data transfer commands for streaming the multiple boot images to non-contiguous locations of another memory storage device, another data transfer command associated with the header executable by a memory controller to stream the header to a base address of the other memory storage device, and a data link command executable by the controller to stall the DMA engine effective to permit the header to be executed from the other memory storage device by the processor to construct the series of data transfer commands for streaming the multiple boot images.
A computing device is described that includes a stream manager that is configured to stall a memory controller while the memory controller is streaming, via a direct memory access (DMA) operation, multiple boot images from a non-volatile memory of the computing device to a volatile memory of the computing device, the memory controller stalled after streaming a first one of the multiple boot images to the volatile memory. Additionally, the stream manager generates, while the memory controller is stalled and based on the first boot image streamed to the volatile memory, a descriptor for streaming a second one of the multiple boot images from the non-volatile memory to a non-contiguous location of the volatile memory. The stream manager then resumes the memory controller effective to cause the memory controller to stream, based on the descriptor and via another DMA operation, the second boot image to the non-contiguous location of the volatile memory.
The details of one or more implementations are set forth in the accompanying drawings and the description below. Other features and advantages will be apparent from the description and drawings.
In the figures, the left-most digit of a reference number identifies the figure in which the reference number first appears. The use of the same reference numbers in different instances in the description and the figures indicate like elements.
Conventional techniques for streaming boot images stream boot images from one memory to contiguous locations of another memory. For example, an alternate boot mode of a memory controller may stream boot image data to a base address of the other memory, and may not be redirected or paused once the streaming of data begins. The other memory, however, may not have sufficient capacity to receive the boot images or may be a memory from which execution of the boot images is not optimal. Thus, some of the boot images may not be streamed or transferred until after the memory controller is fully initialized to enable transfers to other preferred memories. Initializing the memory controller, however, expends computing resources and consumes time, which can slow device boot times.
This disclosure describes apparatuses and techniques for dynamic boot image streaming, which enable boot images to be streamed to non-contiguous memory locations and/or to multiple memories. By so doing, the boot images can be streamed to various memory locations without fully initializing the memory controller, thereby conserving computing resources, saving time, and/or reducing device boot times.
The following discussion describes an operating environment, techniques that may be employed in the operating environment, and a System-on-Chip (SoC) in which components of the operating environment can be embodied. In the discussion below, reference is made to the operating environment by way of example only.
Operating Environment
Generally, computing devices 102 have operational states ranging from an “off” state to an “on” state. These states may include a fully off state, suspended state, sleep state, hibernation state, idle state, active state, and the like. When transitioning from a lower operational state to a higher operational state (e.g., from an off state to an active state), computing device 102 is booted. Booting computing device 102 includes transferring and/or executing low-level code to configure components of computing device 102 for operation.
Each computing device 102 includes processor(s) 114 (e.g. an application processor) and computer-readable storage media 116 (CRM 116). Processor 114 includes any suitable number and/or type of processing cores, which may be configured in any suitable manner (e.g., a heterogeneous multi-core application processor). CRM 116 includes volatile memory 118, non-volatile memory 120, and embedded memory 122. Volatile memory 118 includes static random access memory 124 (SRAM 124) and synchronous dynamic random-access memory 126 (DRAM 126). Alternately or additionally, volatile memory 118 may include other suitable types of memory, such as random-access memory (RAM), asynchronous dynamic RAM, double-data-rate RAM (DDR), and the like.
Non-volatile memory 120 includes flash memory 128, which may store data of computing device 102 persistently when powered-down or suspended. Alternately or additionally, non-volatile memory 120 may include other suitable types of memory or storage devices such as non-volatile RAM (NVRAM), read-only memory (ROM), solid-state drives, magnetic or optical disk drives, and the like. Operating systems, applications, or user data (not shown) of computing device 102 may be stored by, or executed from, volatile memory 118, non-volatile memory 120, or any other suitable type of CRM 116. Alternately or additionally, operating systems and/or applications of computing device 102 may be embodied as firmware or other processor-executable instructions, binaries, or code. Operating systems and applications of device 102 are executable by processor 114 to provide a user interface, various functionalities, and/or services of computing device 102.
Embedded memory 122 includes memory controller 130, direct memory access engine 132 (DMA engine 132), and embedded flash memory 134 (embedded flash 134). Embedded memory 122, and components thereof, may be implemented as an integrated memory device, such as an embedded multimedia card (eMMC) device. Memory controller 130 enables access of embedded memory 122 and may provide various data management functions for embedded flash 134, such as error-correction coding, block management, or wear leveling. Memory controller 130 may be implemented as any suitable type of controller, such as a secure digital (SD) host controller. Memory controller 130 supports a variety of data transfer operations, such as an advanced direct memory access (ADMA) transfer algorithm.
The ADMA transfer algorithm is a scatter gather algorithm and operates via a set of transfer and link descriptors. The descriptors may be organized by a descriptor table (not shown), which may be programmed with descriptors describing a series of data transfers between embedded memory 122 and other memories of computing device 102. The descriptors may be executed from the descriptor table without interrupting software executing on processor 114 (e.g., a memory host driver). Memory controller 130 may also support various boot modes, such as an alternate boot mode capable of implementing ADMA transfers. Accordingly, memory controller 130 may be configured to transfer data of embedded flash 134 when computing device 102 is booted.
DMA engine 132 enables direct memory access (DMA) operations between embedded memory 122 and other memories of computing device 102 (e.g., SRAM 124 or DRAM 126). DMA operations transfer data from a source memory to a destination memory without involving a higher-level controller or processor. These DMA operations may include single operation DMA algorithms as defined by the secure digital (SD) host controller standard version 1.00. Additionally, the DMA operations may include scatter gather DMA algorithms (e.g., ADMA) as defined by the SD host controller standard version 2.00. For example, DMA engine 132 may transfer data from embedded flash 134 to SRAM 124 via an ADMA transfer without involving or interrupting memory controller 130 or processor 114. Embedded flash 134 is accessible via memory controller 130 or DMA engine 132, and may contain low-level code (e.g., boot code or boot loaders) useful for booting computing device 102.
Embedded flash 134 may be single-level cell (SLC) or multi-level cell (MLC) based managed flash memory. In some cases, embedded flash may include an area of SLC flash memory and an area of MLC flash memory. Embedded flash 134 may contain boot code or other initialization information useful for booting computing device 102. Contents and partitioning of embedded flash 134 may vary and are described below.
CRM 116 also contains data stream manager 136 (stream manager 136), which in this particular example, is embodied as processor-executable instructions that are executable by processor 114 to implement various functionalities. Alternately or additionally, stream manager 136 may be implemented, in part or whole, via firmware or hardware (not shown) or any suitable combination thereof. Stream manager 136 may enable boot images or boot data stored by embedded flash 134 to be streamed to non-contiguous memory locations and/or to multiple destination memory devices. The implementation and use of stream manager 136 varies and is described below.
Computing device 102 may also include I/O ports 138, display 140, and network interface(s) 142. I/O ports 138 allow computing device 102 to interact with other devices or users. I/O ports 138 may include any combination of internal or external ports, such as USB ports, audio ports, Serial ATA (SATA) ports, PCI-express based ports or card-slots, secure digital input/output (SDIO) slots, and/or other legacy ports. Various peripherals may be operatively coupled with I/O ports 138, such as human-input devices (HIDs), external computer-readable storage media, or other peripherals.
Display 140 may present a user interface or rendered graphics associated with an operating system or application of computing device 102. Display 140 may include a touch-input sensor (not shown), such as a touch screen or touch-sensitive overlay. Network interface(s) 142 provides connectivity to one or more networks and other devices connected therewith. Data communicated over network interfaces 142 may be packetized or framed depending on a communication protocol or standard by which computing device 102 is communicating. Network interfaces 142 may include wired interfaces, such as Ethernet or fiber optic interfaces for communication over a local network, intranet, or the Internet. Network interfaces 142 may also include wireless interfaces that facilitate communication over wireless networks, such as wireless LANs, cellular networks, or wireless personal-area-networks (WPANs).
Boot image-0206 includes header 212 and is streamed from boot partition 202 using a transfer descriptor. Header 212 includes descriptor data 214, which is useful to construct transfer descriptors for streaming boot image-1208 and/or boot image-2210 from boot partition 202. Header 212 may also include data useful for configuring other memories of computing device 102, such as DRAM 126. Header 212 may include any suitable amount of data, such as 16 or 32 blocks of data.
Transfer descriptors typically include a destination address, a length indicator specifying an amount of data to transfer, and various attribute fields (e.g., descriptor type, validity, end, interrupt action). In this particular example, a transfer descriptor for transferring boot image-0206 includes information or parameters for streaming header 212 from embedded flash 134. This descriptor and a link-to-self descriptor may be constructed in volatile memory (e.g., SRAM 124) prior to being input into DMA engine 132 for execution. The link-to-self descriptor is a link type descriptor that references, or points back to, itself. Causing a memory controller to execute the link-to-self descriptor may be effective to stall the memory controller. Alternately or additionally, executing a link-to-self descriptor may stall data lines or a clock line of a memory controller. The use of the link-to-self descriptor may vary and is described below.
Techniques of Dynamic Boot Image Streaming
The following discussion describes techniques of dynamic boot image streaming. These techniques can be implemented using the previously described environment or entities, such as memory controller 130 or stream manager 136 of
At 302, a streaming of multiple boot images from a first memory to a second memory is initiated. The streaming may be initiated responsive to a power-on event or a command (e.g., a boot initiation command). The multiple boot images are streamed by a memory controller or DMA engine associated with the first memory. The streaming operations performed by the memory controller or DMA engine are based on one or more ADMA transfer and/or link descriptors. A first one of the boot images may include transfer descriptors and/or a header of fixed length, such as 16 or 32 data blocks. This header includes information useful to construct additional descriptors or to configure other memories. Other ones of the multiple boot images may include boot loaders, configuration files, operating systems, boot code, and the like.
As an example, consider a user powering-on smart-phone 104 of
At 304, a memory controller that is streaming the multiple boot images is stalled. The memory controller may be stalled after a first one of the boot images is streamed into the second memory. The first one of the boot images may be a header file including data useful to construct transfer descriptors for other ones of the multiple boot images. The memory controller may be stalled by causing the memory controller to execute a link-to-self descriptor. In some cases, the memory controller is configured to incrementally execute a series of descriptors during the streaming operation. In such case, the link-to-self descriptor may be placed in a memory location following a location of the descriptor for streaming the first boot image.
In the context of the present example, assume that a link-to-self descriptor is located at an address following the transfer descriptor. Once memory controller 130 of embedded memory 122 executes the transfer descriptor to stream boot image-0206 via DMA engine 132, a system address register of memory controller 130 is incremented to the address of the link-to-self descriptor. Memory controller 130 then begins executing the link-to-self descriptor, and operation of memory controller 130 stalls. Executing the link-to-self descriptor also stalls a clock line of embedded memory 122 and DMA engine 132.
At 306, a descriptor for streaming a second one of the multiple boot images is generated while the memory controller is stalled. This descriptor is generated by a processor executing code of the first boot image (e.g., descriptor data 214 of header 212) from the second memory. The descriptor is a transfer descriptor for streaming the second boot image to a non-contiguous location of the second memory or a third memory. In some cases, the descriptor is constructed from a header previously streamed to the second memory. Alternately or additionally, the header may include initialization data for the third memory, such as data for configuring for DRAM or DDR. Memory controller 130 and DMA engine 132 are not necessarily aware of being stalled while the descriptor is generated.
Continuing the ongoing example, stream manager 136 causes processor 114 to execute boot code of header 212 from SRAM 124 to construct additional descriptors. These additional descriptors are associated with boot image-1208 and boot image-2210. Processor 114 also executes the boot code of header 212 to configure DRAM 126 for receiving boot image-1208 and boot image-2210. In other instances, the additional descriptors are configured to stream boot images to non-contiguous locations of SRAM 124, such as specifying offsets between destination addresses for the boot images.
At 308, the memory controller is resumed to stream the second boot image to the non-contiguous location of the second memory or to the third memory. The memory controller is resumed by pointing the link-to-self descriptor to a descriptor for streaming the second boot image. Resuming the memory controller causes the DMA engine to continue the streaming operation initiated at 302 without interrupting a host controller driver. Resuming the memory controller also resumes data lines or the clock line associated with the memory controller. By so doing, boot images can be streamed to non-contiguous and/or non-sequential locations of multiple memories with a single streaming operation (e.g. ADMA transfers in alternate boot mode).
Concluding the present example, stream manager 136 points the link-to-self descriptor being executing by memory controller 130 to a first of the additional descriptors generated while memory controller 130 was stalled. This is effective to cause memory controller 130 to resume the streaming operation boot image-1208 and boot image-2210 based on the additional link descriptors. Here, DMA engine 132 streams boot image-1208 and boot image-2210 to non-contiguous and non-sequential locations of DRAM 126 as illustrated by
At 502, a boot initialization command is sent to a first memory device. In some cases, the memory device may be an embedded memory device configured to transfer boot code, such as an eMMC memory device. The boot initialization command is sent to a controller of the first memory device. Alternately or additionally, a pre-idle command may be sent to the memory controller to put the memory device into an initial power-on-reset mode. The pre-idle command may be sent prior to sending the boot initialization command to the memory device. The memory device is pre-configured to stream a boot image responsive to the boot initialization command. For example, a boot partition and associated size of the boot partition are set in a register accessible by the memory controller (e.g., an EXT_CSD register). In some cases, the boot initialization command is sufficient to cause the memory device to start memory transfers associated with booting a device.
At 504, a controller of the first memory device is caused to execute a descriptor for streaming a header to a second memory device. An address of the descriptor may be indicated by a register of the controller. The descriptor indicates a length of the header, such as 16 or 32 data blocks. In some cases, the header is streamed by a DMA engine associated with the controller. The second memory device may be a memory device that needs little or no pre-configuration prior to receiving the header, such as SRAM and the like.
At 506, the controller of the first memory device is caused to execute a link-to-self descriptor effective to stall the controller of the memory device. In some cases, stalling the controller stalls data lines or a clock line associated with the controller. Alternately or additionally, a DMA engine associated with the controller may also be stalled while the controller executes the link-to-self descriptor. For example, stream manager 136 may cause memory controller 130 to execute a link-to-self descriptor after a header is streamed into SRAM.
At 508, the header is processed to construct additional descriptors for streaming one or more boot images to non-contiguous locations of the second memory device. The header is executed from the second memory device by a processor to construct the additional descriptors. The additional descriptors may be constructed while the memory controller is stalled. In some cases, the one or more boot images include boot loader or boot code for configuring components of a device for use. The second memory can be a volatile memory from which the one or more boot images are executed from.
At 510, the link-to-self descriptor is pointed to the additional descriptors effective to resume the controller of the first memory device. The first memory device then streams the one or more boot images to non-contiguous locations of the second memory device. For example, stream manager 136 may point a link-to-self descriptor being executed by memory controller 130 to data descriptors for streaming boot images 206-210 or remaining code thereof.
At 602, a boot initialization command is sent to a first memory device. In some cases, the first memory device is an embedded memory device configured to transfer boot code during a boot sequence, such as an eMMC memory device. A pre-idle command (e.g., CMD 0xF0F0F0F0) can be sent prior to the boot initialization command to put the first memory device in a pre-idle state. The boot initialization command is sent to a controller of the first memory device. In some cases, the first memory device is pre-configured to stream a boot image responsive to the boot initialization command. For example, a boot partition and associated size of the boot partition may be set in a register accessible by the memory controller (e.g., an EXT_CSD register). In such cases, the boot initialization command is sufficient to cause a controller to start streaming boot images from the first memory device.
At 604, a controller of the first memory device is caused to execute a descriptor for streaming a header to a second memory device. An address of the descriptor is indicated by a register of the controller. The descriptor may also indicate a length of the header, such as 16 or 32 data blocks. In some cases, the header is streamed by a DMA engine associated with the controller. The second memory device may be a memory device that needs little or no pre-configuration prior to receiving the header, such as SRAM and the like.
At 606, the controller of the first memory device is caused to execute a link-to-self descriptor effective to stall the controller of the memory device. Stalling the controller may stall data lines or a clock line associated with the controller. Alternately or additionally, a DMA engine associated with the controller may also be stalled while the controller executes the link-to-self descriptor. For example, stream manager 136 can cause memory controller 130 to execute a link-to-self descriptor after a header is streamed into SRAM.
At 608, the header is processed to construct additional descriptors for streaming multiple boot images to a third memory device. The header may be executed from the second memory device by a processor to construct the additional descriptors. The additional descriptors are constructed while the memory controller is stalled. In some cases, the multiple boot images include boot loader or boot code for configuring components of a device for use. The third memory device is a volatile memory that is of a different type than that of the second memory device. For example, the second memory device may comprise SRAM and the third memory device may comprise DRAM.
At 610, the third memory device is configured to receive a boot image streamed from the first memory device. In some cases, third memory is configured based on data or information included in the header. In such cases, the processor executes additional data of the header to configure the third memory device. Configuring the third memory device may include setting various parameters associated with the third memory device, such as bus settings, data rate settings, bank address settings, and the like.
At 612, the link-to-self descriptor is pointed to the additional descriptors effective to resume the controller of the first memory device. The first memory device then streams the multiple boot images to the third memory device. For example, stream manager 136 may point a link-to-self descriptor being executed by memory controller 130 to data descriptors for streaming boot images 206-210. The multiple boot images are streamed to non-contiguous and/or non-sequential locations of the third memory device. For example, boot image-2210 can be streamed to a base address of DRAM 126 and boot image-1208 may be streamed to another non-contiguous location of DRAM 126 as illustrated in
System-on-Chip
SoC 700 can be integrated with electronic circuitry, a microprocessor, memory, input-output (I/O) logic control, communication interfaces, other hardware, firmware, and/or software needed to provide functionalities of a device, such as any of the above-listed devices. SoC 700 can also include an integrated data bus (not shown) that couples the various components of the SoC for data communication between the components. A memory storage device that includes SoC 700 can also be implemented with many combinations of differing components. In some cases, these differing components may be configured to implement concepts described herein over various internal or external data interfaces.
In this example, SoC 700 includes various components such as an input-output (I/O) logic control 702 (e.g., to include electronic circuitry) and microprocessor 704. SoC 700 also includes memory 706, which can be any type and/or combination of RAM, SRAM, DRAM, low-latency nonvolatile memory, ROM, one-time programmable (OTP) memory, and/or other suitable electronic data storage. Alternately or additionally, SoC 700 may comprise a data interface (not shown) for accessing additional or expandable off-chip memory, such as external SRAM, DRAM, or flash memory. SoC 700 can also include various firmware and/or software, such as operating system(s) 708, which can be computer-executable instructions maintained by memory 706 and executed by microprocessor 704. SoC 700 may also include other various communication interfaces and components embodied as hardware, firmware, software, or any suitable combination thereof.
SoC 700 also includes memory controller 130, DMA engine 132 embedded flash 134, and stream manager 136 (either of which may embodied as disparate or combined components). Although not shown, embedded flash 134 may include boot partition 202 and data partition 204, for storing any suitable data (e.g., user data or boot images 206-210). Examples of these various components, functions, and/or entities, and their corresponding functionality, are described with reference to the respective components of the environment 100 and various configurations as illustrated by
Stream manager 136, either independently or in combination with other entities (e.g., memory controller 130), can be implemented as computer-executable instructions maintained by memory 706 and executed by microprocessor 704 to implement various embodiments and/or features described herein. Stream manager 136 may also be provided integral with other entities of the SoC, such as integrated a memory controller associated with memory 706 or another suitable software, firmware, or hardware component within SoC 700. Alternatively or additionally, stream manager 136 and the other components can be implemented as hardware, firmware, fixed logic circuitry, or any combination thereof that is implemented in connection with the I/O logic control 702 and/or other signal processing and control circuits of SoC 700.
Although the subject matter has been described in language specific to structural features and/or methodological operations, it is to be understood that the subject matter defined in the appended claims is not necessarily limited to the specific features or operations described above, including orders in which they are performed.
This application is a divisional of U.S. Utility patent application Ser. No. 13/676,701 filed Nov. 14, 2012, which in turn claims priority to U.S. Provisional Patent Application Ser. No. 61/560,217 filed Nov. 15, 2011, the disclosures of which are incorporated by reference herein in their entirety.
Number | Name | Date | Kind |
---|---|---|---|
5155833 | Cullison et al. | Oct 1992 | A |
5390165 | Tuch | Feb 1995 | A |
5467398 | Pierce et al. | Nov 1995 | A |
5469506 | Berson et al. | Nov 1995 | A |
5479514 | Klonowski | Dec 1995 | A |
5481733 | Douglis et al. | Jan 1996 | A |
5617118 | Thompson | Apr 1997 | A |
5652895 | Poisner | Jul 1997 | A |
5673416 | Chee et al. | Sep 1997 | A |
5696989 | Miura et al. | Dec 1997 | A |
5771356 | Leger et al. | Jun 1998 | A |
5828835 | Isfeld et al. | Oct 1998 | A |
5884099 | Klingelhofer | Mar 1999 | A |
5991519 | Benhammou et al. | Nov 1999 | A |
6006018 | Burnett et al. | Dec 1999 | A |
6014722 | Rudin et al. | Jan 2000 | A |
6092108 | DiPlacido et al. | Jul 2000 | A |
6145069 | Dye | Nov 2000 | A |
6216230 | Rallis et al. | Apr 2001 | B1 |
6230277 | Nakaoka et al. | May 2001 | B1 |
6330626 | Dennin et al. | Dec 2001 | B1 |
6389538 | Gruse et al. | May 2002 | B1 |
6463509 | Teoman et al. | Oct 2002 | B1 |
6473861 | Stokes | Oct 2002 | B1 |
6564318 | Gharda et al. | May 2003 | B1 |
6601167 | Gibson et al. | Jul 2003 | B1 |
6678790 | Kumar | Jan 2004 | B1 |
6711447 | Saeed | Mar 2004 | B1 |
6756988 | Wang et al. | Jun 2004 | B1 |
6799271 | Kugai | Sep 2004 | B2 |
6823472 | DeKoning et al. | Nov 2004 | B1 |
6832280 | Malik et al. | Dec 2004 | B2 |
6901298 | Govindaraj et al. | May 2005 | B1 |
7010808 | Leung et al. | Mar 2006 | B1 |
7035827 | Ezaki | Apr 2006 | B2 |
7036018 | Horvat et al. | Apr 2006 | B2 |
7089419 | Foster et al. | Aug 2006 | B2 |
7103788 | Souza et al. | Sep 2006 | B1 |
7117352 | Giles et al. | Oct 2006 | B1 |
7126913 | Patel et al. | Oct 2006 | B1 |
7194638 | Larky | Mar 2007 | B1 |
7206940 | Evans et al. | Apr 2007 | B2 |
7210038 | Walmsley | Apr 2007 | B2 |
7266842 | Foster et al. | Sep 2007 | B2 |
7299365 | Evans | Nov 2007 | B2 |
7308591 | Dubinsky | Dec 2007 | B2 |
7356707 | Foster et al. | Apr 2008 | B2 |
7370349 | Holvey et al. | May 2008 | B2 |
7373506 | Asano et al. | May 2008 | B2 |
7376976 | Fierstein et al. | May 2008 | B2 |
7496952 | Edwards et al. | Feb 2009 | B2 |
7511636 | Takahashi | Mar 2009 | B2 |
7522726 | Ishiguro et al. | Apr 2009 | B2 |
7536558 | Neble et al. | May 2009 | B2 |
7549056 | Carr | Jun 2009 | B2 |
7571216 | McRae et al. | Aug 2009 | B1 |
7596614 | Saunderson et al. | Sep 2009 | B2 |
7606230 | Cohen et al. | Oct 2009 | B1 |
7620784 | Panabaker | Nov 2009 | B2 |
7676040 | Augenstein et al. | Mar 2010 | B2 |
7725738 | Langhammer et al. | May 2010 | B1 |
7743260 | Fetik | Jun 2010 | B2 |
7774635 | Shiota | Aug 2010 | B2 |
7788670 | Bodas et al. | Aug 2010 | B2 |
7818389 | Chiang et al. | Oct 2010 | B1 |
7865733 | Goto et al. | Jan 2011 | B2 |
7873841 | Mullis, II et al. | Jan 2011 | B2 |
7898857 | Kirsch et al. | Mar 2011 | B2 |
7900060 | Hodzic | Mar 2011 | B2 |
7991943 | Berenbaum et al. | Aug 2011 | B2 |
7995596 | Kuila et al. | Aug 2011 | B2 |
8000284 | Lott et al. | Aug 2011 | B2 |
8001592 | Hatakeyama | Aug 2011 | B2 |
8095816 | Chan | Jan 2012 | B1 |
8117478 | Liu et al. | Feb 2012 | B2 |
8139521 | Mukherjee et al. | Mar 2012 | B2 |
8171309 | Poo | May 2012 | B1 |
8296555 | Chu | Oct 2012 | B2 |
8321706 | Zhang | Nov 2012 | B2 |
8327056 | Chan | Dec 2012 | B1 |
8423789 | Poo et al. | Apr 2013 | B1 |
8443187 | Orr | May 2013 | B1 |
8443211 | Zhao et al. | May 2013 | B2 |
8510560 | Lambert et al. | Aug 2013 | B1 |
8645716 | Dujari et al. | Feb 2014 | B1 |
8688968 | Chu et al. | Apr 2014 | B2 |
8839016 | Zhang et al. | Sep 2014 | B2 |
8843686 | Chan et al. | Sep 2014 | B1 |
9009778 | Pearce et al. | Apr 2015 | B2 |
9141394 | Sakarda | Sep 2015 | B2 |
9253175 | Orr | Feb 2016 | B1 |
9436629 | Baratam et al. | Sep 2016 | B2 |
9652249 | Chu et al. | May 2017 | B1 |
20020065834 | Wiggen et al. | May 2002 | A1 |
20020069354 | Fallon et al. | Jun 2002 | A1 |
20020087816 | Atkinson et al. | Jul 2002 | A1 |
20030014368 | Leurig et al. | Jan 2003 | A1 |
20030188162 | Candelore et al. | Oct 2003 | A1 |
20030200453 | Foster et al. | Oct 2003 | A1 |
20030200454 | Foster et al. | Oct 2003 | A1 |
20030208675 | Burokas et al. | Nov 2003 | A1 |
20030236991 | Letsinger | Dec 2003 | A1 |
20040015621 | Tanaka | Jan 2004 | A1 |
20040030909 | Sako et al. | Feb 2004 | A1 |
20040054898 | Chao et al. | Mar 2004 | A1 |
20040103272 | Zimmer et al. | May 2004 | A1 |
20040125679 | Kwean | Jul 2004 | A1 |
20040158669 | Weng et al. | Aug 2004 | A1 |
20040184343 | Roohparvar et al. | Sep 2004 | A1 |
20040187001 | Bousis | Sep 2004 | A1 |
20040257462 | Goris et al. | Dec 2004 | A1 |
20040266386 | Kuo | Dec 2004 | A1 |
20050033869 | Cline | Feb 2005 | A1 |
20050055547 | Kawamura | Mar 2005 | A1 |
20050086551 | Wirasinghe et al. | Apr 2005 | A1 |
20050108171 | Bajikar et al. | May 2005 | A1 |
20050108469 | Freeman | May 2005 | A1 |
20050114686 | Ball et al. | May 2005 | A1 |
20050138365 | Bellipady et al. | Jun 2005 | A1 |
20050144468 | Northcutt et al. | Jun 2005 | A1 |
20050156925 | Fong et al. | Jul 2005 | A1 |
20050177674 | Ober et al. | Aug 2005 | A1 |
20050210290 | Ono et al. | Sep 2005 | A1 |
20050278523 | Fortin et al. | Dec 2005 | A1 |
20060004946 | Shah et al. | Jan 2006 | A1 |
20060036897 | Lin et al. | Feb 2006 | A1 |
20060059372 | Fayar et al. | Mar 2006 | A1 |
20060072748 | Buer | Apr 2006 | A1 |
20060075259 | Bajikar et al. | Apr 2006 | A1 |
20060090084 | Buer | Apr 2006 | A1 |
20060117177 | Buer | Jun 2006 | A1 |
20060123248 | Porter et al. | Jun 2006 | A1 |
20060136735 | Plotkin et al. | Jun 2006 | A1 |
20060142906 | Brozovich et al. | Jun 2006 | A1 |
20060156390 | Baugher | Jul 2006 | A1 |
20060161695 | Mochizuki | Jul 2006 | A1 |
20060200670 | Kuffel et al. | Sep 2006 | A1 |
20060209595 | Newell | Sep 2006 | A1 |
20060233149 | Rustagi et al. | Oct 2006 | A1 |
20060253716 | Dhiman et al. | Nov 2006 | A1 |
20060259656 | Sullivan | Nov 2006 | A1 |
20060285686 | Van Den Heuvel et al. | Dec 2006 | A1 |
20070005824 | Howard | Jan 2007 | A1 |
20070011445 | Waltermann et al. | Jan 2007 | A1 |
20070038866 | Bardsley et al. | Feb 2007 | A1 |
20070073915 | Go et al. | Mar 2007 | A1 |
20070097904 | Mukherjee et al. | May 2007 | A1 |
20070136792 | Ting et al. | Jun 2007 | A1 |
20070150756 | Kudelski | Jun 2007 | A1 |
20070174602 | Kao | Jul 2007 | A1 |
20070180271 | Hatakeyama et al. | Aug 2007 | A1 |
20070186105 | Bailey et al. | Aug 2007 | A1 |
20070189249 | Gurevich et al. | Aug 2007 | A1 |
20070220501 | Yanagawa et al. | Sep 2007 | A1 |
20070234028 | Rothman et al. | Oct 2007 | A1 |
20070260905 | Marsden et al. | Nov 2007 | A1 |
20070277051 | Reece et al. | Nov 2007 | A1 |
20070297606 | Tkacik et al. | Dec 2007 | A1 |
20080005549 | Ke | Jan 2008 | A1 |
20080016313 | Murotake et al. | Jan 2008 | A1 |
20080028243 | Morisawa | Jan 2008 | A1 |
20080034411 | Aoyama | Feb 2008 | A1 |
20080043508 | Chao et al. | Feb 2008 | A1 |
20080046732 | Fu et al. | Feb 2008 | A1 |
20080066075 | Nutter et al. | Mar 2008 | A1 |
20080072311 | Mullick et al. | Mar 2008 | A1 |
20080082837 | Mattsson | Apr 2008 | A1 |
20080091944 | von Mueller et al. | Apr 2008 | A1 |
20080104422 | Mullis et al. | May 2008 | A1 |
20080108322 | Upp | May 2008 | A1 |
20080120717 | Shakkarwar | May 2008 | A1 |
20080165952 | Smith et al. | Jul 2008 | A1 |
20080295157 | Wong et al. | Nov 2008 | A1 |
20080298289 | Jeyaseelan | Dec 2008 | A1 |
20080313462 | Zhao et al. | Dec 2008 | A1 |
20090006658 | Gough | Jan 2009 | A1 |
20090024846 | Ganesan et al. | Jan 2009 | A1 |
20090049222 | Lee et al. | Feb 2009 | A1 |
20090077618 | Pearce et al. | Mar 2009 | A1 |
20090199031 | Zhang | Aug 2009 | A1 |
20090254771 | So et al. | Oct 2009 | A1 |
20090327608 | Eschmann et al. | Dec 2009 | A1 |
20100023747 | Asnaashari et al. | Jan 2010 | A1 |
20100039864 | Sarin et al. | Feb 2010 | A1 |
20100058045 | Borras et al. | Mar 2010 | A1 |
20100070751 | Chue | Mar 2010 | A1 |
20100174934 | Zhao | Jul 2010 | A1 |
20100217935 | Cho et al. | Aug 2010 | A1 |
20120287337 | Kumar et al. | Nov 2012 | A1 |
20130031346 | Sakarda | Jan 2013 | A1 |
20130046966 | Chu | Feb 2013 | A1 |
20130124844 | Baratam | May 2013 | A1 |
20130346777 | Zhang | Dec 2013 | A1 |
Number | Date | Country |
---|---|---|
1140272 | Jan 1997 | CN |
102272734 | Sep 2014 | CN |
1847911 | Oct 2007 | EP |
08076872 | Mar 1996 | JP |
09044418 | Feb 1997 | JP |
10320302 | Dec 1998 | JP |
2002099502 | Apr 2002 | JP |
2002215409 | Aug 2002 | JP |
2004005254 | Jan 2004 | JP |
2005011120 | Jan 2005 | JP |
5565778 | Jun 2014 | JP |
WO-2013019423 | Feb 2013 | WO |
WO-2013074797 | May 2013 | WO |
Entry |
---|
“Corrected Notice of Allowance”, U.S. Appl. No. 14/205,196, dated Apr. 18, 2017, 2 pages. |
“Final Office Action”, U.S. Appl. No. 14/205,196, dated Aug. 25, 2016, 16 pages. |
“Board Opinion”, CN Application No. 200980136849.9, dated Aug. 28, 2015, 18 Pages. |
“Examiner's Answer to Appeal Brief”, U.S. Appl. No. 13/958,101, dated Apr. 8, 2016, 9 pages. |
“Extensions to Direct Link Setup (DLS) Comments”, IEEE, P802.11z, Jul. 2009, pp. 1-3. |
“Final Office Action”, U.S. Appl. No. 12/098,254, dated May 18, 2011, 11 pages. |
“Final Office Action”, U.S. Appl. No. 12/101,668, dated May 10, 2012, 8 pages. |
“Final Office Action”, U.S. Appl. No. 12/125,670, dated May 24, 2011, 11 pages. |
“Final Office Action”, U.S. Appl. No. 12/125,693, dated Jun. 9, 2011, 9 pages. |
“Final Office Action”, U.S. Appl. No. 12/178,268, dated May 25, 2011, 13 pages. |
“Final Office Action”, U.S. Appl. No. 12/541,731, dated May 31, 2012, 11 pages. |
“Final Office Action”, U.S. Appl. No. 13/552,421, dated Mar. 16, 2015, 10 pages. |
“Final Office Action”, U.S. Appl. No. 13/863,079, dated Jan. 15, 2015, 7 pages. |
“Final Office Action”, U.S. Appl. No. 13/863,079, dated May 7, 2014, 7 pages. |
“Final Office Action”, U.S. Appl. No. 13/958,101, dated Dec. 19, 2014, 17 pages. |
“Foreign Office Action”, CN Application No. 200980136849.9, dated May 24, 2013, 20 Pages. |
“Foreign Decision to Grant”, JP Application No. 2011-544456, dated May 20, 2014, 2 pages. |
“Foreign Notice of Allowance”, CN Application No. 200980153758.6, dated Jul. 15, 2014, 4 Pages. |
“Foreign Notice of Allowance”, JP Application No. 2011-527899, dated Jan. 28, 2014, 1 Page. |
“Foreign Office Action”, CN Application No. 200980136849.9, dated Feb. 7, 2014, 15 Pages. |
“Foreign Office Action”, CN Application No. 200980136849.9, dated May 19, 2014, 11 Pages. |
“Foreign Office Action”, CN Application No. 200980153758.6, dated Apr. 27, 2013, 14 pages. |
“Foreign Office Action”, CN Application No. 200980153758.6, dated Dec. 30, 2013, 8 pages. |
“Foreign Office Action”, European Patent Application No. 09803951.4, dated May 24, 2012, 3 pages. |
“Foreign Office Action”, European Patent Application No. 09803951.4, dated Dec. 13, 2012, 6 pages. |
“Foreign Office Action”, JP Application No. 2011-527899, dated Apr. 16, 2013, 5 pages. |
“Foreign Office Action”, JP Application No. 2011-527899, dated Nov. 6, 2012, 4 pages. |
“Foreign Office Action”, JP Application No. 2011-527899, dated Aug. 13, 2013, 2 pages. |
“Foreign Office Action”, JP Application No. 2011-544456, dated Jan. 29, 2013, 7 pages. |
“Foreign Office Action”, JP Application No. 2011-544456, dated Dec. 3, 2013, 2 pages. |
“Foreign Office Action”, JP Application No. 2011-544456, dated Jul. 9, 2013, 6 pages. |
“Foreign Office Action”, KR Application No. 10-2011-7008700, dated Jun. 16, 2015, 13 Pages. |
“Intent to Grant”, EP Application No. 09803951.4, dated May 14, 2013, 13 Pages. |
“International Search Report and Written Opinion”, Application No. PCT/US2009/067767, dated Mar. 26, 2010, 12 pages. |
“International Search Report and Written Opinion”, Application No. PCT/US2009/056973, dated Nov. 4, 2009, 13 pages. |
“International Search Report and Written Opinion”, Application No. PCT/US2012/047426, dated Oct. 19, 2012, 7 pages. |
“International Search Report and Written Opinion”, Application No. PCT/US2012/065290, dated May 2, 2013, 9 pages. |
“International Search Report”, Application No. PCT/US2008/078343, dated May 18, 2009, 5 pages. |
“International Search Report”, Application No. PCT/US2008/078343, Partial International Search, dated Mar. 5, 2009, 2 pages. |
“Non-Final Office Action”, U.S. Appl. No. 12/098,254, dated Jan. 14, 2011, 8 pages. |
“Non-Final Office Action”, U.S. Appl. No. 12/101,668, dated Apr. 5, 2011, 7 pages. |
“Non-Final Office Action”, U.S. Appl. No. 12/101,668, dated Aug. 9, 2012, 8 pages. |
“Non-Final Office Action”, U.S. Appl. No. 12/125,670, dated Dec. 13, 2011, 11 pages. |
“Non-Final Office Action”, U.S. Appl. No. 12/125,670, dated Dec. 7, 2010, 9 pages. |
“Non-Final Office Action”, U.S. Appl. No. 12/125,670, dated Jun. 4, 2012, 12 pages. |
“Non-Final Office Action”, U.S. Appl. No. 12/125,693, dated Oct. 3, 2011, 7 pages. |
“Non-Final Office Action”, U.S. Appl. No. 12/125,693, dated Dec. 20, 2010, 7 pages. |
“Non-Final Office Action”, U.S. Appl. No. 12/178,268, dated Dec. 21, 2011, 13 pages. |
“Non-Final Office Action”, U.S. Appl. No. 12/178,268, dated Dec. 22, 2010, 10 pages. |
“Non-Final Office Action”, U.S. Appl. No. 12/271,761, dated Oct. 3, 2011, 6 pages. |
“Non-Final Office Action”, U.S. Appl. No. 12/541,731, dated Oct. 21, 2011, 9 pages. |
“Non-Final Office Action”, U.S. Appl. No. 12/541,731, dated Sep. 4, 2012, 11 pages. |
“Non-Final Office Action”, U.S. Appl. No. 12/559,987, dated Nov. 9, 2011, 10 pages. |
“Non-Final Office Action”, U.S. Appl. No. 12/636,558, dated Jan. 10, 2012, 6 pages. |
“Non-Final Office Action”, U.S. Appl. No. 12/636,558, dated May 29, 2012, 8 pages. |
“Non-Final Office Action”, U.S. Appl. No. 13/252,416, dated Mar. 13, 2013, 16 pages. |
“Non-Final Office Action”, U.S. Appl. No. 13/333,551, dated Apr. 6, 2012, 5 pages. |
“Non-Final Office Action”, U.S. Appl. No. 13/552,421, dated Sep. 30, 2014, 23 pages. |
“Non-Final Office Action”, U.S. Appl. No. 13/598,282, dated Oct. 16, 2013, 6 pages. |
“Non-Final Office Action”, U.S. Appl. No. 13/657,511, dated Mar. 28, 2013, 13 pages. |
“Non-Final Office Action”, U.S. Appl. No. 13/676,701, dated Jul. 31, 2015, 12 pages. |
“Non-Final Office Action”, U.S. Appl. No. 13/683,056, dated Nov. 8, 2013, 5 pages. |
“Non-Final Office Action”, U.S. Appl. No. 13/863,079, dated Apr. 9, 2015, 7 pages. |
“Non-Final Office Action”, U.S. Appl. No. 13/863,079, dated Jun. 20, 2013, 10 pages. |
“Non-Final Office Action”, U.S. Appl. No. 13/863,079, dated Aug. 27, 2014, 6 pages. |
“Non-Final Office Action”, U.S. Appl. No. 13/863,079, dated Oct. 1, 2013, 9 pages. |
“Non-Final Office Action”, U.S. Appl. No. 13/874,201, dated Jun. 5, 2015, 10 pages. |
“Non-Final Office Action”, U.S. Appl. No. 13/958,101, dated Apr. 8, 2015, 16 pages. |
“Non-Final Office Action”, U.S. Appl. No. 13/958,101, dated Jun. 6, 2014, 14 pages. |
“Non-Final Office Action”, U.S. Appl. No. 14/205,196, dated Feb. 5, 2016, 14 pages. |
“Notice of Allowance”, U.S. Appl. No. 12/098,254, dated Dec. 14, 2011, 4 pages. |
“Notice of Allowance”, U.S. Appl. No. 12/098,254, dated Sep. 28, 2011, 4 pages. |
“Notice of Allowance”, U.S. Appl. No. 12/101,668, dated Jan. 11, 2013, 6 pages. |
“Notice of Allowance”, U.S. Appl. No. 12/125,670, dated Dec. 11, 2012, 8 pages. |
“Notice of Allowance”, U.S. Appl. No. 12/178,268, dated Jul. 2, 2012, 4 pages. |
“Notice of Allowance”, U.S. Appl. No. 12/271,761, dated Jan. 3, 2012, 6 pages. |
“Notice of Allowance”, U.S. Appl. No. 12/541,731, dated Apr. 2, 2013, 8 pages. |
“Notice of Allowance”, U.S. Appl. No. 12/559,987, dated Jun. 15, 2012, 5 pages. |
“Notice of Allowance”, U.S. Appl. No. 12/636,558, dated Jan. 9, 2013, 4 pages. |
“Notice of Allowance”, U.S. Appl. No. 13/252,416, dated Sep. 27, 2013, 10 pages. |
“Notice of Allowance”, U.S. Appl. No. 13/333,551, dated May 30, 2012, 4 pages. |
“Notice of Allowance”, U.S. Appl. No. 13/552,421, dated May 12, 2015, 4 pages. |
“Notice of Allowance”, U.S. Appl. No. 13/552,421, dated Jun. 10, 2015, 5 pages. |
“Notice of Allowance”, U.S. Appl. No. 13/598,282, dated May 6, 2014, 4 pages. |
“Notice of Allowance”, U.S. Appl. No. 13/657,511, dated Nov. 4, 2013, 9 pages. |
“Notice of Allowance”, U.S. Appl. No. 13/676,701, dated Feb. 10, 2016, 5 pages. |
“Notice of Allowance”, U.S. Appl. No. 13/683,056, dated May 9, 2014, 4 pages. |
“Notice of Allowance”, U.S. Appl. No. 13/874,201, dated Sep. 25, 2015, 6 pages. |
“Part 11—Wireless LAN Medium Access Control (MAC) and Physical Layer (PHY) Specifications”, Information Technology—Telecommunications & Information Exchange Between Systems . . . International Standard, ISO/IEC 8802-11, First Ed., 1999, pp. 1-531. |
“Restriction Requirement”, U.S. Appl. No. 12/101,668, dated Sep. 22, 2011, 6 pages. |
“Restriction Requirement”, U.S. Appl. No. 13/676,701, dated Feb. 12, 2015, 7 pages. |
“Supplemental Notice of Allowance”, U.S. Appl. No. 12/101,668, dated Feb. 8, 2013, 4 Pages. |
“Supplemental Notice of Allowance”, U.S. Appl. No. 13/333,551, dated Oct. 23, 2012, 2 pages. |
Anderson,“HDD Based Full Disc Encryption”, In Proceedings of THIC Conference 2006, Mar. 2006, 12 pages. |
“Corrected Notice of Allowance”, U.S. Appl. No. 13/676,701, dated May 18, 2016, 2 pages. |
“Notice of Allowance”, U.S. Appl. No. 14/205,196, dated Jan. 3, 2017, 5 pages. |
Number | Date | Country | |
---|---|---|---|
20160253278 A1 | Sep 2016 | US |
Number | Date | Country | |
---|---|---|---|
61560217 | Nov 2011 | US |
Number | Date | Country | |
---|---|---|---|
Parent | 13676701 | Nov 2012 | US |
Child | 15151016 | US |