Performing a cyclic redundancy checksum operation responsive to a user-level instruction

Abstract
In one embodiment, the present invention includes a method for receiving incoming data in a processor and performing a checksum operation on the incoming data in the processor pursuant to a user-level instruction for the checksum operation. For example, a cyclic redundancy checksum may be computed in the processor itself responsive to the user-level instruction. Other embodiments are described and claimed.
Description
BACKGROUND

Embodiments of the present invention relate to data processing, and more particularly to determining checksums such as cyclic redundancy checks (CRCs).


In data processing systems, it is desirable that data transmitted between a first location and a second location is received accurately, so that additional processing performed on that data at the second location also can be accurate. Further, to enable detection of errors in data transmission, oftentimes a data packet will be transmitted with a checksum attached. For example, a CRC sum can be generated by a transmitting source and appended to data to be transmitted. This checksum, which may be calculated according to one of many different algorithms, can then be compared to a similar checksum generated at the receiving end from the received data. If the two checksums are identical, the transmitted data is correct. If however the generated checksum varies from the transmitted checksum, an error is indicated. Such checksums are used throughout networking technologies to detect transmission errors.


In different applications, different manners of implementing CRC information exists. For example, CRC calculations can be performed in either hardware or software. To implement a CRC calculation in hardware, typically a dedicated hardware engine is provided within a system to perform the CRC calculation. Accordingly, data to be subjected to such a CRC calculation is sent to the hardware engine for calculation of the CRC, which is then appended to the data, e.g., for transmission from the system. Various drawbacks exist to using such an offload engine, including the overhead of sending data to the engine. Furthermore, it is difficult to perform a stateless hardware offload. That is, typically additional state-based overhead data also needs to be transmitted, increasing complexity and slowing the progress of useful work.


Because many systems lack such an offload engine, CRC calculations are often performed in software. To implement CRC calculations in software, typically lookup table schemes are used. However, such software calculations of CRC values are notoriously slow, compute-intensive operations. Further, the memory footprint of the lookup table can be large, impacting performance. Accordingly, these slow calculations can degrade network performance, and further consume processing resources. As an example, it can take between 5 and 15 cycles to perform a CRC calculation per byte of data. As a result, software CRC performance is too low for general use in high-speed networks.





BRIEF DESCRIPTION OF THE DRAWINGS


FIG. 1 is a flow diagram of a method in accordance with one embodiment of the present invention.



FIG. 2 is a block diagram of a processor in accordance with one embodiment of the present invention.



FIG. 3 is a block diagram of a portion of a processor to perform a checksum operation in accordance with an embodiment of the present invention.



FIG. 4 is a block diagram of another portion of a processor in accordance with an embodiment of the present invention.



FIG. 5 is a block diagram of a system in accordance with an embodiment of the present invention.





DETAILED DESCRIPTION

In various embodiments, checksum operations may be effected using an instruction set architecture (ISA) extension to compute checksum values. More specifically, a user-level instruction may be provided within an ISA to enable a programmer to directly perform a desired checksum operation such as a CRC operation in a general-purpose processor (e.g., a central processor unit (CPU)) via the instruction. The CRC operation may be a 32-bit CRC operation (i.e., a CRC32 operation generating a 32-bit running reminder, discussed further below), and in different embodiments may, for example, correspond to the CRC used in an Institute of Electrical and Electronics Engineers (IEEE) 802.3 Ethernet protocol (published 2002) or other protocols.


In different implementations, various opcode instructions may be provided to perform CRC computations on different groupings of data. For example, in some embodiments CRC computations may be supported on groups of 8, 16, 32 and 64 bits using different opcodes, although the scope of the present invention is not so limited. In this way, CRC calculations may be rapidly performed in hardware without the need for lookup tables or the like. Furthermore, the computations may be performed using generic, architecturally visible processor registers via integer operations performed according to the different opcodes. As a result, CRCs may be computed in a processor without the need for the overhead and complexity of offload hardware, such as network offload hardware. Accordingly, greater numbers of data transmissions (e.g., in terms of input/outputs (I/Os) per second) can occur. Note that while described primarily herein in connection with CRC operations, embodiments of the present invention may be used to perform other checksum operations.


Referring now to FIG. 1, shown is a flow diagram of a method in accordance with one embodiment of the present invention. Method 100 may be used to obtain a checksum using a user-level instruction implemented on processor hardware, e.g., an execution unit of a CPU. As shown in FIG. 1, method 100 may begin by performing a series of exclusive-OR (XOR) operations on data in source and destination registers (block 110). Note that the XOR operations may correspond to a polynomial arithmetic operation and more particularly to a polynomial division operation. The data in the source register may correspond, e.g., to data present in a processor pipeline that has been received by the processor or is to be transmitted therefrom. As an example, a group of data in a buffer corresponding to a desired group size (e.g., 16 bit, 32 bit or the like) may be provided to the source register, which may be a general-purpose register of the processor. Alternately, the source data may be obtained from a memory, in some embodiments. The destination register may correspond to a storage location for a running remainder obtained from the XOR operations. The destination register also may be a general-purpose register of the processor.


In various embodiments, the XOR operations may be performed in dedicated hardware within a processor pipeline. For example, an execution unit of a processor, e.g., an integer execution unit may be extended with circuitry to implement a series of XOR operations. For example, this circuitry may correspond to a XOR tree to handle polynomial division by a desired polynomial. In various embodiments, a polynomial for use in the XOR operations may be hard-wired into the logic gates of the XOR tree. Furthermore, the XOR tree may be configured to implement desired pre-processing and post-processing via the XOR operations, e.g., bit reflections and the like. Furthermore, the XOR tree logic may include multiple partitions, each configured to handle operations on different data sizes.


Still referring to FIG. 1, next a result, which may correspond to a running remainder obtained from the XOR operations, may be stored in the destination register (block 120). Note that the destination register may, upon initialization of a system, be set to a predetermined value, e.g., all ones, all zeros or another such value. Then during execution of checksum operations, this running remainder is continually updated with the result of the current checksum operation. More specifically, the remainder of the polynomial division implemented by the current checksum operation may be stored in the destination register.


Next, it may be determined whether additional source data is present (diamond 130). For example, in some embodiments a buffer may include data that has been received by a system and is to have a checksum verified. The data may be fed in chunks into the source register to effect the checksum operation. Accordingly, it may be determined in diamond 130 if additional source data is present in this buffer. If so, the next data chunk may be provided to the source register, and control passes back to block 110, discussed above.


If instead at diamond 130 it is determined that no additional source data is present, control passes to block 140. There, the result of the checksum operation may be provided as the current value (e.g., running remainder) that is stored in the destination register (block 140). As discussed above, this checksum value may be used in many different manners. For example, in the case of received data, the computed checksum may be compared to a received checksum to confirm that the data was accurately received. In a transmission situation, the checksum may be appended to data to be transmitted so that the data may be verified on a receiving end. Of course other uses of checksums, such as for hash functions or generation of numbers pursuant to a pseudo random numbering scheme may also occur.


