214 infoPtr->SolidFillFlags = NO_PLANEMASK; |
157 infoPtr->SolidFillFlags = NO_PLANEMASK; |
215 +#endif /* __sparc__ */ |
158 +#endif /* __sparc__ */ |
216 } |
159 } |
217 |
160 |
218 /* Solid Lines */ |
161 /* Solid Lines */ |
219 diff -urp -x '*~' -x '*.orig' src/ast_cursor.c src/ast_cursor.c |
162 diff --git a/src/ast_cursor.c b/src/ast_cursor.c |
220 --- src/ast_cursor.c 2009-10-29 13:33:38.000000000 -0700 |
163 index b3f2061..9b7f1c8 100644 |
221 +++ src/ast_cursor.c 2010-08-16 13:45:07.712204039 -0700 |
164 --- a/src/ast_cursor.c |
222 @@ -82,9 +82,14 @@ ASTCursorInit(ScreenPtr pScreen) |
165 +++ b/src/ast_cursor.c |
223 |
166 @@ -87,7 +87,11 @@ ASTCursorInit(ScreenPtr pScreen) |
224 pAST->HWCInfoPtr = infoPtr; |
167 |
225 |
|
226 +#if !defined(__sparc__) |
|
227 infoPtr->Flags = HARDWARE_CURSOR_TRUECOLOR_AT_8BPP | |
168 infoPtr->Flags = HARDWARE_CURSOR_TRUECOLOR_AT_8BPP | |
228 HARDWARE_CURSOR_INVERT_MASK | |
169 HARDWARE_CURSOR_INVERT_MASK | |
|
170 +#if !defined(__sparc__) |
229 HARDWARE_CURSOR_BIT_ORDER_MSBFIRST; |
171 HARDWARE_CURSOR_BIT_ORDER_MSBFIRST; |
230 +#else |
172 +#else |
231 + infoPtr->Flags = HARDWARE_CURSOR_TRUECOLOR_AT_8BPP | |
173 + 0; |
232 + HARDWARE_CURSOR_INVERT_MASK; |
|
233 +#endif |
174 +#endif |
234 |
175 |
235 infoPtr->MaxWidth = MAX_HWC_WIDTH; |
176 infoPtr->MaxWidth = MAX_HWC_WIDTH; |
236 infoPtr->MaxHeight = MAX_HWC_HEIGHT; |
177 infoPtr->MaxHeight = MAX_HWC_HEIGHT; |
237 @@ -135,6 +140,7 @@ ASTShowCursor(ScrnInfoPtr pScrn) |
178 diff --git a/src/ast_driver.c b/src/ast_driver.c |
238 { |
179 index 896f22c..c4afa21 100644 |
239 ASTRecPtr pAST = ASTPTR(pScrn); |
180 --- a/src/ast_driver.c |
240 UCHAR jReg; |
181 +++ b/src/ast_driver.c |
241 + ASTDECL_FD |
182 @@ -106,7 +106,7 @@ static void ASTFreeScreen(int scrnIndex, int flags); |
242 |
|
243 jReg= 0x02; |
|
244 if (pAST->HWCInfo.cursortype ==HWC_COLOR) |
|
245 @@ -148,6 +154,7 @@ void |
|
246 ASTHideCursor(ScrnInfoPtr pScrn) |
|
247 { |
|
248 ASTRecPtr pAST = ASTPTR(pScrn); |
|
249 + ASTDECL_FD |
|
250 |
|
251 SetIndexRegMask(CRTC_PORT, 0xCB, 0xFC, 0x00); /* disable HWC */ |
|
252 |
|
253 @@ -160,6 +167,7 @@ ASTSetCursorPosition(ScrnInfoPtr pScrn, |
|
254 DisplayModePtr mode = pAST->ModePtr; |
|
255 int x_offset, y_offset; |
|
256 UCHAR *pjSignature; |
|
257 + ASTDECL_FD |
|
258 |
|
259 /* Set cursor info to Offscreen */ |
|
260 pjSignature = (UCHAR *) pAST->HWCInfo.pjHWCVirtualAddr + (HWC_SIZE+HWC_SIGNATURE_SIZE)*pAST->HWCInfo.HWC_NUM_Next + HWC_SIZE; |
|
261 @@ -223,6 +231,7 @@ ASTLoadCursorImage(ScrnInfoPtr pScrn, UC |
|
262 UCHAR jTempSrcAnd32, jTempSrcXor32; |
|
263 ULONG ulCheckSum = 0; |
|
264 ULONG ulPatternAddr; |
|
265 + ASTDECL_FD |
|
266 |
|
267 /* init cursor info. */ |
|
268 pAST->HWCInfo.cursortype = HWC_MONO; |
|
269 @@ -320,6 +329,7 @@ ASTLoadCursorARGB(ScrnInfoPtr pScrn, Cur |
|
270 } usData16; |
|
271 ULONG ulCheckSum = 0; |
|
272 ULONG ulPatternAddr; |
|
273 + ASTDECL_FD |
|
274 |
|
275 /* init cursor info. */ |
|
276 pAST->HWCInfo.cursortype = HWC_COLOR; |
|
277 @@ -407,6 +417,7 @@ static void |
|
278 ASTFireCursor(ScrnInfoPtr pScrn) |
|
279 { |
|
280 ASTRecPtr pAST = ASTPTR(pScrn); |
|
281 + ASTDECL_FD |
|
282 |
|
283 SetIndexRegMask(CRTC_PORT, 0xCB, 0xFF, 0x00); /* dummp write to fire HWC */ |
|
284 |
|
285 diff -urp -x '*~' -x '*.orig' src/ast_cursor.h src/ast_cursor.h |
|
286 --- src/ast_cursor.h 2008-03-17 10:20:40.000000000 -0700 |
|
287 +++ src/ast_cursor.h 2010-08-16 13:45:07.712406043 -0700 |
|
288 @@ -20,6 +20,9 @@ |
|
289 * PERFORMANCE OF THIS SOFTWARE. |
|
290 */ |
|
291 |
|
292 +#ifndef ASTCURSOR_H |
|
293 +#define ASTCURSOR_H |
|
294 + |
|
295 #define MAX_HWC_WIDTH 64 |
|
296 #define MAX_HWC_HEIGHT 64 |
|
297 #define HWC_SIZE (MAX_HWC_WIDTH*MAX_HWC_HEIGHT*2) |
|
298 @@ -37,3 +40,5 @@ |
|
299 #define HWC_SIGNATURE_Y 0x10 |
|
300 #define HWC_SIGNATURE_HOTSPOTX 0x14 |
|
301 #define HWC_SIGNATURE_HOTSPOTY 0x18 |
|
302 + |
|
303 +#endif /* ASTCURSOR_H */ |
|
304 diff -urp -x '*~' -x '*.orig' src/ast_driver.c src/ast_driver.c |
|
305 --- src/ast_driver.c 2010-10-18 07:38:29.000000000 -0700 |
|
306 +++ src/ast_driver.c 2010-10-18 13:45:07.713360394 -0700 |
|
307 @@ -80,6 +80,14 @@ extern Bool bIsVGAEnabled(ScrnInfoPtr pS |
|
308 extern void ASTBlankScreen(ScrnInfoPtr pScreen, Bool unblack); |
|
309 extern Bool InitVGA(ScrnInfoPtr pScrn); |
|
310 |
|
311 +#if defined(__sparc__) |
|
312 +extern Bool InitVGA(ScrnInfoPtr pScrn); |
|
313 +extern Bool GetVGAEDID(ScrnInfoPtr pScrn, unsigned char *pEDIDBuffer); |
|
314 +extern pciVideoPtr ASTGetPciInfo(ASTRecPtr); |
|
315 +extern ScrnInfoPtr ASTAllocScreen(DriverPtr, GDevPtr); |
|
316 +extern void ASTSaveHW(ScrnInfoPtr); |
|
317 +#endif /* __sparc__ */ |
|
318 + |
|
319 extern Bool bInitCMDQInfo(ScrnInfoPtr pScrn, ASTRecPtr pAST); |
|
320 extern Bool bEnableCMDQ(ScrnInfoPtr pScrn, ASTRecPtr pAST); |
|
321 extern void vDisable2D(ScrnInfoPtr pScrn, ASTRecPtr pAST); |
|
322 @@ -103,7 +111,7 @@ static void ASTFreeScreen(int scrnIndex, |
|
323 static ModeStatus ASTValidMode(int scrnIndex, DisplayModePtr mode, Bool verbose, int flags); |
183 static ModeStatus ASTValidMode(int scrnIndex, DisplayModePtr mode, Bool verbose, int flags); |
324 |
184 |
325 /* Internally used functions */ |
185 /* Internally used functions */ |
326 -static Bool ASTGetRec(ScrnInfoPtr pScrn); |
186 -static Bool ASTGetRec(ScrnInfoPtr pScrn); |
327 +extern Bool ASTGetRec(ScrnInfoPtr pScrn); |
187 +extern Bool ASTGetRec(ScrnInfoPtr pScrn); |
328 static void ASTFreeRec(ScrnInfoPtr pScrn); |
188 static void ASTFreeRec(ScrnInfoPtr pScrn); |
329 static Bool ASTSaveScreen(ScreenPtr pScreen, Bool unblack); |
189 static Bool ASTSaveScreen(ScreenPtr pScreen, Bool unblack); |
330 static Bool ASTCloseScreen(int scrnIndex, ScreenPtr pScreen); |
190 static Bool ASTCloseScreen(int scrnIndex, ScreenPtr pScreen); |
331 @@ -257,7 +265,7 @@ ASTProbe(DriverPtr drv, int flags) |
191 @@ -270,7 +270,7 @@ ASTProbe(DriverPtr drv, int flags) |
332 return FALSE; |
192 return FALSE; |
333 } |
193 } |
334 |
194 |
335 -#ifndef XSERVER_LIBPCIACCESS |
195 -#ifndef XSERVER_LIBPCIACCESS |
336 +#if !defined(XSERVER_LIBPCIACCESS) && !defined(__sparc__) |
196 +#if !defined(XSERVER_LIBPCIACCESS) && !defined(__sparc__) |
337 /* |
197 /* |
338 * This probing is just checking the PCI data the server already |
198 * This probing is just checking the PCI data the server already |
339 * collected. |
199 * collected. |
340 @@ -267,6 +275,7 @@ ASTProbe(DriverPtr drv, int flags) |
200 @@ -280,6 +280,7 @@ ASTProbe(DriverPtr drv, int flags) |
341 } |
201 } |
342 #endif |
202 #endif |
343 |
203 |
344 +#if !defined(__sparc__) |
204 +#if !defined(__sparc__) |
345 numUsed = xf86MatchPciInstances(AST_NAME, PCI_VENDOR_AST, |
205 numUsed = xf86MatchPciInstances(AST_NAME, PCI_VENDOR_AST, |
346 ASTChipsets, ASTPciChipsets, |
206 ASTChipsets, ASTPciChipsets, |
347 devSections, numDevSections, |
207 devSections, numDevSections, |
348 @@ -310,6 +319,33 @@ ASTProbe(DriverPtr drv, int flags) |
208 @@ -323,6 +324,37 @@ ASTProbe(DriverPtr drv, int flags) |
349 } /* end of if flags */ |
209 } /* end of if flags */ |
350 |
210 |
351 xfree(usedChips); |
211 free(usedChips); |
352 +#else |
212 +#else |
353 + |
213 + |
354 + for (i = 0; i < numDevSections; i++) { |
214 + if (flags & PROBE_DETECT) { |
355 + |
215 + foundScreen = TRUE; |
356 + ScrnInfoPtr pScrn = NULL; |
216 + } else { |
357 + |
217 + for (i = 0; i < numDevSections; i++) { |
358 + /* Allocate new ScrnInfoRec and claim the slot */ |
218 + |
359 + if (pScrn = ASTAllocScreen(drv, devSections[i])) { |
219 + ScrnInfoPtr pScrn = NULL; |
360 + pScrn->driverVersion = AST_VERSION; |
220 + |
361 + pScrn->driverName = AST_DRIVER_NAME; |
221 + /* Allocate new ScrnInfoRec and claim the slot */ |
362 + pScrn->name = AST_NAME; |
222 + if (pScrn = ASTAllocScreen(drv, devSections[i])) { |
363 + |
223 + pScrn->driverVersion = AST_VERSION; |
364 + pScrn->Probe = ASTProbe; |
224 + pScrn->driverName = AST_DRIVER_NAME; |
365 + pScrn->PreInit = ASTPreInit; |
225 + pScrn->name = AST_NAME; |
366 + pScrn->ScreenInit = ASTScreenInit; |
226 + |
367 + pScrn->SwitchMode = ASTSwitchMode; |
227 + pScrn->Probe = ASTProbe; |
368 + pScrn->AdjustFrame = ASTAdjustFrame; |
228 + pScrn->PreInit = ASTPreInit; |
369 + pScrn->EnterVT = ASTEnterVT; |
229 + pScrn->ScreenInit = ASTScreenInit; |
370 + pScrn->LeaveVT = ASTLeaveVT; |
230 + pScrn->SwitchMode = ASTSwitchMode; |
371 + pScrn->FreeScreen = ASTFreeScreen; |
231 + pScrn->AdjustFrame = ASTAdjustFrame; |
372 + pScrn->ValidMode = ASTValidMode; |
232 + pScrn->EnterVT = ASTEnterVT; |
373 + |
233 + pScrn->LeaveVT = ASTLeaveVT; |
374 + foundScreen = TRUE; |
234 + pScrn->FreeScreen = ASTFreeScreen; |
|
235 + pScrn->ValidMode = ASTValidMode; |
|
236 + |
|
237 + foundScreen = TRUE; |
|
238 + } |
375 + } |
239 + } |
376 + } |
240 + } |
377 + xfree(devSections); |
241 + free(devSections); |
378 +#endif |
242 +#endif |
379 |
243 |
380 return foundScreen; |
244 return foundScreen; |
381 } |
245 } |
382 @@ -325,7 +361,9 @@ static Bool |
246 @@ -338,7 +370,9 @@ static Bool |
383 ASTPreInit(ScrnInfoPtr pScrn, int flags) |
247 ASTPreInit(ScrnInfoPtr pScrn, int flags) |
384 { |
248 { |
385 EntityInfoPtr pEnt; |
249 EntityInfoPtr pEnt; |
386 +#if !defined(__sparc__) |
250 +#if !defined(__sparc__) |
387 vgaHWPtr hwp; |
251 vgaHWPtr hwp; |
388 +#endif |
252 +#endif |
389 int flags24; |
253 int flags24; |
390 rgb defaultWeight = { 0, 0, 0 }; |
254 rgb defaultWeight = { 0, 0, 0 }; |
391 |
255 |
392 @@ -341,6 +379,10 @@ ASTPreInit(ScrnInfoPtr pScrn, int flags) |
256 @@ -355,6 +389,10 @@ ASTPreInit(ScrnInfoPtr pScrn, int flags) |
393 |
257 |
394 pEnt = xf86GetEntityInfo(pScrn->entityList[0]); |
258 pEnt = xf86GetEntityInfo(pScrn->entityList[0]); |
395 |
259 |
396 +#if defined(__sparc__) |
260 +#if defined(__sparc__) |
397 + pEnt->location.type = BUS_PCI; |
261 + pEnt->location.type = BUS_PCI; |
398 +#endif /* __sparc__ */ |
262 +#endif /* __sparc__ */ |
399 + |
263 + |
400 if (flags & PROBE_DETECT) { |
264 if (flags & PROBE_DETECT) { |
401 ASTProbeDDC(pScrn, pEnt->index); |
265 ASTProbeDDC(pScrn, pEnt->index); |
402 return TRUE; |
266 return TRUE; |
403 @@ -354,18 +396,22 @@ ASTPreInit(ScrnInfoPtr pScrn, int flags) |
267 @@ -368,19 +406,23 @@ ASTPreInit(ScrnInfoPtr pScrn, int flags) |
404 return FALSE; |
268 return FALSE; |
405 #endif |
269 #endif |
406 |
270 |
407 +#if !(defined(__sparc__)) |
271 +#if !(defined(__sparc__)) |
408 /* The vgahw module should be loaded here when needed */ |
272 /* The vgahw module should be loaded here when needed */ |
409 if (!xf86LoadSubModule(pScrn, "vgahw")) |
273 if (!xf86LoadSubModule(pScrn, "vgahw")) |
410 return FALSE; |
274 return FALSE; |
411 +#endif |
275 +#endif |
412 |
276 |
413 /* The fb module should be loaded here when needed */ |
277 /* The fb module should be loaded here when needed */ |
414 if (!xf86LoadSubModule(pScrn, "fb")) |
278 if (!xf86LoadSubModule(pScrn, "fb")) |
415 return FALSE; |
279 return FALSE; |
416 |
280 |
417 +#if !(defined(__sparc__)) |
281 +#if !(defined(__sparc__)) |
418 /* Allocate a vgaHWRec */ |
282 /* Allocate a vgaHWRec */ |
419 if (!vgaHWGetHWRec(pScrn)) |
283 if (!vgaHWGetHWRec(pScrn)) |
420 return FALSE; |
284 return FALSE; |
421 hwp = VGAHWPTR(pScrn); |
285 hwp = VGAHWPTR(pScrn); |
|
286 vgaHWSetStdFuncs(hwp); |
422 +#endif |
287 +#endif |
423 |
288 |
424 /* Color Depth Check */ |
289 /* Color Depth Check */ |
425 flags24 = Support32bppFb; |
290 flags24 = Support32bppFb; |
426 @@ -438,7 +484,12 @@ ASTPreInit(ScrnInfoPtr pScrn, int flags) |
291 @@ -453,7 +495,12 @@ ASTPreInit(ScrnInfoPtr pScrn, int flags) |
427 /* Fill AST Info */ |
292 /* Fill AST Info */ |
428 pAST = ASTPTR(pScrn); |
293 pAST = ASTPTR(pScrn); |
429 pAST->pEnt = xf86GetEntityInfo(pScrn->entityList[0]); |
294 pAST->pEnt = xf86GetEntityInfo(pScrn->entityList[0]); |
430 +#if !defined(__sparc__) |
295 +#if !defined(__sparc__) |
431 pAST->PciInfo = xf86GetPciInfoForEntity(pAST->pEnt->index); |
296 pAST->PciInfo = xf86GetPciInfoForEntity(pAST->pEnt->index); |
432 +#else |
297 +#else |
433 + pAST->PciInfo = (ASTGetPciInfo(pAST)); |
298 + pAST->PciInfo = ASTGetPciInfo(pAST); |
434 +#endif |
299 +#endif |
435 + |
300 + |
436 #ifndef XSERVER_LIBPCIACCESS |
301 #ifndef XSERVER_LIBPCIACCESS |
437 pAST->PciTag = pciTag(pAST->PciInfo->bus, pAST->PciInfo->device, |
302 pAST->PciTag = pciTag(pAST->PciInfo->bus, pAST->PciInfo->device, |
438 pAST->PciInfo->func); |
303 pAST->PciInfo->func); |
439 @@ -485,10 +536,13 @@ ASTPreInit(ScrnInfoPtr pScrn, int flags) |
304 @@ -508,11 +555,13 @@ ASTPreInit(ScrnInfoPtr pScrn, int flags) |
440 |
|
441 /* Resource Allocation */ |
|
442 pAST->IODBase = pScrn->domainIOBase; |
|
443 + |
|
444 +#if !(defined(__sparc__)) |
|
445 /* "Patch" the PIOOffset inside vgaHW in order to force |
|
446 * the vgaHW module to use our relocated i/o ports. |
305 * the vgaHW module to use our relocated i/o ports. |
447 */ |
306 */ |
448 VGAHWPTR(pScrn)->PIOOffset = pAST->PIOOffset = pAST->IODBase + PCI_REGION_BASE(pAST->PciInfo, 2, REGION_IO) - 0x380; |
307 |
|
308 +#if !(defined(__sparc__)) |
|
309 #if GET_ABI_MAJOR(ABI_VIDEODRV_VERSION) < 12 |
|
310 VGAHWPTR(pScrn)->PIOOffset = /* ... */ |
|
311 #endif |
|
312 pAST->PIOOffset = |
|
313 pAST->IODBase + PCI_REGION_BASE(pAST->PciInfo, 2, REGION_IO) - 0x380; |
449 +#endif |
314 +#endif |
450 |
315 |
451 pAST->RelocateIO = (IOADDRESS)(PCI_REGION_BASE(pAST->PciInfo, 2, REGION_IO) + pAST->IODBase); |
316 pAST->RelocateIO = (IOADDRESS)(PCI_REGION_BASE(pAST->PciInfo, 2, REGION_IO) + pAST->IODBase); |
452 |
317 |
453 @@ -695,7 +749,6 @@ ASTScreenInit(int scrnIndex, ScreenPtr p |
318 @@ -757,7 +806,9 @@ ASTScreenInit(int scrnIndex, ScreenPtr pScreen, int argc, char **argv) |
454 { |
319 { |
455 ScrnInfoPtr pScrn; |
320 ScrnInfoPtr pScrn; |
456 ASTRecPtr pAST; |
321 ASTRecPtr pAST; |
457 - vgaHWPtr hwp; |
322 +#if (!defined(__sparc__)) |
|
323 vgaHWPtr hwp; |
|
324 +#endif |
458 VisualPtr visual; |
325 VisualPtr visual; |
459 |
326 |
460 /* for FB Manager */ |
327 /* for FB Manager */ |
461 @@ -704,7 +757,6 @@ ASTScreenInit(int scrnIndex, ScreenPtr p |
328 @@ -766,7 +817,9 @@ ASTScreenInit(int scrnIndex, ScreenPtr pScreen, int argc, char **argv) |
462 |
329 |
463 pScrn = xf86Screens[pScreen->myNum]; |
330 pScrn = xf86Screens[pScreen->myNum]; |
464 pAST = ASTPTR(pScrn); |
331 pAST = ASTPTR(pScrn); |
465 - hwp = VGAHWPTR(pScrn); |
332 +#if (!defined(__sparc__)) |
|
333 hwp = VGAHWPTR(pScrn); |
|
334 +#endif |
466 |
335 |
467 if (!ASTMapMem(pScrn)) { |
336 if (!ASTMapMem(pScrn)) { |
468 xf86DrvMsg(pScrn->scrnIndex, X_ERROR, "Map FB Memory Failed \n"); |
337 xf86DrvMsg(pScrn->scrnIndex, X_ERROR, "Map FB Memory Failed \n"); |
469 @@ -728,7 +780,14 @@ ASTScreenInit(int scrnIndex, ScreenPtr p |
338 @@ -795,7 +848,9 @@ ASTScreenInit(int scrnIndex, ScreenPtr pScreen, int argc, char **argv) |
470 |
339 |
471 } |
340 } |
472 |
341 |
473 - vgaHWGetIOBase(hwp); |
|
474 +#if (!defined(__sparc__)) |
342 +#if (!defined(__sparc__)) |
475 + { |
343 vgaHWGetIOBase(hwp); |
476 + vgaHWPtr hwp; |
|
477 + |
|
478 + hwp = VGAHWPTR(pScrn); |
|
479 + vgaHWGetIOBase(hwp); |
|
480 + } |
|
481 +#endif |
344 +#endif |
482 |
345 |
483 vFillASTModeInfo (pScrn); |
346 vFillASTModeInfo (pScrn); |
484 |
347 |
485 @@ -769,6 +828,10 @@ ASTScreenInit(int scrnIndex, ScreenPtr p |
348 @@ -836,6 +891,10 @@ ASTScreenInit(int scrnIndex, ScreenPtr pScreen, int argc, char **argv) |
486 |
349 |
487 } |
350 } |
488 |
351 |
489 +#if (defined(__sparc__)) |
352 +#if (defined(__sparc__)) |
490 + ASTNotifyModeChanged(pScrn); |
353 + ASTNotifyModeChanged(pScrn); |
491 +#endif |
354 +#endif |
492 + |
355 + |
493 if (pScrn->bitsPerPixel > 8) { |
356 if (pScrn->bitsPerPixel > 8) { |
494 /* Fixup RGB ordering */ |
357 /* Fixup RGB ordering */ |
495 visual = pScreen->visuals + pScreen->numVisuals; |
358 visual = pScreen->visuals + pScreen->numVisuals; |
496 @@ -905,8 +968,10 @@ ASTLeaveVT(int scrnIndex, int flags) |
359 @@ -999,7 +1058,9 @@ ASTLeaveVT(int scrnIndex, int flags) |
497 { |
|
498 |
360 |
499 ScrnInfoPtr pScrn = xf86Screens[scrnIndex]; |
361 ScrnInfoPtr pScrn = xf86Screens[scrnIndex]; |
500 - vgaHWPtr hwp = VGAHWPTR(pScrn); |
|
501 ASTRecPtr pAST = ASTPTR(pScrn); |
362 ASTRecPtr pAST = ASTPTR(pScrn); |
502 +#if (!defined(__sparc__)) |
363 +#if (!defined(__sparc__)) |
503 + vgaHWPtr hwp = VGAHWPTR(pScrn); |
364 vgaHWPtr hwp = VGAHWPTR(pScrn); |
504 +#endif |
365 +#endif |
505 |
366 |
506 #ifdef HWC |
367 #ifdef HWC |
507 if (pAST->pHWCPtr) { |
368 if (pAST->pHWCPtr) { |
508 @@ -925,7 +990,10 @@ ASTLeaveVT(int scrnIndex, int flags) |
369 @@ -1022,7 +1083,9 @@ ASTLeaveVT(int scrnIndex, int flags) |
509 #endif |
370 if (pAST->jChipType == AST1180) |
510 |
371 ASTBlankScreen(pScrn, 0); |
511 ASTRestore(pScrn); |
372 |
512 + |
373 +#if (!defined(__sparc__)) |
513 +#if (!defined(__sparc__)) |
|
514 vgaHWLock(hwp); |
374 vgaHWLock(hwp); |
515 +#endif |
375 +#endif |
516 |
376 |
517 } |
377 } |
518 |
378 |
519 @@ -933,8 +1001,11 @@ static void |
379 @@ -1030,8 +1093,11 @@ static void |
520 ASTFreeScreen(int scrnIndex, int flags) |
380 ASTFreeScreen(int scrnIndex, int flags) |
521 { |
381 { |
522 ASTFreeRec(xf86Screens[scrnIndex]); |
382 ASTFreeRec(xf86Screens[scrnIndex]); |
523 + |
383 + |
524 +#if (!defined(__sparc__)) |
384 +#if (!defined(__sparc__)) |
525 if (xf86LoaderCheckSymbol("vgaHWFreeHWRec")) |
385 if (xf86LoaderCheckSymbol("vgaHWFreeHWRec")) |
526 vgaHWFreeHWRec(xf86Screens[scrnIndex]); |
386 vgaHWFreeHWRec(xf86Screens[scrnIndex]); |
527 +#endif |
387 +#endif |
528 } |
388 } |
529 |
389 |
530 |
390 static ModeStatus |
531 @@ -1009,7 +1080,6 @@ ASTValidMode(int scrnIndex, DisplayModeP |
391 @@ -1122,7 +1188,6 @@ ASTValidMode(int scrnIndex, DisplayModePtr mode, Bool verbose, int flags) |
532 } |
392 return Flags; |
533 |
393 } |
534 |
394 |
535 -/* Internal used modules */ |
395 -/* Internal used modules */ |
536 /* |
396 /* |
537 * ASTGetRec and ASTFreeRec -- |
397 * ASTGetRec and ASTFreeRec -- |
538 * |
398 * |
539 @@ -1017,7 +1087,7 @@ ASTValidMode(int scrnIndex, DisplayModeP |
399 @@ -1130,7 +1195,7 @@ ASTValidMode(int scrnIndex, DisplayModePtr mode, Bool verbose, int flags) |
540 * These two functions create and destroy that private data. |
400 * These two functions create and destroy that private data. |
541 * |
401 * |
542 */ |
402 */ |
543 -static Bool |
403 -static Bool |
544 +Bool |
404 +Bool |
545 ASTGetRec(ScrnInfoPtr pScrn) |
405 ASTGetRec(ScrnInfoPtr pScrn) |
546 { |
406 { |
547 if (pScrn->driverPrivate) |
407 if (pScrn->driverPrivate) |
548 @@ -1027,6 +1097,8 @@ ASTGetRec(ScrnInfoPtr pScrn) |
408 @@ -1140,6 +1205,8 @@ ASTGetRec(ScrnInfoPtr pScrn) |
549 return TRUE; |
409 return TRUE; |
550 } |
410 } |
551 |
411 |
552 +/* Internal used modules */ |
412 +/* Internal used modules */ |
553 + |
413 + |
554 static void |
414 static void |
555 ASTFreeRec(ScrnInfoPtr pScrn) |
415 ASTFreeRec(ScrnInfoPtr pScrn) |
556 { |
416 { |
557 @@ -1058,7 +1130,9 @@ static Bool |
417 @@ -1171,7 +1238,9 @@ static Bool |
558 ASTCloseScreen(int scrnIndex, ScreenPtr pScreen) |
418 ASTCloseScreen(int scrnIndex, ScreenPtr pScreen) |
559 { |
419 { |
560 ScrnInfoPtr pScrn = xf86Screens[scrnIndex]; |
420 ScrnInfoPtr pScrn = xf86Screens[scrnIndex]; |
561 +#if (!defined(__sparc__)) |
421 +#if (!defined(__sparc__)) |
562 vgaHWPtr hwp = VGAHWPTR(pScrn); |
422 vgaHWPtr hwp = VGAHWPTR(pScrn); |
563 +#endif |
423 +#endif |
564 ASTRecPtr pAST = ASTPTR(pScrn); |
424 ASTRecPtr pAST = ASTPTR(pScrn); |
565 |
425 |
566 if (pScrn->vtSema == TRUE) |
426 if (pScrn->vtSema == TRUE) |
567 @@ -1080,11 +1154,15 @@ ASTCloseScreen(int scrnIndex, ScreenPtr |
427 @@ -1197,11 +1266,15 @@ ASTCloseScreen(int scrnIndex, ScreenPtr pScreen) |
568 #endif |
428 if (pAST->jChipType == AST1180) |
569 |
429 ASTBlankScreen(pScrn, 0); |
570 ASTRestore(pScrn); |
430 |
571 +#if (!defined(__sparc__)) |
431 +#if (!defined(__sparc__)) |
572 vgaHWLock(hwp); |
432 vgaHWLock(hwp); |
573 +#endif |
433 +#endif |
574 } |
434 } |
575 |
435 |
576 ASTUnmapMem(pScrn); |
436 ASTUnmapMem(pScrn); |
577 +#if (!defined(__sparc__)) |
437 +#if (!defined(__sparc__)) |
578 vgaHWUnmapMem(pScrn); |
438 vgaHWUnmapMem(pScrn); |
579 +#endif |
439 +#endif |
580 |
440 |
581 if(pAST->AccelInfoPtr) { |
441 if(pAST->AccelInfoPtr) { |
582 XAADestroyInfoRec(pAST->AccelInfoPtr); |
442 XAADestroyInfoRec(pAST->AccelInfoPtr); |
583 @@ -1104,12 +1182,12 @@ ASTCloseScreen(int scrnIndex, ScreenPtr |
443 @@ -1222,12 +1295,13 @@ static void |
584 static void |
|
585 ASTSave(ScrnInfoPtr pScrn) |
444 ASTSave(ScrnInfoPtr pScrn) |
586 { |
445 { |
587 - ASTRecPtr pAST; |
446 ASTRecPtr pAST; |
588 - vgaRegPtr vgaReg; |
447 - vgaRegPtr vgaReg; |
589 + ASTDECL |
|
590 ASTRegPtr astReg; |
448 ASTRegPtr astReg; |
591 int i, icount=0; |
449 int i, icount=0; |
592 |
450 ULONG ulData; |
593 - pAST = ASTPTR(pScrn); |
451 |
|
452 pAST = ASTPTR(pScrn); |
594 +#if !defined(__sparc__) |
453 +#if !defined(__sparc__) |
595 + vgaRegPtr vgaReg; |
454 + vgaRegPtr vgaReg; |
596 vgaReg = &VGAHWPTR(pScrn)->SavedReg; |
455 vgaReg = &VGAHWPTR(pScrn)->SavedReg; |
597 astReg = &pAST->SavedReg; |
456 astReg = &pAST->SavedReg; |
598 |
457 |
599 @@ -1120,6 +1198,10 @@ ASTSave(ScrnInfoPtr pScrn) |
458 @@ -1238,6 +1312,10 @@ ASTSave(ScrnInfoPtr pScrn) |
600 else { |
459 else { |
601 vgaHWSave(pScrn, vgaReg, VGA_SR_MODE); |
460 vgaHWSave(pScrn, vgaReg, VGA_SR_MODE); |
602 } |
461 } |
603 +#else |
462 +#else |
604 + astReg = &pAST->SavedReg; |
463 + astReg = &pAST->SavedReg; |
605 + ASTSaveHW(pScrn); |
464 + ASTSaveHW(pScrn); |
606 +#endif |
465 +#endif |
607 |
466 |
608 /* Ext. Save */ |
467 /* Ext. Save */ |
609 vASTOpenKey(pScrn); |
468 if (pAST->jChipType == AST1180) |
610 @@ -1136,12 +1218,12 @@ ASTSave(ScrnInfoPtr pScrn) |
469 @@ -1266,12 +1344,13 @@ static void |
611 static void |
|
612 ASTRestore(ScrnInfoPtr pScrn) |
470 ASTRestore(ScrnInfoPtr pScrn) |
613 { |
471 { |
614 - ASTRecPtr pAST; |
472 ASTRecPtr pAST; |
615 - vgaRegPtr vgaReg; |
473 - vgaRegPtr vgaReg; |
616 + ASTDECL |
|
617 ASTRegPtr astReg; |
474 ASTRegPtr astReg; |
618 int i, icount=0; |
475 int i, icount=0; |
619 |
476 ULONG ulData; |
620 - pAST = ASTPTR(pScrn); |
477 |
|
478 pAST = ASTPTR(pScrn); |
621 +#if !defined(__sparc__) |
479 +#if !defined(__sparc__) |
622 + vgaRegPtr vgaReg; |
480 + vgaRegPtr vgaReg; |
623 vgaReg = &VGAHWPTR(pScrn)->SavedReg; |
481 vgaReg = &VGAHWPTR(pScrn)->SavedReg; |
624 astReg = &pAST->SavedReg; |
482 astReg = &pAST->SavedReg; |
625 |
483 |
626 @@ -1162,12 +1244,25 @@ ASTRestore(ScrnInfoPtr pScrn) |
484 @@ -1303,18 +1382,21 @@ ASTRestore(ScrnInfoPtr pScrn) |
627 for (i=0xBC; i<=0xC1; i++) |
485 SetIndexReg(CRTC_PORT, (UCHAR) (i), astReg->ExtCRTC[icount++]); |
628 SetIndexReg(CRTC_PORT, (UCHAR) (i), astReg->ExtCRTC[icount++]); |
486 SetIndexReg(CRTC_PORT, (UCHAR) (0xBB), astReg->ExtCRTC[icount]); |
629 SetIndexReg(CRTC_PORT, (UCHAR) (0xBB), astReg->ExtCRTC[icount]); |
487 } |
630 +#endif |
488 - |
631 |
489 +#endif /* __sparc__ */ |
632 } |
490 } |
633 |
491 |
634 static void |
492 static void |
635 ASTProbeDDC(ScrnInfoPtr pScrn, int index) |
493 ASTProbeDDC(ScrnInfoPtr pScrn, int index) |
636 { |
494 { |
637 + unsigned char DDC_data[128]; |
495 - vbeInfoPtr pVbe; |
638 + |
496 ASTRecPtr pAST = ASTPTR(pScrn); |
|
497 unsigned char DDC_data[128]; |
|
498 Bool Flags; |
|
499 |
639 +#if defined(__sparc__) |
500 +#if defined(__sparc__) |
640 + if ((xf86LoadSubModule(pScrn, "ddc")) && (GetVGAEDID(pScrn, DDC_data) == TRUE)) |
501 + if (xf86LoadSubModule(pScrn, "ddc")) |
641 + { |
502 +#else |
642 + ConfiguredMonitor = xf86InterpretEDID(pScrn->scrnIndex, DDC_data); |
503 if ( (pAST->jChipType == AST1180) || (!xf86IsPrimaryPci(pAST->PciInfo)) ) |
643 + } |
504 +#endif |
644 + else |
505 { |
645 + { |
506 if (pAST->jChipType == AST1180) |
646 + xf86DrvMsg(pScrn->scrnIndex, X_INFO,"[ASTProbeDDC] Can't Load DDC Sub-Modules or Read EDID Failed \n"); |
507 Flags = GetVGA2EDID(pScrn, DDC_data); |
647 + } |
508 @@ -1328,14 +1410,16 @@ ASTProbeDDC(ScrnInfoPtr pScrn, int index) |
648 +#else |
509 else |
649 vbeInfoPtr pVbe; |
510 xf86DrvMsg(pScrn->scrnIndex, X_INFO,"[ASTProbeDDC] Can't Get EDID Properly \n"); |
650 |
511 } |
651 if (xf86LoadSubModule(pScrn, "vbe")) { |
512 +#if !defined(__sparc__) |
652 @@ -1175,6 +1270,7 @@ ASTProbeDDC(ScrnInfoPtr pScrn, int index |
513 else |
653 ConfiguredMonitor = vbeDoEDID(pVbe, NULL); |
514 { |
654 vbeFree(pVbe); |
515 if (xf86LoadSubModule(pScrn, "vbe")) { |
|
516 - pVbe = VBEInit(NULL, index); |
|
517 + vbeInfoPtr pVbe = VBEInit(NULL, index); |
|
518 ConfiguredMonitor = vbeDoEDID(pVbe, NULL); |
|
519 vbeFree(pVbe); |
|
520 } |
655 } |
521 } |
656 +#endif |
522 +#endif |
657 } |
523 } |
658 |
524 |
659 #define SkipDT 0x00 |
525 #define SkipDT 0x00 |
660 @@ -1184,15 +1280,18 @@ ASTProbeDDC(ScrnInfoPtr pScrn, int index |
526 @@ -1345,6 +1429,7 @@ ASTProbeDDC(ScrnInfoPtr pScrn, int index) |
661 static xf86MonPtr |
527 static xf86MonPtr |
662 ASTDoDDC(ScrnInfoPtr pScrn, int index) |
528 ASTDoDDC(ScrnInfoPtr pScrn, int index) |
663 { |
529 { |
664 +#if !defined(__sparc__) |
530 +#if !defined(__sparc__) |
665 vbeInfoPtr pVbe; |
531 vbeInfoPtr pVbe; |
666 - xf86MonPtr MonInfo = NULL, MonInfo1 = NULL, MonInfo2 = NULL; |
532 xf86MonPtr MonInfo = NULL, MonInfo1 = NULL, MonInfo2 = NULL; |
667 - ASTRecPtr pAST = ASTPTR(pScrn); |
533 ASTRecPtr pAST = ASTPTR(pScrn); |
668 + xf86MonPtr MonInfo1 = NULL, MonInfo2 = NULL; |
534 @@ -1539,6 +1624,30 @@ ASTDoDDC(ScrnInfoPtr pScrn, int index) |
669 unsigned long i, j, k; |
535 } |
670 - unsigned char DDC_data[128]; |
|
671 struct monitor_ranges ranges, ranges1, ranges2; |
|
672 int DTSelect, dclock1=0, h_active1=0, v_active1=0, dclock2=0, h_active2=0, v_active2=0; |
|
673 struct std_timings stdtiming, *stdtiming1, *stdtiming2; |
|
674 |
536 |
675 + xf86MonPtr MonInfo = NULL; |
537 } /* AST1180 */ |
676 + ASTRecPtr pAST = ASTPTR(pScrn); |
538 +#else /* __sparc__ */ |
677 + unsigned char DDC_data[128]; |
|
678 + |
|
679 /* Honour Option "noDDC" */ |
|
680 if (xf86ReturnOptValBool(pAST->Options, OPTION_NO_DDC, FALSE)) { |
|
681 return MonInfo; |
|
682 @@ -1203,7 +1302,7 @@ ASTDoDDC(ScrnInfoPtr pScrn, int index) |
|
683 MonInfo = MonInfo1; |
|
684 |
|
685 /* For VGA2 CLONE Support, ycchen@012508 */ |
|
686 - if ((xf86ReturnOptValBool(pAST->Options, OPTION_VGA2_CLONE, FALSE)) || pAST->VGA2Clone) { |
|
687 + if (xf86ReturnOptValBool(pAST->Options, OPTION_VGA2_CLONE, FALSE)) { |
|
688 if (GetVGA2EDID(pScrn, DDC_data) == TRUE) { |
|
689 xf86DrvMsg(pScrn->scrnIndex, X_INFO, "Get VGA2 EDID Correctly!! \n"); |
|
690 MonInfo2 = xf86InterpretEDID(pScrn->scrnIndex, DDC_data); |
|
691 @@ -1350,6 +1449,30 @@ ASTDoDDC(ScrnInfoPtr pScrn, int index) |
|
692 xf86DrvMsg(pScrn->scrnIndex, X_INFO, |
|
693 "this driver cannot do DDC without VBE\n"); |
|
694 } |
|
695 +#else |
|
696 + |
539 + |
697 + xf86MonPtr MonInfo = NULL; |
540 + xf86MonPtr MonInfo = NULL; |
698 + ASTRecPtr pAST = ASTPTR(pScrn); |
541 + ASTRecPtr pAST = ASTPTR(pScrn); |
699 + unsigned char DDC_data[128]; |
542 + unsigned char DDC_data[128]; |
700 + |
543 + |
714 + { |
557 + { |
715 + xf86DrvMsg(pScrn->scrnIndex, X_INFO,"[ASTDoDDC] Can't Load DDC Sub-Modules or Read EDID Failed \n"); |
558 + xf86DrvMsg(pScrn->scrnIndex, X_INFO,"[ASTDoDDC] Can't Load DDC Sub-Modules or Read EDID Failed \n"); |
716 + } |
559 + } |
717 + |
560 + |
718 +#endif |
561 +#endif |
719 |
562 |
720 return MonInfo; |
563 return MonInfo; |
721 } |
564 } |
722 @@ -1375,9 +1498,14 @@ ASTModeInit(ScrnInfoPtr pScrn, DisplayMo |
565 @@ -1564,9 +1673,14 @@ ASTModeInit(ScrnInfoPtr pScrn, DisplayModePtr mode) |
723 vgaHWPtr hwp; |
566 vgaHWPtr hwp; |
724 ASTRecPtr pAST; |
567 ASTRecPtr pAST; |
725 |
568 |
726 - hwp = VGAHWPTR(pScrn); |
569 - hwp = VGAHWPTR(pScrn); |
727 pAST = ASTPTR(pScrn); |
570 pAST = ASTPTR(pScrn); |
728 |
571 |
729 + pScrn->vtSema = TRUE; |
572 + pScrn->vtSema = TRUE; |
730 + pAST->ModePtr = mode; |
573 + pAST->ModePtr = mode; |
731 + |
574 + |
732 +#if !defined(__sparc__) |
575 +#if !defined(__sparc__) |
733 + hwp = VGAHWPTR(pScrn); |
576 + hwp = VGAHWPTR(pScrn); |
734 + |
577 + |
735 vgaHWUnlock(hwp); |
578 vgaHWUnlock(hwp); |
736 |
579 |
737 if (!vgaHWInit(pScrn, mode)) |
580 if (!vgaHWInit(pScrn, mode)) |
738 @@ -1390,6 +1518,10 @@ ASTModeInit(ScrnInfoPtr pScrn, DisplayMo |
581 @@ -1579,6 +1693,10 @@ ASTModeInit(ScrnInfoPtr pScrn, DisplayModePtr mode) |
739 return FALSE; |
582 return FALSE; |
740 |
583 |
741 vgaHWProtect(pScrn, FALSE); |
584 vgaHWProtect(pScrn, FALSE); |
742 +#else |
585 +#else |
743 + if (!ASTSetMode(pScrn, mode)) |
586 + if (!ASTSetMode(pScrn, mode)) |
744 + return FALSE; |
587 + return FALSE; |
745 +#endif |
588 +#endif |
746 |
589 |
747 return TRUE; |
590 return TRUE; |
748 } |
591 } |
749 diff -urp -x '*~' -x '*.orig' src/ast_mode.c src/ast_mode.c |
592 diff --git a/src/ast_mode.c b/src/ast_mode.c |
750 --- src/ast_mode.c 2010-08-10 07:38:29.000000000 -0700 |
593 index b58916f..3ea5089 100644 |
751 +++ src/ast_mode.c 2010-08-16 13:45:07.713865832 -0700 |
594 --- a/src/ast_mode.c |
752 @@ -425,11 +425,9 @@ ASTSetMode(ScrnInfoPtr pScrn, DisplayMod |
595 +++ b/src/ast_mode.c |
753 |
596 @@ -798,6 +798,16 @@ void vSetExtReg(ScrnInfoPtr pScrn, DisplayModePtr mode, PVBIOS_MODE_INFO pVGAMod |
754 Bool bGetAST1000VGAModeInfo(ScrnInfoPtr pScrn, DisplayModePtr mode, PVBIOS_MODE_INFO pVGAModeInfo) |
|
755 { |
|
756 - ASTRecPtr pAST; |
|
757 + ASTDECL |
|
758 ULONG ulModeID, ulColorIndex, ulRefreshRate, ulRefreshRateIndex = 0; |
|
759 ULONG ulHBorder, ulVBorder; |
|
760 - |
|
761 - pAST = ASTPTR(pScrn); |
|
762 |
|
763 switch (pScrn->bitsPerPixel) |
|
764 { |
|
765 @@ -536,13 +534,12 @@ Bool bGetAST1000VGAModeInfo(ScrnInfoPtr |
|
766 void vSetStdReg(ScrnInfoPtr pScrn, DisplayModePtr mode, PVBIOS_MODE_INFO pVGAModeInfo) |
|
767 { |
|
768 |
|
769 + ASTDECL |
|
770 PVBIOS_STDTABLE_STRUCT pStdModePtr; |
|
771 - ASTRecPtr pAST; |
|
772 ULONG i; |
|
773 UCHAR jReg; |
|
774 |
|
775 pStdModePtr = pVGAModeInfo->pStdTableEntry; |
|
776 - pAST = ASTPTR(pScrn); |
|
777 |
|
778 /* Set Misc */ |
|
779 jReg = pStdModePtr->MISC; |
|
780 @@ -566,7 +563,7 @@ void vSetStdReg(ScrnInfoPtr pScrn, Displ |
|
781 } |
|
782 |
|
783 /* Set AR */ |
|
784 - jReg = GetReg(INPUT_STATUS1_READ); |
|
785 + GetReg(INPUT_STATUS1_READ, jReg); |
|
786 for (i=0; i<20; i++) |
|
787 { |
|
788 jReg = pStdModePtr->AR[i]; |
|
789 @@ -576,7 +573,7 @@ void vSetStdReg(ScrnInfoPtr pScrn, Displ |
|
790 SetReg(AR_PORT_WRITE, 0x14); |
|
791 SetReg(AR_PORT_WRITE, 0x00); |
|
792 |
|
793 - jReg = GetReg(INPUT_STATUS1_READ); |
|
794 + GetReg(INPUT_STATUS1_READ, jReg); |
|
795 SetReg (AR_PORT_WRITE, 0x20); /* set POS */ |
|
796 |
|
797 /* Set GR */ |
|
798 @@ -593,11 +590,10 @@ void vSetStdReg(ScrnInfoPtr pScrn, Displ |
|
799 void |
|
800 vSetCRTCReg(ScrnInfoPtr pScrn, DisplayModePtr mode, PVBIOS_MODE_INFO pVGAModeInfo) |
|
801 { |
|
802 - ASTRecPtr pAST; |
|
803 + ASTDECL |
|
804 USHORT usTemp; |
|
805 UCHAR jReg05, jReg07, jReg09, jRegAC, jRegAD, jRegAE; |
|
806 |
|
807 - pAST = ASTPTR(pScrn); |
|
808 jReg05 = jReg07 = jReg09 = jRegAC = jRegAD = jRegAE = 0; |
|
809 |
|
810 /* unlock CRTC */ |
|
811 @@ -667,11 +663,9 @@ vSetCRTCReg(ScrnInfoPtr pScrn, DisplayMo |
|
812 |
|
813 void vSetOffsetReg(ScrnInfoPtr pScrn, DisplayModePtr mode, PVBIOS_MODE_INFO pVGAModeInfo) |
|
814 { |
|
815 - ASTRecPtr pAST; |
|
816 + ASTDECL |
|
817 USHORT usOffset; |
|
818 |
|
819 - pAST = ASTPTR(pScrn); |
|
820 - |
|
821 usOffset = pAST->VideoModeInfo.ScreenPitch >> 3; /* Unit: char */ |
|
822 |
|
823 SetIndexReg(CRTC_PORT,0x13, (UCHAR) (usOffset & 0xFF)); |
|
824 @@ -681,11 +675,9 @@ void vSetOffsetReg(ScrnInfoPtr pScrn, Di |
|
825 |
|
826 void vSetDCLKReg(ScrnInfoPtr pScrn, DisplayModePtr mode, PVBIOS_MODE_INFO pVGAModeInfo) |
|
827 { |
|
828 + ASTDECL |
|
829 PVBIOS_ENHTABLE_STRUCT pEnhModePtr; |
|
830 PVBIOS_DCLK_INFO pDCLKPtr; |
|
831 - ASTRecPtr pAST; |
|
832 - |
|
833 - pAST = ASTPTR(pScrn); |
|
834 |
|
835 pEnhModePtr = pVGAModeInfo->pEnhTableEntry; |
|
836 pDCLKPtr = &DCLKTable[pEnhModePtr->DCLKIndex]; |
|
837 @@ -700,11 +692,10 @@ void vSetDCLKReg(ScrnInfoPtr pScrn, Disp |
|
838 void vSetExtReg(ScrnInfoPtr pScrn, DisplayModePtr mode, PVBIOS_MODE_INFO pVGAModeInfo) |
|
839 { |
|
840 |
|
841 - ASTRecPtr pAST; |
|
842 + ASTDECL |
|
843 UCHAR jRegA0, jRegA3, jRegA8; |
|
844 + UCHAR jRegA2 = 0x00; |
|
845 |
|
846 - pAST = ASTPTR(pScrn); |
|
847 - |
|
848 jRegA0=jRegA3=jRegA8=0; |
|
849 /* Mode Type Setting */ |
|
850 switch (pScrn->bitsPerPixel) { |
|
851 @@ -729,6 +720,14 @@ void vSetExtReg(ScrnInfoPtr pScrn, Displ |
|
852 SetIndexRegMask(CRTC_PORT,0xA3, 0xF0, (UCHAR) jRegA3); |
597 SetIndexRegMask(CRTC_PORT,0xA3, 0xF0, (UCHAR) jRegA3); |
853 SetIndexRegMask(CRTC_PORT,0xA8, 0xFD, (UCHAR) jRegA8); |
598 SetIndexRegMask(CRTC_PORT,0xA8, 0xFD, (UCHAR) jRegA8); |
854 |
599 |
855 +#if defined(__sparc__) |
600 +#if defined(__sparc__) |
|
601 + UCHAR jRegA2 = 0x00; |
|
602 + |
856 + if ((pScrn->bitsPerPixel == 15) || (pScrn->bitsPerPixel == 16) ) |
603 + if ((pScrn->bitsPerPixel == 15) || (pScrn->bitsPerPixel == 16) ) |
857 + jRegA2 |= 0xC0; |
604 + jRegA2 |= 0xC0; |
858 + else if (pScrn->bitsPerPixel == 32) |
605 + else if (pScrn->bitsPerPixel == 32) |
859 + jRegA2 |= 0x80; |
606 + jRegA2 |= 0x80; |
860 + SetIndexRegMask(CRTC_PORT,0xA2, 0x3F, (UCHAR) jRegA2); |
607 + SetIndexRegMask(CRTC_PORT,0xA2, 0x3F, (UCHAR) jRegA2); |
861 +#endif |
608 +#endif |
862 + |
609 + |
863 /* Set Threshold */ |
610 /* Set Threshold */ |
864 if (pAST->jChipType == AST2300) |
611 if (pAST->jChipType == AST2300) |
865 { |
612 { |
866 @@ -750,14 +749,13 @@ void vSetExtReg(ScrnInfoPtr pScrn, Displ |
613 diff --git a/src/ast_tool.c b/src/ast_tool.c |
867 |
614 index 1dd87f0..7d9ed0d 100644 |
868 void vSetSyncReg(ScrnInfoPtr pScrn, DisplayModePtr mode, PVBIOS_MODE_INFO pVGAModeInfo) |
615 --- a/src/ast_tool.c |
869 { |
616 +++ b/src/ast_tool.c |
870 + ASTDECL |
|
871 PVBIOS_ENHTABLE_STRUCT pEnhModePtr; |
|
872 - ASTRecPtr pAST; |
|
873 UCHAR jReg; |
|
874 |
|
875 - pAST = ASTPTR(pScrn); |
|
876 pEnhModePtr = pVGAModeInfo->pEnhTableEntry; |
|
877 |
|
878 - jReg = GetReg(MISC_PORT_READ); |
|
879 + GetReg(MISC_PORT_READ, jReg); |
|
880 jReg |= (UCHAR) (pEnhModePtr->Flags & SyncNN); |
|
881 SetReg(MISC_PORT_WRITE,jReg); |
|
882 |
|
883 @@ -765,13 +763,11 @@ void vSetSyncReg(ScrnInfoPtr pScrn, Disp |
|
884 |
|
885 Bool bSetDACReg(ScrnInfoPtr pScrn, DisplayModePtr mode, PVBIOS_MODE_INFO pVGAModeInfo) |
|
886 { |
|
887 + ASTDECL |
|
888 PVBIOS_DAC_INFO pDACPtr; |
|
889 - ASTRecPtr pAST; |
|
890 ULONG i, ulDACNumber; |
|
891 UCHAR DACR, DACG, DACB; |
|
892 |
|
893 - pAST = ASTPTR(pScrn); |
|
894 - |
|
895 switch (pScrn->bitsPerPixel) |
|
896 { |
|
897 case 8: |
|
898 diff -urp -x '*~' -x '*.orig' src/ast_mode.h src/ast_mode.h |
|
899 --- src/ast_mode.h 2010-08-10 07:38:29.000000000 -0700 |
|
900 +++ src/ast_mode.h 2010-08-16 13:45:07.714072591 -0700 |
|
901 @@ -20,6 +20,9 @@ |
|
902 * PERFORMANCE OF THIS SOFTWARE. |
|
903 */ |
|
904 |
|
905 +#ifndef ASTMODE_H |
|
906 +#define ASTMODE_H |
|
907 + |
|
908 /* Mode Limitation */ |
|
909 #define MAX_HResolution 1920 |
|
910 #define MAX_VResolution 1200 |
|
911 @@ -119,3 +122,5 @@ typedef struct { |
|
912 PVBIOS_ENHTABLE_STRUCT pEnhTableEntry; |
|
913 |
|
914 } VBIOS_MODE_INFO, *PVBIOS_MODE_INFO; |
|
915 + |
|
916 +#endif /* ASTMODE_H */ |
|
917 diff -urp -x '*~' -x '*.orig' src/ast_tool.c src/ast_tool.c |
|
918 --- src/ast_tool.c 2009-10-29 13:33:38.000000000 -0700 |
|
919 +++ src/ast_tool.c 2010-08-16 13:45:07.714339101 -0700 |
|
920 @@ -60,16 +60,29 @@ Bool ASTUnmapMem(ScrnInfoPtr pScrn); |
617 @@ -60,16 +60,29 @@ Bool ASTUnmapMem(ScrnInfoPtr pScrn); |
921 Bool ASTMapMMIO(ScrnInfoPtr pScrn); |
618 Bool ASTMapMMIO(ScrnInfoPtr pScrn); |
922 void ASTUnmapMMIO(ScrnInfoPtr pScrn); |
619 void ASTUnmapMMIO(ScrnInfoPtr pScrn); |
923 |
620 |
924 +#if defined(__sparc__) |
621 +#if defined(__sparc__) |
1055 +#endif |
732 +#endif |
1056 + |
733 + |
1057 return (TRUE); |
734 return (TRUE); |
1058 |
735 |
1059 } |
736 } |
1060 @@ -96,7 +119,7 @@ bASTRegInit(ScrnInfoPtr pScrn) |
737 @@ -445,6 +466,7 @@ vASTLoadPalette(ScrnInfoPtr pScrn, int numColors, int *indices, LOCO *colors, |
1061 void |
|
1062 GetDRAMInfo(ScrnInfoPtr pScrn) |
|
1063 { |
|
1064 - ASTRecPtr pAST = ASTPTR(pScrn); |
|
1065 + ASTDECL |
|
1066 ULONG ulData; |
|
1067 |
|
1068 if ( (pAST->jChipType != AST2000) ) |
|
1069 @@ -136,7 +159,7 @@ GetDRAMInfo(ScrnInfoPtr pScrn) |
|
1070 ULONG |
|
1071 GetVRAMInfo(ScrnInfoPtr pScrn) |
|
1072 { |
|
1073 - ASTRecPtr pAST = ASTPTR(pScrn); |
|
1074 + ASTDECL |
|
1075 UCHAR jReg; |
|
1076 |
|
1077 vASTOpenKey(pScrn); |
|
1078 @@ -162,7 +185,7 @@ GetVRAMInfo(ScrnInfoPtr pScrn) |
|
1079 ULONG |
|
1080 GetMaxDCLK(ScrnInfoPtr pScrn) |
|
1081 { |
|
1082 - ASTRecPtr pAST = ASTPTR(pScrn); |
|
1083 + ASTDECL |
|
1084 UCHAR jReg; |
|
1085 ULONG ulData, ulData2; |
|
1086 ULONG ulRefPLL, ulDeNumerator, ulNumerator, ulDivider; |
|
1087 @@ -251,7 +274,7 @@ GetMaxDCLK(ScrnInfoPtr pScrn) |
|
1088 void |
|
1089 GetChipType(ScrnInfoPtr pScrn) |
|
1090 { |
|
1091 - ASTRecPtr pAST = ASTPTR(pScrn); |
|
1092 + ASTDECL |
|
1093 ULONG ulData; |
|
1094 UCHAR jReg; |
|
1095 |
|
1096 @@ -295,6 +318,8 @@ GetChipType(ScrnInfoPtr pScrn) |
|
1097 void |
|
1098 vSetStartAddressCRT1(ASTRecPtr pAST, ULONG base) |
|
1099 { |
|
1100 + ASTDECL_FD |
|
1101 + |
|
1102 SetIndexReg(CRTC_PORT,0x0D, (UCHAR) (base & 0xFF)); |
|
1103 SetIndexReg(CRTC_PORT,0x0C, (UCHAR) ((base >> 8) & 0xFF)); |
|
1104 SetIndexReg(CRTC_PORT,0xAF, (UCHAR) ((base >> 16) & 0xFF)); |
|
1105 @@ -304,6 +329,8 @@ vSetStartAddressCRT1(ASTRecPtr pAST, ULO |
|
1106 void |
|
1107 vAST1000DisplayOff(ASTRecPtr pAST) |
|
1108 { |
|
1109 + ASTDECL_FD |
|
1110 + |
|
1111 SetIndexRegMask(SEQ_PORT,0x01, 0xDF, 0x20); |
|
1112 |
|
1113 } |
|
1114 @@ -312,6 +339,7 @@ vAST1000DisplayOff(ASTRecPtr pAST) |
|
1115 void |
|
1116 vAST1000DisplayOn(ASTRecPtr pAST) |
|
1117 { |
|
1118 + ASTDECL_FD |
|
1119 |
|
1120 SetIndexRegMask(SEQ_PORT,0x01, 0xDF, 0x00); |
|
1121 |
|
1122 @@ -319,7 +347,7 @@ vAST1000DisplayOn(ASTRecPtr pAST) |
|
1123 |
|
1124 void ASTBlankScreen(ScrnInfoPtr pScrn, Bool unblack) |
|
1125 { |
|
1126 - ASTRecPtr pAST; |
|
1127 + ASTDECL |
|
1128 |
|
1129 pAST = ASTPTR(pScrn); |
|
1130 |
|
1131 @@ -333,8 +361,7 @@ void |
|
1132 vASTLoadPalette(ScrnInfoPtr pScrn, int numColors, int *indices, LOCO *colors, |
|
1133 VisualPtr pVisual) |
|
1134 { |
|
1135 - |
|
1136 - ASTRecPtr pAST = ASTPTR(pScrn); |
|
1137 + ASTDECL |
|
1138 int i, j, index; |
|
1139 UCHAR DACIndex, DACR, DACG, DACB; |
|
1140 |
|
1141 @@ -397,10 +424,10 @@ vASTLoadPalette(ScrnInfoPtr pScrn, int n |
|
1142 void |
738 void |
1143 ASTDisplayPowerManagementSet(ScrnInfoPtr pScrn, int PowerManagementMode, int flags) |
739 ASTDisplayPowerManagementSet(ScrnInfoPtr pScrn, int PowerManagementMode, int flags) |
1144 { |
740 { |
1145 - ASTRecPtr pAST; |
741 +#if !defined(__sparc__) |
1146 + ASTDECL |
742 ASTRecPtr pAST; |
1147 UCHAR SEQ01, CRB6; |
743 UCHAR SEQ01, CRB6; |
1148 |
744 ULONG ulData, ulTemp; |
1149 - pAST = ASTPTR(pScrn); |
745 @@ -494,6 +516,7 @@ ASTDisplayPowerManagementSet(ScrnInfoPtr pScrn, int PowerManagementMode, int fla |
1150 +#if !defined(__sparc__) |
746 SetIndexRegMask(SEQ_PORT,0x01, 0xDF, SEQ01); |
1151 SEQ01=CRB6=0; |
747 SetIndexRegMask(CRTC_PORT,0xB6, 0xFC, CRB6); |
1152 |
748 } |
1153 vASTOpenKey(pScrn); |
749 +#endif |
1154 @@ -430,6 +457,7 @@ ASTDisplayPowerManagementSet(ScrnInfoPtr |
750 |
1155 |
751 } |
1156 SetIndexRegMask(SEQ_PORT,0x01, 0xDF, SEQ01); |
752 |
1157 SetIndexRegMask(CRTC_PORT,0xB6, 0xFC, CRB6); |
753 @@ -985,7 +1008,7 @@ AST_DRAMStruct AST1100DRAMTableData[] = { |
1158 +#endif |
|
1159 |
|
1160 |
|
1161 } |
|
1162 @@ -441,7 +469,7 @@ ASTDisplayPowerManagementSet(ScrnInfoPtr |
|
1163 Bool |
|
1164 GetVGA2EDID(ScrnInfoPtr pScrn, unsigned char *pEDIDBuffer) |
|
1165 { |
|
1166 - ASTRecPtr pAST = ASTPTR(pScrn); |
|
1167 + ASTDECL |
|
1168 UCHAR *ulI2CBase = pAST->MMIOVirtualAddr + 0x10000 + I2C_OFFSET; |
|
1169 ULONG i, ulData; |
|
1170 UCHAR *pjEDID; |
|
1171 @@ -530,12 +558,12 @@ GetVGA2EDID(ScrnInfoPtr pScrn, unsigned |
|
1172 /* Init VGA */ |
|
1173 Bool bIsVGAEnabled(ScrnInfoPtr pScrn) |
|
1174 { |
|
1175 - ASTRecPtr pAST; |
|
1176 + ASTDECL |
|
1177 UCHAR ch; |
|
1178 |
|
1179 pAST = ASTPTR(pScrn); |
|
1180 |
|
1181 - ch = GetReg(pAST->RelocateIO+0x43); |
|
1182 + GetReg(pAST->RelocateIO+0x43, ch); |
|
1183 |
|
1184 if (ch) |
|
1185 { |
|
1186 @@ -552,9 +580,7 @@ Bool bIsVGAEnabled(ScrnInfoPtr pScrn) |
|
1187 |
|
1188 void vEnableVGA(ScrnInfoPtr pScrn) |
|
1189 { |
|
1190 - ASTRecPtr pAST; |
|
1191 - |
|
1192 - pAST = ASTPTR(pScrn); |
|
1193 + ASTDECL |
|
1194 |
|
1195 SetReg(pAST->RelocateIO+0x43, 0x01); |
|
1196 SetReg(pAST->RelocateIO+0x42, 0x01); |
|
1197 @@ -577,7 +603,7 @@ UCHAR ExtRegInfo_AST2300[] = { |
|
1198 |
|
1199 void vSetDefExtReg(ScrnInfoPtr pScrn) |
|
1200 { |
|
1201 - ASTRecPtr pAST; |
|
1202 + ASTDECL |
|
1203 UCHAR i, jIndex, *pjExtRegInfo; |
|
1204 |
|
1205 pAST = ASTPTR(pScrn); |
|
1206 @@ -698,7 +724,7 @@ AST_DRAMStruct AST1100DRAMTableData[] = |
|
1207 { 0x0030, 0x00000040 }, |
754 { 0x0030, 0x00000040 }, |
1208 { 0x0028, 0x00000003 }, |
755 { 0x0028, 0x00000003 }, |
1209 { 0x000C, 0x00005a21 }, |
756 { 0x000C, 0x00005a21 }, |
1210 - { 0x0034, 0x00007c03 }, |
757 - { 0x0034, 0x00007c03 }, |
1211 + { 0x0034, 0x00007c43 }, |
758 + { 0x0034, 0x00007c43 }, |
1212 { 0x0120, 0x00004c41 }, |
759 { 0x0120, 0x00004c41 }, |
1213 { 0xffff, 0xffffffff }, |
760 { 0xffff, 0xffffffff }, |
1214 }; |
761 }; |
1215 @@ -751,15 +777,15 @@ AST_DRAMStruct AST2100DRAMTableData[] = |
762 @@ -1038,7 +1061,7 @@ AST_DRAMStruct AST2100DRAMTableData[] = { |
1216 { 0x0030, 0x00000040 }, |
763 { 0x0030, 0x00000040 }, |
1217 { 0x0028, 0x00000003 }, |
764 { 0x0028, 0x00000003 }, |
1218 { 0x000C, 0x00005a21 }, |
765 { 0x000C, 0x00005a21 }, |
1219 - { 0x0034, 0x00007c03 }, |
766 - { 0x0034, 0x00007c03 }, |
1220 + { 0x0034, 0x00007c43 }, |
767 + { 0x0034, 0x00007c43 }, |
1221 { 0x0120, 0x00005061 }, |
768 { 0x0120, 0x00005061 }, |
1222 { 0xffff, 0xffffffff }, |
769 { 0xffff, 0xffffffff }, |
1223 }; |
770 }; |
1224 |
771 @@ -2654,9 +2677,11 @@ Bool InitVGA(ScrnInfoPtr pScrn, ULONG Flags) |
1225 void vInitDRAMReg(ScrnInfoPtr pScrn) |
772 |
1226 { |
|
1227 + ASTDECL |
|
1228 AST_DRAMStruct *pjDRAMRegInfo; |
|
1229 - ASTRecPtr pAST = ASTPTR(pScrn); |
|
1230 ULONG i, ulTemp, ulData; |
|
1231 UCHAR jReg; |
|
1232 |
|
1233 @@ -858,16 +884,16 @@ void vInitDRAMReg(ScrnInfoPtr pScrn) |
|
1234 |
|
1235 Bool InitVGA(ScrnInfoPtr pScrn) |
|
1236 { |
|
1237 - ASTRecPtr pAST; |
|
1238 + ASTDECL |
|
1239 ULONG ulData; |
|
1240 |
|
1241 - pAST = ASTPTR(pScrn); |
|
1242 - |
|
1243 { |
773 { |
1244 /* Enable PCI */ |
774 /* Enable PCI */ |
1245 +#if !defined(__sparc__) |
775 +#if !defined(__sparc__) |
1246 PCI_READ_LONG(pAST->PciInfo, &ulData, 0x04); |
776 PCI_READ_LONG(pAST->PciInfo, &ulData, 0x04); |
1247 ulData |= 0x03; |
777 ulData |= 0x03; |
1248 PCI_WRITE_LONG(pAST->PciInfo, ulData, 0x04); |
778 PCI_WRITE_LONG(pAST->PciInfo, ulData, 0x04); |
1249 +#endif |
779 +#endif |
1250 |
780 |
1251 /* Enable VGA */ |
781 /* Enable VGA */ |
1252 vEnableVGA(pScrn); |
782 vEnableVGA(pScrn); |
1253 @@ -881,3 +907,265 @@ Bool InitVGA(ScrnInfoPtr pScrn) |
783 diff --git a/src/ast_vgatool.h b/src/ast_vgatool.h |
1254 |
784 index 53cb4c7..9f5fa50 100644 |
1255 return (TRUE); |
785 --- a/src/ast_vgatool.h |
1256 } /* Init VGA */ |
786 +++ b/src/ast_vgatool.h |
1257 + |
|
1258 +#if defined(__sparc__) |
|
1259 +/* Get EDID */ |
|
1260 +void |
|
1261 +I2CWriteClock(ASTRecPtr pAST, UCHAR data) |
|
1262 +{ |
|
1263 + UCHAR ujCRB7, jtemp; |
|
1264 + ULONG i; |
|
1265 + ASTDECL_FD |
|
1266 + |
|
1267 + for (i=0;i<0x10000; i++) |
|
1268 + { |
|
1269 + ujCRB7 = ((data & 0x01) ? 0:1); /* low active */ |
|
1270 + SetIndexRegMask(CRTC_PORT, 0xB7, 0xFE, ujCRB7); |
|
1271 + GetIndexRegMask(CRTC_PORT, 0xB7, 0x01, jtemp); |
|
1272 + if (ujCRB7 == jtemp) break; |
|
1273 + } |
|
1274 + |
|
1275 +} |
|
1276 + |
|
1277 +void |
|
1278 +I2CWriteData(ASTRecPtr pAST, UCHAR data) |
|
1279 +{ |
|
1280 + UCHAR volatile ujCRB7, jtemp; |
|
1281 + ULONG i; |
|
1282 + ASTDECL_FD |
|
1283 + |
|
1284 + for (i=0;i<0x1000; i++) |
|
1285 + { |
|
1286 + ujCRB7 = ((data & 0x01) ? 0:1) << 2; /* low active */ |
|
1287 + SetIndexRegMask(CRTC_PORT, 0xB7, 0xFB, ujCRB7); |
|
1288 + GetIndexRegMask(CRTC_PORT, 0xB7, 0x04, jtemp); |
|
1289 + if (ujCRB7 == jtemp) break; |
|
1290 + } |
|
1291 + |
|
1292 +} |
|
1293 + |
|
1294 +Bool |
|
1295 +I2CReadClock(ASTRecPtr pAST) |
|
1296 +{ |
|
1297 + UCHAR volatile ujCRB7; |
|
1298 + ASTDECL_FD |
|
1299 + |
|
1300 + GetIndexRegMask(CRTC_PORT, 0xB7, 0x10, ujCRB7); |
|
1301 + ujCRB7 >>= 4; |
|
1302 + |
|
1303 + return ((ujCRB7 & 0x01) ? 1:0); |
|
1304 +} |
|
1305 + |
|
1306 +Bool |
|
1307 +I2CReadData(ASTRecPtr pAST) |
|
1308 +{ |
|
1309 + UCHAR volatile ujCRB7; |
|
1310 + ASTDECL_FD |
|
1311 + |
|
1312 + GetIndexRegMask(CRTC_PORT, 0xB7, 0x20, ujCRB7); |
|
1313 + ujCRB7 >>= 5; |
|
1314 + |
|
1315 + return ((ujCRB7 & 0x01) ? 1:0); |
|
1316 + |
|
1317 +} |
|
1318 + |
|
1319 + |
|
1320 +void |
|
1321 +I2CDelay(ASTRecPtr pAST) |
|
1322 +{ |
|
1323 + ULONG i; |
|
1324 + UCHAR jtemp; |
|
1325 + ASTDECL_FD |
|
1326 + |
|
1327 + for (i=0;i<150;i++) |
|
1328 + GetReg(SEQ_PORT, jtemp); |
|
1329 + |
|
1330 +} |
|
1331 + |
|
1332 +void |
|
1333 +I2CStart(ASTRecPtr pAST) |
|
1334 +{ |
|
1335 + I2CWriteClock(pAST, 0x00); /* Set Clk Low */ |
|
1336 + I2CDelay(pAST); |
|
1337 + I2CWriteData(pAST, 0x01); /* Set Data High */ |
|
1338 + I2CDelay(pAST); |
|
1339 + I2CWriteClock(pAST, 0x01); /* Set Clk High */ |
|
1340 + I2CDelay(pAST); |
|
1341 + I2CWriteData(pAST, 0x00); /* Set Data Low */ |
|
1342 + I2CDelay(pAST); |
|
1343 + I2CWriteClock(pAST, 0x01); /* Set Clk High */ |
|
1344 + I2CDelay(pAST); |
|
1345 +} |
|
1346 + |
|
1347 +void |
|
1348 +I2CStop(ASTRecPtr pAST) |
|
1349 +{ |
|
1350 + I2CWriteClock(pAST, 0x00); /* Set Clk Low */ |
|
1351 + I2CDelay(pAST); |
|
1352 + I2CWriteData(pAST, 0x00); /* Set Data Low */ |
|
1353 + I2CDelay(pAST); |
|
1354 + I2CWriteClock(pAST, 0x01); /* Set Clk High */ |
|
1355 + I2CDelay(pAST); |
|
1356 + I2CWriteData(pAST, 0x01); /* Set Data High */ |
|
1357 + I2CDelay(pAST); |
|
1358 + I2CWriteClock(pAST, 0x01); /* Set Clk High */ |
|
1359 + I2CDelay(pAST); |
|
1360 + |
|
1361 +} |
|
1362 + |
|
1363 +Bool |
|
1364 +CheckACK(ASTRecPtr pAST) |
|
1365 +{ |
|
1366 + UCHAR Data; |
|
1367 + |
|
1368 + I2CWriteClock(pAST, 0x00); /* Set Clk Low */ |
|
1369 + I2CDelay(pAST); |
|
1370 + I2CWriteData(pAST, 0x01); /* Set Data High */ |
|
1371 + I2CDelay(pAST); |
|
1372 + I2CWriteClock(pAST, 0x01); /* Set Clk High */ |
|
1373 + I2CDelay(pAST); |
|
1374 + Data = (UCHAR) I2CReadData(pAST); /* Set Data High */ |
|
1375 + |
|
1376 + return ((Data & 0x01) ? 0:1); |
|
1377 + |
|
1378 +} |
|
1379 + |
|
1380 + |
|
1381 +void |
|
1382 +SendACK(ASTRecPtr pAST) |
|
1383 +{ |
|
1384 + |
|
1385 + I2CWriteClock(pAST, 0x00); /* Set Clk Low */ |
|
1386 + I2CDelay(pAST); |
|
1387 + I2CWriteData(pAST, 0x00); /* Set Data low */ |
|
1388 + I2CDelay(pAST); |
|
1389 + I2CWriteClock(pAST, 0x01); /* Set Clk High */ |
|
1390 + I2CDelay(pAST); |
|
1391 + |
|
1392 +} |
|
1393 + |
|
1394 +void |
|
1395 +SendNACK(ASTRecPtr pAST) |
|
1396 +{ |
|
1397 + |
|
1398 + I2CWriteClock(pAST, 0x00); /* Set Clk Low */ |
|
1399 + I2CDelay(pAST); |
|
1400 + I2CWriteData(pAST, 0x01); /* Set Data high */ |
|
1401 + I2CDelay(pAST); |
|
1402 + I2CWriteClock(pAST, 0x01); /* Set Clk High */ |
|
1403 + I2CDelay(pAST); |
|
1404 + |
|
1405 +} |
|
1406 + |
|
1407 +void |
|
1408 +SendI2CDataByte(ASTRecPtr pAST, UCHAR data) |
|
1409 +{ |
|
1410 + UCHAR jData; |
|
1411 + LONG i; |
|
1412 + |
|
1413 + for (i=7;i>=0;i--) |
|
1414 + { |
|
1415 + I2CWriteClock(pAST, 0x00); /* Set Clk Low */ |
|
1416 + I2CDelay(pAST); |
|
1417 + |
|
1418 + jData = ((data >> i) & 0x01) ? 1:0; |
|
1419 + I2CWriteData(pAST, jData); /* Set Data Low */ |
|
1420 + I2CDelay(pAST); |
|
1421 + |
|
1422 + I2CWriteClock(pAST, 0x01); /* Set Clk High */ |
|
1423 + I2CDelay(pAST); |
|
1424 + } |
|
1425 +} |
|
1426 + |
|
1427 +UCHAR |
|
1428 +ReceiveI2CDataByte(ASTRecPtr pAST) |
|
1429 +{ |
|
1430 + UCHAR jData=0, jTempData; |
|
1431 + LONG i, j; |
|
1432 + |
|
1433 + for (i=7;i>=0;i--) |
|
1434 + { |
|
1435 + I2CWriteClock(pAST, 0x00); /* Set Clk Low */ |
|
1436 + I2CDelay(pAST); |
|
1437 + |
|
1438 + I2CWriteData(pAST, 0x01); /* Set Data High */ |
|
1439 + I2CDelay(pAST); |
|
1440 + |
|
1441 + I2CWriteClock(pAST, 0x01); /* Set Clk High */ |
|
1442 + I2CDelay(pAST); |
|
1443 + |
|
1444 + for (j=0; j<0x1000; j++) |
|
1445 + { |
|
1446 + if (I2CReadClock(pAST)) break; |
|
1447 + } |
|
1448 + |
|
1449 + jTempData = I2CReadData(pAST); |
|
1450 + jData |= ((jTempData & 0x01) << i); |
|
1451 + |
|
1452 + I2CWriteClock(pAST, 0x0); /* Set Clk Low */ |
|
1453 + I2CDelay(pAST); |
|
1454 + } |
|
1455 + |
|
1456 + return ((UCHAR)jData); |
|
1457 +} |
|
1458 + |
|
1459 +Bool |
|
1460 +GetVGAEDID(ScrnInfoPtr pScrn, unsigned char *pEDIDBuffer) |
|
1461 +{ |
|
1462 + ASTDECL |
|
1463 + UCHAR *pjDstEDID; |
|
1464 + UCHAR jData; |
|
1465 + ULONG i; |
|
1466 + |
|
1467 + pjDstEDID = (UCHAR *) pEDIDBuffer; |
|
1468 + |
|
1469 + /* Force to DDC2 */ |
|
1470 + I2CWriteClock(pAST, 0x01); /* Set Clk Low */ |
|
1471 + I2CDelay(pAST); |
|
1472 + I2CDelay(pAST); |
|
1473 + I2CWriteClock(pAST, 0x00); /* Set Clk Low */ |
|
1474 + I2CDelay(pAST); |
|
1475 + |
|
1476 + I2CStart(pAST); |
|
1477 + |
|
1478 + SendI2CDataByte(pAST, 0xA0); |
|
1479 + if (!CheckACK(pAST)) |
|
1480 + { |
|
1481 + xf86DrvMsg(pScrn->scrnIndex, X_INFO, "[GetVGAEDID] Check ACK Failed \n"); |
|
1482 + return (FALSE); |
|
1483 + } |
|
1484 + |
|
1485 + SendI2CDataByte(pAST, 0x00); |
|
1486 + if (!CheckACK(pAST)) |
|
1487 + { |
|
1488 + xf86DrvMsg(pScrn->scrnIndex, X_INFO, "[GetVGAEDID] Check ACK Failed \n"); |
|
1489 + return (FALSE); |
|
1490 + } |
|
1491 + |
|
1492 + I2CStart(pAST); |
|
1493 + |
|
1494 + SendI2CDataByte(pAST, 0xA1); |
|
1495 + if (!CheckACK(pAST)) |
|
1496 + { |
|
1497 + xf86DrvMsg(pScrn->scrnIndex, X_INFO, "[GetVGAEDID] Check ACK Failed \n"); |
|
1498 + return (FALSE); |
|
1499 + } |
|
1500 + |
|
1501 + for (i=0; i<127; i++) |
|
1502 + { |
|
1503 + jData = ReceiveI2CDataByte(pAST); |
|
1504 + SendACK(pAST); |
|
1505 + |
|
1506 + *pjDstEDID++ = jData; |
|
1507 + } |
|
1508 + |
|
1509 + jData = ReceiveI2CDataByte(pAST); |
|
1510 + SendNACK(pAST); |
|
1511 + *pjDstEDID = jData; |
|
1512 + |
|
1513 + I2CStop(pAST); |
|
1514 + |
|
1515 + return (TRUE); |
|
1516 + |
|
1517 +} /* GetVGAEDID */ |
|
1518 +#endif /* __sparc__ */ |
|
1519 diff -urp -x '*~' -x '*.orig' src/ast_vgatool.h src/ast_vgatool.h |
|
1520 --- src/ast_vgatool.h 2009-10-29 13:33:38.000000000 -0700 |
|
1521 +++ src/ast_vgatool.h 2010-08-16 13:45:07.715261578 -0700 |
|
1522 @@ -20,6 +20,12 @@ |
787 @@ -20,6 +20,12 @@ |
1523 * PERFORMANCE OF THIS SOFTWARE. |
788 * PERFORMANCE OF THIS SOFTWARE. |
1524 */ |
789 */ |
1525 |
790 |
1526 +#ifndef ASTVGATOOL_H |
791 +#ifndef ASTVGATOOL_H |
1550 +#define GR_PORT 0x4E |
815 +#define GR_PORT 0x4E |
1551 +#define CRTC_PORT 0x54 |
816 +#define CRTC_PORT 0x54 |
1552 +#define INPUT_STATUS1_READ 0x5A |
817 +#define INPUT_STATUS1_READ 0x5A |
1553 +#define MISC_PORT_READ 0x4C |
818 +#define MISC_PORT_READ 0x4C |
1554 + |
819 + |
1555 +#define GetReg(off, val) { \ |
820 +static inline uchar_t |
1556 + struct vis_io_reg io_reg; \ |
821 +_GetRegFromFd(uchar_t off, int fd) |
1557 + io_reg.offset = off; \ |
822 +{ |
1558 + ioctl(fd, VIS_GETIOREG, &io_reg); \ |
823 + struct vis_io_reg io_reg = { |
|
824 + .offset = off |
|
825 + }; |
|
826 + ioctl(fd, VIS_GETIOREG, &io_reg); |
|
827 + return io_reg.value; |
|
828 +} |
|
829 + |
|
830 +#define GetReg(off) _GetRegFromFd(off, pAST->fd) |
|
831 + |
|
832 +#define SetReg(off, val) do { \ |
|
833 + struct vis_io_reg io_reg = { \ |
|
834 + .offset = off, \ |
|
835 + .value = val \ |
|
836 + }; \ |
|
837 + ioctl(pAST->fd, VIS_SETIOREG, &io_reg); \ |
|
838 + } while (0) |
|
839 + |
|
840 +#define GetIndexReg(off, index, val) do { \ |
|
841 + struct vis_io_reg io_reg = { \ |
|
842 + .offset = off, \ |
|
843 + .value = index \ |
|
844 + }; \ |
|
845 + ioctl(pAST->fd, VIS_SETIOREG, &io_reg); \ |
|
846 + io_reg.offset = off+1; \ |
|
847 + ioctl(pAST->fd, VIS_GETIOREG, &io_reg); \ |
1559 + val = io_reg.value; \ |
848 + val = io_reg.value; \ |
1560 + } |
849 + } while (0) |
1561 + |
850 + |
1562 +#define SetReg(off,val) { \ |
851 +#define SetIndexReg(off, index, val) do { \ |
1563 + struct vis_io_reg io_reg; \ |
852 + struct vis_io_reg io_reg = { \ |
1564 + io_reg.offset = off; \ |
853 + .offset = off, \ |
|
854 + .value = index \ |
|
855 + }; \ |
|
856 + ioctl(pAST->fd, VIS_SETIOREG, &io_reg); \ |
|
857 + io_reg.offset = off+1; \ |
1565 + io_reg.value = val; \ |
858 + io_reg.value = val; \ |
1566 + ioctl(fd, VIS_SETIOREG, &io_reg); \ |
859 + ioctl(pAST->fd, VIS_SETIOREG, &io_reg); \ |
1567 + } |
860 + } while (0) |
1568 + |
861 + |
1569 +#define GetIndexReg(off, index,val) { \ |
862 +#define GetIndexRegMask(off, index, and, val) do { \ |
1570 + struct vis_io_reg io_reg; \ |
863 + struct vis_io_reg io_reg = { \ |
1571 + io_reg.offset = off; \ |
864 + .offset = off, \ |
1572 + io_reg.value = index; \ |
865 + .value = index \ |
1573 + ioctl(fd, VIS_SETIOREG, &io_reg); \ |
866 + }; \ |
|
867 + ioctl(pAST->fd, VIS_SETIOREG, &io_reg); \ |
1574 + io_reg.offset = off+1; \ |
868 + io_reg.offset = off+1; \ |
1575 + ioctl(fd, VIS_GETIOREG, &io_reg); \ |
869 + ioctl(pAST->fd, VIS_GETIOREG, &io_reg); \ |
1576 + val = io_reg.value; \ |
|
1577 + } |
|
1578 + |
|
1579 +#define SetIndexReg(off, index, val) { \ |
|
1580 + struct vis_io_reg io_reg; \ |
|
1581 + io_reg.offset = off; \ |
|
1582 + io_reg.value = index; \ |
|
1583 + ioctl(fd, VIS_SETIOREG, &io_reg); \ |
|
1584 + io_reg.offset = off+1; \ |
|
1585 + io_reg.value = val; \ |
|
1586 + ioctl(fd, VIS_SETIOREG, &io_reg); \ |
|
1587 + } |
|
1588 + |
|
1589 +#define GetIndexRegMask(off, index, and, val) { \ |
|
1590 + struct vis_io_reg io_reg; \ |
|
1591 + io_reg.offset = off; \ |
|
1592 + io_reg.value = index; \ |
|
1593 + ioctl(fd, VIS_SETIOREG, &io_reg); \ |
|
1594 + io_reg.offset = off+1; \ |
|
1595 + ioctl(fd, VIS_GETIOREG, &io_reg); \ |
|
1596 + val = io_reg.value & and; \ |
870 + val = io_reg.value & and; \ |
1597 + } |
871 + } while (0) |
1598 + |
872 + |
1599 +#define SetIndexRegMask(off,index, and, val) { \ |
873 +#define SetIndexRegMask(off, index, and, val) do { \ |
1600 + struct vis_io_reg io_reg; \ |
874 + UCHAR __Temp; \ |
1601 + UCHAR __Temp; \ |
875 + struct vis_io_reg io_reg = { \ |
1602 + io_reg.offset = off; \ |
876 + .offset = off, \ |
1603 + io_reg.value = index; \ |
877 + .value = index \ |
1604 + ioctl(fd, VIS_SETIOREG, &io_reg); \ |
878 + }; \ |
|
879 + ioctl(pAST->fd, VIS_SETIOREG, &io_reg); \ |
1605 + io_reg.offset = off + 1; \ |
880 + io_reg.offset = off + 1; \ |
1606 + ioctl(fd, VIS_GETIOREG, &io_reg); \ |
881 + ioctl(pAST->fd, VIS_GETIOREG, &io_reg); \ |
1607 + __Temp = (io_reg.value & and) | val; \ |
882 + __Temp = (io_reg.value & and) | val; \ |
1608 + io_reg.offset = off; \ |
883 + io_reg.offset = off; \ |
1609 + io_reg.value = index; \ |
884 + io_reg.value = index; \ |
1610 + ioctl(fd, VIS_SETIOREG, &io_reg); \ |
885 + ioctl(pAST->fd, VIS_SETIOREG, &io_reg); \ |
1611 + io_reg.offset = off+1; \ |
886 + io_reg.offset = off+1; \ |
1612 + io_reg.value = __Temp; \ |
887 + io_reg.value = __Temp; \ |
1613 + ioctl(fd, VIS_SETIOREG, &io_reg); \ |
888 + ioctl(pAST->fd, VIS_SETIOREG, &io_reg); \ |
1614 + } |
889 + } while (0) |
1615 + |
890 + |
1616 +#else |
891 +#else /* !__sparc__ */ |
1617 + |
892 + |
1618 #define AR_PORT_WRITE (pAST->RelocateIO + 0x40) |
893 #define AR_PORT_WRITE (pAST->RelocateIO + 0x40) |
1619 #define MISC_PORT_WRITE (pAST->RelocateIO + 0x42) |
894 #define MISC_PORT_WRITE (pAST->RelocateIO + 0x42) |
1620 #define SEQ_PORT (pAST->RelocateIO + 0x44) |
895 #define SEQ_PORT (pAST->RelocateIO + 0x44) |
1621 @@ -42,7 +127,7 @@ |
896 @@ -71,6 +166,8 @@ |
1622 #define INPUT_STATUS1_READ (pAST->RelocateIO + 0x5A) |
|
1623 #define MISC_PORT_READ (pAST->RelocateIO + 0x4C) |
|
1624 |
|
1625 -#define GetReg(base) inb(base) |
|
1626 +#define GetReg(base,val) val = inb(base) |
|
1627 #define SetReg(base,val) outb(base,val) |
|
1628 #define GetIndexReg(base,index,val) do { \ |
|
1629 outb(base,index); \ |
|
1630 @@ -62,15 +147,32 @@ |
|
1631 SetIndexReg(base,index,__Temp); \ |
897 SetIndexReg(base,index,__Temp); \ |
1632 } while (0) |
898 } while (0) |
1633 |
899 |
1634 +#endif |
900 +#endif /* __sparc__ */ |
1635 + |
901 + |
1636 #define VGA_LOAD_PALETTE_INDEX(index, red, green, blue) \ |
902 #define VGA_GET_PALETTE_INDEX(index, red, green, blue) \ |
1637 { \ |
903 { \ |
1638 UCHAR __junk; \ |
904 UCHAR __junk; \ |
1639 SetReg(DAC_INDEX_WRITE,(UCHAR)(index)); \ |
905 @@ -162,3 +259,5 @@ |
1640 - __junk = GetReg(SEQ_PORT); \ |
906 *(ULONG *) (pAST->MMIOVirtualAddr + 0xF000) = 0x1; \ |
1641 + GetReg(SEQ_PORT, __junk); \ |
907 *(ULONG *) (pAST->MMIOVirtualAddr + 0x10000 + ((addr) & 0x0000FFFF)) = (data); \ |
1642 SetReg(DAC_DATA,(UCHAR)(red)); \ |
908 } |
1643 - __junk = GetReg(SEQ_PORT); \ |
|
1644 + GetReg(SEQ_PORT, __junk); \ |
|
1645 SetReg(DAC_DATA,(UCHAR)(green)); \ |
|
1646 - __junk = GetReg(SEQ_PORT); \ |
|
1647 + GetReg(SEQ_PORT, __junk); \ |
|
1648 SetReg(DAC_DATA,(UCHAR)(blue)); \ |
|
1649 - __junk = GetReg(SEQ_PORT); \ |
|
1650 + GetReg(SEQ_PORT, __junk); \ |
|
1651 } |
|
1652 + |
|
1653 +#define VGA_GET_PALETTE_INDEX(index, red, green, blue) \ |
|
1654 +{ \ |
|
1655 + UCHAR __junk; \ |
|
1656 + SetReg(DAC_INDEX_READ,(UCHAR)(index)); \ |
|
1657 + GetReg(SEQ_PORT, __junk); \ |
|
1658 + GetReg(DAC_DATA, (red)); \ |
|
1659 + GetReg(SEQ_PORT, __junk); \ |
|
1660 + GetReg(DAC_DATA, (green)); \ |
|
1661 + GetReg(SEQ_PORT, __junk); \ |
|
1662 + GetReg(DAC_DATA, (blue)); \ |
|
1663 + GetReg(SEQ_PORT, __junk); \ |
|
1664 +} |
|
1665 + |
909 + |
1666 +#endif /* ASTVGATOOL_H */ |
910 +#endif /* ASTVGATOOL_H */ |
|
911 --- a/src/ast_vgatool.c Wed Mar 28 14:37:44 2012 |
|
912 +++ b/src/ast_vgatool.c Wed Mar 28 14:39:46 2012 |
|
913 @@ -2974,9 +2974,11 @@ |
|
914 pAST = ASTPTR(pScrn); |
|
915 |
|
916 /* Enable PCI */ |
|
917 +#if !defined(__sparc__) |
|
918 PCI_READ_LONG(pAST->PciInfo, &ulData, 0x04); |
|
919 ulData |= 0x03; |
|
920 PCI_WRITE_LONG(pAST->PciInfo, ulData, 0x04); |
|
921 +#endif |
|
922 |
|
923 /* init DRAM if no F/W */ |
|
924 /* TODO */ |