Alex Deucher writes: > I'm working on integrating my radeon mergedfb code with xfree86 cvs. > so far it's working, but now I'm trying to integrate the current clone > code with the mergedfb clone mode. so far so good. I'm trying to use > the modes defined for the 1st head as clone modes for the second head > in the even that no metamodes are defined in the XF86Config file > (default behavior). I just can't seem to get it to work! How do you > iterate through a mode list? It seems to be circular. I'm probably > missing something basic, but my code seems to get stuck in an endless > loop. Here's what I'm trying to do. The function > RADEONGenerateModeList() normally takes the list of userdefined > "metamodes" (mode combinations for both heads, ie, 1024x768-800x600 > would be the metamode for 1024x768 on the first head and 800x600 on the > second) and parses them, then looks up the equivalent modes names in > the validated modes for each head and then links them into a metamode. > I have a check at the top to see if metamodes is NULL, if it is then it > iterates over the validated modes for head 1 (i) and looks up the > corresponding mode for head 2 (j) based on the name, then sets the > metamode. What is the best way to iterate through a mode list? Am I > even on the right track here? shouldn't tempmode->next be NULL at the > end of the list? If not then how do you know how many iterations you > need?
The mode list is a ring. Therefore tempmode->next will never be NULL. Why don't you try this? > > /* default case if no metamodes specified */ > if (str == NULL) { > sr = radeonClone; if ((tempmode = i) != NULL) while (1) { > /* look up the mode for each head based on the name */ > mode1 = RADEONGetModeFromName(tempmode->name, i); > mode2 = RADEONGetModeFromName(mode1->name, j); > if(!mode2) { > xf86DrvMsg(pScrn->scrnIndex, X_WARNING, > "Mode: \"%s\" is not a supported mode for CRT2\n", mode1->name); > xf86DrvMsg(pScrn->scrnIndex, X_WARNING, > "Skipping metamode \"%s\".\n"); > mode1 = NULL; > } else { > /* link the modes into a "metamode" */ > result = RADEONCopyModeNLink(pScrn, result, mode1, mode2, sr); > mode1 = NULL; > mode2 = NULL; > } tempmode = tempmode->next; if (tempmode == i || tempmode == NULL) break; > } > return result; > } > > Egbert. _______________________________________________ Devel mailing list [EMAIL PROTECTED] http://XFree86.Org/mailman/listinfo/devel