A processor to implement checksum operations in accordance with an embodiment of the present invention may take many different forms depending on a desired architecture. Referring now to FIG. 2, shown is a block diagram of a processor in accordance with one embodiment of the present invention. As shown in FIG. 2, processor 200 includes a data path 205. Data path 205 may be controlled by front end control stages that may include a register alias table (RAT) 270, which may receive decoded instructions from a front end of the processor (not shown in FIG. 2). RAT 270 may be used to receive microoperations (μops) from the front end and rename the μops for the resources of the data path. In data path 205, the renamed μops may then be provided to a reorder buffer (ROB) 250. ROB 250 may act as a register file to store μops and corresponding source operands until the μop is ready for passing to a reservation station (RS) 230. Similarly, ROB 250 may also store corresponding results of μops that have already executed. These results may be held in ROB 250 until the μops are retired (at which point the ROB entry is freed).


Reservation station 230 may be used to store μops until their corresponding source operands are present and/or until the μop is ready for execution in one of a plurality of execution units of data path 205. Reservation station 230 may include a plurality of dispatch ports to couple instructions and data to selected ones of execution units of data path 205. In some embodiments, multiple dispatch ports may be used in each cycle.


As shown in FIG. 2, the execution units in data path 205 include an address generation unit (AGU) 220, an integer (INT) execution unit 222, a store data (STD) unit 224, a floating point (FP) execution unit 226, and a single instruction multiple data (SIMD) execution unit 228. As shown in FIG. 2, integer execution unit 222 further includes logic 221. Logic 221 may include one or more hardware engines to perform checksum operations in accordance with an embodiment of the present invention. More specifically, logic 221 may include a plurality of exclusive-OR (XOR) logic trees to implement polynomial arithmetic and related data manipulations. In various embodiments, logic 221 may include different hardware engines to implement CRC operations on differently sized data chunks. As an example, a plurality of user-level instructions of an ISA each may define a CRC operation for a particular data size. Logic 221, in some embodiments, may include a corresponding number of separate hardware engines, also referred to herein as XOR trees, to effect these different CRC operations.


While not shown in FIG. 2, additional or different execution units may be present in different embodiments. After execution of a μop in one of the execution units, result data may be passed back to RS 230 and ROB 250 for storage, e.g., until retirement. Thus in one embodiment, both source and data registers for performing a CRC operation may be located in RS 230 or ROB 250. While not shown in FIG. 2, it is to be understood that additional buffers such as a memory order buffer (MOB) and other resources may be present within processor 200.


It is further to be understood that the representation shown in FIG. 2 is intended for ease of discussion and in various embodiments many more stages or differently named stages may exist in a given processor. For example, a write back stage may be coupled to the execution units to receive result data for later delivery to a memory hierarchy. Alternately, one or more other buffers such as store buffers, load buffers and the like may be coupled to RS 230. As one example, one or more retirement buffers may be coupled to RS 230 for storage of μops and associated result data until retirement of the associated instruction.


Of course, other implementations are possible. Referring now to FIG. 3, shown is a block diagram of a portion of a processor to perform a checksum operation in accordance with an embodiment of the present invention. As shown in FIG. 3, a portion of a processor 300 is shown. More specifically, processor 300 includes an XOR tree 310, a first register 320 and a second register 330, all of which may be part of a processor pipeline. XOR tree 310 may be configured differently in various embodiments. For example, XOR tree 310 may be implemented using a plurality of 3-input XOR gates in a first level, outputs of which are coupled to similar XOR gates of a second level, and so forth. In such an embodiment, each level of the XOR tree may be a third as large as the previous level. Of course, other configurations are possible.


As further shown in FIG. 3, processor 300 includes a buffer 340, which also may be within the processor pipeline (e.g., as a buffer, queue or the like). Alternately, buffer 340 may be a cache memory associated with processor 300. In the embodiment of FIG. 3, first register 320 may correspond to a source register, while second register 330 may correspond to a destination register. In various embodiments, these registers may be general-purpose registers within processor 300. Of course, processor 300 may include many other registers, logic, functional units and the like, and the portion shown in FIG. 3 is for ease of illustration.


As shown in FIG. 3, to perform a checksum in accordance with an embodiment of the present invention, at least a first portion of first register 320 is provided to XOR tree 310, along with a portion of second register 330. In the embodiment shown in FIG. 3, which illustrates an 8-bit CRC accumulation, a single byte of data (B0) is provided to XOR tree 310 from first register 320, while a 4-byte portion of second register 330 is provided to XOR tree 310. This 4-byte portion may correspond to the running remainder of a CRC32 operation. Using this data, XOR tree 310 may perform data manipulations via XOR operations to generate a result that includes a remainder portion. This remainder portion may be the running remainder that is stored back in second register 330, as shown in FIG. 3. In this way, CRC operations can be efficiently performed in minimal cycle time and using minimal processor resources. In the embodiment of FIG. 3, for 8-bit accumulate operations, additional portions of first register 320 may be provided incrementally to XOR tree 310 along with the current contents of second register 330 (i.e., the 32-bit running remainder). Accordingly, to obtain a CRC checksum on 64 bits of data in first register 320, eight iterations of XOR operations in XOR tree 310 may be performed, each using a single byte of data from first register 320, along with the current running remainder in second register 330. If additional data is present in buffer 340 to be validated via a checksum, the additional data may be loaded into first register 320 so that it may then be processed in XOR tree 310.


Note that different hardware may be present to handle CRC calculations of different bit widths. Accordingly, with reference back to FIG. 2, logic 221 may include different XOR tree structures to handle such CRC calculations. Referring now to FIG. 4, shown is a block diagram of another portion of a processor in accordance with an embodiment of the present invention. As shown in FIG. 4, processor 300 includes a different XOR tree 410 (e.g., in addition to XOR tree 310 of FIG. 3) that is coupled to receive data from first register 320 and second register 330. As further shown in FIG. 4, buffer 340 is present and may be used to provide data for CRC computations. Note that in the embodiment of FIG. 4, XOR tree 410 is configured to handle a 64-bit CRC accumulation. Accordingly, the entire contents of first register 320 (i.e., bytes B0-B7) may be coupled at one time to XOR tree 410 for manipulation in XOR operations with data in second register 330. The result data, the desired portion of which corresponds to a running remainder, is stored back in second register 330. While described with these particular implementations in FIGS. 3 and 4, it is to be understood that the scope of the present invention is not so limited, and in other embodiments different hardware configurations for performing CRC operations may be present.


Referring now to Table 1 below, shown is a listing of example instructions of an instruction set architecture (ISA) to support CRC operations in accordance with various embodiments of the present invention. As shown in Table 1, each instruction, which may be referenced by an opcode, is used to perform a CRC32 operation using a source register and a destination register. As shown, differs flavors are possible, with each instruction to perform the CRC operation on a given size of destination operand and source operand. Thus with reference to the first line of Table 1, this instruction is used to perform a CRC32 operation on an 8-bit source operand and a 32-bit destination operand. Similarly, the second line of Table 1 is used to perform a CRC32 operation on a 16-bit source operand and a 32-bit destination operand. In similar fashion, the third line of Table 1 shows an instruction to perform a CRC32 operation on a 32-bit source operand and a 32-bit destination operand.


Because these first three instructions are performed with maximum data chunks of 32 bits, note that the instructions are valid in both a 64-bit mode of operation as well as a legacy (i.e., 32-bit) mode of operation. In contrast, the fourth and fifth lines of Table 1 denote CRC operations to be performed on 8-bit and 64-bit source operands, respectively with a 64-bit destination operand. Thus these final two instructions may be performed only in a 64-bit mode of operation.













