This application is a continuation application of U.S. Reissue application No.09/932,846, filed Aug.17,2001, now U.S. Pat. No. RE.38,641, which is a reissue application of U.S. Pat. No.5,940,600, issued Aug.17,1999.
Notice: More than one reissue application has been filed for the reissue of U.S. Pat. No.5,940,600. The reissue applications are application Nos.10/845,060 (the present application), filed on May12,2004;09/932,292, filed on Aug.17,2001, now RE38,641; and11/503,541, filed Aug.11,2006.
FIELD OF THE INVENTIONThis invention relates generally to data communications and, more particularly, to data communications within a computer bus architecture.
BACKGROUNDThe components of a computer system are typically coupled to a common bus for communicating information to one another. Various bus architectures are known in the prior art, and each bus architecture operates according to a communications protocol that defines the manner in which data transfer between components is accomplished.
The Institute of Electrical and Electronic Engineers (IEEE) has promulgated a number of different bus architecture standards including IEEE standards document 1394, entitled Standard for a High Performance Serial Bus (hereinafter “IEEE 1394 Serial Bus Standard”). A typical serial bus having the IEEE 1394 standard architecture is comprised of a multiplicity of nodes that are interconnected via point-to-point links, such as cables, that each connect a single node of the serial bus to another node of the serial bus. Data packets are propagated throughout the serial bus using a number of point-to-point transactions, wherein a node that receives a packet from another node via a first point-to-point link retransmits the received packet via other point-to-point links. A tree network configuration and associated packet handling protocol ensures that each node receives every packet once. The serial bus of the IEEE 1394 Serial Bus Standard may be used as an alternate bus for the parallel backplane of a computer system, as a low cost peripheral bus, or as a bus bridge between architecturally compatible buses.
A communications protocol of the IEEE 1394 Serial Bus Standards specifies two primary types of bus access: asynchronous access and isochronous access. Asynchronous access may be either “fair” or “cycle master”. Cycle master access is used by nodes that need the next available opportunity to transfer data. Isochronous access is used by nodes that require guaranteed bandwidth, for example, nodes transmitting video data. The transactions for each type of bus access are comprised of at least one “subaction”, wherein a subaction is a complete one-way transfer operation.
In the case of isochronous data transfers and computer systems conforming to the IEEE 1394 Serial Bus Standard, the prior art has attempted to manage the flow of data using dedicated drivers. Drivers are software entities associated with various components of a computer system and, among other functions, operate to configure the components and allow the components to be operable within the overall system. The drivers of the prior art have allowed for the transmission of video data from a digital video camera to a monitor, but have not allowed for real time video transmissions in a multi-tasking environment. In particular, the drivers of the prior art have required that a bus controller, e.g., the computer system's CPU, listen to a data channel at the exclusion of all other processes. As data arrives on the channel, it is stored in a buffer for later transmission to a frame buffer associated with a monitor. A new listen instruction must be issued for each separate isochronous data transmission. That is, if a single transmission corresponds to data for a single scan line of the monitor, for a display of five scan lines, five separate listen instructions are required. Because the data is being sent in real time, this system requires that the processor spend all of its time servicing the isochronous data transmissions, even if no data is currently being transmitted on the bus, without servicing any other tasks. It would, therefore, be desirable to have a means and method for a more efficient management of isochronous data channels in a computer system.
SUMMARY OF THE INVENTIONA computer implemented method of managing isochronous data channels in a computer system is described. In one embodiment, the computer system conforms to the IEEE 1394 Serial Bus Standard. An isochronous channel is established within the computer system and includes a linked list of buffers. The linked list of buffers corresponds to display locations on a display which is part of the computer system. Once the linked list of buffers has been established, the computer system executes instructions which allow for the transmission of isochronous data across the channel. Each time a sender node, a video camera in one embodiment, is ready to transmit data, an interrupt is generated which causes the processor to execute instructions to manage the flow of data from the sender. The processor transfers the data transmitted by the camera to a storage location within the linked list of buffers. Ultimately, this data is transferred to a frame buffer associated with a display. This interrupt driven management allows the processor to perform other tasks when no data is being transmitted over the isochronous channel.
In another embodiment, the data transfer is DMA driven rather than interrupt driven. For this embodiment, the isochronous channel, including the linked list of buffers, is established and the process is initiated. Data transmitted by the video camera is transferred to memory locations within the linked list of buffers by the DMA hardware and then ultimately transferred to a frame buffer for display.
In yet another embodiment, the central processing unit (CPU) for the computer system establishes an isochronous channel between a sender node and one or more receiver nodes, not including the CPU itself. For this embodiment, no linked list of buffers is required as data from the sender node is transferred directly to the receiver node.
BRIEF DESCRIPTION OF THE DRAWINGSThe present invention is illustrated by way of example and not limitation in the figures of the accompanying drawings, in which like references indicate similar elements and in which:
FIG. 1 illustrates a computer system having a serial bus made up of a number of nodes;
FIG. 2 shows a display screen of a monitor of a computer system having an open window for the display of video information;
FIG. 3 shows a linked list of buffers in accordance with one embodiment;
FIG. 4 shows a linked list of buffers which support conditional branching according to one embodiment; and
FIG. 5 is a flow diagram illustrating the management of an isochronous data channel in a computer system according to one embodiment.
DETAILED DESCRIPTIONAs described herein, a method and apparatus for managing isochronous data channels in a computer system is provided.FIG. 1 shows acomputer system5 utilizing a serial bus incorporating the methods and apparatus of the present invention. The serial bus may generally be constructed in accordance with the IEEE 1394 Serial Bus Standard.
Thecomputer system5 ofFIG. 1 comprises a central processing unit (CPU)10, amonitor18, aprinter26, avideo camera32, a video cassette recorder (VCR)36, akeyboard42, and amouse46. TheCPU10 includes an internalhard drive14 and a memory (not shown). Each of the devices of the computer system is coupled to a local node of the serial bus. In general, the device to which a node is coupled acts as the “local host” for that node. For example, theCPU10 is the local host for theCPU node12; themonitor18 is the local host for themonitor node16; theprinter26 is the local host for theprinter node24; thevideo camera32 is the local host for thevideo camera node30; theVCR36 is the local host for theVCR node34; thekeyboard42 is the local host for thekeyboard node40; themouse46 is the local host for themouse node44; and the internalhard drive14 is the local host for the internalhard drive node15. Those skilled in the art will appreciate that it is not always necessary for every node to have a local host, nor is it necessary that the local host always be powered.
A point-to-point link such ascable20 is used to connect two nodes to one another.CPU node12 is coupled to internalhard drive node15 by aninternal link21, to monitornode16 bycable20, and tokeyboard node40 by acable20e. Thekeyboard node40 is coupled to themouse node44 by a cable20f. Themonitor node16 is coupled to the nodes of the other peripherals (not shown) bycable20a and to theprinter node24 bycable20b. Theprinter node24 is coupled to thevideo camera node30 bycable20c and to theVCR node34 bycable20d. Each of the cables20-20f and theinternal link21 may be constructed in accordance with the IEEE 1394 Serial Bus Standard and may include a first differential signal pair for conducting a first signal, a second differential signal pair for conducting a second signal, and a pair of power lines.
Each of thenodes12,15,16,24,32,34,40 and44 may have identical construction, although some of the nodes, such asmouse node44, can be simplified because of their specified functions. Thus, the nodes can be modified to meet the needs of a particular local host. For example, each node may have one or more ports, the number of which is dependent upon its needs. For example,CPU node12, as illustrated, has 3 ports, while themouse node44 has only 1 port.
Referring now toFIG. 2, one example of the transfer of isochronous data withincomputer system5 will be described. Upon review of the entire specification, those skilled in the art will appreciate that this example is used to describe the methods of the present invention and is only one of many applications of the process described below.FIG. 2 shows the display screen ofmonitor18. Withindisplay screen48, awindow50 is shown.Window50 is implemented using programming techniques well known in the art and is used for the display of real-time video data in accordance with the methods of the present invention. In particular,window50 defines the boundary within which the real-time video data will be displayed ondisplay screen48. As shown inFIG. 2,window50 consists of five scan lines, each having an arbitrary length L. Those skilled in the art will appreciate that window sizes of other dimensions could be used.
In general,window50 will be generated by an application program running oncomputer system5. An example of such an application program is the QuickTime® program available from Apple Computer, Inc. of Cupertino, Calif. In such a case,computer system5 may comprise the familiar Macintosh® computer system also available from Apple Computer, Inc. The video data to be displayed inwindow50 ondisplay screen48 will generally be obtained from a frame buffer (not shown) associated withmonitor18. The techniques for displaying data stored in a frame buffer on the display screen of a monitor are well-known in the art.
In accordance with the methods of the present invention, real-time video data fromvideo camera32 is to be displayed withinwindow50 ondisplay screen48. The real-time video data generated byvideo camera32 will comprise isochronous data packets in accordance with the IEEE 1394 Serial Bus Standard. Each of these isochronous data packets will include header information and payload information. The header information is used for routing the video data to themonitor18 and for error detection and correction. The payload data comprises the video data to be displayed withinwindow50.
As indicated above, the prior art has attempted to manage this flow of isochronous data fromvideo camera32 to monitor18 as follows. Once the application program has generatedwindow50 withindisplay screen48,CPU10 executes instructions which cause it to listen on one of its associated ports. These instructions are typically stored onhard drive14 and are loaded into system memory (not shown) upon initialization. When thevideo camera32 has data to transmit, thevideo camera node30 generates the isochronous data packets and transmits them over the serial bus in accordance with the IEEE 1394 Serial Bus Standard.CPU node12 detects the presence of the isochronous data packets and strips the payload information from these packets. The payload information is placed in a buffer in the computer memory for later transmission to the frame buffer associated withmonitor18. If, for example, one transmission fromvideo camera node30 corresponded to data for a single scan line ofwindow50, five separate listen operations would be required to receive the video data associated with one frame to be displayed withinwindow50. To accommodate the real-time transmission nature of the video data,CPU10 would be required to constantly listen to the bus for isochronous data transmissions fromvideo camera node30. That is,CPU10 could not undertake to execute additional tasks, for example menu level tasks, as is common in multi-tasking environments.
To overcome this problem of the prior art, the present invention uses a linked list of buffers such as those shown in FIG.3.FIG. 3 shows a linked list of buffers which reside in computer memory. In keeping with the above described example, five buffers comprise the linked list, one for each scan line ofwindow50. Each of the buffers contains a pointer, next, which points to the address of the following buffer in the linked list. It will be appreciated that these addresses correspond to memory locations withincomputer system5. Each of the buffers also contains an address “buffer n”. This address corresponds to the start of a scan line ofwindow50. The address ofbuffer1 corresponds to the start ofscan line1 and so on. Each of the buffers in the linked list also contains a length parameter which corresponds to the scan line length ofwindow50.
An exemplary structure of these isochronous channel buffers is shown below:
|  | 
| typedef | struct IsochChannelBufferStruct | IsochChannelBuffer | 
|  |  | *IsochChannelBufferPtr; | 
| struct | IsochChannelBufferStruct | 
| { | 
|  | IsochChannelBuffer Ptr | pBranchChannelBuffer, | 
|  | Ptr | buffer | 
|  | UInt32 | length; | 
| ); | 
|  | pBranchChannelBuffer | Branch pointer to next | 
|  |  | channel buffer. When a | 
|  |  | branch condition is met, its | 
|  |  | corresponding branch pointer | 
|  |  | is used to select the next | 
|  |  | buffer. | 
|  | buffer | Pointer to buffer memory. | 
|  | length | Length of above | 
|  |  | buffer. | 
|  | 
The linked list of buffers corresponds to a particular isochronous channel. The isochronous channel is identified by a channel identification number (channel ID). The channel ID is maintained in a data record stored in thecomputer system5 memory and is used by the various application programs and driver routines as described below. The use of a common channel ID allows the interoperation of application programs, driver routines, and other software routines which otherwise may not be capable of operating together.
One example of the use of a linked list of buffers according to the methods of the present invention as shown inFIG. 3 will now be described. The example is presented with reference to process100 illustrated in FIG.5 and assumes that real-time video data is to be transmitted fromcamera32 and displayed within awindow50 onmonitor18. To accommodate the transmission of the real-time video (i.e., isochronous) data, atstep102 an application program running oncomputer system5 issues instructions which causeCPU10 to create an isochronous data channel identified by “channel ID”.
Upon receiving the instruction to create the isochronous channel ID, theCPU10 will execute instructions to create such a channel. This may include a channel bandwidth and a preferred speed. An exemplary instruction is shown below.
|  | 
| OSStatus | AllocateIsochronousChannelID  ( | 
|  | IsochChannelID | “pIsochChannelID, | 
|  | UInt32 | bandwidth, | 
|  | UInt32 | preferredSpeed); | 
| <-- | pIsochChannelID | Returned reference to this channel for use | 
|  |  | is subsequent isochronous service calls. | 
| --> | bandwidth | Bandwidth required for this channel. | 
| --> | preferredspeed | Preferred speed for this channel. | 
|  | 
This instruction creates an isochronous channel ID that is used by the various isochronous service routines described below. The channel is initialized with the required bandwidth and the preferred speed. The actual channel speed may be less than the preferred speed depending on the maximum speed of the devices that are later attached to the channel. The isochronous channel is a data path between nodes which will be added as channel clients as described below.
Once a channel has been established, the application program can issue instructions in order to add interested clients to the isochronous channel specified by channel ID. These clients are typically software driver routines associated with the devices, such asvideo camera32, which take part in the display of the real-time video data to be transferred. The client software will take part in and be notified of all events associated with the given isochronous channel specified by the channel ID. Accordingly, atstep104, the application program instructs the driver associated withvideo camera32 to send real-time video data over the channel identified by “channel ID” and display the data withinwindow50 onmonitor18.
In response to the instructions issued by the application program, the camera driver will configure thecamera32 such that thecamera32 will transmit video data over the channel specified by “channel ID”. The camera driver will also establish a linked list of buffers, as described above, and assign the buffers to “channel IID”. The linked list of buffers will act as storage locations for the video data to be transmitted bycamera32.
An exemplary instruction for adding clients to “channel ID” is shown below
|  | 
| OSStatus | AddIsochronousChannelClient ( | 
|  | IsochChannelID | isochChannelID, | 
|  | DriverID | driverID, | 
|  | Boolean | clientIsTalker); | 
| --> | isochChannelID | Reference to the isochronous | 
|  |  | channel to add the given client to. | 
| --> | driverID | Reference to the driver client to | 
|  |  | add to the given channel. | 
| --> | clientIsTalker | If the given client will be a sender | 
|  |  | node (i.e., a node that will be “doing | 
|  |  | the talking” in IEEE 1394 pirlance) | 
|  |  | this should be set to true. Otherwise | 
|  |  | it should be set to false (i.e., if the | 
|  |  | node will be a listener). | 
|  | 
This instruction adds the driver specified by “DriverID” as a client to the isochronous channel specified by IsochChannel ID”. The client will be called to perform its role in initializing, starting and stopping the given isochronous channel. The client will also be informed of all channel events such as bus resets.
For the example ofFIG. 5, atstep106 the video camera driver adds the video camera as a sender client for the isochronous channel specified by channel ID. Then, atstep108, the camera is added as a receiver (listener) client of the channel specified by channel ID. The camera driver is added as both a talker and a listener so that the driver can both start the camera sending data and set up the CPU to receive the data for display.
Next, atstep110, the camera driver sets up the linked list of buffers described above. Once this is accomplished, a port onCPU node12 can be set to listen to the isochronous channel. An exemplary routine for this procedure is shown below.
|  | 
| OSStatus | AllocateLocalIsochronousPort ( | 
|  | ReferenceID | referenceID, | 
|  | IsochPortID | “pIsochPortID, | 
|  | UInt32 | ChannelNum, | 
|  | UInt32 | speed, | 
|  | Boolean | talking); | 
|  | --> | referenceID | Reference used to indicate which | 
|  |  |  | node to allocate port on. | 
|  | >-- | pIsochPortID | Returned reference to this prot for use | 
|  |  |  | in subsequent port service calls. | 
|  | --> | channelNum | Channel number for this port. | 
|  | --> | speed | Speed for this port. | 
|  | --> | talking | If false, allocate a port for listening, | 
|  |  |  | otherwise allocate a port for talking. | 
|  |  | 
FIG. 5 illustrates the case where a user also wishes to record video data transmitted bycamera32 for a later playback. To accommodate this, atstep112 the application program issues instructions to establish the VCR driver as a receiver client of the channel specified by “channel ID”. In response, the VCR driver adds itself as a channel client atstep114.
Once all of the clients have been added to the isochronous channel specified by channel ID, a start instruction can be issued atstep116. This instruction, an example of which is given below, calls all of the given isochronous channel's clients (i.e., the driver software associated with the various devices) to start the given isochronous channel. Each listening client is first instructed to listen to the channel. Once all of the listeners are ready, the sender client is instructed to start the transmission of data.
|  | 
| OSStatus | StartIsochronousChannel ( | 
| IsochChannelID | isochChannelID); | 
| --> isochChannelID | Reference to the isochronous channel to | 
|  | start. | 
|  | 
As shown inFIG. 5 then, once the start command is issued by the application program, a service routine calls each channel client atstep118. Atstep120, the camera driver configures the local port onCPU node12 to start listening to the isochronous channel specified by channel ID. An exemplary instruction is shown below.
|  | 
| OSStatus | StartLocalIsochronousPort ( | 
|  | IsochPortActionParamsPtr | pIsochPortActionParams); | 
| <--> | pIsochPortActionParams | Pointer to parameter block. | 
|  | --> | controlFlags | Flags used to control the request. | 
|  | <-- | status | Current status of request. | 
|  | --> | completionProc | Procedure to call upon comple- | 
|  |  |  | tion of request. | 
|  | --> | completionProcData | Data to be used by | 
|  |  |  | completionProc. | 
|  | --> | isochPortID | Reference to local port to start. | 
|  | --> | pIsochChannelBuffer | Isochronous channel buffer chain | 
|  |  |  | to talk/listen into/from. | 
|  | --> | actionSync | Sync event to start on. | 
|  |  | 
This instruction causes the local port specified by isoch-PortID to start listening (for the example of
FIG. 5) on its isochronous channel using the buffer chain previously established and specified by pisochChannelBuffer (i.e., the starting address of
Buffer1 in FIG.
3).
Similarly, atstep122 the VCR driver programs theVCR36 to start listening to the isochronous channel specified by channel ID. Once this is completed, the service routine issues instructions telling the camera driver toprogram camera32 to start sending data over the isochronous channel. Atstep126, the camera driver does so.
At this point,CPU10 may continue with other instructions as indicated bystep130. For example,CPU10 may respond to menu level instructions initiated by a user or execute commands for a selected foreground application. Whenvideo camera32 transmits data on the isochronous channel specified by a channel ID, the CPU receiving the data generates an interrupt. The interrupt is recognized atstep128 andprocedure100 moves to step132 where the interrupt causes theCPU10 to execute instructions which transfer the incoming isochronous data into an appropriate buffer within the linked list. TheCPU10 then returns from the interrupt to complete or continue with any tasks. For the second embodiment described above, a DMA transfer is initiated to transfer the data without interrupting theCPU10. Subsequently, data is transferred from the buffers which comprise the linked list to a frame buffer associated withmonitor18 for eventual display ondisplay screen48 withinwindow50. This process continues until an isochronous channel stop instruction is issued.
Stopping the transmission of isochronous data is similar to the starting process. This time, however, a stop command is issued which calls all of the given channel's clients as follows. First, the stop command calls the sending client to stop sending data on the channel. Once the sender stops, the stop command calls each of the listening clients to stop listening.
Those skilled in the art will recognize that the simple linked list configuration shown inFIG. 3 is subject to certain errors. For example, the linked list shown inFIG. 3 hasbuffer1 corresponding to scanline1 ofwindow50,buffer2 corresponding to scanline2 ofwindow50, and so on. Under normal operating conditions, the real-time video data intended for the top of the frame inwindow50 will be stored inbuffer1, corresponding to scanline1. Typically, the top-of-frame (ToF) data is tagged to indicate it as such. However, when errors in the video data stream occur, for example a garbled transmission, using the linked list approach ofFIG. 3 it is possible that one line worth of data could be missed and, for example, the top-of-frame data could then be placed in the buffer corresponding to scanline5. In such a case, the ultimate picture displayed withinwindow50 would appear with the top-of-frame data at the bottom of the screen instead of the top of the screen. Such a condition is generally unacceptable.
To account for these types of errors, a more complex linked list of buffers is used. This more complex scheme is shown in FIG.4. The linked list of buffers shown inFIG. 4 support conditional branching. That is, the linked list contains pointers which do not necessarily correspond to the succeeding buffer in the chain. Instead, the linked list supports pointers (next1) which point back to the first address of the first buffer in the linked list (or, potentially, any other buffer, as desired and depending upon the branch condition described below). Associated with the pointer next1 is a data field cond1. The data field cond1 may, for example, correspond to a top-of-frame indication. Thus, when real-time video data is received over the isochronous channel, if the data indicates that it is meant for the top-of-frame inwindow50, the linked list will point to the starting address of the buffer associated withscan line1. In this way, top-of-frame data will always be displayed at the top ofwindow50.
Where the video data received does not have a top-of-frame indication, the linked list will point to the next buffer in the chain. In this way, the situation described above where the data is displayed with the top-of-frame at the bottom of the window is avoided. Those skilled in the art will appreciate that other branching conditions, such as branch on fill or branch on synch, can also be implemented.
An exemplary structure of these isochronous channel buffers is shown below:
|  | 
| typedef struct IsohChannelBufferStruct | IsochChannelBuffer | 
| structIsochChannelBufferStruct | *IsochChannelBufferPtr; | 
| { | 
|  | IsochChannelBufferPtr | pBranchChannelBuffer; | 
|  | IsochChannelBufferPtr | pBranch2ChannelBuffer; | 
|  | Ptr | buffer; | 
|  | UInt32 | length; | 
|  | UInt32 | offset; | 
|  | UInt32 | status; | 
|  | UInt32 | branch1Conditionals; | 
|  | UInt32 | branch1Data; | 
|  | UInt32 | branch1State; | 
|  | UInt32 | branch2Conditionals; | 
|  | UInt32 | branch2Data; | 
|  | UInt32 | branch2State; | 
|  | IsochChannelHandlerProcPtr | isochChannelHandler; | 
|  | UInt32 | isochChannelHandlerData; | 
|  | pBranch1ChannelBuffer | Branch1 pointer to next channel | 
|  |  | buffer. When a branch condition is | 
|  |  | met, its corresponding branch pointer | 
|  |  | is used to select the next buffer. If | 
|  |  | both branch conditions are met | 
|  |  | simultaneously, branch1 will take | 
|  |  | precedence. | 
|  | pBranch2ChannelBuffer | Branch2 pointer to next channel | 
|  |  | buffer. | 
|  | buffer | Pointer to buffer memory. | 
|  | length | Length of above buffer. | 
|  | offset | Current offset into above buffer. | 
|  | status | Status of this buffer. | 
|  | branch1Conditionals | Conditions to meet to take branch1. | 
|  | branch1Data | Data to use to further specify | 
|  |  | branch1 conditions. | 
|  | branch2Conditionals | Conditions to meet to take branch2. | 
|  | branch2Data | Data to use to take branch2 | 
|  |  | conditions. | 
|  | branch2State | Current state of branch2 condition. | 
|  | isochChannelHandler | Handler to call when a branch is | 
|  |  | taken. | 
|  | isochChannelHandlerData | Data for above handler to use for its | 
|  |  | own purposes. | 
|  |  | 
The channel handler field within each of the buffers of the linked list provides a means of accommodating data conversion. For example,video camera32 may transmit video data in YUV format However, monitor18 may require the data in RGB format. Thus, a conversion would be required to change the YUV data to RGB data before display. The channel handler can be a set of software instructions to be called whenever a particular channel branch is taken so that after a buffer is filled, the data stored in the buffer can be converted from YUV data to RGB data for display. Thus, the channel handler would specify an address which corresponds to instructions for performing a conversion routine.
Another example of when such a channel handler may be required is when compressed data is being transmitted over the serial bus. Before display, the data would need to be decompressed. The channel handler routine could be used to decompress the data in the manner described for the YUV to RGB translation described above. Other examples of the use of such channel handlers will be apparent to those skilled in the art.
Thus far, the present invention has been described with the assumption that theCPU10 will manipulate data transferred across the isochronous channel (i.e., the CPU transfers the data to the linked list of buffers within system memory for later transfer to a frame buffer). This need not, however, be the case. In other embodiments, theCPU10 can establish the isochronous channel without becoming part of the channel. For example, in the situation where a user wishes to record video data produced bycamera32 on a video cassette, the isochronous channel can be established betweenonly video camera32 andVCR36. In this example, one driver might be associated with thevideo camera32 and a second driver might be associated with theVCR36. The camera driver would establish the channel ID and add thecamera32 as a sender client in the manner described above. The camera driver would then call the VCR driver and would pass a reference to the channel ID. The VCR driver would add theVCR36 as a listener client as described above. Once all of the clients have been added to the channel, the “start” instruction can be issued as described above. No linked list of buffers is required because theVCR36 can record the video data directly (it need not be in frames). Now, isochronous data (i.e., video data) will be transmitted from thecamera32 to theVCR36 without interrupting the CPU10 (which is not a client of the isochronous channel). Those skilled in the art will appreciate that any number of clients can be added to the isochronous channel in this fashion to accommodate the required data transfer.
Although the methods of the present invention have been described with reference to the use of a linked list of buffers at the receiving node, those skilled in the art will appreciate that a similar configuration of buffers could be used at the sending node. In such an embodiment, isochronous data would be stored in a linked list of buffers similar to that described above and transmitted over the isochronous channel as network conditions permit.
Thus a system and method for managing isochronous data channels within a computer system has been described. In the foregoing specification, the invention has been described with reference to specific exemplary embodiments thereof. It will, however, be appreciated by those skilled in the art that various modifications and changes may be made thereto without departing from the broader spirit and scope of the invention as set forth in the appended claims. The specification and drawings are accordingly, to be regarded in an illustrative rather than a restrictive sense.