xfree86: Move xf86GetClocks to vgahw
This is really a vga-specific hack anyway. The only modern driver that uses it is trident, but it's already loaded vgahw by the time it would call xf86GetClocks. Reviewed-by: Jeremy Huddleston <jeremyhu@apple.com> Tested-by: Jeremy Huddleston <jeremyhu@apple.com> Signed-off-by: Adam Jackson <ajax@redhat.com> Reviewed-by: Jamey Sharp <jamey@minilop.net>
This commit is contained in:
		
							parent
							
								
									1433103a49
								
							
						
					
					
						commit
						c0b63ff88a
					
				| 
						 | 
				
			
			@ -239,12 +239,6 @@ extern _X_EXPORT void xf86ShowClocks(ScrnInfoPtr scrp, MessageType from);
 | 
			
		|||
extern _X_EXPORT void xf86PrintChipsets(const char *drvname, const char *drvmsg,
 | 
			
		||||
		       SymTabPtr chips);
 | 
			
		||||
extern _X_EXPORT int xf86MatchDevice(const char *drivername, GDevPtr **driversectlist);
 | 
			
		||||
extern _X_EXPORT void xf86GetClocks(ScrnInfoPtr pScrn, int num,
 | 
			
		||||
		   Bool (*ClockFunc)(ScrnInfoPtr, int),
 | 
			
		||||
		   void (*ProtectRegs)(ScrnInfoPtr, Bool),
 | 
			
		||||
		   void (*BlankScreen)(ScrnInfoPtr, Bool),
 | 
			
		||||
		   IOADDRESS vertsyncreg, int maskval,
 | 
			
		||||
		   int knownclkindex, int knownclkvalue);
 | 
			
		||||
extern _X_EXPORT const char *xf86GetVisualName(int visual);
 | 
			
		||||
extern _X_EXPORT int xf86GetVerbosity(void);
 | 
			
		||||
extern _X_EXPORT Pix24Flags xf86GetPix24(void);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1353,96 +1353,6 @@ xf86MatchDevice(const char *drivername, GDevPtr **sectlist)
 | 
			
		|||
    return i;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * xf86GetClocks -- get the dot-clocks via a BIG BAD hack ...
 | 
			
		||||
 */
 | 
			
		||||
void
 | 
			
		||||