TABLE 1







Opcode
Instruction
Description









Code 2
CRC32 r32, r/m8
Accumulate CRC32 on r/m8



Code 1
CRC32 r32, r/m16
Accumulate CRC32 on r/m16



Code 1
CRC32 r32, r/m32
Accumulate CRC32 on r/m32



Code 2
CRC32 r64, r/m8
Accumulate CRC32 on r/m8



Code 1
CRC32 r64, r/m64
Accumulate CRC32 on r/m64











In various embodiments, these user-level instructions may be used by a programmer, e.g., as intrinsics to implement a CRC operation in accordance with the flow diagram of FIG. 1, for example.


In general, a user-level CRC instruction may be implemented in the following manner. Starting with an initial value in a first operand (i.e., a destination operand), a CRC32 value for a second operand (i.e., a source operand) may be accumulated and the result stored back in the destination operand. In different implementations, the source operand can be a register or a memory location. The destination operand may be a 32 or 64-bit register. If the destination is a 64-bit register, then the 32-bit result may be stored in the least significant double word and 00000000H stored in the most significant double word of the register.


Note that the initial value supplied in the destination operand may be a double word integer stored in a 32-bit register, or the least significant double word of a 64-bit register. To incrementally accumulate a CRC32 value, software retains the result of the previous CRC operation in the destination operand, and then executes the CRC operation again with new input data in the source operand. Accordingly, each instruction takes a running CRC value in the first operand and updates the CRC value based on the second operand. In this manner, a CRC can be generated over any desired amount of data by performing the operation in a loop, until all desired data is subjected to the CRC operation.


In some implementations, data contained in the source operand is processed in reflected bit order. This means that the most significant bit of the source operand is treated as the least significant bit of the quotient, and so on, for all the bits of the source operand. Likewise, the result of the CRC operation can be stored in the destination register in reflected bit order. This means that the most significant bit of the resulting CRC (i.e., bit 31) is stored in the least significant bit of the destination register (bit 0), and so on, for all the bits of the CRC.


While different manners of implementing these user-level instructions can be effected, Tables 2-6 below show example pseudocode representations of a hardware implementation for each of the user-level instructions of Table 1.









TABLE 2





CRC32 instruction for 64-bit source operand


and 64-bit destination operand:

















TEMP1[63-0] ← BIT_REFLECT64 (SRC[63-0])



TEMP2[31-0] ← BIT_REFLECT32 (DEST[31-0])



TEMP3[95-0] ← TEMP1[63-0] << 32



TEMP4[95-0] ← TEMP2[31-0] << 64



TEMP5[95-0] ← TEMP3[95-0] XOR TEMP4[95-0]



TEMP6[31-0] ← TEMP5[95-0] MOD2 11EDC6F41H



DEST[31-0] ← BIT_REFLECT (TEMP6[31-0])



DEST[63-32] ← 00000000H

















TABLE 3





CRC32 instruction for 32-bit source operand


and 32-bit destination operand:

















TEMP1[31-0] ← BIT_REFLECT32 (SRC[31-0])



TEMP2[31-0] ← BIT_REFLECT32 (DEST[31-0])



TEMP3[63-0] ← TEMP1[31-0] << 32



TEMP4[63-0] ← TEMP2[31-0] << 32



TEMP5[63-0] ← TEMP3[63-0] XOR TEMP4[63-0]



TEMP6[31-0] ← TEMP5[63-0] MOD2 11EDC6F41H



DEST[31-0] ← BIT_REFLECT (TEMP6[31-0])

















TABLE 4





CRC32 instruction for 16-bit source operand


and 32-bit destination operand::

















TEMP1[15-0] ← BIT_REFLECT16 (SRC[15-0])



TEMP2[31-0] ← BIT_REFLECT32 (DEST[31-0])



TEMP3[47-0] ← TEMP1[15-0] << 32



TEMP4[47-0] ← TEMP2[31-0] << 16



TEMP5[47-0] ← TEMP3[47-0] XOR TEMP4[47-0]



TEMP6[31-0] ← TEMP5[47-0] MOD2 11EDC6F41H



DEST[31-0] ← BIT_REFLECT (TEMP6[31-0])

















TABLE 5





CRC32 instruction for 8-bit source operand


and 64-bit destination operand:

















TEMP1[7-0] ← BIT_REFLECT8(SRC[7-0])



TEMP2[31-0] ← BIT_REFLECT32 (DEST[31-0])



TEMP3[39-0] ← TEMP1[7-0] << 32



TEMP4[39-0] ← TEMP2[31-0] << 8



TEMP5[39-0] ← TEMP3[39-0] XOR TEMP4[39-0]



TEMP6[31-0] ← TEMP5[39-0] MOD2 11EDC6F41H



DEST[31-0] ← BIT_REFLECT (TEMP6[31-0])



DEST[63-32] ← 00000000H

















TABLE 6





CRC32 instruction for 8-bit source operand


and 32-bit destination operand:

















TEMP1[7-0] ← BIT_REFLECT8(SRC[7-0])



TEMP2[31-0] ← BIT_REFLECT32 (DEST[31-0])



TEMP3[39-0] ← TEMP1[7-0] << 32



TEMP4[39-0] ← TEMP2[31-0] << 8



TEMP5[39-0] ← TEMP3[39-0] XOR TEMP4[39-0]



TEMP6[31-0] ← TEMP5[39-0] MOD2 11EDC6F41H



DEST[31-0] ← BIT_REFLECT (TEMP6[31-0])










Note that the general structure of these pseudocode snippets are the same. First, data in a source register is bit reflected (i.e., its bits are placed into a temporary register in reverse bit order). The destination register is similarly bit reflected. Next, shift operations, more particularly shift left operations, may be effected on both of the bit-reflected source and data operands. The resulting values may then be subjected to an XOR operation. This operation may correspond to a polynomial division by a selected polynomial value. While this value may take many different forms in different embodiments, in particular implementations for performing CRC32 operations, the polynomial may correspond to 11EDC6F41H, although the scope of the present invention is not so limited. The remainder of this polynomial division (i.e., the remainder from the polynomial division modulus 2) is stored back into the low order bits of the destination operand in a bit-reflected order (e.g., bits 0-31 of either a 32-bit or 64-bit register). In the instance of a 64-bit register, the most significant bits (MSBs) may be loaded with zeros. While set forth with this particular implementation with respect to Tables 2-6, it is to be understood that other manners of providing a user-level CRC instruction may be performed.


By performing CRC operations in a processor pipeline itself according to a user-level instruction, there is no need to send data to an offload engine. Similarly, the operation can be performed without providing state, reducing overhead. In this way, as implemented in a three-cycle path a CRC operation may be performed at less than approximately 0.4 cycles per byte. Accordingly, performance may be improved using user-level instructions along with dedicated hardware in a processor pipeline. Furthermore, three-cycle latency may be realized with minimum real estate consumption and power consumption. Embodiments of the present invention may be used to enable processing of various storage protocols, for example, an Internet Small Computer System Interface (iSCSI) protocol at rates greater than 10 gigabits per second. Embodiments of the present invention further allow the use of data present in a processor or closely coupled thereto, reducing the need for on-cache data. In this way, data in a processor buffer may be fed to an XOR tree to enable rapid, on-the-fly CRC calculations.


