Abstract:
The present invention relates to a method and circuit for prefetching direct memory access descriptors from memory of a computer system, and storing the prefetched direct memory access descriptors within a unified descriptor memory for subsequent access by direct memory access controllers. The descriptors are generated by a central processing unit of the computer system while executing software applications. The descriptors define data transfer operations between memory of the computer system and input/output devices via direct memory access controllers. The direct memory access controllers generate requests for descriptors. Upon generation of a request, the unified descriptor memory is checked to determine whether the requested descriptor is contained therein. If the requested descriptor is contained within the unified descriptor memory, the request descriptor is provided to the requesting direct memory access controller. If, however, the requested descriptor is not stored within the unified descriptor memory, the system memory is accessed for the requested descriptor, and the requested descriptor is transferred from system memory to the unified descriptor memory in a block of descriptors each relating to the same context. After the requested descriptor is stored within the unified descriptor memory, the requested descriptor is provided to the requesting direct memory access controller.

Description:
This application is a continuation application of U.S. patent application Ser. No. 09/195,883, filed Nov. 19, 1998, now U.S. Pat. No. 6,202,107 B1. 
    
    
     BACKGROUND OF THE INVENTION 
     1. Field of the Invention 
     The present invention relates to the field of computer systems. More particularly, the present invention relates to a circuit and method for fetching descriptors used in direct memory access data transfers. 
     2. Description of the Relevant Art 
     Traditionally, computer systems include subsystems which interface to one another. Communication may include data transfers between memory and an input/output (I/O) device. Data transfers may occur in several ways. For example, in programmed I/O type transfers, all data transfers between memory and I/O devices are completely controlled by the central processing unit (CPU), or more precisely, by a program executed by the CPU. In interrupt I/O type data transfers, all data transfers between memory and I/O devices are initiated by the I/O device through interrupts. In response to I/O interrupts, the CPU suspends whatever it is currently doing and attends to the needs of the I/O device. 
     A third type of data transfer is known as direct memory access (DMA) data transfer. DMA is a specialized process that transfers data between memory and an I/O device via a direct memory access controller (DMAC), while the CPU continues with other tasks. In other words, all data transfers between memory and the I/O device is accomplished without involving the CPU. The DMA approach speeds overall system speed and generally provides a more efficient way of moving data between the memory and the I/O device. 
     In DMA transfers, the CPU generates descriptors used by the DMA controllers for transferring data between memory and I/O devices. Descriptors are, in essence, commands to the DMA controllers to transfer data to and from memory. DMA descriptors typically contain fields that identify memory location where data is to be transferred, the number of bits at that memory location to be transferred, and a pointer to a subsequent DMA descriptor. The descriptors are generated by the CPU executing software and temporarily stored in memory. Prior to data transfer, the DMA controllers must retrieve the descriptors from memory. Upon receipt descriptors, DMA controllers initiate data transfer in accordance thereto. 
     SUMMARY OF THE INVENTION 
     The present invention relates to a circuit and method for prefetching direct memory access descriptors from memory of a computer system. The descriptors are generated by a central processing unit of the computer system executing one or more software applications. In essence, the descriptors are commands that define a data transfer operation between memory and an input/output device. Once the descriptors are generated by the executed software applications, the descriptors are stored in memory for subsequent retrieval by direct memory access controllers. 
     The present invention prefetches and stores descriptors for a plurality of contexts within a unified memory for subsequent access upon request by the direct memory access controllers. To this end, the method involves reading a plurality of first descriptors from the memory of the computer system. Each of the plurality of first descriptors identifies a first address in the memory where data is to be written via a corresponding first direct memory access controller. A plurality of second descriptors is also read from memory. Each of the plurality of second descriptors identifies a second address in the memory where data is to be read via a corresponding second direct memory access controller. The plurality of first descriptors and the plurality of second descriptors are stored within a unified descriptor memory for subsequent access by the corresponding first and second direct memory access controllers. 
     The plurality of first descriptors is fetched from memory and stored within the unified descriptor memory in response to the corresponding first direct memory access controller generating a request for one of the plurality of first descriptors. Similarly, the plurality of second descriptors are fetched from memory and stored within the unified descriptor memory in response to the corresponding second direct memory access controller generating a request for one of the plurality of second descriptors. 
     Subsequent to fetching and storing the plurality of first descriptors and the plurality of second descriptors into the unified descriptor memory, one of the first or second direct memory access controllers may generate an additional request for a descriptor. Upon generation of the additional request, the unified descriptor memory is first checked to determine whether the additionally requested descriptor is contained therein. If the additionally requested descriptor is not contained within the unified descriptor memory, then the additionally requested descriptor is fetched from memory along with a block of other descriptors, and stored within the unified descriptor memory. Subsequent thereto, the additionally requested descriptor is forwarded to the requesting direct memory access controller from the unified descriptor memory. 
    
    
     BRIEF DESCRIPTION OF THE DRAWINGS 
     Other objects and advantages of the present invention will become apparent upon reading the following detailed description and upon reference to the accompanying drawings in which: 
     FIG. 1 is a block diagram of a computer system employing the present invention; 
     FIG. 2 is a block diagram of a host control interface shown in FIG. 1.; 
     FIG. 3 is a block diagram of a descriptor fetch unit shown in FIG. 2; 
     FIG. 4 illustrates the general contents of a typical descriptor; and 
     FIG. 5 is a flow chart illustrating operational aspects of the descriptor fetch unit shown in FIG.  3 . 
    
    
     While the invention is susceptible to various modifications and alternative forms, specific embodiments thereof are shown by way of example in the drawings and will herein be described in detail. It should be understood, however, that the drawing and detailed description thereto are not intended to limit the invention to the particular form disclosed, but on the contrary, the intention is to cover all modifications, equivalents and alternatives falling within the spirit and scope of the present invention as defined by the appended claims. 
     DETAILED DESCRIPTION OF THE PREFERRED EMBODIMENTS 
     FIG. 1 is a block diagram of an example computer system employing one embodiment of the present invention. As illustrated in FIG. 1, the computer system  10  includes a central processing unit (CPU)  12  which is coupled to a bus bridge  16  through a CPU local bus  14 . The bus bridge  16  includes memory control logic for local data transfer and is coupled to memory  22  via memory bus  20 . Bus bridge  16  also interfaces to peripheral component interconnect (PCI) bus  24 . FIG. 1 shows two PCI devices  26  and  28  coupled to PCI bus  24 . PCI device  26  is defined by a PCI interface core  32  and a 1394 open host controller interface (OHCI) core  34 . Cores  32  and  34  are coupled in series between PCI bus  24  and 1394 link  30 . 1394 link  30  is coupled to 1394 bus  36 . Multiple I/O devices may be coupled to the 1394 bus  36 . 
     The 1394 OHCI core  34  is an implementation of the link layer protocol of the 1394 serial bus defined by the IEEE 1394-1995 high performance serial bus specification which is incorporated herein by reference. The 1394 OHCI  34  includes DMA engines for high performance data transfer between I/O devices coupled to the 1394 bus  36  and memory  22  via PCI bus  24 . 
     The 1394 bus  36  and the 1394 OHCI core  34  support two types of data transfer: asynchronous and isochronous. The asynchronous and isochronous data transfers are further distinguished by type. Asynchronous data transfer places emphasis on guaranteed delivery of data between I/O devices coupled to the 1394 bus  36  and memory  32 , with less emphasis on guaranteed timing. Isochronous data transfer is the opposite, with the emphasis on the guaranteed timing of the data, and less emphasis on delivery. 
     The 1394 OHCI core  34  can transmit and receive data packets defined by the 1394 standard. Packets to be transmitted are read out of memory  22  and received packets are written into memory  22 , both using DMA transfer. The 1394 OHCI core  34  is capable of performing a cycle master function as defined by the 1394 standard. Conceptionally, the 1394 OHCI core  34  can support one DMA controller for each isochronous transmit and each isochronous receive. DMA controllers can be implemented to support up to  32  different DMA channels, referred to as DMA contexts. Further details of the 1394 OHCI core  34  can be found within the 1394 open host controller interface specification, 1996, 1997 provided by the promoters of the 1394 OHCI, which is incorporated herein by reference. The present invention will be described with application to the 1394 OHCI specification. However, it is to be understood that the present invention should not be limited thereto. Rather, the present invention has application to other systems in which data transfers between memory and I/O devices occur using DMA transfer defined by descriptors or other commands initiating the data transfer. 
     The 1394 OHCI specification describes the implementation of a minimum host controller implementation which consists of at least 12 descriptor based DMA controllers or contexts for the following functions: 
     Asynchronous request transmit, 
     Asynchronous response transmit, 
     Isochronous transmit (four contexts), 
     Asynchronous request receive, 
     Asynchronous response receive, and 
     Isochronous receive (four contexts). 
     A DMA controller (not shown in FIG. 1) is provided for each of the contexts identified above. As noted, descriptors generated by the software executing on the CPU  12 , control the DMA controllers. These descriptors are temporarily stored within memory  22  for subsequent retrieval by the DMA controllers upon request. In the prior art, the DMA controllers retrieved the descriptors one at a time. Upon retrieval of the descriptors, the DMA controllers transfer data in accordance with variables contained within the descriptors. The present invention seeks to obtain higher DMA data transfer speed by reading or retrieving descriptors from memory  22  in large chunks versus the prior art method of reading descriptors from memory  22  one at a time. Further, each prior art DMA controller has a memory for storing corresponding descriptors. However, having a distinct memory in each DMA controller increases the size and complexity of the 1394 OHCI core  34 . For example, since there are at least twelve different contexts requiring twelve different descriptors, at least 12 different memories within corresponding DMA controllers are needed for each context. The present invention seeks to unify descriptor storage and fetching operation, therefore reducing the size and complexity of the 1394 OHCI core  34 . Thus, instead of having separate descriptor memory and separate logic gates for controlling access to the descriptor memory within each DMA controller, as in the prior art, the present invention provides a single descriptor memory (not shown in FIG. 1) for storing descriptors for each context used by various DMA controllers. Further, the present invention seeks to avoid fetching descriptors from memory  22  one at a time. Rather, the present invention fetches blocks of descriptors from memory  22  for storage in the unified descriptor memory in response to a request for a single descriptor from a DMA controller. Fetching blocks of descriptors reduces the number of transactions and latencies over PCI bus  24 . 
     FIG. 2 is a block diagram of the 1394 OHCI core  34  shown in FIG.  1 . The 1394 OHCI core  34  includes a host bus interface  40 , DMA controllers  42   a - 42   f , and descriptor fetch unit  44  operating in accordance with the present invention. Additionally, FIG. 2 shows the 1394 link  30  of FIG.  1 . The host bus interface  40  is coupled to memory  22  via PCI interface core  32  and PCI bus  24  (not shown in FIG.  2 ). Further, host bus interface  40  is coupled to each of the DMA controllers  42   a - 42   f  and descriptor fetch unit  44 . Descriptor fetch unit  44  is coupled to each of the DMA controllers  42   a - 42   f . Each of the DMA controllers  42   a - 42   f  is coupled to the 1394 link  30 . 
     DMA controller  42   a  defines the asynchronous request transmit context set forth above. DMA controller  42   b  defines the asynchronous response transmit set forth above. DMA controller  42   c  defines the isochronous transfer set forth above. Further, DMA controller  42   c  is understood to define four distinct contexts of isochronous transmit. DMA controller  42   d  defines the asynchronous request receive context set forth above. DMA controller  42   e  defines the asynchronous response receive context set forth above. Finally, DMA controller  42   f  defines the isochronous receive context set forth above. Further, DMA controller  42   f  is understood to define four distinct contexts of isochronous receive. 
     DMA controllers  42   a - 42   f  generate requests for descriptors used in transferring data between memory  22  and I/O devices coupled to the 1394 bus  36 . Upon receipt of the descriptors, the DMA controllers initiate data transfer in accordance with the descriptors. Descriptor fetch unit  44  is provided to facilitate descriptor prefetching and processing for all 12 contexts in accordance with the present invention. More particularly, the descriptor fetching unit  44  is responsible for prefetching (i.e., reading from memory  22 ) and maintaining descriptors (i.e., flushing invalid descriptors) for all 12 contexts. Descriptor fetching unit  44  fetches and stores descriptors from memory  22  prior to DMA controller requests for the descriptors. The descriptors are stored within the descriptor fetching unit  44  until needed by requesting DMA controllers. 
     The descriptor fetch unit  44  operates in one of two modes, configurable for each individual context. In mode zero (strict-z), the descriptor fetch unit  44  fetches descriptors for a context using a z value of a command pointer of the particular context. The z value provides the number of descriptors in a current descriptor block stored in memory  22 . The descriptor fetching unit  44  will fetch additional descriptors beyond those required in the current descriptor block to utilize optimal DMA burst sizes on the host bus. In mode one (contiguous), the descriptor fetch unit will use large DMA bursts to continually maintain descriptors available for context processing for descriptor lists which are contiguous in memory. Upon detecting a noncontiguous address, the descriptor fetching unit will flush all descriptors, and begin fetching descriptors from a new memory address. Additionally, the descriptor fetching unit  44  provides error reporting for each context. Errors are reported for host bus errors (illegal memory address or data parity failure) or for a loaded command porter whose z value is zero. 
     Generally, the descriptor fetch unit  44  operates to fetch and store groups of descriptors from memory  22  in response to requests from DMA controllers  42   a - 42   f  for individual descriptors. For example, a first plurality of descriptors from memory  22  corresponding to, for example, the asynchronous request transmit context set forth above, is fetched by and stored in descriptor unit  44  in response to the asynchronous request transmit DMA controller  42   a  issuing a request for a single descriptor. Each of these plurality of descriptors identifies an address within memory  22  where data is to be transferred via the corresponding asynchronous request transmit DMA controller  42   a . The descriptor fetch unit  44  then fetches and stores a second plurality of descriptors corresponding to, for example, the asynchronous response transmit context in response to the asynchronous response transmit context DMA controller  42   b  issuing a request for a descriptor. Thus, the descriptor fetch unit  44  fetches and simultaneously stores descriptors corresponding to several contexts. 
     Subsequent thereto, the asynchronous request transmit DMA controller  42   a  may generate an additional request for a descriptor. Rather than access memory  22 , the request is transmitted to the descriptor fetch unit  44 . If the descriptor fetch unit  44  contains the requested descriptor, the requested descriptor is read from the descriptor memory of the descriptor fetch unit  44  and provided to DMA controller  42   a . If the requested descriptor is not stored within the descriptor memory of the descriptor fetch unit  44 , the requested descriptor is read from memory  22 , stored within the descriptor memory of the descriptor fetch unit  44 , and then provided to DMA controller  42   a . 
     FIG. 3 is a block diagram of one embodiment of the descriptor fetch unit  44  of FIG. 2 operating in accordance with the present invention. The descriptor fetch unit  44  of FIG. 3 includes a descriptor fetch controller  50 , descriptor fetch context multiplexer  52 , descriptor fetch context arbiter  54 , descriptor memory  56 , context controllers  60   a - 60   l , descriptor read arbiter and controller  62 , and descriptor output  64 . 
     The descriptor fetch controller  50  is coupled to the host bus interface  40  (not shown in FIG.  3 ), the descriptor fetch context multiplexer  52 , the descriptor fetch context arbiter  54 , and the descriptor memory  56 . It is noted that in the embodiment shown in FIG. 3, the descriptor memory  56  is defined by a random access memory type structure. The descriptor fetch context arbiter  54  and the descriptor fetch context multiplexer  52  are each coupled to context controllers  60   a-l . The context controllers  60   a-l  are in turn coupled to descriptor read arbiter and controller  62 . Finally, descriptor memory  56  is coupled to both the descriptor read arbiter controller  62  and descriptor output  64 . 
     A request for a descriptor is generated and issued to one of the context controllers  60   a - 60   l  by one of the corresponding DMA controllers  42   a - 42   f  (not shown in FIG.  3 ). The descriptor request defines a pointer identifying a main memory address for the requested descriptor. The descriptor fetch unit  44  will issue a grant signal to the DMA controller requesting the descriptor when the requested descriptor is available on descriptor output  64 . Shown below is the interface between the context controllers  60   a-l  and the DMA controllers  42  shown in FIG.  2 . 
     
       
         
               
             
               
               
             
           
               
                   
               
               
                 Context Interface At Descriptor Fetching Unit 
               
               
                   
               
             
             
               
                   
               
             
          
           
               
                 input mode 
                 //Selects either Mode 0 (Strict-Z) or Mode 1 
               
               
                   
                 (Contiguous) 
               
               
                 input 
                 //Provided the command pointer to be loaded- 
               
               
                 command_pointer[31:0] 
                 qualified by load input 
               
               
                 input run 
                 //Enable context in arbitration for fetching and 
               
               
                   
                 reading of descriptors 
               
               
                 input load 
                 //Strobed to load new command pointer into 
               
               
                   
                 Context Controller 
               
               
                 input request 
                 //Asserted to request acces to next descriptor 
               
               
                 output grant 
                 //Asserted when access to next descriptor is 
               
               
                 output 
                 //Descriptor Data valid when grant is asserted 
               
               
                   
                 granted 
               
               
                 descriptor_data[63:0] 
               
               
                 output 
                 //Asserted upon detection of error, cleared upon 
               
               
                 processing_error 
                 deassertion of run input 
               
               
                   
               
             
          
         
       
     
     The descriptor fetch context arbiter  54  monitors the descriptor memory to identify contexts lacking descriptors stored within the descriptor memory  56 . In the event the descriptor fetch context arbiter identifies a context which lacks descriptors within the descriptor memory  56 , the descriptor fetch context arbiter assigns a fetch priority value to the next request seeking such a descriptor. 
     The descriptor fetch unit is coupled to the descriptor memory  56  and is configured to fetch blocks of descriptors from memory  22  for storage within the descriptor memory  56 . The descriptor blocks are fetched by the descriptor fetch controller  50  in separate data transfers from memory  22 . In each transfer, the descriptor fetch controller  50  transmits an address to memory  22 , and memory  22  responds thereto by sending a block of descriptors for storage in descriptor memory  56 . When descriptor fetch context arbiter assigns a highest priority value to a descriptor request, descriptor fetch context arbiter controls descriptor fetch context multiplexer  52  thereby muxing the descriptor fetch address assigned the highest in accordance thereto priority to fetch controller  50  from one of the context controllers  60   a-l.    
     The context controllers  60   a-l  are configured to concurrently receive several descriptor requests from the DMA controllers. In response to concurrently receiving several descriptor requests, descriptor memory  56  sequentially transmits descriptors to the DMA controllers concurrently requesting descriptors. Descriptor read arbiter and controller  62  is configured to arbiter the access to descriptor memory  56  when context controllers  60   a-l  concurrently receive several descriptor requests. 
     FIG. 4 shows the general contents of a typical descriptor. More particularly, FIG. 4 shows that a general descriptor includes an address in memory where data is to be transferred, the number of bytes to be transferred at that memory address and a pointer to the next descriptor. Generally, descriptors of the same context are stored in contiguous locations in memory  22 . 
     FIG. 5 is a flow chart illustrating operational aspects of the descriptor fetch unit shown in FIG.  3 . At step  70 , one of the context controllers  60   a-l  receives a descriptor request from a corresponding DMA controller. At step  72 , the context controller receiving the descriptor request generates an internal descriptor request identifying the memory location of the requested descriptor. The internal request is provided to the descriptor read arbiter and controller  62 , the descriptor fetch context arbiter  54  and the descriptor fetch context multiplexer  52 . As shown in step  74 , descriptor memory  56  is checked to determine whether the requested descriptor is stored therein. If the requested descriptor is within descriptor memory  56 , then at step  80  the requested descriptor is read out of memory  56  and provided to the requesting DMA controller via descriptor output  64 . However, if the requested descriptor is not within descriptor memory  56 , descriptor fetch context arbiter  84 , which is monitoring the contents of descriptor memory  56 , generates a request to fetch the requested descriptor as shown in step  82 . Descriptor fetch controller  50 , on receipt of the fetch request from descriptor fetch context arbiter  54 , initiates a fetch sequence whereby the requested descriptor and possibly additional descriptors of the same context are fetched in a block in a single data transfer from memory  22  and stored within a descriptor memory  56  as shown in steps  84  and  86 . Thereafter, the requested descriptor is provided to the requesting DMA controller via the descriptor output  64  as shown in step  90 . 
     Numerous variations and modifications will become apparent to those skilled in the art once the above disclosure is fully appreciated. It is intended that the following claims be interpreted to embrace all such variations and modifications.