Commit Graph

67 Commits

Author SHA1 Message Date
Ralf Corsepius
0c819966e2 2002-12-09 Ralf Corsepius <corsepiu@faw.uni-ulm.de>
* include/Makefile.am: Remove.
	* inline/Makefile.am: Remove.
	* macros/Makefile.am: Remove.
	* src/Makefile.am: Remove.
	* Makefile.am: Merge-in removed Makefile.ams.
2002-12-09 09:48:32 +00:00
Joel Sherrill
ef9505a92f 2002-07-01 Joel Sherrill <joel@OARcorp.com>
* Mega patch merge to change the format of the object IDs to
	loosen the dependency between the SCORE and the various APIs.
	There was considerable work to simplify the object name management
        and it appears that the name_table field is no longer needed.
	This patch also includes the addition of the internal mutex
	which is currently only used to protect some types of allocation
	and deallocation.  This significantly can reduce context
	switch latency under certain circumstances.  In particular,
	some heap/region operations were O(n) and had dispatching
	disabled.  This should help enormously.  With this merge,
	the patch is not as clean as it should be.  In particular,
	the documentation has not been modified to reflect the new object
	ID layout, the IDs in the test screens are not updated, and
	_Objects_Get_information needs to be a real routine not inlined.
	As part of this patch a lot of MP code for thread/proxy blocking
	was made conditional and cleaned up.
	* include/Makefile.am, include/rtems/score/coremsg.h,
	include/rtems/score/coremutex.h, include/rtems/score/coresem.h,
	include/rtems/score/object.h, include/rtems/score/threadq.h,
	inline/rtems/score/object.inl, inline/rtems/score/thread.inl,
	macros/rtems/score/object.inl, src/Makefile.am, src/coremsg.c,
	src/coremutex.c, src/coresem.c, src/mpci.c,
	src/objectcomparenameraw.c, src/objectextendinformation.c,
	src/objectinitializeinformation.c, src/objectnametoid.c,
	src/thread.c, src/threadclose.c, src/threadget.c, src/threadq.c,
	src/threadqextractwithproxy.c: Modified as part of above.
	* include/rtems/score/apimutex.h, src/objectgetnoprotection.c: New
	files.
