summaryrefslogblamecommitdiffstats
path: root/private/ntos/nthals/halfire/ppc/fpio.h
blob: e06763e144d4c011fa1d23e48e5dcabc4e96a690 (plain) (tree)





































































































































































































































                                                                                
/*
 * Copyright (c) 1995 FirePower Systems, Inc.
 * DO NOT DISTRIBUTE without permission
 *
 * $RCSfile: fpio.h $
 * $Revision: 1.9 $
 * $Date: 1996/01/11 07:06:50 $
 * $Locker:  $
 *
 * This file contains references to registers in I/O space only.  That is any
 * access to the ISA or PCI space ( or any future additions ) are contained in
 * this file.  Access to device registers that do not lie in I/O space should
 * be defined in the file fpreg.h
 *
 */

#ifndef FPIO_H
#define FPIO_H

//
// Define macros for handling accesses to io-space:
//

// HalpIoControlBase is extern'd in pxhalp.h which is included by halp.h

#define _IOBASE ((PUCHAR)HalpIoControlBase)
#define _IOREG(_OFFSET) (*(volatile UCHAR * const)((_IOBASE + (_OFFSET))))
#define _IOADDR(_OFFSET) ((_IOBASE + (_OFFSET)))

#define _PCIOBASE ((PUCHAR)HalpPciConfigBase)
#define _PCIOREG(_OFFSET) (*(volatile UCHAR * const)((_PCIOBASE + (_OFFSET))))
#define _PCIOADDR(_OFFSET) ((_PCIOBASE + (_OFFSET)))

//
// The Physical IO Space for generation one machines starts at 0x8000_0000.
//	All IO external devices in either ISA space or PCI space live within
//	this domain.  This also includes the on-board ethernet and scsi drivers,
//	the ISA bus interrupt controllers, display control.
//

//
// PCI Configuration Space:
//
//
// device		cpu relative Address		Config space address
// ------		--------------------		----------------
//
// 82378 ( SIO )	0x8080_0800 - 0x8080_08ff	0x80_0800 - 0x80_08ff
// scsi	(79c974)	0x8080_1000 - 0x8080_10ff	0x80_1000 - 0x80_10ff
// pci slot A		0x8080_2000 - 0x8080_20ff	0x80_2000 - 0x80_20ff
// pci slot B		0x8080_4000 - 0x8080_40ff	0x80_4000 - 0x80_40ff
// enet (79c974)	0x8080_8000 - 0x8080_80ff	0x80_8000 - 0x80_80ff

#define RPciConfig(Slot,Offset) \
    (*(volatile ULONG * const)(_PCIOBASE + (HalpPciConfigSlot[Slot] + Offset)) )

#define RPciVendor(Slot) \
    (*(volatile ULONG * const)(_PCIOBASE + (UCHAR)(HalpPciConfigSlot[Slot])) )

#define RPciVendorId(Slot)       \
	 (*(volatile ULONG * const) (_PCIOBASE +  (HalpPciConfigSlot[Slot])) )
	 //(*(volatile ULONG * const) (_PCIOBASE +  (0x800 << Slot) ) )

//
// I/O Device Addresses
//

// Device Registers		IO Space		Cpu Space
// ----------------		--------		---------
//
// Dma 1 registers, control	0x0000 - 0x000f		0x8000_0000 - _000f

// 8259 interrupt 1 control	0x0020			0x8000_0020
// 8259 interrupt 1 mask	0x0021			0x8000_0021
#define MasterIntPort0		0x0020
#define MasterIntPort1		0x0021

//
// AIP Primary xbus index	0x0022
// AIP Primary Xbus target	0x0023
// AIP Secondary Xbus
//		target		0x0024
// AIP Secondary xbus
//		index		0x0025
//
#define AIP_PRIMARY_XBUS_INDEX		0x0022
#define AIP_PRIMARY_XBUS_TARGET		0x0023
#define AIP_SECONDARY_XBUS_INDEX	0x0024
#define AIP_SECONDARY_XBUS_TARGET	0x0025



// keyboard cs, Reset 		0x0060
// 	( xbus irq 12 )
// nmi status and control	0x0061
// keyboard cs			0x0062
// keyboard cs			0x0064
// keyboard cs			0x0066

/*
**	*******************************************
**
**	Dallas 1385 Real Time Clock : System macros
**		dallas specific macros are in pxds1585.h
*/
// RTC address			0x0070
// RTC read/writ		0x0071
// NVRAM addr strobe 0		0x0072
// NVRAM addr strobe 1		0x0075
// NVRAM Read/Write		0x0077
// RTC and NVRAM		0x0070 - 0077

#define RTC_INDEX		0x0070		// index register
#define RTC_DATA		0x0071		// data register
#define NVRAM_ADDR0		0x0072		// address strobe 0
#define NVRAM_ADDR1		0x0075		// address strobe 1
#define NVRAM_RW		0x0077		// read write nvram?


// Timer			0x0078 - 007f
// DMA Page Registers		0x0080 - 0090
// Port 92 Register		0x0080 - 0092
// DMA Page Registers		0x0094 - 009f

// 8259 interrupt 2 control	0x00A0			0x8000_00A0
// 8259 interrupt 2 mask	0x00A1			0x8000_00A1
#define SlaveIntPort0		0x00A0
#define SlaveIntPort1		0x00A1

// DMA 2 registers and
//		control		0x00c0 - 00df


// AIP Configuration
//		Registers 	0x026e - 026f
//	( primary addr block )
#define AIP_PRIMARY_CONFIG_INDEX_REG	0x026e
#define AIP_PRIMARY_CNFG_DATA_REG	0x026f


// Parallel Port 3		0x0278 - 027d
// serial port2			0x02f8 - 02ff
// secondary floppy
//		controller	0x0370 - 0377
// parallel port 2		0x0378 - 037d


// AIP Configuraiton Registers	0x0398 - 0399
//	( secondary addr blck )
#define AIP_SECOND_CONFIG_INDEX_REG	0x0398
#define AIP_SECOND_CNFG_DATA_REG	0x0399


// parallel port 1 		0x03bc - 03bf
// pcmcia config registers	0x03e0 - 03e3
// primary floppy controller 	0x03f0 - 03f7
// serial port 1		0x03f8 - 03ff
// dma 1 extended
//		mode regsiter	0x040b
// dma scatter/gather
//	command status		0x0410 - 041f
// dma scatter/gather
//	Dscrptr ( channel 0-3 )	0x0420 - 042f
// dma scatter/gather
//	Dscrptr ( channel 5-7 )	0x0434 - 043f
// dma high page registers	0x0481 - 0483
// dma high page registers	0x0487
// dma high page registers	0x0489
// dma high page registers	0x048a - 048b
// dma 2 extended mode
//		register			0x04d6
// business audio control, 	
//	status, data registers	0x0830 - 0833


// video asic registers		0x0840 - 0841
#define DCC_INDEX		0x0840
#define DCC_DATA		0x0841


// bt445 ramdac registers	0x0860 - 086f
#define	BT445_ADDRESS		0x0860
#define ADDRESS_REGISTER	0x0860	// same as the BT445_ADDR
#define PRIMARY_PALETTE		0x0861	// Primary Color Palette address
#define CHIP_CONTROL		0x0862	// function control register
#define OVERLAY_PALETTE		0x0863	// Overlay Color Palette
#define RGB_PIXEL_CONFIG	0x0865	// RGB configuration and control
#define TIMING_PIXEL_CONFIG	0x0866	// pixel timing, configuration, control
#define CURSOR_COLOR		0x0867	// cursor color

// dram simm presence
//		detect register	0x0880
// vram simm presence
//		detect register	0x0890
// epxansion presence
//		detect register	0x08a0
//

//
// Defines for Register Access:
//
#define rIndexRTC		_IOREG( RTC_INDEX )
#define rDataRTC		_IOREG( RTC_DATA )
#define rNvramData		_IOREG( NVRAM_RW )
#define rNvramAddr0		_IOREG( NVRAM_ADDR0 )
#define rNvramAddr1		_IOREG( NVRAM_ADDR1 )
#define rMasterIntPort0		_IOREG( MasterIntPort0 )
#define rMasterIntPort1		_IOREG( MasterIntPort1 )
#define rSlaveIntPort0		_IOREG( SlaveIntPort0 )
#define rSlaveIntPort1		_IOREG( SlaveIntPort1 )

#define rIndexAIP1		_IOREG( AIP_PRIMARY_XBUS_INDEX )
#define rTargetAIP1		_IOREG( AIP_PRIMARY_XBUS_TARGET )
#define rIndexAIP2		_IOREG( AIP_SECONDARY_XBUS_INDEX )
#define rTargetAIP2		_IOREG( AIP_SECONDARY_XBUS_TARGET )


#define rDccIndex		_IOREG( DCC_INDEX )
#define rDccData		_IOREG( DCC_DATA )

#define	rRamDacAddr		_IOREG( BT445_ADDRESS )
#define rDacPrimeLut		_IOREG( PRIMARY_PALETTE )
#define rRamDacCntl		_IOREG( CHIP_CONTROL )
#define rDacOvlayLut		_IOREG( OVERLAY_PALETTE )
#define rDacPixelBit		_IOREG( RGB_PIXEL_CONFIG )
#define rDacPixelClks		_IOREG( TIMING_PIXEL_CONFIG )
#define rRamDacCursor		_IOREG( CURSOR_COLOR )


#endif