From faf7f46c968624a08a42c93748614c7da72019eb Mon Sep 17 00:00:00 2001 From: Joel Sherrill Date: Tue, 2 Mar 1999 15:32:30 +0000 Subject: Patch from Jay Monkman to address minor issues in the eth_comm BSP documentation. --- c/ACKNOWLEDGEMENTS | 5 +- c/src/lib/libbsp/powerpc/eth_comm/README | 209 ++++++++++++++- c/src/lib/libbsp/powerpc/eth_comm/times | 349 +++++++++++++------------ c/src/lib/libcpu/powerpc/mpc860/README | 15 +- c/src/lib/libcpu/powerpc/mpc860/vectors/README | 13 +- 5 files changed, 387 insertions(+), 204 deletions(-) diff --git a/c/ACKNOWLEDGEMENTS b/c/ACKNOWLEDGEMENTS index d3ab3176a2..0704884313 100644 --- a/c/ACKNOWLEDGEMENTS +++ b/c/ACKNOWLEDGEMENTS @@ -136,8 +136,9 @@ The following persons/organizations have made contributions: Puchheim,Germany submitted some improvements to the PPC403 support and added the helas403 BSP. -+ Jay Monkman (jmonkman@frasca.com) of Frasca submitted the - eth_comm BSP and support for the MPC860 PowerPC CPU model. ++ Jay Monkman (jmonkman@frasca.com) of Frasca International, Inc + submitted the support for the Motorola MPC860 CPU including the + 'eth_comm' BSP + Charles Gauthier of the Institute for Information Technology for the National Research Council of Canada diff --git a/c/src/lib/libbsp/powerpc/eth_comm/README b/c/src/lib/libbsp/powerpc/eth_comm/README index 87533ae4dc..11059f1faf 100644 --- a/c/src/lib/libbsp/powerpc/eth_comm/README +++ b/c/src/lib/libbsp/powerpc/eth_comm/README @@ -27,10 +27,10 @@ NETWORKING: Ethernet (10 Mbps) on SCC1 (MPC860) DRIVER INFORMATION ================== -CLOCK DRIVER: -IOSUPP DRIVER: +CLOCK DRIVER: Periodic Interval Timer +IOSUPP DRIVER: SCC1, SCC2, SCC3, SCC4, SMC1, SMC2 SHMSUPP: none -TIMER DRIVER: +TIMER DRIVER: Timebase register (lower 32 bits only) STDIO ===== @@ -62,7 +62,7 @@ On-chip resources: BRG4 console RTC PIT clock - TB + TB timer DEC SWT *CS0 FLASH @@ -75,17 +75,17 @@ On-chip resources: *CS7 DRAM bank 0 UPMA UPMB - IRQ0 - IRQ1 + IRQ0 Voltage supervisor + IRQ1 ARINC-429 IRQ2 CAN2 IRQ3 CAN0 IRQ4 CAN1 - IRQ5 - IRQ6 + IRQ5 + IRQ6 Multibus I IRQ7 IRQ_LVL0 clock - PIT - IRQ_LVL1 - IRQ_LVL2 + IRQ_LVL1 CPM + IRQ_LVL2 FEC IRQ_LVL3 IRQ_LVL4 IRQ_LVL5 @@ -98,3 +98,192 @@ Bus width: 16 bit Flash, 32 bit DRAM FLASH: 128K - 1024K, 120ns RAM: 2 - 32M DRAM SIMM, autodetects size and speed +Verification +------------------------------- +Single processor tests: Passed +Multi-processort tests: not applicable +Timing tests: + Context Switch + + context switch: self 9 + context switch: to another task 10 + context switch: no floating point contexts 23 + fp context switch: restore 1st FP task 24 + fp context switch: save initialized, restore initialized 11 + fp context switch: save idle, restore initialized 11 + fp context switch: save idle, restore idle 23 + + Task Manager + + rtems_task_create 83 + rtems_task_ident 84 + rtems_task_start 30 + rtems_task_restart: calling task 48 + rtems_task_restart: suspended task -- returns to caller 36 + rtems_task_restart: blocked task -- returns to caller 47 + rtems_task_restart: ready task -- returns to caller 35 + rtems_task_restart: suspended task -- preempts caller 56 + rtems_task_restart: blocked task -- preempts caller 116 + rtems_task_restart: ready task -- preempts caller 93 + rtems_task_delete: calling task 102 + rtems_task_delete: suspended task 74 + rtems_task_delete: blocked task 76 + rtems_task_delete: ready task 80 + rtems_task_suspend: calling task 37 + rtems_task_suspend: returns to caller 14 + rtems_task_resume: task readied -- returns to caller 16 + rtems_task_resume: task readied -- preempts caller 30 + rtems_task_set_priority: obtain current priority 12 + rtems_task_set_priority: returns to caller 23 + rtems_task_set_priority: preempts caller 52 + rtems_task_mode: obtain current mode 5 + rtems_task_mode: no reschedule 6 + rtems_task_mode: reschedule -- returns to caller 15 + rtems_task_mode: reschedule -- preempts caller 43 + rtems_task_get_note 13 + rtems_task_set_note 12 + rtems_task_wake_after: yield -- returns to caller 8 + rtems_task_wake_after: yields -- preempts caller 30 + rtems_task_wake_when: 49 + + Interrupt Manager + + interrupt entry overhead: returns to nested interrupt 7 + interrupt entry overhead: returns to interrupted task 31 + interrupt entry overhead: returns to preempting task 14 + interrupt exit overhead: returns to nested interrupt 10 + interrupt exit overhead: returns to interrupted task 8 + interrupt exit overhead: returns to preempting task 45 + + Clock Manager + + rtems_clock_set 28 + rtems_clock_get 0 + rtems_clock_tick 36 + + Timer Manager + + rtems_timer_create 11 + rtems_timer_ident 82 + rtems_timer_delete: inactive 14 + rtems_timer_delete: active 16 + rtems_timer_fire_after: inactive 20 + rtems_timer_fire_after: active 22 + rtems_timer_fire_when: inactive 24 + rtems_timer_fire_when: active 24 + rtems_timer_reset: inactive 18 + rtems_timer_reset: active 21 + rtems_timer_cancel: inactive 11 + rtems_timer_cancel: active 12 + + Semaphore Manager + + rtems_semaphore_create 56 + rtems_semaphore_ident 94 + rtems_semaphore_delete 34 + rtems_semaphore_obtain: available 13 + rtems_semaphore_obtain: not available -- NO_WAIT 13 + rtems_semaphore_obtain: not available -- caller blocks 48 + rtems_semaphore_release: no waiting tasks 16 + rtems_semaphore_release: task readied -- returns to caller 36 + rtems_semaphore_release: task readied -- preempts caller 36 + + Message Queue Manager + + rtems_message_queue_create 110 + rtems_message_queue_ident 82 + rtems_message_queue_delete 43 + rtems_message_queue_send: no waiting tasks 28 + rtems_message_queue_send: task readied -- returns to caller 31 + rtems_message_queue_send: task readied -- preempts caller 46 + rtems_message_queue_urgent: no waiting tasks 28 + rtems_message_queue_urgent: task readied -- returns to caller 31 + rtems_message_queue_urgent: task readied -- preempts caller 46 + rtems_message_queue_broadcast: no waiting tasks 22 + rtems_message_queue_broadcast: task readied -- returns to caller 81 + rtems_message_queue_broadcast: task readied -- preempts caller 75 + rtems_message_queue_receive: available 26 + rtems_message_queue_receive: not available -- NO_WAIT 15 + rtems_message_queue_receive: not available -- caller blocks 48 + rtems_message_queue_flush: no messages flushed 14 + rtems_message_queue_flush: messages flushed 14 + + Event Manager + + rtems_event_send: no task readied 12 + rtems_event_send: task readied -- returns to caller 38 + rtems_event_send: task readied -- preempts caller 21 + rtems_event_receive: obtain current events 1 + rtems_event_receive: available 19 + rtems_event_receive: not available -- NO_WAIT 11 + rtems_event_receive: not available -- caller blocks 36 + + Signal Manager + + rtems_signal_catch: 31 + rtems_signal_send: returns to caller 21 + rtems_signal_send: signal to self 39 + exit ASR overhead: returns to calling task 30 + exit ASR overhead: returns to preempting task 33 + + Partition Manager + + rtems_partition_create 59 + rtems_partition_ident 82 + rtems_partition_delete 20 + rtems_partition_get_buffer: available 19 + rtems_partition_get_buffer: not available 13 + rtems_partition_return_buffer 20 + + Region Manager + + rtems_region_create 37 + rtems_region_ident 84 + rtems_region_delete 20 + rtems_region_get_segment: available 19 + rtems_region_get_segment: not available -- NO_WAIT 23 + rtems_region_get_segment: not available -- caller blocks 75 + rtems_region_return_segment: no waiting tasks 21 + rtems_region_return_segment: task readied -- returns to caller 55 + rtems_region_return_segment: task readied -- preempts caller 82 + + Dual-Ported Memory Manager + + rtems_port_create 23 + rtems_port_ident 82 + rtems_port_delete 21 + rtems_port_internal_to_external 10 + rtems_port_external_to_internal 11 + + IO Manager + + rtems_io_initialize 1 + rtems_io_open 1 + rtems_io_close 1 + rtems_io_read 1 + rtems_io_write 1 + rtems_io_control 1 + + Rate Monotonic Manager + + rtems_rate_monotonic_create 43 + rtems_rate_monotonic_ident 82 + rtems_rate_monotonic_cancel 23 + rtems_rate_monotonic_delete: active 28 + rtems_rate_monotonic_delete: inactive 25 + rtems_rate_monotonic_period: obtain status 17 + rtems_rate_monotonic_period: initiate period -- returns to caller 32 + rtems_rate_monotonic_period: conclude periods -- caller blocks 30 + +Network tests: + TCP throughput (as measured by ttcp): + Receive: 1324 kbytes/sec + Transmit: 1037 kbytes/sec + + + + + + + + diff --git a/c/src/lib/libbsp/powerpc/eth_comm/times b/c/src/lib/libbsp/powerpc/eth_comm/times index 2ac0b9ee22..11a94ec6af 100644 --- a/c/src/lib/libbsp/powerpc/eth_comm/times +++ b/c/src/lib/libbsp/powerpc/eth_comm/times @@ -7,188 +7,189 @@ # $Id$ # -Board: -CPU: include coprocessor if applicable -Clock Speed: -Memory Configuration: SRAM, DRAM, cache, etc +Board: eth_comm +CPU: Motorola MPC860T +Clock Speed: 40 Mhz +Memory Configuration: DRAM, 60ns Wait States: Times Reported in: cycles, microseconds, etc -Timer Source: Count Down Timer, on-CPU cycle counter, etc +Timer Source: Time Base register Column X: Column Y: # DESCRIPTION A B == ================================================================= ==== ==== - 1 rtems_semaphore_create 20 - rtems_semaphore_delete 21 - rtems_semaphore_obtain: available 15 - rtems_semaphore_obtain: not available -- NO_WAIT 15 +1 rtems_semaphore_create 56 + rtems_semaphore_delete 35 + rtems_semaphore_obtain: available 13 + rtems_semaphore_obtain: not available -- NO_WAIT 13 rtems_semaphore_release: no waiting tasks 16 - 2 rtems_semaphore_obtain: not available -- caller blocks 62 - - 3 rtems_semaphore_release: task readied -- preempts caller 55 - - 4 rtems_task_restart: blocked task -- preempts caller 77 - rtems_task_restart: ready task -- preempts caller 70 - rtems_semaphore_release: task readied -- returns to caller 25 - rtems_task_create 57 - rtems_task_start 31 - rtems_task_restart: suspended task -- returns to caller 36 - rtems_task_delete: suspended task 47 - rtems_task_restart: ready task -- returns to caller 37 - rtems_task_restart: blocked task -- returns to caller 46 - rtems_task_delete: blocked task 50 - - 5 rtems_task_suspend: calling task 51 - rtems_task_resume: task readied -- preempts caller 49 - - 6 rtems_task_restart: calling task 59 - rtems_task_suspend: returns to caller 18 - rtems_task_resume: task readied -- returns to caller 19 - rtems_task_delete: ready task 50 - - 7 rtems_task_restart: suspended task -- preempts caller 70 - - 8 rtems_task_set_priority: obtain current priority 12 - rtems_task_set_priority: returns to caller 27 - rtems_task_mode: obtain current mode 5 - rtems_task_mode: no reschedule 5 - rtems_task_mode: reschedule -- returns to caller 8 - rtems_task_mode: reschedule -- preempts caller 39 - rtems_task_set_note 13 - rtems_task_get_note 13 - rtems_clock_set 33 - rtems_clock_get 3 - - 9 rtems_message_queue_create 110 - rtems_message_queue_send: no waiting tasks 37 - rtems_message_queue_urgent: no waiting tasks 37 - rtems_message_queue_receive: available 31 - rtems_message_queue_flush: no messages flushed 12 - rtems_message_queue_flush: messages flushed 16 - rtems_message_queue_delete 26 - -10 rtems_message_queue_receive: not available -- NO_WAIT 15 - rtems_message_queue_receive: not available -- caller blocks 62 - -11 rtems_message_queue_send: task readied -- preempts caller 72 - -12 rtems_message_queue_send: task readied -- returns to caller 39 - -13 rtems_message_queue_urgent: task readied -- preempts caller 72 - -14 rtems_message_queue_urgent: task readied -- returns to caller 39 - -15 rtems_event_receive: obtain current events 1 - rtems_event_receive: not available -- NO_WAIT 12 - rtems_event_receive: not available -- caller blocks 56 - rtems_event_send: no task readied 12 - rtems_event_receive: available 12 - rtems_event_send: task readied -- returns to caller 24 - -16 rtems_event_send: task readied -- preempts caller 55 - -17 rtems_task_set_priority: preempts caller 62 - -18 rtems_task_delete: calling task 83 - -19 rtems_signal_catch 9 - rtems_signal_send: returns to caller 15 - rtems_signal_send: signal to self 18 - exit ASR overhead: returns to calling task 22 - exit ASR overhead: returns to preempting task 49 - -20 rtems_partition_create 35 - rtems_region_create 23 - rtems_partition_get_buffer: available 15 - rtems_partition_get_buffer: not available 13 - rtems_partition_return_buffer 18 - rtems_partition_delete 16 - rtems_region_get_segment: available 22 - rtems_region_get_segment: not available -- NO_WAIT 21 - rtems_region_return_segment: no waiting tasks 19 - rtems_region_get_segment: not available -- caller blocks 64 - rtems_region_return_segment: task readied -- preempts caller 74 - rtems_region_return_segment: task readied -- returns to caller 44 - rtems_region_delete 16 - rtems_io_initialize 2 - rtems_io_open 1 - rtems_io_close 1 - rtems_io_read 1 - rtems_io_write 1 - rtems_io_control 1 - -21 rtems_task_ident 149 - rtems_message_queue_ident 145 - rtems_semaphore_ident 156 - rtems_partition_ident 145 - rtems_region_ident 148 - rtems_port_ident 145 - rtems_timer_ident 145 - rtems_rate_monotonic_ident 145 - -22 rtems_message_queue_broadcast: task readied -- returns to caller 42 - rtems_message_queue_broadcast: no waiting tasks 17 - rtems_message_queue_broadcast: task readied -- preempts caller 78 - -23 rtems_timer_create 14 - rtems_timer_fire_after: inactive 22 - rtems_timer_fire_after: active 24 - rtems_timer_cancel: active 15 - rtems_timer_cancel: inactive 13 - rtems_timer_reset: inactive 21 - rtems_timer_reset: active 23 - rtems_timer_fire_when: inactive 34 - rtems_timer_fire_when: active 34 - rtems_timer_delete: active 19 - rtems_timer_delete: inactive 17 - rtems_task_wake_when 69 - -24 rtems_task_wake_after: yield -- returns to caller 9 - rtems_task_wake_after: yields -- preempts caller 45 - -25 rtems_clock_tick 4 - -26 _ISR_Disable 0 - _ISR_Flash 1 - _ISR_Enable 1 - _Thread_Disable_dispatch 0 - _Thread_Enable_dispatch 7 - _Thread_Set_state 11 - _Thread_Disptach (NO FP) 31 - context switch: no floating point contexts 21 - context switch: self 10 - context switch: to another task 10 - context switch: restore 1st FP task 25 - fp context switch: save idle, restore idle 31 - fp context switch: save idle, restore initialized 19 - fp context switch: save initialized, restore initialized 20 - _Thread_Resume 7 - _Thread_Unblock 7 - _Thread_Ready 9 - _Thread_Get 4 - _Semaphore_Get 2 - _Thread_Get: invalid id 0 - -27 interrupt entry overhead: returns to interrupted task 6 - interrupt exit overhead: returns to interrupted task 6 - interrupt entry overhead: returns to nested interrupt 6 - interrupt exit overhead: returns to nested interrupt 5 - interrupt entry overhead: returns to preempting task 7 - interrupt exit overhead: returns to preempting task 36 - -28 rtems_port_create 16 - rtems_port_external_to_internal 11 - rtems_port_internal_to_external 11 - rtems_port_delete 16 - -29 rtems_rate_monotonic_create 15 - rtems_rate_monotonic_period: initiate period -- returns to caller 21 - rtems_rate_monotonic_period: obtain status 13 - rtems_rate_monotonic_cancel 16 - rtems_rate_monotonic_delete: inactive 18 - rtems_rate_monotonic_delete: active 20 - rtems_rate_monotonic_period: conclude periods -- caller blocks 53 +2 rtems_semaphore_obtain: not available -- caller blocks 48 + +3 rtems_semaphore_release: task readied -- preempts caller 36 + +4 rtems_task_restart: blocked task -- preempts caller 117 + rtems_task_restart: ready task -- preempts caller 94 + rtems_semaphore_release: task readied -- returns to caller 22 + rtems_task_create 83 + rtems_task_start 30 + rtems_task_restart: suspended task -- returns to caller 36 + rtems_task_delete: suspended task 74 + rtems_task_restart: ready task -- returns to caller 35 + rtems_task_restart: blocked task -- returns to caller 47 + rtems_task_delete: blocked task 76 + +5 rtems_task_suspend: calling task 37 + rtems_task_resume: task readied -- preempts caller 31 + +6 rtems_task_restart: calling task 48 + rtems_task_suspend: returns to caller 14 + rtems_task_resume: task readied -- returns to caller 16 + rtems_task_delete: ready task 80 + +7 rtems_task_restart: suspended task -- preempts caller 56 + +8 rtems_task_set_priority: obtain current priority 12 + rtems_task_set_priority: returns to caller 23 + rtems_task_mode: obtain current mode 5 + rtems_task_mode: no reschedule 7 + rtems_task_mode: reschedule -- returns to caller 14 + rtems_task_mode: reschedule -- preempts caller 43 + rtems_task_set_note 13 + rtems_task_get_note 12 + rtems_clock_set 28 + rtems_clock_get 0 + +9 rtems_message_queue_create 110 + rtems_message_queue_send: no waiting tasks 28 + rtems_message_queue_urgent: no waiting tasks 28 + rtems_message_queue_receive: available 26 + rtems_message_queue_flush: no messages flushed 13 + rtems_message_queue_flush: messages flushed 14 + rtems_message_queue_delete 45 + +10 rtems_message_queue_receive: not available -- NO_WAIT 15 + rtems_message_queue_receive: not available -- caller blocks 48 + +11 rtems_message_queue_send: task readied -- preempts caller 46 + +12 rtems_message_queue_send: task readied -- returns to caller 31 + +13 rtems_message_queue_urgent: task readied -- preempts caller 46 + +14 rtems_message_queue_urgent: task readied -- returns to caller 31 + +15 rtems_event_receive: obtain current events 1 + rtems_event_receive: not available -- NO_WAIT 11 + rtems_event_receive: not available -- caller blocks 36 + rtems_event_send: no task readied 12 + rtems_event_receive: available 19 + rtems_event_send: task readied -- returns to caller 21 + +16 rtems_event_send: task readied -- preempts caller 38 + +17 rtems_task_set_priority: preempts caller 51 + +18 rtems_task_delete: calling task 102 + +19 rtems_signal_catch 31 + rtems_signal_send: returns to caller 21 + rtems_signal_send: signal to self 39 + exit ASR overhead: returns to calling task 30 + exit ASR overhead: returns to preempting task 33 + +20 rtems_partition_create 59 + rtems_region_create 37 + rtems_partition_get_buffer: available 19 + rtems_partition_get_buffer: not available 12 + rtems_partition_return_buffer 21 + rtems_partition_delete 20 + rtems_region_get_segment: available 20 + rtems_region_get_segment: not available -- NO_WAIT 24 + rtems_region_return_segment: no waiting tasks 21 + rtems_region_get_segment: not available -- caller blocks 76 + rtems_region_return_segment: task readied -- preempts caller 82 + rtems_region_return_segment: task readied -- returns to caller 55 + rtems_region_delete 20 + rtems_io_initialize 1 + rtems_io_open 1 + rtems_io_close 1 + rtems_io_read 1 + rtems_io_write 1 + rtems_io_control 1 + +21 rtems_task_ident 84 + rtems_message_queue_ident 82 + rtems_semaphore_ident 94 + rtems_partition_ident 82 + rtems_region_ident 84 + rtems_port_ident 82 + rtems_timer_ident 82 + rtems_rate_monotonic_ident 82 + +22 rtems_message_queue_broadcast: task readied -- returns to caller 81 + rtems_message_queue_broadcast: no waiting tasks 22 + rtems_message_queue_broadcast: task readied -- preempts caller 76 + +23 rtems_timer_create 11 + rtems_timer_fire_after: inactive 20 + rtems_timer_fire_after: active 22 + rtems_timer_cancel: active 12 + rtems_timer_cancel: inactive 11 + rtems_timer_reset: inactive 18 + rtems_timer_reset: active 21 + rtems_timer_fire_when: inactive 24 + rtems_timer_fire_when: active 24 + rtems_timer_delete: active 16 + rtems_timer_delete: inactive 14 + rtems_task_wake_when 49 + +24 rtems_task_wake_after: yield -- returns to caller 8 + rtems_task_wake_after: yields -- preempts caller 30 + +25 rtems_clock_tick 35 + +26 _ISR_Disable 24 + _ISR_Flash 0 + _ISR_Enable 1 + _Thread_Disable_dispatch 1 + _Thread_Enable_dispatch 7 + _Thread_Set_state 7 + _Thread_Disptach (NO FP) 31 + context switch: no floating point contexts 22 + context switch: self 9 + context switch: to another task 10 + fp context switch: restore 1st FP task 24 + fp context switch: save idle, restore initialized 10 + fp context switch: save idle, restore idle 23 + fp context switch: save initialized, restore initialized 10 + _Thread_Resume 11 + _Thread_Unblock 6 + _Thread_Ready 10 + _Thread_Get 3 + _Semaphore_Get 2 + _Thread_Get: invalid id 0 + + +27 interrupt entry overhead: returns to interrupted task 14 + interrupt exit overhead: returns to interrupted task 26 + interrupt entry overhead: returns to nested interrupt 7 + interrupt exit overhead: returns to nested interrupt 10 + interrupt entry overhead: returns to preempting task 14 + interrupt exit overhead: returns to preempting task 45 + +28 rtems_port_create 23 + rtems_port_external_to_internal 10 + rtems_port_internal_to_external 10 + rtems_port_delete 21 + +29 rtems_rate_monotonic_create 43 + rtems_rate_monotonic_period: initiate period -- returns to caller 32 + rtems_rate_monotonic_period: obtain status 17 + rtems_rate_monotonic_cancel 22 + rtems_rate_monotonic_delete: inactive 25 + rtems_rate_monotonic_delete: active 28 + rtems_rate_monotonic_period: conclude periods -- caller blocks 30 diff --git a/c/src/lib/libcpu/powerpc/mpc860/README b/c/src/lib/libcpu/powerpc/mpc860/README index 528506d3dd..211916489d 100644 --- a/c/src/lib/libcpu/powerpc/mpc860/README +++ b/c/src/lib/libcpu/powerpc/mpc860/README @@ -4,19 +4,16 @@ Various non BSP dependant support routines. -clock - Uses the 403 PIT (Programmable interval timer) to +clock - Uses the MPC860 PITPIT (Programmable interval timer) to generate RTEMS clock ticks. -console - Uses the 403 Internal serial port to do RTEMS - console I/O. Not ALL members of the 403 family - have this. +console_generic - Uses the MPC860 SCCs and SMCs to to serial I/O -include - Currently empty +include - console.h: function declarations for console related functions -timer - Uses the 403 timebase register for timing - tests. Other PowerPCs have slightly different - timebase register definitions. +timer - Uses the MPC860 timebase register for timing + tests. It only uses the lower 32 bits -vectors - PowerPC 403 specific vector entry points. +vectors - MPC860 specific vector entry points. Includes CPU dependant, application independant handlers: alignment. diff --git a/c/src/lib/libcpu/powerpc/mpc860/vectors/README b/c/src/lib/libcpu/powerpc/mpc860/vectors/README index 4081ae2525..536e221f43 100644 --- a/c/src/lib/libcpu/powerpc/mpc860/vectors/README +++ b/c/src/lib/libcpu/powerpc/mpc860/vectors/README @@ -10,16 +10,11 @@ From the comments at the head of vectors.s: The first vector MUST be at address 0x????0100. How this is achieved is dependant on the tool chain. - However the basic mechanism for ELF assemblers is to create a - section called ".vectors", which will be loaded to an address - between 0x????0000 and 0x????0100 (inclusive) via a link script. - - The basic mechanism for XCOFF assemblers is to place it in the - normal text section, and arrange for this file to be located - at an appropriate position on the linker command line. +... The variable 'PPC_VECTOR_FILE_BASE' must be defined to be the offset from 0x????0000 to the first location in the file. This - will usually be 0x0000 or 0x0100. + will be either 0x0000 or 0xfff0. + +The eth_comm BSP defines PPC_VECTOR_FILE_BASE to be 0x00000000 -Andrew Bray 18/8/1995 -- cgit v1.2.3