2002-07-01 22:30:12 +00:00
Ralf Corsepius
fed6210d43 2002-06-17 Ralf Corsepius <corsepiu@faw.uni-ulm.de>
* Include $(top_srcdir)/automake/*.am.
2002-06-17 09:27:44 +00:00
Joel Sherrill
0df8293e2b 2002-05-15 Chris Johns <ccj@acm.org>
* include/rtems/score/thread.h, inline/rtems/score/thread.inl,
	src/threaddispatch.c, src/threadinitialize.c:
	Move the C library re-enterrant support directly into
	the thread dispatch code. RTEMS needs libc and so requiring
	libc to use a user extension with its overhead is not the best
	solution. This patch lowers the overhead to 2 pointer moves.
2002-05-15 15:14:58 +00:00
Joel Sherrill
2b454faf13 2001-04-26 Joel Sherrill <joel@OARcorp.com>
* include/rtems/score/object.h, inline/rtems/score/object.inl,
	src/objectcomparenamestring.c: Address PR81 that
	reworked POSIX message queues to add a descriptor separate from
	the underlying message queue.  This allows non-blocking to follow
	the "open" not the underlying queue.   As part of debugging this
	it became clear that _Objects_Compare_name_string was broken
	and a simple version using strncmp() was substituted.
2002-04-26 23:56:56 +00:00
Joel Sherrill
ed11413b48 2001-04-11 Joel Sherrill <joel@OARcorp.com>
* macros/rtems/score/userext.inl: Now works after merging patch for
	functionality requested in PR174.
	* inline/rtems/score/userext.inl: Added a comment explaining the
	order in which routines appear since it is not the obvious order.
2002-04-11 13:51:06 +00:00
Joel Sherrill
02a200d157 2002-04-08 Chris Johns <ccj@acm.org>
* Per PR141 and PR174, make task switch extension its own list and
	fix all odd problems introduced by providing macro version.
	* inline/rtems/score/userext.inl: Fix.
2002-04-09 19:19:03 +00:00
Joel Sherrill
aadb6b0db7 2001-04-08 Joel Sherrill <joel@OARcorp.com>
* macros/rtems/score/userext.inl: Updated to reflect modifications
	to inline version from PR142.
	* inline/rtems/score/userext.inl: Cleanup as side-effect of above.
2002-04-08 18:21:47 +00:00
Joel Sherrill
7af623bf68 2002-04-08 Chris Johns <ccj@acm.org>
* Per PR142, make task switch extension its own list.
	* include/rtems/score/userext.h: Reflect above by adding 
	User_extensions_Switch_control and adding it to User_extenions_Control.
	* inline/rtems/score/userext.inl: Allocate all memory in one chunk
	to minimize overhead.  Address processing dedicated switch chain.
2002-04-08 17:23:11 +00:00
Joel Sherrill
c43484bf54 2002-03-27 Ralf Corsepius <corsepiu@faw.uni-ulm.de>
* cpu/Makefile.am: Remove AUTOMAKE_OPTIONS.
	* src/Makefile.am: Remove AUTOMAKE_OPTIONS.
	* Makefile.am: Remove AUTOMAKE_OPTIONS.
	* include/Makefile.am: Remove AUTOMAKE_OPTIONS.
	* inline/Makefile.am: Remove AUTOMAKE_OPTIONS.
	* macros/Makefile.am: Remove AUTOMAKE_OPTIONS.
2002-03-28 00:46:37 +00:00
Joel Sherrill
b804d632c0 2001-12-19 Ralf Corsepius <corsepiu@faw.uni-ulm.de>
* inline/rtems/score/object.inl, macros/rtems/score/object.inl: Add
	add casts to Objects_Id in _Objects_Build_ids to avoid implicit
	typecasts from enum to int16 on bit16 targets (here: h8300).
2001-12-20 17:30:18 +00:00
Joel Sherrill
89ee0b6936 2001-11-28 Joel Sherrill <joel@OARcorp.com>,
This was tracked as PR91.
	* include/rtems/score/isr.h, inline/rtems/score/isr.inl,
	macros/rtems/score/isr.inl: Modified to allow any port to provide
	its own implementation of the macro _ISR_Is_in_progress.  If the
	port overrides this macro, it must provide a non-inlined function
	implementation.
2001-11-28 18:28:24 +00:00
Joel Sherrill
ff61414ac8 2001-10-16 Ralf Corsepius <corsepiu@faw.uni-ulm.de>
* include/rtems/Makefile.am: Remove.
	* include/rtems/Makefile.am: Remove.
	* include/Makefile.am: Handle subdirs, require automake-1.5.
	* macros/rtems/Makefile.am: Remove.
	* macros/rtems/score/Makefile.am: Remove.
	* macros/Makefile.am: Handle subdirs, require automake-1.5.
	* inline/rtems/Makefile.am: Remove.
	* inline/rtems/score/Makefile.am: Remove.
	* inline/Makefile.am: Handle subdirs, require automake-1.5.
	* Makefile.am: require automake-1.5
2001-10-16 13:30:52 +00:00
Joel Sherrill
fb1d8f81a0 2001-08-30 Joel Sherrill <joel@OARcorp.com>
*  src/coremutex.c, src/coremutexseize.c, src/coremutexsurrender.c,
	inline/rtems/score/coremutex.inl: The per thread field resource_count
	should only be manipulated when a mutex is priority ceiling or
	priority inherit.  This was reported by Chris Johns <ccj@acm.org>
	who also noticed that the use of switches for all disciplines
	generated less efficient code than using explicit tests for the one
	or two cases we were really interested in.  Further review of his
	modifications made it apparent that the "isa" methods to test mutex
	discipline were not being used so this modification was swept into
	the code as well.
2001-08-30 18:33:57 +00:00
Joel Sherrill
00815403be 2001-08-09 Joel Sherrill <joel@OARcorp.com>
* include/rtems/score/coremsg.h, inline/rtems/score/coremsg.inl,
	src/coremsgsubmit.c: Unblocking message queue operations should
	NOT use _Thread_Executing for return status since it is permissible
	to invoke message send operations from an ISR.  This was reported
	by Suvrat Gupta <suvrat@utstar.com>.
2001-08-09 20:46:12 +00:00
Joel Sherrill
fe70df1927 2000-05-25 Sergei Organov <osv@javad.ru>
* macros/rtems/score/coresem.inl, inline/rtems/score/coresem.inl:
	Cut and paste problem incorrectly enabled interrupts twice with
	the first time being too early.
2001-05-25 16:59:28 +00:00
Joel Sherrill
43b6f757ce 2000-11-30 Joel Sherrill <joel@OARcorp.com>
* General effort to make things compile with macros not inlines
	* inline/rtems/score/coremutex.inl: Added comment indicating
	for macros there is another copy of
	_CORE_mutex_Seize_interrupt_trylock() in src/coremutexseize.c.
	* src/coremutexseize.c: Added body of
	_CORE_mutex_Seize_interrupt_trylock() for macro case.
	* macros/rtems/score/coremutex.inl: Added prototype for
	_CORE_mutex_Seize_interrupt_trylock() since there is a real
	body when macros are enabled.
	* macros/rtems/score/coresem.inl: Added macro implementation of
	_CORE_semaphore_Seize_isr_disable.
	* macros/score/Makefile.am: Fixed typos.
	* rtems/score/address.inl: Correct macro implementation of
	_Addresses_Is_aligned() so it would compile.
	* macros/rtems/score/coremsg.inl: Added closing parentheses.
2000-11-30 14:08:30 +00:00
Joel Sherrill
17508d02bb Port of RTEMS to the Texas Instruments C3x/C4x DSP families including
a BSP (c4xsim) supporting the simulator included with gdb.  This port
was done by Joel Sherrill and Jennifer Averett of OAR Corporation.
Also included with this port is a space/time optimization to eliminate
FP context switch management on CPUs without hardware or software FP.

An issue with this port was that sizeof(unsigned32) = sizeof(unsigned8)
on this CPU.  This required addressing alignment checks and assumptions
as well as fixing code that assumed sizeof(unsigned32) == 4.
2000-07-26 19:26:28 +00:00
Joel Sherrill
34a2679266 Added missing #endif's. 2000-07-06 20:01:43 +00:00
Joel Sherrill
21e2b2b9be Reimplemented _Core_MUTEX_Seize to return with interrupts disabled
if the mutex is successfully obtained.
2000-07-06 19:32:00 +00:00
Joel Sherrill
8d5b438b9e Added _CORE_semaphore_Seize_isr_disable. 2000-07-06 19:27:03 +00:00
Joel Sherrill
1d9403a308 Removed unnecessary parentheses. 2000-07-06 19:13:31 +00:00
Joel Sherrill
6f6ddc0011 Added RTEMS_CPU_HAS_16_BIT_ADDRESSES constant to disable code
that breaks when the target has 16 bit address space.  One of the H8
multilibs is a 16-bit address space CPU.  When a real attempt is
made to support this CPU model, the code that assumes an address
is 32 bits will have to change.  This constant is probably not
flagging all impacted code.
2000-06-29 22:33:05 +00:00
Joel Sherrill
e4c0744478 Patch rtems-rc-4.5.0-13-cvs.diff from Ralf Corsepius <corsepiu@faw.uni-ulm.de>.
adds .cvsignore.
2000-04-13 14:47:15 +00:00
Joel Sherrill
53fb837afc POSIX message queues now include complete functionality including
blocking sends when the queue is full.  The SuperCore was enhanced
to support blocking on send.  The existing POSIX API was debugged
and numerous test cases were added to psxmsgq01 by Jennifer Averett.
SuperCore enhancements and resulting modifications to other APIs
were done by Joel.

There is one significant point of interpretation for the POSIX API.
What happens to threads already blocked on a message queue when the
mode of that same message queue is changed from blocking to non-blocking?
We decided to unblock all waiting tasks with an EAGAIN error just
as if a non-blocking version of the same operation had returned
unsatisfied.  This case is not discussed in the POSIX standard and
other implementations may have chosen differently.
2000-01-13 19:25:15 +00:00
Joel Sherrill
5870ac5567 Added support for simple binary semaphores in addition to the high
power binary/mutex style semaphores already supported by RTEMS.  This
was done at the request of Eric Norum <eric@cls.usask.ca> in support
of his effort to port EPICS to RTEMS.  This change consisted of
changing the nesting_allowed boolean into a lock_nesting_behavior
enumerated value as well as allowing the core mutex object to optionally
support ensuring that the holder of a binary semaphore released it.
Finally, a more subtle enhancement was to allow the non-holder to release
a priority inheritance/ceiling mutex and still allow the holding task
to return to its original priority.
2000-01-05 22:19:21 +00:00
Jennifer Averett
105d787200 Added routine to remove an object from the namespace. It just clears
its name in the name_table.  This was required by the POSIX semaphore
and message queue managers which support a concept of open, close, and
unlink.  The object becomes "invisible" to further opens following an
unlink but all open sessions remain active until they are closed.  This
requires that the removal of an object ID be separate from the removal
of its name.
1999-11-18 19:50:15 +00:00
Joel Sherrill
08311cc3a9 Updated copyright notice. 1999-11-17 17:51:34 +00:00
Joel Sherrill
eb02f47b12 Committed modifications from ITRON Task and Task Dependendent Synchronization
Working Group.  Included are tests.
1999-11-10 13:48:27 +00:00
Joel Sherrill
af10d3ef5d Corrected spacing. 1999-11-02 15:57:43 +00:00
Joel Sherrill
811804fec8 Patch from Ralf Corsepius <corsepiu@faw.uni-ulm.de> to make fix bug
where wrapup left pieces out of the librtemsall.a.
1999-10-04 19:15:14 +00:00
Joel Sherrill
e1d8abbe28 Applied patch rtems-rc-19990820-6.diff.gz from
Ralf Corsepius <corsepiu@faw.uni-ulm.de> which converted many
Makefile.in's to Makefile.am's.  This added a lot of files.
1999-09-07 13:45:03 +00:00
Joel Sherrill
ba46ffa616 This is a large patch from Eric Valette <valette@crf.canon.fr> that was
described in the message following this paragraph.  This patch also includes
a mcp750 BSP.

From valette@crf.canon.fr Mon Jun 14 10:03:08 1999
Date: Tue, 18 May 1999 01:30:14 +0200 (CEST)
From: VALETTE Eric <valette@crf.canon.fr>
To: joel@oarcorp.com
Cc: raguet@crf.canon.fr, rtems-snapshots@oarcorp.com, valette@crf.canon.fr
Subject: Questions/Suggestion regarding RTEMS PowerPC code (long)


Dear knowledgeable RTEMS powerpc users,

As some of you may know, I'm currently finalizing a port
of RTEMS on a MCP750 Motorola board. I have done most
of it but have some questions to ask before submitting
the port.

In order to understand some of the changes I have made
or would like to make, maybe it is worth describing the
MCP750 Motorola board.

the MCP750 is a COMPACT PCI powerpc board with :

	1) a MPC750 233 MHz processor,
	2) a raven bus bridge/PCI controller that
	implement an OPENPIC compliant interrupt controller,
	3) a VIA 82C586 PCI/ISA bridge that offers a PC
	compliant IO for keyboard, serial line, IDE, and
	the well known PC 8259 cascaded PIC interrupt
	architecture model,
	4) a DEC 21140 Ethernet controller,
	5) the PPCBUG Motorola firmware in flash,
	6) A DEC PCI bridge,

This architecture is common to most Motorola 60x/7xx
board except that :
	1) on VME board, the DEC PCI bridge is replaced by
	a VME chipset,
	2) the VIA 82C586 PCI/ISA bridge is replaced by
	another bridge that is almost fully compatible
	with the via bridge...

So the port should be a rather close basis for many
60x/7xx motorola board...

On this board, I already have ported Linux 2.2.3 and
use it both as a development and target board.

Now the questions/suggestions I have :

1)  EXCEPTION CODE
-------------------

As far as I know exceptions on PPC are handled like
interrupts. I dislike this very much as :

	a) Except for the decrementer exception (and
	maybe some other on mpc8xx), exceptions are
	not recoverable and the handler just need to print
	the full context and go to the firmware or debugger...
	b) The interrupt switch is only necessary for the
	decrementer and external interrupt (at least on
	6xx,7xx).
	c) The full context for exception is never saved and
	thus cannot be used by debugger... I do understand
	the most important for interrupts low level code
	is to save the minimal context enabling	to call C
	code for performance reasons. On non recoverable
	exception on the other hand, the most important is
	to save the maximum information concerning proc status
	in order to analyze the reason of the fault. At
	least we will need this in order to implement the
	port of RGDB on PPC

==> I wrote an API for connecting raw exceptions (and thus
raw interrupts) for mpc750. It should be valid for most
powerpc processors... I hope to find a way to make this coexist
with actual code layout. The code is actually located
in lib/libcpu/powerpc/mpc750 and is thus optional
(provided I write my own version of exec/score/cpu/powerpc/cpu.c ...)

See remark about files/directory layout organization in 4)

2) Current Implementation of ISR low level code
-----------------------------------------------

I do not understand why the MSR EE flags is cleared
again in exec/score/cpu/powerpc/irq_stubs.S

#if (PPC_USE_SPRG)
	mfmsr	r5
	mfspr   r6, sprg2
#else
        lwz	r6,msr_initial(r11)
	lis     r5,~PPC_MSR_DISABLE_MASK@ha
        ori     r5,r5,~PPC_MSR_DISABLE_MASK@l
	and	r6,r6,r5
	mfmsr	r5
#endif

Reading the doc, when a decrementer interrupt or an
external interrupt is active, the MSR EE flag is already
cleared. BTW if exception/interrupt could occur, it would
trash SRR0 and SRR1. In fact the code may be useful to set
MSR[RI] that re-enables exception processing. BTW I will need
to set other value in MSR to handle interrupts :

	a) I want the MSR[IR] and MSR[DR] to be set for
	performance reasons and also because I need DBAT
	support to have access to PCI memory space as the
	interrupt controller is in the PCI space.

Reading the code, I see others have the same kind of request :

/* SCE 980217
 *
 * We need address translation ON when we call our ISR routine

	mtmsr	r5

 */