xf86GetClocks(ScrnInfoPtr pScrn, int num, Bool (*ClockFunc)(ScrnInfoPtr, int),
 | 
			
		||||
	      void (*ProtectRegs)(ScrnInfoPtr, Bool),
 | 
			
		||||
	      void (*BlankScreen)(ScrnInfoPtr, Bool), IOADDRESS vertsyncreg,
 | 
			
		||||
	      int maskval, int knownclkindex, int knownclkvalue)
 | 
			
		||||
{
 | 
			
		||||
    register int status = vertsyncreg;
 | 
			
		||||
    unsigned long i, cnt, rcnt, sync;
 | 
			
		||||
 | 
			
		||||
    /* First save registers that get written on */
 | 
			
		||||
    (*ClockFunc)(pScrn, CLK_REG_SAVE);
 | 
			
		||||
 | 
			
		||||
    if (num > MAXCLOCKS)
 | 
			
		||||
	num = MAXCLOCKS;
 | 
			
		||||
 | 
			
		||||
    for (i = 0; i < num; i++)
 | 
			
		||||
    {
 | 
			
		||||
	if (ProtectRegs)
 | 
			
		||||
	    (*ProtectRegs)(pScrn, TRUE);
 | 
			
		||||
	if (!(*ClockFunc)(pScrn, i))
 | 
			
		||||
	{
 | 
			
		||||
	    pScrn->clock[i] = -1;
 | 
			
		||||
	    continue;
 | 
			
		||||
	}
 | 
			
		||||
	if (ProtectRegs)
 | 
			
		||||
	    (*ProtectRegs)(pScrn, FALSE);
 | 
			
		||||
	if (BlankScreen)
 | 
			
		||||
	    (*BlankScreen)(pScrn, FALSE);
 | 
			
		||||
 | 
			
		||||
    	usleep(50000);     /* let VCO stabilise */
 | 
			
		||||
 | 
			
		||||
    	cnt  = 0;
 | 
			
		||||
    	sync = 200000;
 | 
			
		||||
 | 
			
		||||
	while ((inb(status) & maskval) == 0x00)
 | 
			
		||||
	    if (sync-- == 0) goto finish;
 | 
			
		||||
	/* Something appears to be happening, so reset sync count */
 | 
			
		||||
	sync = 200000;
 | 
			
		||||
	while ((inb(status) & maskval) == maskval)
 | 
			
		||||
	    if (sync-- == 0) goto finish;
 | 
			
		||||
	/* Something appears to be happening, so reset sync count */
 | 
			
		||||
	sync = 200000;
 | 
			
		||||
	while ((inb(status) & maskval) == 0x00)
 | 
			
		||||
	    if (sync-- == 0) goto finish;
 | 
			
		||||
 | 
			
		||||
	for (rcnt = 0; rcnt < 5; rcnt++)
 | 
			
		||||
	{
 | 
			
		||||
	    while (!(inb(status) & maskval))
 | 
			
		||||
		cnt++;
 | 
			
		||||
	    while ((inb(status) & maskval))
 | 
			
		||||
		cnt++;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
finish:
 | 
			
		||||
	pScrn->clock[i] = cnt ? cnt : -1;
 | 
			
		||||
	if (BlankScreen)
 | 
			
		||||
            (*BlankScreen)(pScrn, TRUE);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    for (i = 0; i < num; i++)
 | 
			
		||||
    {
 | 
			
		||||
	if (i != knownclkindex)
 | 
			
		||||
	{
 | 
			
		||||
	    if (pScrn->clock[i] == -1)
 | 
			
		||||
	    {
 | 
			
		||||
		pScrn->clock[i] = 0;
 | 
			
		||||
	    }
 | 
			
		||||
	    else
 | 
			
		||||
	    {
 | 
			
		||||
		pScrn->clock[i] = (int)(0.5 +
 | 
			
		||||
                    (((float)knownclkvalue) * pScrn->clock[knownclkindex]) /
 | 
			
		||||
	            (pScrn->clock[i]));
 | 
			
		||||
		/* Round to nearest 10KHz */
 | 
			
		||||
		pScrn->clock[i] += 5;
 | 
			
		||||
		pScrn->clock[i] /= 10;
 | 
			
		||||
		pScrn->clock[i] *= 10;
 | 
			
		||||
	    }
 | 
			
		||||
	}
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    pScrn->clock[knownclkindex] = knownclkvalue;
 | 
			
		||||
    pScrn->numClocks = num;
 | 
			
		||||
 | 
			
		||||
    /* Restore registers that were written on */
 | 
			
		||||
    (*ClockFunc)(pScrn, CLK_REG_RESTORE);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
const char *
 | 
			
		||||
xf86GetVisualName(int visual)
 | 
			
		||||
{
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1992,3 +1992,93 @@ SaveScreenProcPtr vgaHWSaveScreenWeak(void)
 | 
			
		|||
{
 | 
			
		||||
    return vgaHWSaveScreen;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * xf86GetClocks -- get the dot-clocks via a BIG BAD hack ...
 | 
			
		||||
 */
 | 
			
		||||
void
 | 
			
		||||
xf86GetClocks(ScrnInfoPtr pScrn, int num, Bool (*ClockFunc)(ScrnInfoPtr, int),
 | 
			
		||||
	      void (*ProtectRegs)(ScrnInfoPtr, Bool),
 | 
			
		||||
	      void (*BlankScreen)(ScrnInfoPtr, Bool), IOADDRESS vertsyncreg,
 | 
			
		||||
	      int maskval, int knownclkindex, int knownclkvalue)
 | 
			
		||||
{
 | 
			
		||||
    register int status = vertsyncreg;
 | 
			
		||||
    unsigned long i, cnt, rcnt, sync;
 | 
			
		||||
 | 
			
		||||
    /* First save registers that get written on */
 | 
			
		||||
    (*ClockFunc)(pScrn, CLK_REG_SAVE);
 | 
			
		||||
 | 
			
		||||
    if (num > MAXCLOCKS)
 | 
			
		||||
	num = MAXCLOCKS;
 | 
			
		||||
 | 
			
		||||
    for (i = 0; i < num; i++)
 | 
			
		||||
    {
 | 
			
		||||
	if (ProtectRegs)
 | 
			
		||||
	    (*ProtectRegs)(pScrn, TRUE);
 | 
			
		||||
	if (!(*ClockFunc)(pScrn, i))
 | 
			
		||||
	{
 | 
			
		||||
	    pScrn->clock[i] = -1;
 | 
			
		||||
	    continue;
 | 
			
		||||
	}
 | 
			
		||||
	if (ProtectRegs)
 | 
			
		||||
	    (*ProtectRegs)(pScrn, FALSE);
 | 
			
		||||
	if (BlankScreen)
 | 
			
		||||
	    (*BlankScreen)(pScrn, FALSE);
 | 
			
		||||
 | 
			
		||||
	usleep(50000);     /* let VCO stabilise */
 | 
			
		||||
 | 
			
		||||
	cnt  = 0;
 | 
			
		||||
	sync = 200000;
 | 
			
		||||
 | 
			
		||||
	while ((inb(status) & maskval) == 0x00)
 | 
			
		||||
	    if (sync-- == 0) goto finish;
 | 
			
		||||
	/* Something appears to be happening, so reset sync count */
 | 
			
		||||
	sync = 200000;
 | 
			
		||||
	while ((inb(status) & maskval) == maskval)
 | 
			
		||||
	    if (sync-- == 0) goto finish;
 | 
			
		||||
	/* Something appears to be happening, so reset sync count */
 | 
			
		||||
	sync = 200000;
 | 
			
		||||
	while ((inb(status) & maskval) == 0x00)
 | 
			
		||||
	    if (sync-- == 0) goto finish;
 | 
			
		||||
 | 
			
		||||
	for (rcnt = 0; rcnt < 5; rcnt++)
 | 
			
		||||
	{
 | 
			
		||||
	    while (!(inb(status) & maskval))
 | 
			
		||||
		cnt++;
 | 
			
		||||
	    while ((inb(status) & maskval))
 | 
			
		||||
		cnt++;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
finish:
 | 
			
		||||
	pScrn->clock[i] = cnt ? cnt : -1;
 | 
			
		||||
	if (BlankScreen)
 | 
			
		||||
            (*BlankScreen)(pScrn, TRUE);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    for (i = 0; i < num; i++)
 | 
			
		||||
    {
 | 
			
		||||
	if (i != knownclkindex)
 | 
			
		||||
	{
 | 
			
		||||
	    if (pScrn->clock[i] == -1)
 | 
			
		||||
	    {
 | 
			
		||||
		pScrn->clock[i] = 0;
 | 
			
		||||
	    }
 | 
			
		||||
	    else
 | 
			
		||||
	    {
 | 
			
		||||
		pScrn->clock[i] = (int)(0.5 +
 | 
			
		||||
                    (((float)knownclkvalue) * pScrn->clock[knownclkindex]) /
 | 
			
		||||
	            (pScrn->clock[i]));
 | 
			
		||||
		/* Round to nearest 10KHz */
 | 
			
		||||
		pScrn->clock[i] += 5;
 | 
			
		||||
		pScrn->clock[i] /= 10;
 | 
			
		||||
		pScrn->clock[i] *= 10;
 | 
			
		||||
	    }
 | 
			
		||||
	}
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    pScrn->clock[knownclkindex] = knownclkvalue;
 | 
			
		||||
    pScrn->numClocks = num;
 | 
			
		||||
 | 
			
		||||
    /* Restore registers that were written on */
 | 
			
		||||
    (*ClockFunc)(pScrn, CLK_REG_RESTORE);
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -231,5 +231,11 @@ extern _X_EXPORT Bool vgaHWAllocDefaultRegs(vgaRegPtr regp);
 | 
			
		|||
 | 
			
		||||
extern _X_EXPORT DDC1SetSpeedProc vgaHWddc1SetSpeedWeak(void);
 | 
			
		||||
extern _X_EXPORT SaveScreenProcPtr vgaHWSaveScreenWeak(void);
 | 
			
		||||
extern _X_EXPORT void xf86GetClocks(ScrnInfoPtr pScrn, int num,
 | 
			
		||||
		   Bool (*ClockFunc)(ScrnInfoPtr, int),
 | 
			
		||||
		   void (*ProtectRegs)(ScrnInfoPtr, Bool),
 | 
			
		||||
		   void (*BlankScreen)(ScrnInfoPtr, Bool),
 | 
			
		||||
		   IOADDRESS vertsyncreg, int maskval,
 | 
			
		||||
		   int knownclkindex, int knownclkvalue);
 | 
			
		||||
 | 
			
		||||
#endif /* _VGAHW_H */
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue