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
Block a user