This is just another prof that even the lowest level
IRQ code is fundamentally board dependent and
not simply processor dependent especially when
the processor use external interrupt controller
because it has a single interrupt request line...

Note that if you look at the PPC code high level interrupt
handling code, as the "set_vector" routine that really connects
the interrupt is in the BSP/startup/genpvec.c,
the fact that IRQ handling is BSP specific is DE-FACTO
acknowledged.

I know I have already expressed this and understand that this
would require some heavy change in the code but believe
me you will reach a point where you will not be able
to find a compatible while optimum implementation for low level
interrupt handling code...) In my case this is already true...

So please consider removing low level IRQ handling from
exec/score/cpu/* and only let there exception handling code...
Exceptions are usually only processor dependent and do
not depend on external hardware mechanism to be masked or
acknowledged or re-enabled (there are probably exception but ...)

I have already done this for pc386 bsp but need to make it again.
This time I will even propose an API.

3) R2/R13 manipulation for EABI implementation
----------------------------------------------

I do not understand the handling of r2 and r13 in the
EABI case. The specification for r2 says pointer to sdata2,
sbss2 section => constant. However I do not see -ffixed-r2
passed to any compilation system in make/custom/*
(for info linux does this on PPC).

So either this is a default compiler option when choosing
powerpc-rtems and thus we do not need to do anything with
this register as all the code is compiled with this compiler
and linked together OR this register may be used by rtems code
and then we do not need any special initialization or
handling.

The specification for r13 says pointer to the small data
area. r13 argumentation is the same except that as far
as I know the usage of the small data area requires
specific compiler support so that access to variables is
compiled via loading the LSB in a register and then
using r13 to get full address... It is like a small
memory model and it was present in IBM C compilers.

=> I propose to suppress any specific code for r2 and
r13 in the EABI case.

4) Code layout organization (yes again :-))
-------------------------------------------

I think there are a number of design flaws in the way
the code is for ppc organized and I will try to point them out.
I have been beaten by this again on this new port, and
was beaten last year while modifying code for pc386.

a) exec/score/cpu/* vs lib/libcpu/cpu/*.

I think that too many things are put in exec/score/cpu that
have nothing to do with RTEMS internals but are rather
related to CPU feature.

This include at least :

	a) registers access routine (e.g GET_MSR_Value),
	b) interrupt masking/unmasking routines,
	c) cache_mngt_routine,
	d) mmu_mngt_routine,
	e) Routines to connect the raw_exception, raw_interrupt
	handler,

b) lib/libcpu/cpu/powerpc/*

With a processor family as exuberant as the powerpc family,
and their well known subtle differences (604 vs 750) or
unfortunately majors (8xx vs 60x)  the directory structure
is fine (except maybe the names that are not homogeneous)

	powerpc

ppc421 mpc821 ...

I only needed to add mpc750. But the fact that libcpu.a was not
produced was a pain and the fact that this organization may
duplicates code is also problematic.

So, except if the support of automake provides a better solution
I would like to propose something like this :

		powerpc

mpc421 	mpc821	...	mpc750	shared wrapup

with the following rules :

	a) "shared" would act as a source container for sources that may
	be shared among processors. Needed files would be compiled inside
	the processor specific directory using the vpath Makefile
	mechanism. "shared" may also contain compilation code
	for routine that are really shared and not worth to inline...
	(did not found many things so far as registers access routine
	ARE WORTH INLINING)... In the case something is compiled there,
	it should create libcpushared.a

	b) layout under processor specific directory is free provided
	that
		1)the result of the compilation process exports :

		libcpu/powerpc/"PROC"/*.h in $(PROJECT_INCLUDE)/libcpu

		2) each processor specific directory creates
		a library called libcpuspecific.a
	Note that this organization enables to have a file that
	is nearly the same than in shared but that must differ
	because of processor differences...

	c) "wrapup" should create libcpu.a using libcpushared.a
	libcpuspecific.a and export it $(PROJECT_INCLUDE)/libcpu

The only thing I have no ideal solution is the way to put shared
definitions in "shared" and only processor specific definition
in "proc". To give a concrete example, most MSR bit definition
are shared among PPC processors and only some differs. if we create
a single msr.h in shared it will have ifdef. If in msr.h we
include libcpu/msr_c.h we will need to have it in each prowerpc
specific directory (even empty). Opinions are welcomed ...

Note that a similar mechanism exist in libbsp/i386 that also
contains a shared directory that is used by several bsp
like pc386 and i386ex and a similar wrapup mechanism...

NB: I have done this for mpc750 and other processors could just use
similar Makefiles...

c) The exec/score/cpu/powerpc directory layout.

I think the directory layout should be the same than the
libcpu/powerpc. As it is not, there are a lot of ifdefs
inside the code... And of course low level interrupt handling
code should be removed...

Besides that I do not understand why

	1) things are compiled in the wrap directory,
	2) some includes are moved to rtems/score,

I think the "preinstall" mechanism enables to put
everything in the current directory (or better in a per processor
directory),


5) Interrupt handling API
-------------------------

Again :-). But I think that using all the features the PIC
offers is a MUST for RT system. I already explained in the
prologue of this (long and probably boring) mail that the MCP750
boards offers an OPENPIC compliant architecture and that
the VIA 82586 PCI/ISA bridge offers a PC compatible IO and
PIC mapping. Here is a logical view of the RAVEN/VIA 82586
interrupt mapping :


---------    0  ------
| OPEN	| <-----|8259|
| PIC	|	|    |    2  ------
|(RAVEN)|	|    | <-----|8259|
|	|	|    |	     |    |   11
|	|	|    |	     |    | <----
|	|	|    |	     |    |
|	|	|    |	     |    |
---------       ------	     |    |
    ^			     ------
    |		VIA PCI/ISA bridge
    |  x
    -------- PCI interrupts

OPENPIC offers interrupt priorities among PCI interrupts
and interrupt selective masking. The 8259 offers the same kind
of feature. With actual powerpc interrupt code :

	1) there is no way to specify priorities among
	interrupts handler. This is REALLY a bad thing.
	For me it is as importnat as having priorities
	for threads...
	2) for my implementation, each ISR should
	contain the code that acknowledge the RAVEN
	and 8259 cascade, modify interrupt mask on both
	chips, and reenable interrupt at processor level,
	..., restore then on interrupt return,.... This code
	is actually similar to code located in some
	genpvec.c powerpc files,
	3) I must update _ISR_Nesting_level because
	irq.inl use it...
	4) the libchip code connects the ISR via set_vector
	but the libchip handler code does not contain any code to
	manipulate external interrupt controller hardware
	in order to acknoledge the interrupt or re-enable
	them (except for the target hardware of course)
	So this code is broken unless set_vector adds an
	additionnal prologue/epilogue before calling/returning
	from in order to acknoledge/mask the raven and the
	8259 PICS... => Anyway already EACH BSP MUST REWRITE
	PART OF INTERRUPT HANDLING CODE TO CORRECTLY IMPLEMENT
	SET_VECTOR.

I would rather offer an API similar to the one provided
in libbsp/i386/shared/irq/irq.h so that :

	1) Once the driver supplied methods is called the
	only things the ISR has to do is to worry about the
	external hardware that triggered the interrupt.
	Everything on openpic/VIA/processor would have been
	done by the low levels (same things as set-vector)
	2) The caller will need to supply the on/off/isOn
	routine that are fundamental to correctly implements
	debuggers/performance monitoring is a portable way
	3) A globally configurable interrupt priorities
	mechanism...

I have nothing against providing a compatible
set_vector just to make libchip happy but
as I have already explained in  other
mails (months ago), I really think that the ISR
connection should be handled by the BSP and that no
code containing irq connection should exist the
rtems generic layers... Thus I really dislike
libchip on this aspect because in a long term
it will force to adopt the less reach API
for interrupt handling that exists (set_vector).

Additional note : I think the _ISR_Is_in_progress()
inline routine should be :

	1) Put in a processor specific section,
	2) Should not rely on a global variable,

As :
	a) on symmetric MP, there is one interrupt level
	per CPU,
	b) On processor that have an ISP (e,g 68040),
	this variable is useless (MSR bit testing could
	be used)
	c) On PPC, instead of using the address of the
	variable via __CPU_IRQ_info.Nest_level a dedicated
	SPR could be used.

NOTE:	most of this is also true for _Thread_Dispatch_disable_level


END NOTE
--------

Please do not take what I said in the mail as a criticism for
anyone who submitted ppc code. Any code present helped me
a lot understanding PPC behavior. I just wanted by this
mail to :
	1) try to better understand the actual code,
	2) propose concrete ways of enhancing current code
	by providing an alternative implementation for MCP750. I
	will make my best effort to try to brake nothing but this
	is actually hard due to the file layout organisation.
	3) make understandable some changes I will probably make
	if joel let me do them :-)

Any comments/objections are welcomed as usual.



--
   __
  /  `                   	Eric Valette
 /--   __  o _.          	Canon CRF
(___, / (_(_(__         	Rue de la touche lambert
				35517 Cesson-Sevigne  Cedex
				FRANCE
Tel: +33 (0)2 99 87 68 91	Fax: +33 (0)2 99 84 11 30
E-mail: valette@crf.canon.fr
1999-06-14 16:51:13 +00:00
Joel Sherrill
f4a8ee1c55 Unlimited objects patch from Chris Johns <ccj@acm.org>. Email follows:
First, the unlimited patch. I have compiled the unlmited patch for the
    Linux posix BSP only and it seems to work cleanly. I would like a really
    major application run on this change before commiting as the changes are
    very core and significant. I am currently building all the tests to run.

    I have no targets suitable to test on at the moment.

    I have tested the patch for inline functions and macros.

    Turning macros on has found some core bugs. I have fixed these but have
    not run all the tests. Please review the patch for these changes. They
    are:

    1) The conditional compilation for MP support broke the core messages
    code. You cannot embed a conditional macro in another macro. The Send
    and Urgent Send calls are macros.

    2) User extensions handler initialisation now has two parameters. I have
    updated the macros to support the extra parameter.

    The patch also contains the gcc-target-default.cfg fix required to build
    the kernel. More of a by product than a fix for you.
1999-03-17 16:01:03 +00:00
Joel Sherrill
dd6dddcf1e Fixed typo. 1998-07-01 21:33:11 +00:00
Joel Sherrill
7e4c3d8b1d Modified _Objects_Is_class_valid() to correctly report that 0 was
not a valid object class.  This was discovered while looking for
a bug reported by Jennifer.
1998-06-18 18:58:42 +00:00
Joel Sherrill
0451b44f36 Per suggestion from Eric Norum, went from one initial extension set
to multiple.  This lets the stack check extension be installed
at system initialization time and avoids the BSP having to
even know about its existence.
1998-04-15 00:02:10 +00:00
Joel Sherrill
60b791ada1 updated copyright to 1998 1998-02-17 23:46:28 +00:00
Joel Sherrill
6ab91d9724 Removed warning per Chris Johns' suggestion. 1998-01-20 20:32:15 +00:00
Joel Sherrill
98e4ebf594 Fixed typo in the pointer to the license terms. 1997-10-08 15:45:54 +00:00
Joel Sherrill
03f2154e51 headers updated to reflect new style copyright notice as part
of switching to the modified GNU GPL.
1997-04-22 17:20:27 +00:00
Joel Sherrill
7fea679b6f changed _TOD_Is_set from a function to a boolean variable 1996-09-06 15:16:19 +00:00
Mark Johannes
a66fcc57aa removed Thread_queue_Get_number_waiting 1996-08-13 20:43:51 +00:00
Joel Sherrill
503dc05890 switched from "STATIC INLINE" to "RTEMS_INLINE_ROUTINE" 1996-07-03 14:20:03 +00:00
Joel Sherrill
5e7b6272fc renamed _TOD_Ticks_since_boot as _Watchdog_Ticks_since_boot so the Watchdog
Handler could timestamp the starting and stopping of timers.  Since
TOD is built on top of Watchdog, this avoided a circular dependency.
1996-05-31 23:27:45 +00:00
Joel Sherrill
6365f81898 made initialization routine a regular subroutine 1996-04-22 16:46:00 +00:00
Joel Sherrill
1a8fde6ca2 Removed prototyes for static inline routines and moved the comments into
the inline implementation.   The impetus for this was twofold.  First,
it is incorrect to have static inline prototypes when using the macro
implementation.  Second, this reduced the number of lines in the include
files seen by rtems.h by about 2000 lines.

Next we restricted visibility for the inline routines to inside the
executive itself EXCEPT for a handful of objects.  This reduced the
number of include files included by rtems.h by 40 files and reduced
the lines in the include files seen by rtems.h by about 6000 lines.

In total, these reduced the compile time of the entire RTEMS tree by 20%.
This results in about 8 minutes savings on the SparcStation 10 morgana.
1996-03-06 21:34:57 +00:00
Joel Sherrill
adf98bd423 Removed the internal thread objects and dispersed its contents to
the thread handler (IDLE), MPCI object (SYSI now MP Receive)
and initialize_executive_early (IO initialization).  The SYSI task
no longer exists in a single processor configuration.  This reduces
single processor Workspace requirements by a TCB and a stack which
is often larger than the minimum stack size.  Moving the IO initialization
plus accompanying BSP hooks eliminated an initialization ordering problem
in which a global task could be created before the MPCI was initialized.
1996-02-21 14:44:11 +00:00
Joel Sherrill
94b3ec5970 changed post task extension from user set to api set and added flag
in each thread which must be set when the post switch extension is to be run.
1996-02-13 22:14:48 +00:00
Joel Sherrill
107ce47b4b new isr synchronization algorithm using a single enumerated set of states. 1996-02-09 14:30:42 +00:00