Embodiments may be implemented in many different system types. Referring now to FIG. 5, shown is a block diagram of a multiprocessor system in accordance with an embodiment of the present invention. As shown in FIG. 5, the multiprocessor system is a point-to-point interconnect system, and includes a first processor 470 and a second processor 480 coupled via a point-to-point interconnect 450. As shown in FIG. 5, each of processors 470 and 480 may be multicore processors, including first and second processor cores (i.e., processor cores 474a and 474b and processor cores 484a and 484b). While not shown for ease of illustration, first processor 470 and second processor 480 (and more specifically the cores therein) may include XOR tree logic within their execution units to execute user-level CRC instructions in accordance with an embodiment of the present invention. First processor 470 further includes a memory controller hub (MCH) 472 and point-to-point (P-P) interfaces 476 and 478. Similarly, second processor 480 includes a MCH 482 and P-P interfaces 486 and 488. As shown in FIG. 5, MCH's 472 and 482 couple the processors to respective memories, namely a memory 432 and a memory 434, which may be portions of main memory locally attached to the respective processors.


First processor 470 and second processor 480 may be coupled to a chipset 490 via P-P interconnects 452 and 454, respectively. As shown in FIG. 5, chipset 490 includes P-P interfaces 494 and 498. Furthermore, chipset 490 includes an interface 492 to couple chipset 490 with a high performance graphics engine 438. In one embodiment, an Advanced Graphics Port (AGP) bus 439 may be used to couple graphics engine 438 to chipset 490. AGP bus 439 may conform to the Accelerated Graphics Port Interface Specification, Revision 2.0, published May 4, 1998, by Intel Corporation, Santa Clara, Calif. Alternately, a point-to-point interconnect 439 may couple these components.


In turn, chipset 490 may be coupled to a first bus 416 via an interface 496. In one embodiment, first bus 416 may be a Peripheral Component Interconnect (PCI) bus, as defined by the PCI Local Bus Specification, Production Version, Revision 2.1, dated June 1995 or a bus such as the PCI Express bus or another third generation input/output (I/O) interconnect bus, although the scope of the present invention is not so limited.


As shown in FIG. 5, various I/O devices 414 may be coupled to first bus 416, along with a bus bridge 418 which couples first bus 416 to a second bus 420. In one embodiment, second bus 420 may be a low pin count (LPC) bus. Various devices may be coupled to second bus 420 including, for example, a keyboard/mouse 422, communication devices 426 and a data storage unit 428 which may include code 430, in one embodiment. Further, an audio I/O 424 may be coupled to second bus 420. Note that other architectures are possible. For example, instead of the point-to-point architecture of FIG. 5, a system may implement a multi-drop bus or another such architecture.


Embodiments may be implemented in code and may be stored on a storage medium having stored thereon instructions which can be used to program a system to perform the instructions. The storage medium may include, but is not limited to, any type of disk including floppy disks, optical disks, compact disk read-only memories (CD-ROMs), compact disk rewritables (CD-RWs), and magneto-optical disks, semiconductor devices such as read-only memories (ROMs), random access memories (RAMs) such as dynamic random access memories (DRAMs), static random access memories (SRAMs), erasable programmable read-only memories (EPROMs), flash memories, electrically erasable programmable read-only memories (EEPROMs), magnetic or optical cards, or any other type of media suitable for storing electronic instructions.


While the present invention has been described with respect to a limited number of embodiments, those skilled in the art will appreciate numerous modifications and variations therefrom. It is intended that the appended claims cover all such modifications and variations as fall within the true spirit and scope of this present invention.

Claims
  • 1. A processor comprising: a cache;a plurality of 64-bit registers including a first 64-bit register to store 64-bits of source data and a second 64-bit register to store a 32-bit initial value in bits [31:0]; andexecution circuitry coupled with the first and second 64-bit registers, the execution circuitry, responsive to a 32-bit cyclic redundancy check (CRC32) instruction of an instruction set architecture of the processor, to: perform CRC32 computations on the 64-bits of source data and the 32-bit initial value according to a polynomial value of 11EDC6F41H; andstore a result of the CRC32 computations in bits [31:0] of a 64-bit destination register and zeroes in bits [63:32] of the 64-bit destination register.
  • 2. The processor of claim 1, wherein the CRC32 computations comprise incremental CRC32 computations on a plurality of portions of the 64-bits of source data.
  • 3. The processor of claim 1, wherein the CRC32 instruction is a user-level instruction.
  • 4. The processor of claim 1, further comprising: a floating point unit;a reorder buffer (ROB);a load buffer; anda store buffer.
  • 5. The processor of claim 1, further comprising a memory controller.
  • 6. A processor comprising: a cache;a plurality of 64-bit registers including a first 64-bit register to store source data and a second 64-bit register to store a 32-bit initial value in bits [31:0]; andan execution circuitry coupled with the first and second 64-bit registers, the execution circuitry, responsive to a 32-bit cyclic redundancy check (CRC32) instruction of an instruction set architecture of the processor, to: perform CRC32 computations on the source data and the 32-bit initial value according to a polynomial value of 11EDC6F41H; andstore a result of the CRC32 computations in a destination register.
  • 7. The processor of claim 6, wherein the source data is one of 8-bits, 16-bits, 32-bits, and 64-bits.
  • 8. The processor of claim 7, wherein the source data is 64-bits, wherein destination register is a 64-bit destination register, and wherein the execution circuitry is to store the result in bits [31:0] of the 64-bit destination register and zeroes in bits [63:32] of the 64-bit destination register.
  • 9. The processor of claim 7, wherein the source data is 64-bits, and wherein the CRC32 computations comprise incremental CRC32 computations on a plurality of portions of the 64-bits of source data.
  • 10. The processor of claim 6, wherein the CRC32 instruction is a user-level instruction.
  • 11. The processor of claim 6, further comprising: a floating point unit;a reorder buffer (ROB);a load buffer; anda store buffer.
  • 12. The processor of claim 6, further comprising a memory controller.
  • 13. A system comprising: a processor, the processor comprising: a cache;a plurality of 64-bit registers including a first 64-bit register to store 64-bits of source data and a second 64-bit register to store a 32-bit initial value in bits [31:0]; andan execution unit coupled with the first and second 64-bit registers, the execution unit, responsive to a 32-bit cyclic redundancy check (CRC32) instruction of an instruction set architecture of the processor, to: perform CRC32 computations on the 64-bits of source data and the 32-bit initial value based on a polynomial value of 11EDC6F41H; andstore a result of the CRC32 computations in bits [31:0] of a 64-bit destination and zeroes in bits [63:32] of the 64-bit destination; anda data storage device coupled to the processor.
  • 14. The system of claim 13, wherein the CRC32 computations comprise incremental CRC32 computations on a plurality of portions of the 64-bits of source data.
  • 15. The system of claim 13, wherein the CRC32 instruction is a user-level instruction.
  • 16. The system of claim 13, wherein the processor comprises: a floating point unit;a reorder buffer (ROB);a load buffer; anda store buffer.
  • 17. The system of claim 13, wherein the processor comprises a memory controller.
  • 18. The system of claim 17, further comprising a memory coupled to the memory controller.
  • 19. The system of claim 13, wherein the system is to use the result to process a storage protocol.
  • 20. The processor of claim 1, wherein the CRC32 computations comprise incremental CRC32 computations on a plurality of portions of the 64-bits of source data, wherein the CRC32 instruction is a user-level instruction, wherein the processor further comprises a reorder buffer (ROB).
