Index: branches/azimutz/CleanCut/i386/libsaio/acpi_patcher.c =================================================================== --- branches/azimutz/CleanCut/i386/libsaio/acpi_patcher.c (revision 343) +++ branches/azimutz/CleanCut/i386/libsaio/acpi_patcher.c (revision 344) @@ -86,72 +86,54 @@ } return NULL; } -/** The folowing ACPI Table search algo. should be reused anywhere needed:*/ + +/** The following ACPI Table search algo, should be reused anywhere needed: */ int search_and_get_acpi_fd(const char * filename, const char ** outDirspec) { - int fd=0; - const char * overriden_pathname=NULL; - static char dirspec[512]=""; - static bool first_time =true; - int len=0; + char dirSpecDSDT[512] = ""; + const char *override_pathname = NULL; // full path to a file. + int len = 0, fd = 0; + extern char gMacOSVersion; - /// Take in accound user overriding if it's DSDT only - if (strstr(filename, "DSDT") && - getValueForKey(kDSDT, &overriden_pathname, &len, - &bootInfo->bootConfig)) - { - sprintf(dirspec, "%s", overriden_pathname); - fd=open (dirspec,0); - if (fd>=0) goto success_fd; - } - // Check that dirspec is not already assigned with a path - if (!first_time && *dirspec) - { // it is so start searching this cached patch first - //extract path - for (len=strlen(dirspec)-1; len; len--) - if (dirspec[len]=='/' || len==0) - { - dirspec[len]='\0'; - break; - } - // now concat with the filename - strncat(dirspec, "/", sizeof(dirspec)); - strncat(dirspec, filename, sizeof(dirspec)); - // and test to see if we don't have our big boy here: - fd=open (dirspec,0); - if (fd>=0) - { - // printf("ACPI file search cache hit: file found at %s\n", dirspec); - goto success_fd; - } + // Take in account user overriding + if (getValueForKey(kDSDTKey, &override_pathname, &len, &bootInfo->bootConfig)) + { + // Specify a path to a file, e.g. /Extra/test.aml + sprintf(dirSpecDSDT, override_pathname); + fd = open(dirSpecDSDT, 0); + if (fd >= 0) goto success_fd; } - // Start searching any potential location for ACPI Table - // search the Extra folders first - sprintf(dirspec,"/Extra/%s",filename); - fd=open (dirspec,0); - if (fd>=0) goto success_fd; - sprintf(dirspec,"bt(0,0)/Extra/%s",filename); - fd=open (dirspec,0); - if (fd>=0) goto success_fd; + // Check rd's root. + sprintf(dirSpecDSDT, "rd(0,0)/%s", filename); + fd = open(dirSpecDSDT, 0); + if (fd >= 0) goto success_fd; - sprintf(dirspec, "%s", filename); // search current dir - fd=open (dirspec,0); - if (fd>=0) goto success_fd; + // Check booter volume/rdbt for OS specific folders. + sprintf(dirSpecDSDT, "bt(0,0)/Extra/%s/%s", &gMacOSVersion, filename); + fd = open(dirSpecDSDT, 0); + if (fd >= 0) goto success_fd; - sprintf(dirspec, "/%s", filename); // search root - fd=open (dirspec,0); - if (fd>=0) goto success_fd; + // Check booter volume/rdbt Extra. + sprintf(dirSpecDSDT, "bt(0,0)/Extra/%s", filename); + fd = open(dirSpecDSDT, 0); + if (fd >= 0) goto success_fd; + //Azi: All loaded files stay in Extra.. please!? :) + //sprintf(dirspec, "/%s", filename); // search root + //fd=open (dirspec,0); + //if (fd>=0) goto success_fd; + // NOT FOUND: + //Azi: a reminder - handling this only on pci_root.c, getPciRootUID() (it's enough to check if .aml file exists), + // to reduce number of printed messages and the confusion caused by them on users. //verbose("ACPI Table not found: %s\n", filename); + if (outDirspec) *outDirspec = ""; - first_time = false; return -1; // FOUND success_fd: - first_time = false; - if (outDirspec) *outDirspec = dirspec; + if (outDirspec) *outDirspec = dirSpecDSDT; return fd; } Index: branches/azimutz/CleanCut/i386/boot2/boot.h =================================================================== --- branches/azimutz/CleanCut/i386/boot2/boot.h (revision 343) +++ branches/azimutz/CleanCut/i386/boot2/boot.h (revision 344) @@ -69,7 +69,7 @@ #define kWakeImage "WakeImage" // boot.c #define kProductVersion "ProductVersion" // boot.c #define karch "arch" // boot.c -#define kDSDT "DSDT" // acpi_patcher.c +#define kDSDTKey "DSDT" // acpi_patcher.c #define kDropSSDT "DropSSDT" // acpi_patcher.c #define kRestartFix "RestartFix" // acpi_patcher.c #define kGeneratePStates "GeneratePStates" // acpi_patcher.c Index: branches/azimutz/CleanCut/i386/boot2/drivers.c =================================================================== --- branches/azimutz/CleanCut/i386/boot2/drivers.c (revision 343) +++ branches/azimutz/CleanCut/i386/boot2/drivers.c (revision 344) @@ -163,7 +163,7 @@ long LoadDrivers( char * dirSpec ) { char dirSpecExtra[1024]; - const char *override_pathfolder = NULL; // path to folder + const char *override_pathfolder = NULL; // full path to a folder. int fd = 0, len = 0; if ( InitDriverSupport() != 0 )