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?

    /* default case if no metamodes specified */
    if (str == NULL) {
        sr = radeonClone;
    for (tempmode = i; tempmode != NULL; tempmode = tempmode->next) {
            /* 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;
            }  
        }
        return result;
    }


Thanks for any advice,

Alex

__________________________________
Do you Yahoo!?
Yahoo! Calendar - Free online calendar with sync to Outlook(TM).
http://calendar.yahoo.com
_______________________________________________
Devel mailing list
[EMAIL PROTECTED]
http://XFree86.Org/mailman/listinfo/devel

Reply via email to