*** smi_driver.c.original	2004-06-04 13:08:47.000000000 +0100
--- smi_driver.c	2004-06-04 13:04:20.000000000 +0100
***************
*** 144,149 ****
--- 144,150 ----
  	OPTION_FIFO_MODERATE,
  	OPTION_FIFO_AGGRESSIVE,
  	OPTION_PCI_RETRY,
+ 	OPTION_NOMMIO,
  	OPTION_NOACCEL,
  	OPTION_MCLK,
  	OPTION_SHOWCACHE,
***************
*** 169,174 ****
--- 170,176 ----
     { OPTION_FIFO_MODERATE,   "fifo_moderate",	  OPTV_BOOLEAN, {0}, FALSE },
     { OPTION_FIFO_AGGRESSIVE, "fifo_aggressive",	  OPTV_BOOLEAN, {0}, FALSE },
     { OPTION_PCI_RETRY,	     "pci_retry",	  OPTV_BOOLEAN, {0}, FALSE },
+    { OPTION_NOMMIO,	     "NoMMIO",	          OPTV_BOOLEAN, {0}, FALSE },
     { OPTION_NOACCEL,	     "NoAccel",		  OPTV_BOOLEAN, {0}, FALSE },
     { OPTION_MCLK,	     "set_mclk",	  OPTV_FREQ,	{0}, FALSE },
     { OPTION_SHOWCACHE,	     "show_cache",	  OPTV_BOOLEAN, {0}, FALSE },
***************
*** 677,682 ****
--- 679,694 ----
  		pSmi->fifo_conservative = FALSE;
  	}
  
+ 	if (xf86IsOptionSet(pSmi->Options, OPTION_NOMMIO))
+ 	{
+ 		pSmi->NoMMIO = TRUE;
+ 		xf86DrvMsg(pScrn->scrnIndex, X_CONFIG, "Option: NoMMIO set\n");
+ 	}
+ 	else
+ 	{
+ 		pSmi->NoMMIO = FALSE;
+ 	}
+ 	
  	if (xf86IsOptionSet(pSmi->Options, OPTION_FIFO_MODERATE))
  	{
  		pSmi->fifo_moderate = TRUE;
***************
*** 1815,1821 ****
  			pSmi->VPRBase = pSmi->MapBase + 0x000800;
  			pSmi->CPRBase = pSmi->MapBase + 0x001000;
  			pSmi->FPRBase = pSmi->MapBase + 0x005800;
! 			pSmi->IOBase  = pSmi->MapBase + 0x0C0000;
  			pSmi->DataPortBase = pSmi->MapBase + 0x100000;
  			pSmi->DataPortSize = 0x100000;
  			break;
--- 1827,1833 ----
  			pSmi->VPRBase = pSmi->MapBase + 0x000800;
  			pSmi->CPRBase = pSmi->MapBase + 0x001000;
  			pSmi->FPRBase = pSmi->MapBase + 0x005800;
! 			pSmi->IOBase  = pSmi->NoMMIO ? NULL : pSmi->MapBase + 0x0C0000;
  			pSmi->DataPortBase = pSmi->MapBase + 0x100000;
  			pSmi->DataPortSize = 0x100000;
  			break;
***************
*** 1824,1830 ****
  			pSmi->DPRBase = pSmi->MapBase + 0x000000;
  			pSmi->VPRBase = pSmi->MapBase + 0x000800;
  			pSmi->CPRBase = pSmi->MapBase + 0x001000;
! 			pSmi->IOBase  = pSmi->MapBase + 0x040000;
  			pSmi->DataPortBase = pSmi->MapBase + 0x080000;
  			pSmi->DataPortSize = 0x100000;
  			break;
--- 1836,1842 ----
  			pSmi->DPRBase = pSmi->MapBase + 0x000000;
  			pSmi->VPRBase = pSmi->MapBase + 0x000800;
  			pSmi->CPRBase = pSmi->MapBase + 0x001000;
! 			pSmi->IOBase  = pSmi->NoMMIO ? NULL : pSmi->MapBase + 0x040000;
  			pSmi->DataPortBase = pSmi->MapBase + 0x080000;
  			pSmi->DataPortSize = 0x100000;
  			break;
***************
*** 1834,1840 ****
  			pSmi->DPRBase = pSmi->MapBase + 0x008000;
  			pSmi->VPRBase = pSmi->MapBase + 0x00C000;
  			pSmi->CPRBase = pSmi->MapBase + 0x00E000;
! 			pSmi->IOBase  = pSmi->MapBase + 0x300000;
  			pSmi->DataPortBase = pSmi->MapBase /*+ 0x100000*/;
  			pSmi->DataPortSize = 0x8000 /*0x200000*/;
  			break;
--- 1846,1852 ----
  			pSmi->DPRBase = pSmi->MapBase + 0x008000;
  			pSmi->VPRBase = pSmi->MapBase + 0x00C000;
  			pSmi->CPRBase = pSmi->MapBase + 0x00E000;
! 			pSmi->IOBase  = pSmi->NoMMIO ? NULL : pSmi->MapBase + 0x300000;
  			pSmi->DataPortBase = pSmi->MapBase /*+ 0x100000*/;
  			pSmi->DataPortSize = 0x8000 /*0x200000*/;
  			break;
***************
*** 1843,1849 ****
  			pSmi->DPRBase = pSmi->MapBase + 0x000000;
  			pSmi->VPRBase = pSmi->MapBase + 0x000800;
  			pSmi->CPRBase = pSmi->MapBase + 0x001000;
! 			pSmi->IOBase  = pSmi->MapBase + 0x0C0000;
  			pSmi->DataPortBase = pSmi->MapBase + 0x100000;
  			pSmi->DataPortSize = 0x100000;
  			break;
--- 1855,1861 ----
  			pSmi->DPRBase = pSmi->MapBase + 0x000000;
  			pSmi->VPRBase = pSmi->MapBase + 0x000800;
  			pSmi->CPRBase = pSmi->MapBase + 0x001000;
! 			pSmi->IOBase  = pSmi->NoMMIO ? NULL : pSmi->MapBase + 0x0C0000;
  			pSmi->DataPortBase = pSmi->MapBase + 0x100000;
  			pSmi->DataPortSize = 0x100000;
  			break;
