open-src/driver/xf86-video-ast/sparc-ast.patch
changeset 1265 0b5cc5c013e4
parent 1041 822a24a56542
child 1351 9ad483eabd22
equal deleted inserted replaced
1264:a3323e4f263f 1265:0b5cc5c013e4
     1 diff -urp -x '*~' -x '*.orig' src/Makefile.am src/Makefile.am
     1 diff --git a/src/Makefile.am b/src/Makefile.am
     2 --- src/Makefile.am	2008-08-15 10:54:35.000000000 -0700
     2 index 4cd7075..58274df 100644
     3 +++ src/Makefile.am	2010-08-16 13:45:07.710404820 -0700
     3 --- a/src/Makefile.am
       
     4 +++ b/src/Makefile.am
     4 @@ -42,4 +42,5 @@ ast_drv_la_SOURCES =	\
     5 @@ -42,4 +42,5 @@ ast_drv_la_SOURCES =	\
     5  	ast_pcirename.h \
     6  	ast_pcirename.h \
     6  	ast_tool.c 	\
     7  	ast_tool.c 	\
     7  	ast_vgatool.c 	\
     8  	ast_vgatool.c 	\
     8 -	ast_vgatool.h
     9 -	ast_vgatool.h
     9 +	ast_vgatool.h	\
    10 +	ast_vgatool.h	\
    10 +	ast_sparc_driver.c
    11 +	ast_sparc_driver.c
    11 diff -urp -x '*~' -x '*.orig' src/ast.h src/ast.h
    12 diff --git a/src/ast.h b/src/ast.h
    12 --- src/ast.h	2010-08-10 07:38:29.000000000 -0700
    13 index 7ceee31..a6af228 100644
    13 +++ src/ast.h	2010-08-16 13:45:07.710712331 -0700
    14 --- a/src/ast.h
       
    15 +++ b/src/ast.h
    14 @@ -20,8 +20,17 @@
    16 @@ -20,8 +20,17 @@
    15   * PERFORMANCE OF THIS SOFTWARE.
    17   * PERFORMANCE OF THIS SOFTWARE.
    16   */
    18   */
    17  
    19  
    18 +#ifndef AST_H
    20 +#ifndef AST_H
    27 +#endif
    29 +#endif
    28 +
    30 +
    29  
    31  
    30  #include "ast_pcirename.h"
    32  #include "ast_pcirename.h"
    31  
    33  
    32 @@ -84,6 +93,15 @@ typedef CARD32  	ULONG;
    34 @@ -90,6 +99,15 @@ typedef CARD32  	ULONG;
    33  typedef struct _ASTRegRec {
    35  typedef struct _ASTRegRec {
    34      UCHAR 	ExtCRTC[0x50];
    36      UCHAR 	ExtCRTC[0x50];
    35      
    37      ULONG	GFX[12];
       
    38 +
    36 +#if	(defined(__sparc__))
    39 +#if	(defined(__sparc__))
    37 +    UCHAR 	MISC;	
    40 +    UCHAR 	MISC;	
    38 +    UCHAR 	SEQ[4];
    41 +    UCHAR 	SEQ[4];
    39 +    UCHAR 	CRTC[25];
    42 +    UCHAR 	CRTC[25];
    40 +    UCHAR 	AR[20];	    
    43 +    UCHAR 	AR[20];	    
    41 +    UCHAR 	GR[9];
    44 +    UCHAR 	GR[9];
    42 +    UCHAR	DAC[256][3];
    45 +    UCHAR	DAC[256][3];
    43 +#endif
    46 +#endif
    44 +     
       
    45  } ASTRegRec, *ASTRegPtr;
    47  } ASTRegRec, *ASTRegPtr;
    46  
    48  
    47  typedef struct _VIDEOMODE {
    49  typedef struct _VIDEOMODE {
    48 @@ -194,12 +212,108 @@ typedef struct _ASTRec {
    50 @@ -249,12 +267,94 @@ typedef struct _ASTRec {
    49      int			clip_right;    
    51      Atom		xvGammaRed, xvGammaGreen, xvGammaBlue;
    50      int			clip_bottom;    	
    52  #endif
    51     		
    53  
    52 +#if defined(__sparc__)
    54 +#if defined(__sparc__)
    53 +    char 		*deviceName;
    55 +    char 		*deviceName;
    54 +    int  		fd;
    56 +    int  		fd;
    55 +#endif /* __sparc__ */
    57 +#endif /* __sparc__ */
    56 +
    58 +
    57  } ASTRec, *ASTRecPtr;
    59  } ASTRec, *ASTRecPtr, *ASTPtr;
    58  	
    60  
    59  #define ASTPTR(p) ((ASTRecPtr)((p)->driverPrivate))
    61  #define ASTPTR(p) ((ASTRecPtr)((p)->driverPrivate))
    60  
    62  
    61 +#if defined(__sparc__)
    63 +#if defined(__sparc__)
    62 +#define ASTDECL \
       
    63 +    ASTRecPtr	pAST = ASTPTR(pScrn);	\
       
    64 +    int		fd = pAST->fd;
       
    65 +
       
    66 +#define ASTDECL_FD \
       
    67 +    int		fd = pAST->fd;
       
    68 +
       
    69 +#ifndef VIS_GETPCICONFIG
    64 +#ifndef VIS_GETPCICONFIG
    70 +
    65 +
    71 +/*
    66 +/*
    72 + * These definitions will be removed when they are included in the
    67 + * These definitions will be removed when they are included in the
    73 + * visual_io.h
    68 + * visual_io.h
   136 +extern void		  ASTUnmapVidMem(ScrnInfoPtr, pointer, unsigned long);
   131 +extern void		  ASTUnmapVidMem(ScrnInfoPtr, pointer, unsigned long);
   137 +extern void		  ASTNotifyModeChanged(ScrnInfoPtr);
   132 +extern void		  ASTNotifyModeChanged(ScrnInfoPtr);
   138 +extern void		  ASTSaveHW(ScrnInfoPtr);
   133 +extern void		  ASTSaveHW(ScrnInfoPtr);
   139 +extern void		  ASTRestoreHW(ScrnInfoPtr);
   134 +extern void		  ASTRestoreHW(ScrnInfoPtr);
   140 +
   135 +
   141 +#else
       
   142 +
       
   143 +#define ASTDECL \
       
   144 +    ASTRecPtr	pAST = ASTPTR(pScrn);
       
   145 +
       
   146 +#define ASTDECL_FD
       
   147 +
       
   148 +#endif
   136 +#endif
   149 +
   137 +
   150  /* Include Files */
   138  /* Include Files */
   151  #include "ast_mode.h"
   139  #include "ast_mode.h"
   152  #include "ast_vgatool.h"
   140  #include "ast_vgatool.h"
   153  #include "ast_2dtool.h"
   141  #include "ast_2dtool.h"
   154  #include "ast_cursor.h"
   142  #include "ast_cursor.h"
   155 +
   143 +
   156 +#endif /* AST_H */
   144 +#endif /* AST_H */
   157 diff -urp -x '*~' -x '*.orig' src/ast_2dtool.c src/ast_2dtool.c
   145 diff --git a/src/ast_accel.c b/src/ast_accel.c
   158 --- src/ast_2dtool.c	2010-08-10 07:38:29.000000000 -0700
   146 index 2d3dab3..74ca45d 100644
   159 +++ src/ast_2dtool.c	2010-08-16 13:45:07.711030285 -0700
   147 --- a/src/ast_accel.c
   160 @@ -256,6 +256,7 @@ bEnable2D(ScrnInfoPtr pScrn, ASTRecPtr p
   148 +++ b/src/ast_accel.c
   161  {
       
   162      ULONG ulData;
       
   163      PFN_bENABLE_CMDQ pfnEnableCMDQ = bEnableCMDQ;
       
   164 +    ASTDECL_FD
       
   165      
       
   166      if (pAST->jChipType == AST2300)
       
   167          pfnEnableCMDQ = bEnableCMDQ2300;
       
   168 @@ -295,6 +296,7 @@ bEnable2D(ScrnInfoPtr pScrn, ASTRecPtr p
       
   169  void
       
   170  vDisable2D(ScrnInfoPtr pScrn, ASTRecPtr pAST)
       
   171  {
       
   172 +    ASTDECL_FD
       
   173  	
       
   174      vWaitEngIdle(pScrn, pAST);
       
   175      vWaitEngIdle(pScrn, pAST);
       
   176 @@ -310,6 +312,7 @@ vWaitEngIdle(ScrnInfoPtr pScrn, ASTRecPt
       
   177      ULONG ulEngState, ulEngState2;
       
   178      UCHAR jReg;
       
   179      ULONG ulEngCheckSetting; 
       
   180 +    ASTDECL_FD
       
   181      
       
   182      if (pAST->MMIO2D)     
       
   183          ulEngCheckSetting = 0x10000000;
       
   184 diff -urp -x '*~' -x '*.orig' src/ast_2dtool.h src/ast_2dtool.h
       
   185 --- src/ast_2dtool.h	2010-08-10 07:38:29.000000000 -0700
       
   186 +++ src/ast_2dtool.h	2010-08-16 13:45:07.711347075 -0700
       
   187 @@ -20,6 +20,9 @@
       
   188   * PERFORMANCE OF THIS SOFTWARE.
       
   189   */
       
   190  
       
   191 +#ifndef AST2DTOOL_H
       
   192 +#define AST2DTOOL_H
       
   193 +
       
   194  /* Eng Capability Definition */
       
   195  #define	ENG_CAP_Sync				0x0001
       
   196  #define	ENG_CAP_ScreenToScreenCopy		0x0002
       
   197 @@ -533,3 +536,5 @@ typedef struct {
       
   198          addr->PKT_SC_dwHeader  = (ULONG)(PKT_SINGLE_CMD_HEADER + CMDQREG_LINE_NUMBER); 	\
       
   199          addr->PKT_SC_dwData[0] = (ULONG)(no);					\
       
   200        }
       
   201 +
       
   202 +#endif /* AST2DTOOL_H */
       
   203 diff -urp -x '*~' -x '*.orig' src/ast_accel.c src/ast_accel.c
       
   204 --- src/ast_accel.c	2010-08-10 07:38:29.000000000 -0700
       
   205 +++ src/ast_accel.c	2010-08-16 13:45:07.711848515 -0700
       
   206 @@ -189,7 +189,12 @@ ASTAccelInit(ScreenPtr pScreen)
   149 @@ -189,7 +189,12 @@ ASTAccelInit(ScreenPtr pScreen)
   207      {    
   150      {    
   208          infoPtr->SetupForSolidFill = ASTSetupForSolidFill;
   151          infoPtr->SetupForSolidFill = ASTSetupForSolidFill;
   209          infoPtr->SubsequentSolidFillRect = ASTSubsequentSolidFillRect;
   152          infoPtr->SubsequentSolidFillRect = ASTSubsequentSolidFillRect;
   210 +
   153 +
   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__)
   956 +#if !defined(XSERVER_LIBPCIACCESS) || defined(__sparc__) 
   653 +#if !defined(XSERVER_LIBPCIACCESS) || defined(__sparc__) 
   957 +#if !defined(__sparc__)
   654 +#if !defined(__sparc__)
   958     xf86UnMapVidMem(pScrn->scrnIndex, (pointer) pAST->FBVirtualAddr,
   655     xf86UnMapVidMem(pScrn->scrnIndex, (pointer) pAST->FBVirtualAddr,
   959  		   pAST->FbMapSize);
   656  		   pAST->FbMapSize);
   960  #else
   657  #else
   961 +    ASTUnmapVidMem(pScrn, (pointer)pAST->FBVirtualAddr, pAST->FbMapSize);
   658 +   ASTUnmapVidMem(pScrn, (pointer)pAST->FBVirtualAddr, pAST->FbMapSize);
   962 +#endif
   659 +#endif
   963 +#else
   660 +#else
   964     pci_device_unmap_range(pAST->PciInfo, pAST->FBVirtualAddr, pAST->FbMapSize);
   661     pci_device_unmap_range(pAST->PciInfo, pAST->FBVirtualAddr, pAST->FbMapSize);
   965  #endif
   662  #endif
   966  		   
   663  		   
  1003 +#endif
   700 +#endif
  1004 +#else
   701 +#else
  1005     pci_device_unmap_range(pAST->PciInfo, pAST->MMIOVirtualAddr, pAST->MMIOMapSize);
   702     pci_device_unmap_range(pAST->PciInfo, pAST->MMIOVirtualAddr, pAST->MMIOMapSize);
  1006  #endif
   703  #endif
  1007     pAST->MMIOVirtualAddr = 0;
   704     pAST->MMIOVirtualAddr = 0;
  1008 diff -urp -x '*~' -x '*.orig' src/ast_vgatool.c src/ast_vgatool.c
   705 diff --git a/src/ast_vgatool.c b/src/ast_vgatool.c
  1009 --- src/ast_vgatool.c	2010-08-10 07:38:29.000000000 -0700
   706 index 4a90dd4..fa0722c 100644
  1010 +++ src/ast_vgatool.c	2010-08-16 13:45:15.622974545 -0700
   707 --- a/src/ast_vgatool.c
  1011 @@ -71,11 +71,14 @@ Bool GetVGA2EDID(ScrnInfoPtr pScrn, unsi
   708 +++ b/src/ast_vgatool.c
  1012  void vInitDRAMReg(ScrnInfoPtr pScrn);
   709 @@ -95,6 +95,27 @@ bASTRegInit(ScrnInfoPtr pScrn)
  1013  Bool bIsVGAEnabled(ScrnInfoPtr pScrn);
       
  1014  Bool InitVGA(ScrnInfoPtr pScrn);
       
  1015 +#if defined(__sparc__)
       
  1016 +Bool GetVGAEDID(ScrnInfoPtr pScrn, unsigned char *pEDIDBuffer);
       
  1017 +#endif
       
  1018  
       
  1019  void
       
  1020  vASTOpenKey(ScrnInfoPtr pScrn)
       
  1021  {   	
       
  1022 -   ASTRecPtr pAST = ASTPTR(pScrn);
       
  1023 +   ASTDECL
       
  1024     
       
  1025     SetIndexReg(CRTC_PORT,0x80, 0xA8);     
       
  1026     
       
  1027 @@ -84,11 +87,31 @@ vASTOpenKey(ScrnInfoPtr pScrn)
       
  1028  Bool
       
  1029  bASTRegInit(ScrnInfoPtr pScrn)
       
  1030  {
       
  1031 -   ASTRecPtr pAST = ASTPTR(pScrn);
       
  1032 +   ASTDECL
       
  1033 +   UCHAR       jReg;
       
  1034  
       
  1035     /* Enable MMIO */
   710     /* Enable MMIO */
  1036     SetIndexRegMask(CRTC_PORT,0xA1, 0xFF, 0x04);
   711     SetIndexRegMask(CRTC_PORT,0xA1, 0xFF, 0x04);
  1037  
   712  
  1038 +   /* Enable Big-Endian */
   713 +   /* Enable Big-Endian */
  1039 +#if	defined(__sparc__)
   714 +#if	defined(__sparc__)
       
   715 +   UCHAR       jReg = 0x00;
       
   716 +
  1040 +   switch (pScrn->bitsPerPixel)   
   717 +   switch (pScrn->bitsPerPixel)   
  1041 +   {
   718 +   {
  1042 +   case 8:
   719 +   case 8:
  1043 +       jReg = 0x00;
   720 +       jReg = 0x00;
  1044 +       break;
   721 +       break;
  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
  1530 +#include <stropts.h>
   795 +#include <stropts.h>
  1531 +
   796 +
  1532  /* VRAM Size Definition */
   797  /* VRAM Size Definition */
  1533  #define VIDEOMEM_SIZE_08M	0x00800000
   798  #define VIDEOMEM_SIZE_08M	0x00800000
  1534  #define VIDEOMEM_SIZE_16M	0x01000000
   799  #define VIDEOMEM_SIZE_16M	0x01000000
  1535 @@ -32,6 +38,85 @@
   800 @@ -40,6 +46,95 @@
  1536  #define DRAMTYPE_512Mx32	2
   801  #define DRAMTYPE_2Gx16		6
  1537  #define DRAMTYPE_1Gx32		3
   802  #define DRAMTYPE_4Gx16		7
  1538  
   803  
  1539 +#if defined(__sparc__)
   804 +#if defined(__sparc__)
  1540 +
   805 +
  1541 +#define SET_IO_REG		0x1000
   806 +#define SET_IO_REG		0x1000
  1542 +#define GET_IO_REG		0x1001
   807 +#define GET_IO_REG		0x1001
  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 */