Abstract:
Methods and computer systems provide for the selection of a DSDT that accurately describes a current configuration of the computer system. Because the system configuration can change over time, such as due to hardware malfunctions or the addition or removal of hardware requiring a BIOS interface to software, multiple DSDTs are available for selection so that for each computer system configuration, an appropriate DSDT is available. Upon boot-up, the hardware of the computer system is analyzed to determine the set of available North Bridge chipset devices. An appropriate DSDT is then selected from a set of multiple DSDTs for the current computer system configuration.

Description:
CROSS REFERENCE TO RELATED APPLICATION 
   This application is a continuation of U.S. patent application Ser. No. 10/369,872 filed Feb. 19, 2003 now U.S. Pat. No. 7,076,648, and entitled “METHODS AND COMPUTER SYSTEMS FOR SELECTION OF A DSDT, which is expressly incorporated herein by reference in its entirety. 

   TECHNICAL FIELD 
   The present invention is related to computer system configuration. More particularly, the present invention is related to selection of a Differentiated System Description Table (“DSDT”), such as that defined by the Advanced Control and Power Interface (“ACPI”) v. 2.0 specification, that is appropriate for a current set of hardware of a computer system. 
   BACKGROUND 
   Computer systems have a firmware Basic Input/Output System (“BIOS”) to initialize the hardware and interface the hardware with the Operating System software. Although Operating Systems utilize device drivers for standard devices as the interface to the hardware, certain hardware devices of the computer such as the north bridge devices that are discussed below are not interfaced to the software through device drivers. The north bridge is a chipset of hardware that interfaces one or more processing units and system memory on one side and the peripheral subsystem on the other. This hardware is non-standard equipment of the computer system and does not follow industry specifications of such devices. The BIOS continues to handle the interfacing of these devices to the operating system. 
   To provide this interface to these devices not otherwise handled by a device driver, the BIOS conventionally contains a DSDT that provides at least some of the descriptions necessary to interface these devices to the software. The DSDT applies to a particular configuration of north bridge devices for the computer system, and the DSDT is a binary file that is generated during manufacturing of the BIOS for a known computer system configuration. Upon boot-up of the computer system, a pointer to the DSDT is included in a root system description table (“RSDT), which the operating system references to find the DSDT and learn the configuration of the system. 
   For certain computer systems such as high capacity computer servers, the north bridge may have many configurations which can be changed by a user or by a malfunction of a component of the north bridge device. For example, the Intel® i870 north bridge chipset provides up to four Scalability Node Controllers (“SNC”) which are the main components of the North Bridge, with each SNC linked to two Scalability Port Switches (“SPS”) where each SPS also links up to two Server Input/Output Hubs (“SIOH”). Each SNC can support up to four microprocessors and part of system memory. 
   Several examples of configurations for this north bridge are possible. In one example, a given system may use both SPS, all four associated SNC, and both SIOH. In another example, only a single SNC per SPS may be provided. In yet another example, the SPS may fail such that a single SNC is hardwired directly to the SIOH corresponding to the failed SPS. As an additional example, a user may choose to partition through the operating system the north bridge into two separate systems where each system has one SPS, one corresponding SIOH, and at least one corresponding SNC. Also, the number of SPS, SNC, and SIOH that is visible to the Operating System may be changed by the user adding or removing the hardware devices from the computer system. 
   Thus, the device configuration of the computer system may change after the computer system has reached the consumer. Because the BIOS conventionally has only one DSDT which provides the system description for one configuration of the computer system, a subsequent change to the computer system&#39;s configuration will result in the DSDT no longer being an accurate system description. The computer system may then function incorrectly due to the inaccurate DSDT. Where a particular unconventional configuration is requested by a customer, the manufacturer must then create a new DSDT for the BIOS to work with the requested configuration and this can be a difficult and time-consuming process. 
   SUMMARY 
   Embodiments of the present invention address these and other problems by providing multiple DSDTs. Having multiple DSDTs allows the appropriate DSDT for a current configuration of the computer system to be chosen without the DSDT having been analyzed by the Operating System, instead of providing a complicated ROM image space that requires ACPI Source Language (“ASL”) methods of choosing a correct Secondary System Description Table (“SSDT”). 
   One embodiment is a method of selecting a DSDT for use in a computer BIOS. The method involves, upon boot-up of the computer, analyzing the hardware of the computer to detect a set of north bridge chipset devices that are present. A store of multiple DSDTs is then accessed, and a DSDT applicable to the set of detected devices is detected from the store of multiple DSDTs. The detected DSDT appropriate for the hardware is then copied into memory of the computer, and a pointer to the DSDT in memory is then saved. 
   Another embodiment is a method for selecting a DSDT table in use by a computer BIOS. The method involves, upon a first boot-up, analyzing hardware of the computer to select a first DSDT table appropriate for a set of north bridge chipset devices that are found. The set of devices of the computer are then altered. Upon a next boot-up after altering the set of devices, the hardware of the computer is analyzed again to select a DSDT table appropriate for the altered set of devices that are found. 
   Another embodiment is a computer system. The computer system includes a set of north bridge chipset devices and a BIOS. The BIOS provides a store of multiple DSDTs and is configured to analyze hardware of the computer system to detect a set of devices that are present. The BIOS is also configured to access the store of multiple DSDTs and detect a DSDT applicable to the set of detected devices from the store of multiple DSDTs. The BIOS is further configured to copy the detected DSDT applicable to the set of detected devices into memory of the computer system and save a pointer to the copied DSDT within the memory. 
   Another embodiment is a computer system. The computer system includes a set of north bridge chipset devices and a BIOS that provides a store of multiple DSDTs. The BIOS is configured to, upon a first boot-up, analyze hardware of the computer system to select from the store of multiple DSDTs a first DSDT table appropriate for a set of devices that are found. The BIOS is also configured to, upon a next boot-up occurring after an alteration to the set of devices, analyze the hardware of the computer system to select from the store of multiple DSDTs a DSDT table appropriate for the altered set of devices that are found. 

   
     DESCRIPTION OF THE DRAWINGS 
       FIG. 1  shows a maximum north bridge chipset configuration and BIOS of a computer system according to one embodiment of the present invention. 
       FIG. 2  shows a minimum north bridge chipset configuration of the computer system of  FIG. 1  resulting from a malfunction or reconfiguration of hardware. 
       FIG. 3  illustrates the logical operations performed by the BIOS of the computer system of  FIG. 1  for embodiments where an appropriate DSDT is selected for the current computer system configuration. 
       FIG. 4  illustrates the logical operations performed by the BIOS for embodiments where the DSDT table is updated with device configuration information found by the BIOS during boot-up of the computer system. 
   

   DETAILED DESCRIPTION 
   Embodiments of the present invention allow the BIOS to provide an appropriate DSDT for use by the operating system so that the hardware described by the DSDT allows the operating system to utilize the hardware resources. Generally, the DSDT provides a description for computer system devices including the north bridge components that link the microprocessor(s) and memory to the south bridge where input/output devices such as a standard PCI bus bridge or any other Industry Standard bridges like LPC, ISA, or SCSI. The north bridge components and their relationship to one another are shown in  FIG. 1  for a computer system. 
   The north bridge  100  of  FIG. 1  shows a maximum configuration for an Intel® i870 chipset for the north bridge. The maximum configuration provides four SNCs, two SPSs, and two SIOHs. Each SNC provides channeling to up to four microprocessors and associated memory. Each SPS provides data traffic between SNCs and two SIOHs. The devices of this chipset provide up to seven functions on the PCI bus where the functions are pre-defined in the chipset manufacturer&#39;s internal design specification by a function number. For example, function 00 for an SNC of the i870 chipset corresponds to central processor unit (“CPU”) interface control registers while function 01 corresponds to Scalability Port SP interface control registers. 
   For the maximum configuration shown, all hardware components are included and no partition has been created. A Scalability Port (“SP”)  0  of a first SNC  102  is linked to an SP  0  of a first SPS  110 . An SP  1  of the first SNC  102  is linked to an SP  0  of a second SPS  112 . This scheme of linking one SNC SP to an available SP of the SPS  110  and another SP of the SNC to an available SP of the SPS  112  continues for the other three including SNC  104 , SNC  106 , and SNC  108 . An SP  4  of the SPS  110  is linked to an SP  0  of the SIOH  114  while an SP  5  of the SPS  110  is linked to an SP  0  of the SIOH  116 . This scheme is repeated for the other SPS  112 . 
   The SPS  110  and  112  store logical mappings so that each SPS can provide channels between Scalability Ports of the SNCs and Scalability Ports of the SIOH. The routing by the SPS is done so that the processor(s) and memory of the SNCs can be linked to the south bridge as necessary. For example, SPS  110  is responsible for channeling port  0  of each SNC to port  0  of each of the two SIOH devices while SPS  112  is responsible for channeling port  1  of each SNC to port  1  of each of the two SIOH devices. 
   A system administrator may choose to divide the computer system into two separate sections so that the single computer system can function as two independent computer systems. To do so, a physical partition  118  is created by programmatically eliminating links SNC0→1, SNC1→1, SNC2→0, SNC3→0, SIOH0→1, and SIOH1→0. Due to this partition  118 , SPS  110  begins to channel the SPs of the SNC  102  and the SNC  104  only to the SPs of the SIOH  114  while the SPS  112  begins to channel the SPs of the SNC  106  and SNC  108  only to the SPs of the SIOH  116 . So the system becomes two independent systems and that could be running two instances of the Operating System. When this occurs, the Operating System for one of the partitions must recognize that the mapping for SPS  110  no longer accesses the SNC  106 , SNC  108 , and SIOH  116 . Likewise, the Operating System for the other partition must recognize that the mapping for SPS  112  no longer accesses the SNC  102 , SNC  104 , and SIOH  114 . 
   To allow the operating system to recognize this change, the BIOS  120  must provide the operating system with a description of this configuration. This description is included in a DSDT  124  that will be stored by the BIOS  120  in system memory. Typically, the operating system accesses the DSDT  124  that has been stored in memory by the BIOS  120  by referencing a Root System Description Table (“RSDT”)  122 . A pointer to the RSDT is stored in the BIOS Runtime Image  120  at a predefined memory location known to the operating system. The RSDT  122  provides a pointer to the random access memory (“RAM”) location  128  of the computer where the appropriate DSDT  124  has been stored by the BIOS  120 . This is the ACPI reclaimable memory that the Operating System does not use for other purposes. 
   For embodiments where multiple DSDTs are stored by the BIOS  120  so that multiple system hardware configurations can be handled, such as partitions or malfunctioning hardware in the north bridge, the BIOS determines which DSDT of the group  126  of multiple DSDTs to point the Operating System to based on the available hardware that is detected at boot-up or re-start by operation of the BIOS  120 . Thus, the pointer in the RSDT  122  may change to point to a new DSDT  124  of the group  126  that has been copied to memory  128  when the configuration of devices changes. 
     FIG. 2  shows an example of a different north bridge configuration  200  for a computer system. In this north bridge configuration  200 , an SNC  202  is hardwired to an SIOH  204 . This may be the case where the SPS  206  has failed such that an internal failure mechanism of the SPS  206  has hardwired default SPs of the SNC  202  to SPs of the SIOH  204 . Alternatively, the SPS  206  may not be present in a particular configuration such that the SPs of the SNC  202  and SIOH  204  are connected together such as for the Intel Single Node  4  CPU system known as Tiger  4 . 
   The north bridge configuration  100  of  FIG. 1  may be partitioned, and then subsequently, the SPS  110  fails resulting in the configuration  200  of  FIG. 2  where only a single SNC  202  remains functional and becomes hardwired to the SIOH  204 . In this situation, upon boot-up or re-start of the computer system the BIOS  208  detects that no SPS is available and only the single SNC  202  is functionally linked to the SIOH  204 . Upon detecting this drastic change in the system configuration, the BIOS  208  selects a different DSDT  212  to be copied into computer memory  216  from the group  214  of multiple DSDTs than was previously used. The BIOS  208  places a pointer in the RSDT  210  to provide the Operating System access to the memory  216  containing a copy of the proper DSDT  212  so that the Operating System is able to boot. 
     FIG. 3  shows illustrative logical operations performed by a BIOS according to one embodiment to select the appropriate DSDT for the current system configuration. The logical operations begin by the BIOS discovering the hardware devices of the computer system, including each available device of the north bridge, at discovery operation  302 . During discovery operation  302 , the BIOS populates a Chipset Node Table (“CNT”) built in the system memory with information including the hardware devices being detected. 
   The BIOS detects chipset device components by reading a memory mapped register of the default SNC (the one that has the bootstrap CPU) to determine the SNC position (bus number and device number) on the chipset PCI bus. Upon finding the location, the BIOS proceeds to read chipset boot configuration registers of this SNC to check which devices are connected to its SPs. Moving from one discovered chipset component device to another, the BIOS uses predefined hardware specific characteristics of each chipset component to distinguish one chipset component device from another. After discovering any of the chipset component devices, the BIOS makes a record in the CNT that is initially filled by zeros. 
   An example of a CNT that is built in system memory is shown below in Table 1 for an illustrative system configuration. When the CNT is prepared, it is provided with a size capable of showing all information for a system with a maximum configuration. If the analysis of the system by the BIOS at boot-up discovers that the configuration is less than the maximum, then where devices are not present the information in the table has a zero value for that device. In this example, the bus number may have been discovered from the device, or alternatively may have been a pre-defined number where the bus number is hardwired and not changeable. 
   
     
       
             
           
             
             
             
             
           
         
             
               TABLE 1 
             
           
           
             
                 
             
             
               Illustrative Chipset Node Table 
             
           
        
         
             
                 
               Device ID 
               Bus Number 
               Device number 
             
             
                 
                 
             
             
                 
               0x0530 (an SPS) 
               0xff 
               0x1d 
             
             
                 
               0x0530 (an SPS) 
               0xff 
               0x1f 
             
             
                 
               0x0500 (an SNC) 
               0xff 
               0x18 
             
             
                 
               0x0500 (an SNC) 
               0xff 
               0x19 
             
             
                 
               0x0000 (device 
               0x00 (device 
               0x00 (device 
             
             
                 
               not present) 
               not present) 
               not present) 
             
             
                 
               0x0000 (device 
               0x00 (device 
               0x00 (device 
             
             
                 
               not present) 
               not present) 
               not present) 
             
             
                 
               0x0510 (an SIOH) 
               0xff 
               0x1c 
             
             
                 
               0x0510 (an SIOH) 
               0xff 
               0x1e 
             
             
                 
                 
             
           
        
       
     
   
   As shown in this example, the discovery operation  302  has produced a CNT that indicates that two SPS exist in the system and two of the four possible SNC exist in the system such that each SPS supports an SP of the SNCs. Additionally, two SIOH exist in the system. Once this table has been populated, the BIOS searches through the sequence of DSDTs that it stores at DSDT selection operation  304  to find the appropriate DSDT for the devices listed in the CNT. 
   The PCI configuration space Device ID along with the Manufacture ID registers are used as a unique identification feature for each chipset component device. Values of these registers are read-only and hold a unique number assigned by the PCI-SIG standards body to the company who produces the PCI devices. The Manufacture ID is not used in the CNT if no distinction between chipset component devices is relevant. 
   To perform DSDT selection operation  304 , the BIOS first gets the number of non-zero records from the CNT at record operation  306 . In this example, there are six different non-zero records that specify three different device IDs (0x0530, 0x0500, and 0x0510) with two records for each device ID. This indicates that there are two SPS, two SNC, and two SIOH so the appropriate DSDT must support this hardware configuration. At this time, the location of each device may also be found from the CNT, including the bus number and device number if necessary for subsequent processes such as DSDT updating described below with reference to  FIG. 4 . 
   After having determined the number of chipset component devices of each type and the number of device numbers per device ID, the BIOS selects the DSDT that provides the correct configuration of hardware at selection operation  308 . The BIOS may make the selection by parsing a header of each DSDT stored by the BIOS where the header specifies a signature that corresponds to the number of devices of each type that are present. Alternatively, the BIOS may make the selection by parsing the contents of the DSDT to maintain a count from the entries of the number of chipset component devices of each type that are present. When a DSDT has been reviewed but is not correct, a pointer to the header of the subsequent DSDT to be considered is retrieved by the BIOS from the current DSDT header so that the next DSDT in sequence can be found and reviewed. 
   After having found the DSDT that is appropriate, the BIOS then copies the selected DSDT into the ACPI reclaimable memory and saves a pointer to the memory location of the DSDT in an RSDT at pointer operation  310 . If the DSDT in memory needs to have the device number, bus number, and/or function number updated, the operations of  FIG. 4  are performed. Then, once the BIOS boots the operating system of the computer, the Operating System scans the RSDT and finds the pointer to the appropriate DSDT. The Operating System may then reference the DSDT to access the hardware devices at the device number and bus number specified in the DSDT. 
   Although the discussion above refers to creating a CNT that lists the bus number and device number for each instance of the device ID, it will be appreciated that the process of counting the numbers of device IDs and device numbers per device ID may be done without resorting to the creation of a CNT. However, the BIOS may fill the CNT with additional information and may reference the CNT for additional reasons, so the CNT is a convenient tool to also use when selecting a DSDT. Upon selecting the appropriate DSDT, the CNT may be deleted from system memory unless it is to be used for a subsequent process such as DSDT updating discussed below. 
   The DSDT that is chosen by the BIOS according to the logical operations of  FIG. 3  may have device numbers and bus numbers already contained within the file for embodiments where it is known what these values are, such as where they are pre-defined and are static. In this case, the selected DSDT is already available for reference by the operating system. However, where flexible chipsets such as the i870 chipset is employed, device configuration information such as the device number may be user definable. Also, it may be that the bus number becomes user definable as well. As such, these values may change to values that are not known when the DSDT is created for the BIOS. Thus, the DSDT(s) that are created during BIOS manufacturing may be DSDT templates that have placeholder values that must later be filled with real system values. 
     FIG. 4  shows illustrative logical operations for updating the existing DSDT with device configuration values to account for device configuration information that is generated by the user, which is not available for inclusion in the DSDT during manufacture of the BIOS. As mentioned, the DSDT may be initially created as a template with placeholder values that are written over during boot-up by the logical operations of  FIG. 4 . It should be noted that the illustrative logical operations of  FIG. 4  may apply independently of those of  FIG. 3  such that in embodiments where only a single DSDT is stored by the BIOS, the DSDT may be stored with only placeholder values for device configuration information such that this information is later updated into the one DSDT during boot-up. In embodiments where the logical operations of  FIG. 3  and  FIG. 4  both apply, then the proper DSDT template is chosen by the logical operations of  FIG. 3  and then the configuration information is updated into the chosen DSDT by the logical operations of  FIG. 4 . 
   The logical operations of  FIG. 4  begin at device number operation  402  where the BIOS obtains a non-zero device number value from a non-zero record that is associated with a non-zero device ID value in the CNT. At this point, the BIOS may also obtain additional configuration information values associated with the non-zero device number including the bus number and function number(s). Function numbers are generally pre-defined for devices utilizing the PCI bus and the BIOS may store an association of function numbers to the device. For example, an SNC is known to provide five functions as shown in Table 2 which may already be hard coded into the DSDT. 
   
     
       
             
           
             
             
           
         
             
               TABLE 2 
             
           
           
             
                 
             
             
               Function Numbers of an SNC 
             
           
        
         
             
               Function Number 
               Corresponding Function 
             
             
                 
             
             
               0000 
               CPU control registers 
             
             
               0001 
               Scalability Port control registers 
             
             
               0002 
               Memory control registers 
             
             
               0003 
               Memory Interleave control registers 
             
             
               0004 
               Chipset health and performance monitoring 
             
             
                 
               control registers 
             
             
                 
             
           
        
       
     
   
   At DSDT operation  404 , the BIOS populates the DSDT stored in memory by writing in the discovered device configuration information in place of the placeholders for a device that has a device type matching the non-zero device ID of the record in the CNT (see Table 3 below where SNC0 in the DSDT is a device type that corresponds to the device ID 0x0500 of the CNT). The discovered device configuration information may include any combination of the device number, its function number(s), and its associated bus number where applicable. An example of a portion of ASL code that when compiled forms a portion of the DSDT that describes chipset registers for an SNC is shown in Table 3. This portion is nested within a portion of the ASL code that lists child devices, such as the SNC, for a particular bus number such as 0x00ff. 
   // 
   // SNC0 function 0—Processor bus control registers 
   // 
   Device(SNC0) {
         Name(_ADR, 0x00FF0000) // device 0x18, function 0   // CVCR Register only in function 0   OperationRegion(CVCR, PCI_CONFIG, 0x48, 4)   Field(CVCR, ANYACC, NOLOCK, PRESERVE) {
           ,28, // bits 0:27   CPU0, 1, // CPU0 state (1 is present)   CPU1, 1, // CPU1 state   CPU2, 1, // CPU2 state   CPU3, 1, // CPU3 state   
           } // end op region       

   } // end SNC0 
   Table 3—ASL Code Portion Describing SNC 
   For this description for an SNC present in the system, the SNC device has been discovered to have a device number of 0x18, as indicated in the comment of Table 3 that is provided for purposes of illustration. The entry “Name(_ADR, 0x00FF0000)” in Table 3 specifies that a device having an unknown device number where the high word 0x00ff is an illegal device number acting as a placeholder for the device number to be updated. A hard-coded function number of 0x0000 is the low word. In this example, the device number that is read from the SNC device for this piece of ASL code and that has been put in the CNT is 0x18, so the 0x18 value is the update for the entry which becomes “Name_ADR, 0x00180000)” to identify device 0x0018 with function 0x0000. Also, in this example, the bus number is specified by the parent device for which this piece of ASL code of Table 3 is nested. It will be appreciated that in other examples the function number and bus number may also be unknowns that are updated with the device number. 
   Once the placeholders for the device configuration information has been updated with the associated values found in the CNT and/or device function tables of the BIOS, then operational flow transitions to query operation  406 . At query operation  406 , the BIOS detects from the CNT or DSDT whether another non-zero record with another non-zero device number is available for the current device ID. If so, the operational flow returns to device number operation  402  where the device number of the next non-zero record for the current device ID is used to update the device number, corresponding function number(s), and/or the bus number where applicable. Once all non-zero records for a particular device ID have been handled, then operational flow transitions to query operation  408 . 
   At query operation  408 , the BIOS detects from the CNT or DSDT whether another non-zero record for another device ID is available for the hardware configuration. If so, the operational flow returns to device number operation  402  where a device number of a non-zero record for the next device ID from the CNT is used to update the device number, corresponding function number(s), and possibly the bus number. Once all non-zero records with device numbers for this next device ID have been handled, then operational flow returns to query operation  408  to check for another device ID of another non-zero record. Once all device IDs have been handled, the process ends and the CNT can be deleted from system memory. The DSDT table has now been updated with the device configuration information that the operating system can access to utilize the hardware of the computer system. 
   While the invention has been particularly shown and described with reference to illustrative embodiments thereof, it will be understood by those skilled in the art that various other changes in the form and details may be made therein without departing from the spirit and scope of the invention.