RELATED APPLICATIONS

This application is a continuation of U.S. patent application Ser. No. 15/589,561, filed on May 8, 2017, which is a continuation of U.S. patent application Ser. No. 15/009,152, filed on Jan. 28, 2016, now U.S. Pat. No. 9,645,884. U.S. patent application Ser. No. 15/009,152 is a continuation of U.S. patent application Ser. No. 14/579,538 filed on Dec. 22, 2014, now U.S. Pat. No. 9,262,159. U.S. patent application Ser. No. 14/579,538 is a continuation of U.S. patent application Ser. No. 14/288,261, filed May 27, 2014, which is now U.S. Pat. No. 9,116,684. U.S. patent application Ser. No. 14/288,261 is a continuation of U.S. patent application Ser. No. 13/940,706, filed Jul. 12, 2013, which is now U.S. Pat. No. 8,856,627. U.S. patent application Ser. No. 13/940,706 is a continuation of U.S. patent application Ser. No. 13/796,032, filed Mar. 12, 2013, which is now U.S. Pat. No. 8,713,416. U.S. patent application Ser. No. 13/796,032 is a continuation of U.S. patent application Ser. No. 13/484,787, filed May 31, 2012, which is now U.S. Pat. No. 8,413,024. U.S. patent application Ser. No. 13/484,787 is a continuation of U.S. patent application Ser. No. 13/097,462, filed Apr. 29, 2011, which is now U.S. Pat. No. 8,225,184. U.S. patent application Ser. No. 13/097,462 is a continuation of U.S. patent application Ser. No. 11/316,772, filed Dec. 23, 2005, which is now U.S. Pat. No. 7,958,436, and which is hereby incorporated herein by reference.

US Referenced Citations (86)
Number Name Date Kind
3891974 Coulter et al. Jun 1975 A
4084228 Dufond et al. Apr 1978 A
4130867 Bachman et al. Dec 1978 A
4351024 Bradley et al. Sep 1982 A
4413319 Schultz et al. Nov 1983 A
4438512 Hartung et al. Mar 1984 A
5109498 Kamiya et al. Apr 1992 A
5323403 Elliott Jun 1994 A
5576903 Brown et al. Nov 1996 A
5663952 Gentry, Jr. Sep 1997 A
5701316 Alferness et al. Dec 1997 A
5715278 Croft et al. Feb 1998 A
5844923 Condon Dec 1998 A
5878805 Witschi et al. Mar 1999 A
5946467 Pathakis et al. Aug 1999 A
5960012 Spracklen Sep 1999 A
5974574 Lennie et al. Oct 1999 A
6012063 Bodnar Jan 2000 A
6029186 Desjardins et al. Feb 2000 A
6191614 Schultz et al. Feb 2001 B1
6237074 Phillips et al. May 2001 B1
6279140 Slane Aug 2001 B1
6550002 Davidson Apr 2003 B1
6565443 Johnson et al. May 2003 B1
6631488 Stambaugh et al. Oct 2003 B1
6907466 Alexander et al. Jun 2005 B2
6957321 Sheaffer Oct 2005 B2
6964008 Van Meter, III Nov 2005 B1
7082563 Gemelli et al. Jul 2006 B2
7224191 Wang et al. May 2007 B1
7246191 Stanton Jul 2007 B2
7292586 Dewan et al. Nov 2007 B2
7313583 Porten et al. Dec 2007 B2
7324913 Clark et al. Jan 2008 B2
7360142 Barash Apr 2008 B1
7383428 Bottemiller et al. Jun 2008 B2
7421637 Martinez et al. Sep 2008 B1
7454601 Sheaffer Nov 2008 B2
7523378 Dammann et al. Apr 2009 B2
7590930 Kounavis Sep 2009 B2
7594124 Durham et al. Sep 2009 B2
7627693 Pandya Dec 2009 B2
7676655 Jordan Mar 2010 B2
7805706 Ly et al. Sep 2010 B1
7865704 Moyer Jan 2011 B2
7873699 Ha et al. Jan 2011 B2
7925957 King et al. Apr 2011 B2
7932911 Hansen et al. Apr 2011 B2
7941652 Bottemiller et al. May 2011 B2
7948496 Hansen May 2011 B2
7953110 Dorris et al. May 2011 B1
7958436 King et al. Jun 2011 B2
8024708 Demetriou et al. Sep 2011 B2
8156401 King et al. Apr 2012 B2
8209597 Felch et al. Jun 2012 B2
8225184 King et al. Jul 2012 B2
8327187 Metcalf Dec 2012 B1
8335226 Kolze Dec 2012 B2
8351445 Kaniz et al. Jan 2013 B1
8351468 Quigley Jan 2013 B2
8413024 King et al. Apr 2013 B2
8429617 Demetriou et al. Apr 2013 B2
8713416 King et al. Apr 2014 B2
8769385 King et al. Jul 2014 B2
8769386 King et al. Jul 2014 B2
8775910 King et al. Jul 2014 B2
8775911 King et al. Jul 2014 B2
8775912 King et al. Jul 2014 B2
8793559 King et al. Jul 2014 B2
8856627 King et al. Oct 2014 B2
8910031 Liu et al. Dec 2014 B1
20030061561 Rifaat et al. Mar 2003 A1
20030097628 Ngo et al. May 2003 A1
20040006725 Lakshmanamurthy et al. Jan 2004 A1
20040037319 Pandya Feb 2004 A1
20040113814 Lochner Jun 2004 A1
20040158793 Blightman et al. Aug 2004 A1
20040243729 Milliken Dec 2004 A1
20060242532 Joglekar et al. Oct 2006 A1
20070067698 King et al. Mar 2007 A1
20070071028 Dorris et al. Mar 2007 A1
20070150795 King et al. Jun 2007 A1
20090204844 Harter Aug 2009 A1
20110145683 Gopal et al. Jun 2011 A1
20110231636 Olson et al. Sep 2011 A1
20130305011 King et al. Nov 2013 A1
Foreign Referenced Citations (14)
Number Date Country
0609595 Aug 1994 EP
08-022448 Jan 1996 JP
2000-124811 Apr 2000 JP
2003-523682 Aug 2003 JP
2003-346432 Dec 2003 JP
2005-505827 Feb 2005 JP
200414042 Aug 2004 TW
200414045 Aug 2004 TW
I224729 Dec 2004 TW
I238945 Sep 2005 TW
0161868 Aug 2001 WO
0332159 Apr 2003 WO
2007078672 Jul 2007 WO
2007109466 Sep 2007 WO
Non-Patent Literature Citations (159)
Entry
Non-Final Office Action received for U.S. Appl. No. 13/940,659, dated Sep. 11, 2013, 6 pages.
Non-Final Office Action received for U.S. Appl. No. 13/940,665, dated Oct. 4, 2013, 7 pages.
Non-Final Office Action received for U.S. Appl. No. 13/940,681, dated Oct. 17, 2013, 6 pages.
Non-Final Office Action received for U.S. Appl. No. 13/940,691, dated Oct. 9, 2013, 6 pages.
Non-Final Office Action received for U.S. Appl. No. 13/940,696, dated Oct. 23, 2013, 6 pages.
Non-Final Office Action received for U.S. Appl. No. 13/940,706, dated Mar. 12, 2014, 5 pages.
Non-Final Office Action received for U.S. Appl. No. 13/940,706, dated Oct. 9, 2013, 6 pages.
Non-Final Office Action received for U.S. Appl. No. 14/288,261, dated Oct. 2, 2014, 6 pages.
Non-Final Office Action received for U.S. Appl. No. 14/579,538, dated May 21, 2015, 7 pages.
Non-Final Office Action received for U.S. Appl. No. 15/009,152, dated Jul. 1, 2016, 6 pages.
Notice of Allowance and Fees for U.S. Appl. No. 11/316,772, dated Feb. 2, 2011, 9 pages.
Notice of Allowance and Fees for U.S. Appl. No. 11/316,772, dated Oct. 14, 2010, 6 Pages.
Notice of Allowance and Fees for U.S. Appl. No. 11/384,527 dated Aug. 18, 2010, Whole document.
Notice of Allowance and Fees for U.S. Appl. No. 11/384,527 dated Dec. 9, 2010, Whole document.
Notice of Allowance and Fees for U.S. Appl. No. 13/034,993 dated Nov. 25, 2011, Whole document.
Notice of Allowance and Fees for U.S. Appl. No. 13/097,462, dated Mar. 1, 2012, 17 Pages.
Notice of Allowance and Fees for U.S. Appl. No. 13/484,787, dated Dec. 6, 2012, 9 Pages.
Notice of Allowance received for Chinese Patent Application No. 200680042242.0, dated Dec. 20, 2011, 1 page of English Translation and 2 pages of Chinese Notice of Allowance.
Notice of Allowance received for Chinese Patent Application No. 200780009844.0, dated Jun. 24, 2011, 2 pages of English Translation and 2 pages of Chinese Office Action.
Notice of Allowance received for Chinese Patent Application No. 200780009844.0, dated Jun. 24, 2011, 2 pages of English Translation and 2 pages of Chinese Notice of Allowance.
Notice of Allowance received for Japan Patent Application No. 2008-547301, dated Apr. 9, 2013, 3 pages of Japan Notice of Allowance Only.
Notice of Allowance received for Japanese Patent Application No. 2008-547301, dated Apr. 9, 2013, 3 pages of Japan Notice of Allowance Only.
Notice of Allowance received for Japanese Patent Application No. 2008-547301, dated Apr. 9, 2013, 3 pages of Japanese Notice of Allowance Only.
Notice of Allowance received for Taiwan Patent Application No. 095146431, dated Dec. 21, 2011, 2 pages of Taiwan Notice of Allowance only.
Notice of Allowance received for U.S. Appl. No. 11/316,772, dated Feb. 2, 2011, 5 pages.
Notice of Allowance received for U.S. Appl. No. 11/316,772, dated Oct. 14, 2010, 6 pages.
Notice of Allowance received for U.S. Appl. No. 11/384,527, dated Aug. 18, 2010, 4 pages.
Notice of Allowance received for U.S. Appl. No. 11/384,527, dated Dec. 9, 2010, 6 pages.
Notice of Allowance received for U.S. Appl. No. 13/034,993, dated Nov. 25, 2011, 8 pages.
Notice of Allowance received for U.S. Appl. No. 13/097,462, dated Mar. 1, 2012, 5 pages.
Notice of Allowance received for U.S. Appl. No. 13/484,787, dated Dec. 6, 2012, 5 pages.
Notice of Allowance received for U.S. Appl. No. 13/796,032, dated Dec. 9, 2013, 7 pages.
Notice of Allowance received for U.S. Appl. No. 13/940,647, dated Feb. 14, 2014, 5 pages.
Notice of Allowance received for U.S. Appl. No. 13/940,659, dated Feb. 18, 2014, 5 pages.
Notice of Allowance received for U.S. Appl. No. 13/940,665, dated Feb. 14, 2014, 5 pages.
Notice of Allowance received for U.S. Appl. No. 13/940,681, dated Feb. 27, 2014, 5 pages.
Notice of Allowance received for U.S. Appl. No. 13/940,691, dated Feb. 27, 2014, 5 pages.
Notice of Allowance received for U.S. Appl. No. 13/940,696, dated Feb. 27, 2014, 8 pages.
Notice of Allowance received for U.S. Appl. No. 13/940,706, dated Jun. 4, 2014, 5 pages.
Notice of Allowance received for U.S. Appl. No. 14/288,261, dated Apr. 22, 2015, 6 pages.
Notice of Allowance received for U.S. Appl. No. 14/579,538, dated Oct. 14, 2015, 5 pages.
Notice of Allowance received for U.S. Appl. No. 13/034,993, dated Nov. 25, 2011, 7 pages.
“A Painless Guide to CRC Error Detection Algorithms”. Ross N. Williams. Aug. 19, 2003. http://www.ros.net/crc/download/crc.sub.--v3.txt.
“Accelerating High-Speed Networking with Intel.RTM. I/O Acceleration Technology”. Intel.RTM. I/O Acceleration Technology White Paper. May 2005.
“Intel.RTM. I/O Acceleration Technology”. http://www.intel.com/technology/ioacceleration/. date unknown.
“Intel.RTM. 10P332 I/O Processor with Intel XScale_RTM. Microarchitecture” http://www.intel.com/design/iio/iop332.htm. Date Unknown.
“Intel.RTM. IQ80332 Software Development and Processor Evaluation Kit”. http://www.intel.com/design/devkits/iq80332.htm. Date Unknown.
“The iSCSI CRC23C Digest and the Simultaneous Multiply and Divide Algorithm”. Tuikov, Luben and Vicente Cavanna. Jan. 30, 2002.
Blem et al., “Instruction Set Extensions for Cyclic Redundancy Check on a Multithreaded Processor”, 7th Workshop on Media and Stream Processors, Barcelona Spain., Dec. 12, 2005, 7 pages.
Blem, Emily R., et al., “Instruction Set Extensions for Cyclic Redundancy Check on a Multithreaded Processor”, 7th Workshop on Media and Stream Processors, Dec. 12, 2005, Barcelona Spain.
Blern et al., Instruction Set Extensions for Cyclic Redundancy Check on a Multithreaded Processor, 7th /F.A./ Workshop on Media and Stream Processors, Barcelona Spain., Dec. 12, 2005, 7 pages.
Blern, Emily R., et al., Instruction Set Extensions for Cyclic Redundancy Check on a Multithreaded Processor, 7th Workshop on Media and Stream Processors, Dec. 12, 2005, Barcelona Spain.
Chinese Patent and Trademark Office, Office Action dated Apr. 7, 2010 in Chinese patent application No. 2007800009844.0.
Chinese State Intellectual Property Office, First Office Action, dated Feb. 5, 2010 in Chinese patent application No. 200680042242.
Combined Search Report and Search Opinion for European Patent Application No. 07758495.1 dated Apr. 19, 2010, 10 Pages.
Dammann, Ronald L., et al., U.S. Appl. No. 11/233,742, filed Sep. 23, 2005, entitled “Techniques to Determine Integrity of Information.”
European Patent Office, Combined Search Report and Search Opinion for EPO Application No. 07758495.1 dated Apr. 29, 2010, 10 pages.
Extended European Search Report received for European Patent Application No. 07758495.1, dated Apr. 29, 2010, 10 pages.
First Office Action for Chinese Patent Application No. 201210041335.9, dated Feb. 7, 2014, 21 pgs.
German Patent and Trademark Office, Office Action dated Dec. 12, 2011 in German application No. 11 2006 003 298.4.
Intel Corporation, “Accelerating High-Speed Networking with Intel I/O Acceleration Technology”, Intel I/O Acceleration Technology White Paper, May 2005.
Intel Corporation, “Intel I/O Acceleration Technology”, http://www.intel.com/technology/loacceleration/. Date Unknown.
Intel Corporation, “Intel 10P332 110 Process with Intel XScale Microarchitecture”, http://www.intel.com/design/lio/lop332.htm. Date Unknown.
Intel Corporation, “Intel IQ80332 Software Development and Processor Evaluation Kit”, http://www.intel.com/design/lio/devkits/lq80332.htm. Date Unknown.
Intel Corporation, “Metro Ethernet: End-to-End Single Vendor Connectivity”, Apr. 7, 2005, 9 pages.
Intel, “Accelerating High-Speed Networking with Intel@ I/O Acceleration Technology”, Intel 1/0 Acceleration Technology White Paper, May 2005, 8 pages.
Intel, “Accelerating High-Speed Networking with Intel@ I/O Acceleration Technology”, Intel.RTM. I/O Acceleration White Paper, May 2005, 8 pages.
Intel, “Intel (Registered) 1/0 Acceleration Technology”, 2006, 02 pages.
Intel, “Intel.RTM. I/O Acceleration Technology”, 2006, 18 pages.
Intel, Intel (Registered) IOP332 110 Processor with Intel XScale Microarchitecture, Aug. 14, 2005, 3 pages.
Intel, Intel (Registered) IQ80332 Software Development and Processor Evaluation Kit, 2004, 3 pages.
Intel, Intel.RTM. 10P332 I/O Processor with Intel XScale Microarchitecture, Aug. 14, 2005, 3 pages.
Intel, Intel.RTM. 1080332 Software Development and Processor Evaluation Kit, 2004, 68 pages.
International Preliminary Report on Patentability and Written Opinion received for PCT Patent Application No. PCT/US2006/047234, dated Jul. 3, 2008, 7 pages.
International Preliminary Report on Patentability and Written Opinion Received for PCT Patent Application No. PCT/US2007/063946, dated Sep. 23, 2008, 5 pages.
International Preliminary Report on Patentability for PCT Patent Application No. PCT/US2006/047234, dated Jul. 3, 2008, 7 Pages.
International Search Report and Written Opinion for PCT Patent Application No. PCT/US2006/047234, dated Jul. 20, 2007, 10 Pages.
International Search Report and Written Opinion for PCT Patent Application No. PCT/US2007/063946 dated Jul. 24, 2007, 10 Pages.
International Search Report and Written Opinion received for PCT Patent Application No. PCT/US2006/047234, dated Jul. 20, 2007, 10 pages.
International Search Report and Written Opinion received for PCT Patent Application No. PCT/US2007/063946, dated Jul. 24, 2007, 6 pages.
Japanese Patent Office, Office Action, dated Jul. 17, 2012 in Japanese application No. 2008-547301.
Japanese Patent Office, Office Action, dated Sep. 29, 2011 in Japanese application No. 2008-547301.
Joglekar, Abhijeet, et al., U.S. Appl. No. 11/115,656, filed Apr. 26, 2005, entitled “Techniques to Provide Information Validation and Transfer.”
King, Steven R., et al., U.S. Appl. No. 11/230,720, filed Sep. 19, 2005, entitled “Techniques to Perform Prefetching of Content in Connection with Integrity Validation Value Determination.”
Lauritzen et al., Technology@Intel Magazine, “Intel I/O Acceleration Technology Improves Network Performance, Reliability and Efficiency”, Mar. 2005, 11 Pages.
Lauritzen, Keith, et al., Technology@Intel Magazine, “Intel I/O Acceleration Technology Improves Network Performance, Reliability and Efficiency,” Mar. 2005, 11 pages.
Notice of Allowance received for U.S. Appl. No. 15/009,152, dated Jan. 3, 2017, 8 pages.
Notice of Grant received for Chinese Patent Application No. 200680042242.0, dated Dec. 20, 2011, 1 page of English Translation and 2 pages of Chinese Notice of Grant.
Notice of Grant received for Chinese Patent Application No. 200680042242.0, dated Dec. 20, 2011, 2 pages of English Translation and 2 pages of Chinese Grant Only.
Office Action received for Chinese Patent Application No. 200680042242.0, dated Feb. 5, 2010, 5 pages of English Translation and 6 pages of Chinese Office Action.
Office Action received for Chinese Patent Application No. 2007800009844.0, dated Apr. 7, 2010, Whole Document.
Office Action received for Chinese Patent Application No. 200780009844.0, dated Apr. 7, 2010, 6 pages of English Translation and 4 pages of Chinese Office Action.
Office Action received for Chinese Patent Application No. 201210041335.9, dated Feb. 7, 2014, 13 pages of English Translation and 8 pages of Chinese Office Action.
Office Action received for Chinese Patent Application No. 201210041335.9, dated Sep. 28, 2014, 3 pages of English Translation and 3 pages of Office Action.
Office Action received for Chinese Patent Application No. 201210041335.9, dated Sep. 28, 2014, 6 pages of Office Action including 3 pages of English Translation.
Office Action received for Chinese Patent Application No. 201210041335.9, dated Sep. 28, 2014, 3 pages of English Translation and 3 pages of Chinese Office Action.
Office Action received for German Patent Application No. 11 2006 003 298.4, dated Dec. 8, 2011, 7 pages of English Translation and 7 pages of German Office Action.
Office Action received for Japan Patent Application No. 2008-547301, dated Jul. 17, 2012, 2 pages of English Translation and 2 pages of Japan Office Action.
Office Action received for Japanese Patent Application No. 2008-547301, dated Jul. 17, 2012, 2 pages of English Translation and 2 pages of Japanese Office Action.
Office Action received for Japanese Patent Application No. 2008-547301, dated Sep. 29, 2011, 6 pages.
Office Action received for Japanese Patent Application No. 2008-547301, dated Sep. 29, 2011, 3 pages of English Translation and 3 pages of Japanese Office Action.
Office Action received for Taiwan Patent Application No. 095146431, dated Dec. 20, 2010, 7 pages of English Translation and 5 pages of Taiwan Office Action.
PCI, “PCI Local Bus Specification”, Revision 2.1, Jun. 1, 1995, 298 pages.
Restriction Requirement for U.S. Appl. No. 11/384,527 dated Mar. 10, 2009, Whole document.
Restriction Requirement received for U.S. Appl. No. 11/384,527, dated Mar. 10, 2009, 8 pages.
Taiwanese Patent Office, Office Action dated Dec. 20, 2010 in Taiwanese patent application No. 095146431.
Tuikov et al., “The iSCSI CRC23C Digest and the Simultaneous Multiply and Divide Algorithm”, Jan. 30, 2002, 16 pages.
Tuikov, Luben, et al., “The iSCSI CRC23C Digest and the Simultaneous Multiply and Divide Algorithm”, Jan. 30, 2002.
U.S. Appl. filed Apr. 26, 2005, entitled “Techniques to Provide Information Validation and Transfer” by Abhijeet Joglekar; Frank L. Berry., U.S. Appl. No. 11/115,656.
U.S. Appl. filed Mar. 20, 2006, entitled “Validating Data Using Processor Instructions” by Steven R. King et al., U.S. Appl. No. 11/384,527.
U.S. Appl. filed Sep. 19, 2005, entitled “Techniques to Perform Prefetching of Content in Connection with Integrity Validation Value Determination” by Steven R. King and Frank L. Berry., U.S. Appl. No. 11/230,720.
U.S. Appl. filed Sep. 23, 2005, entitled “Techniques to Determine Integrity of Information” by Ronald L. Dammann et al., U.S. Appl. No. 11/233,742.
U.S. Patent and Trademark Office, Notice of Allowance dated Aug. 18, 2010 in U.S. Appl. No. 11/384,527.
U.S. Patent and Trademark Office, Notice of Allowance dated Dec. 9, 2010 in U.S. Appl. No. 11/384,527.
U.S. Patent and Trademark Office, Notice of Allowance dated Nov. 25, 2011 in U.S. Appl. No. 13/034,993.
U.S. Patent and Trademark Office, Office Action dated Aug. 20, 2009 with Response filed Nov. 19, 2009 in U.S. Appl. No. 11/384,527.
U.S. Patent and Trademark Office, Office Action dated Aug. 20, 2009 with Response filed on Nov. 19, 2009 in U.S. Appl. No. 11/384,527.
U.S. Patent and Trademark Office, Office Action dated Feb. 17, 2010 with Response filed on May 14, 2010 in U.S. Appl. No. 11/384,527.
Non-Final Non-Final Office Action received for U.S. Appl. No. 11/384,527, dated Feb. 17, 2010, 18 pages.
Non-Final Office Action for Chinese Patent Application No. 200680042242.0, dated Feb. 5, 2010, 11 Pages.
Non-Final Office Action for Chinese Patent Application No. 2007800009844.0 dated Apr. 7, 2010, Whole document.
Non-Final Office Action for German Patent Application No. 10-2006-003-298.4 dated Dec. 18, 2011, 14 Pages.
Non-Final Office Action for German Patent Application No. 11-2006-003-298.4 dated Dec. 18, 2011, 14 Pages.
Non-Final Office Action for Japanese Patent Application No. 2008-547301, dated Jul. 17, 2012, 4 Pages.
Non-Final Office Action for Japanese Patent Application No. 2008-547301, dated Sep. 29, 2011, whole document.
Non-Final Office Action for Taiwan Patent Application No. 095146431 dated Dec. 20, 2010, 9 Pages.
Non-Final Office Action for U.S. Appl. No. 11/316,772, dated Apr. 15, 2009, 8 Pages.
Non-Final Office Action for U.S. Appl. No. 11/316,772, dated Apr. 26, 2010, 5 Pages.
Non-Final Office Action for U.S. Appl. No. 11/316,772, dated Oct. 15, 2009, 5 Pages.
Non-Final Office Action for U.S. Appl. No. 11/384,527 dated Aug. 20, 2009, Whole document.
Non-Final Office Action for U.S. Appl. No. 11/384,527 dated Feb. 17, 2010, Whole document.
Non-Final Office Action for U.S. Appl. No. 13/034,993 dated Jun. 10, 2011, 24 Pages.
Non-Final Office Action for U.S. Appl. No. 13/097,462, dated Sep. 28, 2011, 17 Pages.
Non-Final Office Action for U.S. Appl. No. 13/484,787, dated Aug. 15, 2012, 5 Pages.
Non-Final Office Action for U.S. Appl. No. 13/796,032, dated Jun. 20, 2013, 19 Pages.
Non-Final Office Action for U.S. Appl. No. 13/940,647, dated Aug. 28, 2013, 13 Pages.
Non-Final Office Action for U.S. Appl. No. 13/940,659, dated Sep. 11, 2013, 13 Pages.
Non-Final Office Action for U.S. Appl. No. 13/940,665, dated Oct. 4, 2013, 13 pgs.
Non-Final Office Action for U.S. Appl. No. 13/940,681, dated Oct. 17, 2013, 13 Pages.
Non-Final Office Action for U.S. Appl. No. 13/940,691, dated Oct. 9, 2013, 13 Pages.
Non-Final Office Action for U.S. Appl. No. 13/940,696, dated Oct. 23, 2013, 13 Pages.
Non-Final Office Action for U.S. Appl. No. 13/940,706, dated Mar. 12, 2014, 6 Pages.
Non-Final Office Action for U.S. Appl. No. 13/940,706, dated Oct. 9, 2013, 13 Pages.
Non-Final Office Action received for U.S. Appl. No. 11/316,772, dated Oct. 15, 2009, 5 pages.
Non-Final Office Action received for U.S. Appl. No. 11/316,772, dated Sep. 17, 2008, 9 pages.
Non-Final Office Action received for U.S. Appl. No. 11/384,527, dated Aug. 20, 2009, 11 pages.
Non-Final Office Action received for U.S. Appl. No. 13/034,993, dated Nov. 25, 2011, 8 pages.
Non-Final Office Action received for U.S. Appl. No. 13/097,462, dated Sep. 28, 2011, 8 pages.
Non-Final Office Action received for U.S. Appl. No. 13/484,787, dated Aug. 15, 2012, 5 pages.
Non-Final Office Action received for U.S. Appl. No. 13/796,032, dated Jun. 20, 2013, 6 pages.
Non-Final Office Action received for U.S. Appl. No. 13/940,647, dated Aug. 28, 2013, 6 pages.
Non-Final Office Action received for U.S. Appl. No. 11/316,772, dated Apr. 15, 2009, 8 pages.
Non-Final Office Action received for U.S. Appl. No. 11/316,772, dated Apr. 26, 2010, 5 pages.
Non-Final Office Action received for U.S. Appl. No. 11/384,527, dated Aug. 20, 2009, 12 pages.
Non-Final Office Action received for U.S. Appl. No. 11/384,527, dated Feb. 17, 2010, 5 pages.
Non-Final Office Action received for U.S. Appl. No. 13/034,993, dated Jun. 10, 2011, 24 pages.
U.S. Patent and Trademark Office, Office Action dated Jun. 10, 2011 and Reply filed Sep. 12, 2011 in U.S. Appl. No. 13/034,993.
U.S. Patent and Trademark Office, Restriction Requirement dated Mar. 10, 2009 with Election filed on Apr. 8, 2009 in U.S. Appl. No. 11/384,527.
Williams, Ross N., “A Painless Guide to CRC Error Detection Algorithms”, Version 3, Aug. 19, 1993, 32 pages.
Related Publications (1)
Number Date Country
20200159614 A1 May 2020 US
Continuations (9)
Number Date Country
Parent 15589561 May 2017 US
Child 16538812 US
Parent 15009152 Jan 2016 US
Child 15589561 US
Parent 14579538 Dec 2014 US
Child 15009152 US
Parent 14288261 May 2014 US
Child 14579538 US
Parent 13940706 Jul 2013 US
Child 14288261 US
Parent 13796032 Mar 2013 US
Child 13940706 US
Parent 13484787 May 2012 US
Child 13796032 US
Parent 13097462 Apr 2011 US
Child 13484787 US
Parent 11316772 Dec 2005 US
Child 13097462 US