The present invention generally relates to accessing and maintaining socket control information for high speed network connections. The invention relates more specifically to a method and apparatus for maintaining socket information using a multiple port cache memory and controller.
The approaches described in this section could be pursued, but are not necessarily approaches that have been previously conceived or pursued. Therefore, unless otherwise indicated herein, the approaches described in this section are not prior art to the claims in this application and are not admitted to be prior art by inclusion in this section.
The packaging of data into data packets for network transfer and the reassembly of the data packets on the receiving end consumes a large amount of CPU cycles on a host computer system. As network bandwidth increases using higher speeds, such as the gigabit range, the workload on the host computer system increases. This causes the host computer system to spend more valuable CPU cycles managing network communications instead of executing application programs.
Transport control protocol (TCP) and Internet protocol (IP) are commonly used for packet network communications and are defined in Request for Comments (RFC) documents maintained by the Internet Engineering Task Force (IETF). TCP/IP or transport offload engines (TOE) are used to move TCP/IP processing from the operating system to a specialized processor, often located on a network interface card (NIC). Adding a TOE can dramatically increase throughput. A TOE takes the job of translating all or part of the TCP/IP protocol away from the host's main processor, thus freeing up the host computer system to run other applications.
TCP/IP utilizes socket connections. The host computer system must notify the TOE of the sockets that it wants the TOE to handle. The host computer system transfers socket control information to the TOE. Some TOEs store the socket control information in a data structure in memory local to the TOE. During socket processing, the TOE references the socket control information to manage the socket communications. However, as the transfer speed across the network increases, the socket control information must be accessed faster and more efficiently.
Based on the foregoing, there is a clear need for a system that provides for the management of socket control information for high-speed networks in a highly accessible manner. Additionally, there is a need for a system that would allow operations such as transmit and receive to reference socket control information at a higher priority than other operations.
Embodiments are illustrated by way of example, and not by way of limitation, in the figures of the accompanying drawings and in which like reference numerals refer to similar elements and in which:
A method and apparatus for accessing and maintaining socket control information for high-speed network connections is described. In the following description, for the purposes of explanation, numerous specific details are set forth in order to provide a thorough understanding of the present invention. It will be apparent, however, to one skilled in the art that the present invention may be practiced without these specific details. In other instances, well-known structures and devices are shown in block diagram form in order to avoid unnecessarily obscuring the present invention.
Embodiments are described herein according to the following outline:
The needs identified in the foregoing Background, and other needs and objects that will become apparent for the following description, are achieved in the present invention, which comprises, in one aspect, a method for accessing and maintaining socket control information for high speed network connections.
A multi-port control block (“CB”) cache contains socket control information in CB entries for sockets assigned to the TOE by a host computer. The socket control information is needed by the TOE to form transmit packets and check if receive packets are assigned to the TOE, for example.
Each port provides a TOE client direct access to the CB cache. Time critical TCP receiving (RX) and TCP transmitting (TX) logic are each provided dedicated ports to enable higher bandwidth accesses to the CB cache. All other non-time critical TOE clients are given arbitrated access via a separate dedicated port.
An optional external memory is given direct access to the CB cache via a dedicated port. The external memory can store more socket control information in CB entries for additional sockets. When the optional external memory is present, the CB cache keeps one CB entry empty to facilitate fast CB entry transfers between the external memory and the CB cache. The CB cache transfers a CB entry from the external memory before writing an older CB entry to the external memory, thus freeing up the older CB entry's slot in the CB cache.
When the optional external memory is not present, the same dedicated port mentioned above may be used by the host to directly transfer CB information to and from the CPU and the TOE.
Arbitration between clients that share a port on the CB Cache is based on a priority model where some clients are assigned a higher priority than other TOE clients. The priority scheme is based on how time-critical of each clients accesses to CB information is.
CB entries are located in the CB cache using two data structures: a hash reference table and a CB identifier (also referred to herein as a CB handle) reference table. The hash reference table is used by the RX logic when it is trying to find a CB entry associated with a received packet. The CB identifier reference table is used by all other TOE clients when the CB handle is already known.
An access locking mechanism is provided to ensure CB entry coherency. Access locks are requested per CB entry field, which allows multiple TOE clients to access the same CB entry simultaneously, but not just the same field within the CB entry. CB entry accesses may be of the locked or unlocked variety.
In addition, when external memory is present for additional CB entry storage, the CB Cache controller uses a least recently used (LRU) algorithm to determine which CB slot to write back to external memory when a new CB entry is read into the cache.
2.0 Structural and Functional Description
2.1 Transport Offload Engine (Toe)
The TOE 102 manages the sockets that the CPU 101 has assigned to the TOE 102 as network packets move between the network 103 and the CPU 101. The TOE 102 uses the socket control information to manage transmit and receive packets over the network 103. To be able to keep up with the high data transfer rates of the network 103, the TOE 102 manages the socket control information located in the TOE 102 using a multiple-port control block (CB) cache memory and controller. The multi-port CB cache memory and controller allow the TOE 102 to service transmit and receive packets at a rate that is more than adequate to keep up with transfer speeds of 10 Gb and above.
A host interface 202 allows the TOE 201 to transfer data to and from a host CPU.
The main sections of the TOE 201 are the transmit (TX) 203 and receive (RX) 204 modules. The TX 203 module processes data packets sent by the host to the TOE over the host interface 202. The RX module 204 processes incoming data packets from the Ethernet interface 207.
The control block (CB) cache 206 contains socket control information for sockets that have been offloaded from the host CPU. The CB cache controller 205 allows multi-port access to the CB cache 206. Multiple ports enable an embodiment of the invention to provide access to the CB cache 206 at speeds sufficient to handle 10 Gb data rates and above.
A port on the CB cache is dedicated for communications with an optional external memory 210. This memory is used to store addition CB entries. When the external memory is not present, the port on the CB cache is used by the host to transfer CB entries to and from the host system and the TOE.
2.2 Control Block (CB) Cache
An embodiment of the invention uses a cache structure (CB cache 206) that works in conjunction with an optional external memory structure. The CB cache 206 is equipped with multiple ports to allow greater access bandwidth to resources that are time critical for processing network traffic. The CB cache 206 contains socket control information and, alternatively, can be used to store other data structures e.g., instruction block queues. This allows the entire TOE 201 to keep up with very high-speed network traffic (10 Gb and above).
The CB cache 301 is needed because the optional external SRAM 306 where the main CB memory is typically located is shared with other TOE data structures (SGLs, FIFOs, Queues, etc.). Therefore, in order to meet the access requirements needed to support 10 Gb network speeds, a fast access method is implemented that allows the different CB clients enough bandwidth to service both RX and TX packets. When the external SRAM 306 is not present, the CB cache 301 serves as the main CB memory.
In one embodiment, the CB cache 301 is implemented as a quad port, 512×64 bit, synchronous SRAM. This is enough memory to hold 16 CB entries with each entry being 256 bytes in length. In other embodiments, the CB cache 301 may have any other size appropriate for the application. The CB cache controller 302 accepts CB access requests from various resources, checks to see if the desired CB is in the cache, and if it is, arbitrates between all good requests for accesses to the CB cache 301. Time critical TCP RX and TCP TX accesses go through their own interfaces 305, 304 to enable higher bandwidth accesses to the CB cache 301. All other non-time critical TOE clients are arbitrated through a third interface 303.
Each interface has a dedicated port to speed accesses to the CB cache 301. The RX access interface 305 is communicably connected to port A 307, the TX access interface 304 is communicably connected to port B 308, and the arbitrator for other accesses 303 is communicably connected to port C 309. A fourth port, port D 310, is provided to allow the CB cache controller 302 to transfer data to and from the host (also a TOE client) or an optional external SRAM 306. This allows the CB cache controller to retrieve new CB entries or store old CB entries while simultaneously granting access to TOE clients to other CB entries within the CB Cache.
Access arbitration within each port is based on a predetermined priority model where some clients (e.g., the RX packet parser and TX packet generator modules) are assigned a higher priority than other TOE clients. The priority assigned to each client is determined by how time critical the TOE client's CB accesses are.
An external SRAM 306 may be added to expand the capabilities of the TOE. The external SRAM 306 can store more socket control information for additional sockets. An embodiment of the invention can detect the presence of the external SRAM 306 via a configuration resistor, detecting the external SRAM address lines, or other methods. If the external SRAM 306 is not present, then the CB cache 301 functions as the main CB memory.
2.21 CB Cache Bandwidth
The CB cache structure is designed to support dual 10 Gb Ethernet links. Therefore, the total bandwidth required for full duplex line speed is 40 Gb/second (10 Gb/sec×2 (Links)×2 (for TX and RX), or 5 GB/second. Assuming that an average packet requires 128 bytes, the total packet throughput is:
Packet Throughput=5 GB/128=39.1 M Packets/second
Further, assuming that 128 bytes are accessed per packet, the total CB access requirement is:
CB Access Requirement=(39.1 M Packets/second)×(128 Bytes/Packet)=5 GB/second
The requirement covers both TX and RX directions. Since they are given dedicated ports 307, 308 into the CB cache 301, each port in the cache requires a 2.5 GB/second bandwidth. The target operating frequency is 200 MHz and the bus width for the CB cache (to internal TOE clients) is 128 bits. Therefore, the theoretical bandwidth available to each of the TX and RX clients is:
Theoretical Bandwidth=(200 M×128 bits)/(8 bits/Byte)=3.2 GB/second
Therefore, the dedicated ports for TX 308 and RX 307 will provide enough bandwidth access to the CB cache to support dual 10 Gbps Ethernet links. In fact, the dedicated ports will support the links at line speed.
All other CB clients that are non-time critical will share another port 309 into the CB cache 301.
2.22 CB Entry Lookup Using Socket Hashes
The TOE's RX logic first generates a hash value for each received network packet as indicated in operation 402. The hash is based on the four-tuple parameters of the packet (the local and remote IP addresses, and the local and remote ports). The received network packet hash value is then compared to the hash values in the hash reference table (452) in operation 404. The CB Cache controller will then return a bitmap indicating which slots (if any) in the CB Cache (456) have matching hash values. See operation 406. A check is then made in decision 408 to see if any of the CB entries in the CB cache have hashes that match that of the received network packet. If there are no matches and since external memory is not present, then the TOE has not been assigned the received network packet's socket. See operation 422. The packet is then forwarded to the host for processing in operation 424. If there are matches, then the RX logic will then read the IP addresses and port numbers from the first matching CB entry in the cache to see if they match those of the received network packet. See operation 410 and 412. If they do match, then the correct CB entry has been found. See decision 414 and operation 416. If the parameters do not match, then a check is made to see if there are more matching CB entries in the CB cache. See decision 418. If there are more entries, then the next set of socket parameters is read in operation 420, and compared against those of the received network packet in operation 412. If there are no more matching entries, and the correct CB entry has not yet been found, then the packet does not belong to a socket that has been assigned to the TOE (operation 422), and the packet is again forwarded to the CPU for processing. See operation 424.
This CB look up in external memory and the CB cache via the CB LUT is done in parallel to querying the CB Cache via the HASH reference table. If the query to the CB cache (see operation 524) completes and the CB entry is found to be in the cache (see decision 526), then the search for the CB via the CB LUT is terminated (see operation 528). It is therefore obvious that the CB Cache and CB location method outlined above provides a much quicker method for determining if a received packet is associated with a socket assigned to the TOE. If the CB entry is not found, then the process waits for the results of the CB LUT search (see operation 530).
If the CB LUT query in operation 504 does not return a valid LUT entry, than it also means that the packet is associated with a CB not assigned to the TOE (see operation 532). In this case, the packet is also forwarded to the host for further processing (see operation 534).
2.23 CB Entry Lookup Using CB Handles
For these accesses, the TOE client begins by providing a CB address to the CB Cache controller (see operation 602). The address is comprised of the CB handle concatenated with a CB offset. For example, if each CB entry is made up of 64 double word fields, then the CB offset is 6 bits long. If the CB handle is 16 bits long (thus allowing for 64K CB's), then if a client wanted to access the second DWORD in a CB entry with handle 0×1005, the address calculation is:
CB Address={CH_Handle, CB_Offset}={16′h1005, 6′h02}=22′h040142
The TOE client begins the request by providing the CB address to the CB Cache controller in operation 602. The CB Cache controller then parses out the CB handle from the supplied address in operation 604. Using the above example, the CB handle is obtained by parsing bits[21:6] of the CB address. The CB Cache controller then queries the CB Handle reference table (464) to find which CB cache slot (456) contains the CB handle requested. See operation 606. If no matching CB handle is found in the reference table (per decision 608), then an error condition (612) is reported back to the host as it has referenced a socket that is not assigned to the TOE. Normally, the CB Handle reference table will return a CB slot where the CB entry is located, at which point the CB Cache controller can grant the TOE clients access request to the CB. See operation 610.
As noted above, and in
When the external SRAM 306 is present, a method is implemented that allows CB entries from the external SRAM 306 to be written to the CB cache 301 as soon as possible. In this method, of the 16 spaces in the CB cache 301, 15 are utilized at any given time. If the CB entry is in the CB cache 301, then the TOE client request can be serviced directly. The last or 16th slot is saved for the case where a new CB entry needs to be fetched from the external SRAM 306. The new CB entry can be fetched first (see operation 710) with the TOE client being serviced immediately (see operation 714). Then, using a separate background process or thread, the least recently used CB entry is written from the CB cache 301 to the external SRAM 306 (see operation 712).
In addition, by knowing a client's access pattern (which is predetermined by the client), the WORD accessing order by the CB cache 301 is tailored such that the client can start reading the CB entry from the CB cache 301 while other parts of the CB entry are still being fetched from the external SRAM 306. After the CB entry has been completely fetched, the least recently used CB entry is written from the CB cache 301 to the external SRAM 306.
In parallel to detecting if the requested CB entry is in the CB cache 301, another look up is performed in order to determine if the field in the CB entry being requested is currently free for access or whether it is locked by another resource. A resource may need to lock a CB field if it is doing a read-modify-write operation. To detect this condition, the CB cache address being requested is sent to a sub-module which keeps track of which fields are locked. In the sub-module, the address is compared to see if any other resource is currently locking the field. If no resources are locking the particular CB field, then the access cycle is allowed to proceed.
This CB field locking feature supports providing the maximum bandwidth to the CB cache 301 while still maintaining CB content coherency. If entire CB entries were locked out until a client was finished using them, then too many clients would spend too much time waiting for CB entry accesses. Likewise, if a locking mechanism is not provided, then it is possible for multiple clients to access the same field within a CB entry and CB content integrity would be compromised.
2.24 CB Cache Organization
The CB cache uses a least recently used algorithm for determining which CB is written back to external SRAM when a new CB needs to be fetched from external SRAM. To implement this, the CB cache controller maintains a list of the CB's and orders them according to accesses.
In an embodiment with 16 entries in the CB cache, after any reset, the list is established in the following order:
When the first CB entry is accessed, it will go into slot 0. At that time, CB Slot 0 is moved to the bottom of the list, and all other entries will move up one slot. The list will appear as follows:
After 16 or more CB's are allocated, then the cache is full. At that time the list may have a random order depending on which CB's were accessed in what order. One entry is always kept open however. This is to allow a new entry to be read first thereby allowing quicker access to the new CB. After the new CB is read, then the LRU CB is written back to external memory. A sample list is shown below:
If at this time, CB Entry 4 (currently in the 7th position in the above list) is accessed, then it will move to the bottom of the list, and the list will now appear as shown below:
Next, if CB entry 8 is deprecated, it is moved up to the top of the list, and the list will now appear as shown below:
If a CB update request is made, then the oldest CB entry (in this case Entry 8 from the above table) is moved down to the bottom of the list. The list would then appear as follows:
3.0 Extensions and Alternatives
In the foregoing specification, the invention has been described with reference to specific embodiments thereof. It will, however, be evident that various modifications and changes may be made thereto without departing from the broader spirit and scope of the invention. The specification and drawings are, accordingly, to be regarded in an illustrative rather than a restrictive sense.
Number | Name | Date | Kind |
---|---|---|---|
212889 | Bridenthal, Jr. et al. | Mar 1879 | A |
4807111 | Cohen et al. | Feb 1989 | A |
4839851 | Maki | Jun 1989 | A |
5012489 | Burton et al. | Apr 1991 | A |
5056058 | Hirata et al. | Oct 1991 | A |
5161193 | Lampson et al. | Nov 1992 | A |
5163131 | Row et al. | Nov 1992 | A |
5307413 | Denzer | Apr 1994 | A |
5426694 | Hebert | Jun 1995 | A |
5430727 | Callon | Jul 1995 | A |
5440551 | Suzuki | Aug 1995 | A |
5455599 | Cabral et al. | Oct 1995 | A |
5485460 | Schrier et al. | Jan 1996 | A |
5495480 | Yoshida | Feb 1996 | A |
5499353 | Kadlec et al. | Mar 1996 | A |
5513324 | Dolin, Jr. et al. | Apr 1996 | A |
5519704 | Farinacci et al. | May 1996 | A |
5544357 | Huei | Aug 1996 | A |
5546453 | Hebert | Aug 1996 | A |
5566170 | Bakke et al. | Oct 1996 | A |
5577105 | Baum et al. | Nov 1996 | A |
5577172 | Vatland et al. | Nov 1996 | A |
5577237 | Lin | Nov 1996 | A |
5581686 | Koppolu et al. | Dec 1996 | A |
5596702 | Stucka et al. | Jan 1997 | A |
5598410 | Stone | Jan 1997 | A |
5619650 | Bach et al. | Apr 1997 | A |
5621434 | Marsh | Apr 1997 | A |
5625678 | Blomfield-Brown | Apr 1997 | A |
5625825 | Rostoker et al. | Apr 1997 | A |
5634015 | Chang et al. | May 1997 | A |
5636371 | Yu | Jun 1997 | A |
5640394 | Schrier et al. | Jun 1997 | A |
5650941 | Coelho et al. | Jul 1997 | A |
5663951 | Danneels et al. | Sep 1997 | A |
5664162 | Dye | Sep 1997 | A |
5666362 | Chen et al. | Sep 1997 | A |
5675507 | Bobo, II | Oct 1997 | A |
5678060 | Yokoyama et al. | Oct 1997 | A |
5680605 | Torres | Oct 1997 | A |
5687314 | Osman et al. | Nov 1997 | A |
5696899 | Kalwitz | Dec 1997 | A |
5699350 | Kraslavsky | Dec 1997 | A |
5701316 | Alferness et al. | Dec 1997 | A |
5727149 | Hirata et al. | Mar 1998 | A |
5734852 | Zias et al. | Mar 1998 | A |
5734865 | Yu | Mar 1998 | A |
5748905 | Hauser et al. | May 1998 | A |
5754540 | Liu et al. | May 1998 | A |
5754556 | Ramseyer et al. | May 1998 | A |
5761281 | Baum et al. | Jun 1998 | A |
5778178 | Arunachalam | Jul 1998 | A |
5790546 | Dobbins et al. | Aug 1998 | A |
5790676 | Ganesan et al. | Aug 1998 | A |
5802287 | Rostoker et al. | Sep 1998 | A |
5802306 | Hunt | Sep 1998 | A |
5805816 | Picazo, Jr. et al. | Sep 1998 | A |
5809235 | Sharma et al. | Sep 1998 | A |
5815516 | Aaker et al. | Sep 1998 | A |
5818935 | Maa | Oct 1998 | A |
5826032 | Finn et al. | Oct 1998 | A |
5854750 | Phillips et al. | Dec 1998 | A |
5870549 | Bobo, II | Feb 1999 | A |
5870622 | Gulick et al. | Feb 1999 | A |
5872919 | Wakeland | Feb 1999 | A |
5877764 | Feitelson et al. | Mar 1999 | A |
5894557 | Bade et al. | Apr 1999 | A |
5909546 | Osborne | Jun 1999 | A |
5918051 | Savitzky et al. | Jun 1999 | A |
5920732 | Riddle | Jul 1999 | A |
5923892 | Levy | Jul 1999 | A |
5935268 | Weaver | Aug 1999 | A |
5937169 | Connery et al. | Aug 1999 | A |
5941988 | Bhagwat et al. | Aug 1999 | A |
5943481 | Wakeland | Aug 1999 | A |
5946487 | Dangelo | Aug 1999 | A |
5966534 | Cooke et al. | Oct 1999 | A |
5968161 | Southgate | Oct 1999 | A |
5974518 | Nogradi | Oct 1999 | A |
5991299 | Radogna et al. | Nov 1999 | A |
5999974 | Ratcliff et al. | Dec 1999 | A |
6014699 | Ratcliff et al. | Jan 2000 | A |
6034963 | Minami et al. | Mar 2000 | A |
6046980 | Packer | Apr 2000 | A |
6049857 | Watkins | Apr 2000 | A |
6061368 | Hitzelberger | May 2000 | A |
6061742 | Stewart et al. | May 2000 | A |
6076115 | Sambamurthy et al. | Jun 2000 | A |
6078736 | Guccione | Jun 2000 | A |
6081846 | Hyder et al. | Jun 2000 | A |
6092110 | Maria et al. | Jul 2000 | A |
6092229 | Boyle et al. | Jul 2000 | A |
6098188 | Kalmanek, Jr. et al. | Aug 2000 | A |
6101543 | Alden et al. | Aug 2000 | A |
6122670 | Bennett et al. | Sep 2000 | A |
6151625 | Swales et al. | Nov 2000 | A |
6157955 | Narad et al. | Dec 2000 | A |
6172980 | Flanders et al. | Jan 2001 | B1 |
6172990 | Deb et al. | Jan 2001 | B1 |
6173333 | Jolitz et al. | Jan 2001 | B1 |
6182228 | Boden | Jan 2001 | B1 |
6185619 | Joffe et al. | Feb 2001 | B1 |
6208651 | Van Renesse et al. | Mar 2001 | B1 |
6226680 | Boucher | May 2001 | B1 |
6230193 | Arunkumar et al. | May 2001 | B1 |
6233626 | Swales et al. | May 2001 | B1 |
6247060 | Boucher | Jun 2001 | B1 |
6247068 | Kyle | Jun 2001 | B1 |
6327625 | Wang et al. | Dec 2001 | B1 |
6330659 | Poff et al. | Dec 2001 | B1 |
6334153 | Boucher | Dec 2001 | B2 |
6341129 | Schroeder et al. | Jan 2002 | B1 |
6345301 | Burns et al. | Feb 2002 | B1 |
6347347 | Brown et al. | Feb 2002 | B1 |
6389479 | Boucher et al. | May 2002 | B1 |
6389537 | Davis et al. | May 2002 | B1 |
6393487 | Boucher et al. | May 2002 | B2 |
6397316 | Fesas, Jr. | May 2002 | B2 |
6427169 | Elzur | Jul 2002 | B1 |
6427171 | Craft | Jul 2002 | B1 |
6427173 | Boucher | Jul 2002 | B1 |
6430628 | Connor | Aug 2002 | B1 |
6434620 | Boucher et al. | Aug 2002 | B1 |
6460080 | Shah et al. | Oct 2002 | B1 |
6470415 | Starr | Oct 2002 | B1 |
6530061 | Labatte | Mar 2003 | B1 |
6591302 | Boucher | Jul 2003 | B2 |
6609225 | Ng | Aug 2003 | B1 |
6629141 | Elzur et al. | Sep 2003 | B2 |
6658480 | Boucher | Dec 2003 | B2 |
6687758 | Craft | Feb 2004 | B2 |
6697868 | Craft | Feb 2004 | B2 |
6751665 | Philbrick | Jun 2004 | B2 |
6757746 | Boucher | Jun 2004 | B2 |
6807581 | Starr | Oct 2004 | B1 |
6938092 | Burns | Aug 2005 | B2 |
6941386 | Craft | Sep 2005 | B2 |
6965941 | Boucher | Nov 2005 | B2 |
6996070 | Starr | Feb 2006 | B2 |
7042898 | Blightman | May 2006 | B2 |
20010021949 | Blightman et al. | Sep 2001 | A1 |
20010023460 | Boucher et al. | Sep 2001 | A1 |
20010027496 | Boucher et al. | Oct 2001 | A1 |
20010036196 | Brightman | Nov 2001 | A1 |
20010037397 | Boucher | Nov 2001 | A1 |
20010037406 | Philbrick | Nov 2001 | A1 |
20010047433 | Boucher et al. | Nov 2001 | A1 |
20020055993 | Shah et al. | May 2002 | A1 |
20020085562 | Hufferd et al. | Jul 2002 | A1 |
20020087732 | Boucher et al. | Jul 2002 | A1 |
20020091844 | Craft | Jul 2002 | A1 |
20020095519 | Philbrick et al. | Jul 2002 | A1 |
20020120899 | Gahan et al. | Aug 2002 | A1 |
20020147839 | Boucher et al. | Oct 2002 | A1 |
20020156927 | Boucher et al. | Oct 2002 | A1 |
20020161919 | Boucher | Oct 2002 | A1 |
20020163888 | Grinfeld | Nov 2002 | A1 |
20020165992 | Banerjee | Nov 2002 | A1 |
20030005142 | Elzur et al. | Jan 2003 | A1 |
20030005143 | Elzur et al. | Jan 2003 | A1 |
20030014544 | Pettey | Jan 2003 | A1 |
20030016669 | Pfister et al. | Jan 2003 | A1 |
20030031172 | Grinfeld | Feb 2003 | A1 |
20030046330 | Hayes | Mar 2003 | A1 |
20030046418 | Raval et al. | Mar 2003 | A1 |
20030056009 | Mizrachi et al. | Mar 2003 | A1 |
20030058870 | Mizrachi et al. | Mar 2003 | A1 |
20030061505 | Sperry et al. | Mar 2003 | A1 |
20030066011 | Oren | Apr 2003 | A1 |
20030079033 | Craft | Apr 2003 | A1 |
20030084185 | Pinkerton | May 2003 | A1 |
20030095567 | Lo et al. | May 2003 | A1 |
20030115350 | Uzrad-Nali et al. | Jun 2003 | A1 |
20030115417 | Corrigan | Jun 2003 | A1 |
20030128704 | Mizrachi et al. | Jul 2003 | A1 |
20030140124 | Burns | Jul 2003 | A1 |
20030145101 | Mitchell et al. | Jul 2003 | A1 |
20030145270 | Holt | Jul 2003 | A1 |
20030167346 | Craft et al. | Sep 2003 | A1 |
20030200284 | Philbrick et al. | Oct 2003 | A1 |
20040003126 | Boucher | Jan 2004 | A1 |
20040054813 | Boucher | Mar 2004 | A1 |
20040062245 | Sharp | Apr 2004 | A1 |
20040062246 | Boucher | Apr 2004 | A1 |
20040064578 | Boucher | Apr 2004 | A1 |
20040064589 | Boucher | Apr 2004 | A1 |
20040064590 | Starr | Apr 2004 | A1 |
20040073703 | Boucher | Apr 2004 | A1 |
20040078462 | Philbrick | Apr 2004 | A1 |
20040088262 | Boucher | May 2004 | A1 |
20040100952 | Boucher | May 2004 | A1 |
20040111535 | Boucher | Jun 2004 | A1 |
20040117509 | Craft | Jun 2004 | A1 |
20040158640 | Philbrick | Aug 2004 | A1 |
20040158793 | Blightman | Aug 2004 | A1 |
20040240435 | Boucher | Dec 2004 | A1 |
20050066028 | Illikkal et al. | Mar 2005 | A1 |
20050122986 | Starr | Jun 2005 | A1 |
20050141561 | Craft | Jun 2005 | A1 |
20050160139 | Boucher | Jul 2005 | A1 |
20050175003 | Craft | Aug 2005 | A1 |
20050182841 | Starr | Aug 2005 | A1 |
20050198198 | Craft | Sep 2005 | A1 |
20050204058 | Philbrick | Sep 2005 | A1 |
20050278459 | Boucher | Dec 2005 | A1 |
20060010238 | Craft | Jan 2006 | A1 |
20070062245 | Fuller et al. | Mar 2007 | A1 |
Number | Date | Country |
---|---|---|
4595297 | May 1998 | AU |
7364898 | Nov 1998 | AU |
4435999 | Dec 1999 | AU |
723724 | Sep 2000 | AU |
0070603 | Mar 2001 | AU |
734115 | Jun 2001 | AU |
0741089 | Nov 2001 | AU |
0228874 | May 2002 | AU |
2265692AA | May 1998 | CA |
2287413AA | Nov 1998 | CA |
2328829AA | Dec 1999 | CA |
2265692 | Aug 2001 | CA |
1237295 | Dec 1999 | CN |
1266512 | Sep 2000 | CN |
1305681 | Jul 2001 | CN |
447205 | Jul 2001 | TW |
448407 | Aug 2001 | TW |
WO9821655 | May 1998 | WO |
WO 9850852 | Nov 1998 | WO |
WO 9965219 | Dec 1999 | WO |
WO 0113583 | Feb 2001 | WO |
WO 0128179 | Apr 2001 | WO |
WO 0239302 | May 2002 | WO |
WO 02059757 | Aug 2002 | WO |
WO 02086674 | Oct 2002 | WO |
WO 03021443 | Mar 2003 | WO |
WO 03021447 | Mar 2003 | WO |
WO 03021452 | Mar 2003 | WO |