From f48f64ab8a7ac3e588d51b3bcb2dc6ee47baccb4 Mon Sep 17 00:00:00 2001 From: Jennifer Averett Date: Thu, 28 Apr 2005 19:27:05 +0000 Subject: 2005-04-28 Jennifer Averett * Add/remove files for the Update to new exception model. * pci/no_host_bridge.c, vme/vmeconfig.c: New files. * clock/clock.c: Removed. --- c/src/lib/libbsp/powerpc/score603e/ChangeLog | 6 + c/src/lib/libbsp/powerpc/score603e/clock/clock.c | 224 --------------------- .../libbsp/powerpc/score603e/pci/no_host_bridge.c | 23 +++ c/src/lib/libbsp/powerpc/score603e/vme/vmeconfig.c | 133 ++++++++++++ 4 files changed, 162 insertions(+), 224 deletions(-) delete mode 100644 c/src/lib/libbsp/powerpc/score603e/clock/clock.c create mode 100644 c/src/lib/libbsp/powerpc/score603e/pci/no_host_bridge.c create mode 100644 c/src/lib/libbsp/powerpc/score603e/vme/vmeconfig.c (limited to 'c/src') diff --git a/c/src/lib/libbsp/powerpc/score603e/ChangeLog b/c/src/lib/libbsp/powerpc/score603e/ChangeLog index 54687977b0..0735b0ad90 100644 --- a/c/src/lib/libbsp/powerpc/score603e/ChangeLog +++ b/c/src/lib/libbsp/powerpc/score603e/ChangeLog @@ -1,3 +1,9 @@ +2005-04-28 Jennifer Averett + + * Add/remove files for the Update to new exception model. + * pci/no_host_bridge.c, vme/vmeconfig.c: New files. + * clock/clock.c: Removed. + 2005-04-28 Jennifer Averett * Add/move files for the Update to new exception model. diff --git a/c/src/lib/libbsp/powerpc/score603e/clock/clock.c b/c/src/lib/libbsp/powerpc/score603e/clock/clock.c deleted file mode 100644 index 4656634e38..0000000000 --- a/c/src/lib/libbsp/powerpc/score603e/clock/clock.c +++ /dev/null @@ -1,224 +0,0 @@ -/* - * Clock Tick Device Driver - * - * This routine utilizes the Decrementer Register common to the PPC family. - * - * The tick frequency is directly programmed to the configured number of - * microseconds per tick. - * - * COPYRIGHT (c) 1989-1997. - * On-Line Applications Research Corporation (OAR). - * - * The license and distribution terms for this file may in - * the file LICENSE in this distribution or at - * http://www.rtems.com/license/LICENSE. - * - * $Id$ - */ - -#include - -#include -#include -#include - -/* - * The Real Time Clock Counter Timer uses this trap type. - */ - -#define CLOCK_VECTOR PPC_IRQ_DECREMENTER - -/* - * Clock ticks since initialization - */ - -volatile uint32_t Clock_driver_ticks; - -/* - * This is the value programmed into the count down timer. - */ - -uint32_t Clock_Decrementer_value; - -rtems_isr_entry Old_ticker; - -void Clock_exit( void ); - -/* - * These are set by clock driver during its init - */ - -rtems_device_major_number rtems_clock_major = ~0; -rtems_device_minor_number rtems_clock_minor; - -/* - * Clock_isr - * - * This is the clock tick interrupt handler. - * - * Input parameters: - * vector - vector number - * - * Output parameters: NONE - * - * Return values: NONE - * - */ -rtems_isr Clock_isr( - rtems_vector_number vector, - CPU_Interrupt_frame *frame -) -{ - /* - * Set the decrementer. - */ - - PPC_Set_decrementer( Clock_Decrementer_value ); - - /* - * The driver has seen another tick. - */ - - Clock_driver_ticks += 1; - - /* - * Real Time Clock counter/timer is set to automatically reload. - */ - - rtems_clock_tick(); -} - -/* - * Install_clock - * - * This routine actually performs the hardware initialization for the clock. - * - * Input parameters: - * clock_isr - clock interrupt service routine entry point - * - * Output parameters: NONE - * - * Return values: NONE - * - */ - -extern int CLOCK_SPEED; - -void Install_clock( - rtems_isr_entry clock_isr -) -{ - Clock_driver_ticks = 0; - - Old_ticker = (rtems_isr_entry) set_vector( clock_isr, CLOCK_VECTOR, 1 ); - - PPC_Set_decrementer( Clock_Decrementer_value ); - - atexit( Clock_exit ); -} - -/* - * Clock_exit - * - * This routine allows the clock driver to exit by masking the interrupt and - * disabling the clock's counter. - * - * Input parameters: NONE - * - * Output parameters: NONE - * - * Return values: NONE - * - */ - -void Clock_exit( void ) -{ - /* nothing to do */; - - /* do not restore old vector */ -} - -/* - * Clock_initialize - * - * This routine initializes the clock driver. - * - * Input parameters: - * major - clock device major number - * minor - clock device minor number - * parg - pointer to optional device driver arguments - * - * Output parameters: NONE - * - * Return values: - * rtems_device_driver status code - */ - -rtems_device_driver Clock_initialize( - rtems_device_major_number major, - rtems_device_minor_number minor, - void *pargp -) -{ - Clock_Decrementer_value = (int) &CPU_PPC_CLICKS_PER_MS * - (BSP_Configuration.microseconds_per_tick / 1000); - - Install_clock( (rtems_isr_entry) Clock_isr ); - - /* - * make major/minor avail to others such as shared memory driver - */ - - rtems_clock_major = major; - rtems_clock_minor = minor; - - return RTEMS_SUCCESSFUL; -} - -/* - * Clock_control - * - * This routine is the clock device driver control entry point. - * - * Input parameters: - * major - clock device major number - * minor - clock device minor number - * parg - pointer to optional device driver arguments - * - * Output parameters: NONE - * - * Return values: - * rtems_device_driver status code - */ - -rtems_device_driver Clock_control( - rtems_device_major_number major, - rtems_device_minor_number minor, - void *pargp -) -{ - uint32_t isrlevel; - rtems_libio_ioctl_args_t *args = pargp; - - if (args == 0) - goto done; - - /* - * This is hokey, but until we get a defined interface - * to do this, it will just be this simple... - */ - - if (args->command == rtems_build_name('I', 'S', 'R', ' ')) - { - Clock_isr( CLOCK_VECTOR, pargp ); - } - else if (args->command == rtems_build_name('N', 'E', 'W', ' ')) - { - rtems_interrupt_disable( isrlevel ); - (void) set_vector( args->buffer, CLOCK_VECTOR, 1 ); - rtems_interrupt_enable( isrlevel ); - } - -done: - return RTEMS_SUCCESSFUL; -} diff --git a/c/src/lib/libbsp/powerpc/score603e/pci/no_host_bridge.c b/c/src/lib/libbsp/powerpc/score603e/pci/no_host_bridge.c new file mode 100644 index 0000000000..625e4f7423 --- /dev/null +++ b/c/src/lib/libbsp/powerpc/score603e/pci/no_host_bridge.c @@ -0,0 +1,23 @@ +/* + * detect_host_bridge.c + */ + +#include +#include + +#include +#include +#include +#include +#include + +#include + +/* + * For the 8240 and the 8245 there is no host bridge the + * Open PIC device is built into the processor chip. + */ + +void detect_host_bridge() +{ +} diff --git a/c/src/lib/libbsp/powerpc/score603e/vme/vmeconfig.c b/c/src/lib/libbsp/powerpc/score603e/vme/vmeconfig.c new file mode 100644 index 0000000000..1b4193ab54 --- /dev/null +++ b/c/src/lib/libbsp/powerpc/score603e/vme/vmeconfig.c @@ -0,0 +1,133 @@ +/* vmeconfig.c,v 1.1.2.2 2003/03/25 16:46:01 joel Exp */ + +/* Standard VME bridge configuration for VGM type boards */ + +/* Author: Till Straumann , 3/2002 */ + +#include +#include +#include +#include +#include +#include + +/* Use a weak alias for the VME configuration. + * This permits individual applications to override + * this routine. + * They may even create an 'empty' + * + * void BSP_vme_config(void) {} + * + * which will avoid linking in the Universe driver + * at all :-). + */ + +void BSP_vme_config(void) __attribute__ (( weak, alias("__BSP_default_vme_config") )); + +SPR_RO(DBAT0U) + +extern unsigned32 VME_Slot1; + +void +__BSP_default_vme_config(void) +{ +union { + struct _BATU bat; + unsigned long batbits; +} dbat0u; + + vmeUniverseInit(); + vmeUniverseReset(); + + /* setup a PCI area to map the VME bus */ + + dbat0u.batbits = _read_DBAT0U(); + + /* map VME address ranges */ + vmeUniverseMasterPortCfg( + 0, + VME_AM_EXT_SUP_DATA, + _VME_A32_WIN0_ON_VME, + _VME_A32_WIN0_ON_PCI, + 0x0F000000); + vmeUniverseMasterPortCfg( + 1, + VME_AM_STD_SUP_DATA, + 0x00000000, + _VME_A24_ON_PCI, + 0x00ff0000); + vmeUniverseMasterPortCfg( + 2, + VME_AM_SUP_SHORT_IO, + 0x00000000, + _VME_A16_ON_PCI, + 0x00010000); + +#ifdef _VME_DRAM_OFFSET +#if 0 + if (VME_Slot1){ + /* map our memory to VME */ +printk("vmeUniverseSlavePortCfg length of 0x%x\n", BSP_mem_size); + vmeUniverseSlavePortCfg( + 0, + VME_AM_EXT_SUP_DATA, + _VME_DRAM_32_OFFSET1, + PCI_DRAM_OFFSET, + BSP_mem_size); +printk("vmeUniverseSlavePortCfg length of 0x%x\n", _VME_A24_SIZE); + vmeUniverseSlavePortCfg( + 1, + VME_AM_STD_SUP_DATA, + _VME_DRAM_24_OFFSET1, + PCI_DRAM_OFFSET, + _VME_A24_SIZE); +printk("vmeUniverseSlavePortCfg length of 0x%x\n", _VME_A16_SIZE); + vmeUniverseSlavePortCfg( + 2, + VME_AM_SUP_SHORT_IO, + _VME_DRAM_16_OFFSET1, + PCI_DRAM_OFFSET, + _VME_A16_SIZE); + } + else { +printk("vmeUniverseSlavePortCfg length of 0x%x\n", BSP_mem_size); + vmeUniverseSlavePortCfg( + 0, + VME_AM_EXT_SUP_DATA, + _VME_DRAM_32_OFFSET2, + PCI_DRAM_OFFSET, + BSP_mem_size); +printk("vmeUniverseSlavePortCfg length of 0x%x\n", _VME_A24_SIZE); + vmeUniverseSlavePortCfg( + 1, + VME_AM_STD_SUP_DATA, + _VME_DRAM_24_OFFSET2, + PCI_DRAM_OFFSET, + _VME_A24_SIZE); +printk("vmeUniverseSlavePortCfg length of 0x%x\n", _VME_A16_SIZE); + vmeUniverseSlavePortCfg( + 2, + VME_AM_SUP_SHORT_IO, + _VME_DRAM_16_OFFSET2, + PCI_DRAM_OFFSET, + _VME_A16_SIZE); + } +#endif + + /* make sure the host bridge PCI master is enabled */ + vmeUniverseWriteReg( + vmeUniverseReadReg(UNIV_REGOFF_PCI_CSR) | UNIV_PCI_CSR_BM, + UNIV_REGOFF_PCI_CSR); +#endif + + + /* stdio is not yet initialized; the driver will revert to printk */ + vmeUniverseMasterPortsShow(0); + vmeUniverseSlavePortsShow(0); + + /* install the VME insterrupt manager */ + vmeUniverseInstallIrqMgr(0,5,1,6); + if (vmeUniverse0PciIrqLine<0) + BSP_panic("Unable to get interrupt line info from PCI config"); + _BSP_vme_bridge_irq=BSP_PCI_IRQ_LOWEST_OFFSET+vmeUniverse0PciIrqLine; +} -- cgit v1.2.3