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:
Adam Jackson 2010-09-18 08:05:11 -04:00 committed by Jeremy Huddleston
parent 1433103a49
commit c0b63ff88a
4 changed files with 96 additions and 96 deletions

View File

@ -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);

View File

@ -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)
{

View File

@ -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);
}

View File

@ -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 */