# HG changeset patch
# User jlarmour
# Date 1022807153 0
# Node ID 94b558c9fb6779b5a4e50740e765db3009bc129f
# Parent 6eb55882e01c6864331146566b3b2a1f6756d0b3
Merge from eCos master repository on 2002-05-31-00:05:29-BST
diff --git a/packages/compat/uitron/current/doc/uitron.sgml b/packages/compat/uitron/current/doc/uitron.sgml
new file mode 100644
--- /dev/null
+++ b/packages/compat/uitron/current/doc/uitron.sgml
@@ -0,0 +1,1354 @@
+
+ µITRON
+
+µITRON API
+
+Introduction to µITRON
+The µITRON specification
+defines a highly flexible operating system architecture designed
+specifically for application in embedded systems. The specification addresses
+features which are common to the majority of processor architectures and
+deliberately avoids virtualization which would adversely impact
+real-time performance. The µITRON specification
+may be implemented on many hardware platforms and provides significant
+advantages by reducing the effort involved in understanding and
+porting application software to new processor architectures.
+Several revisions of the µITRON specification exist.
+ In this release, eCos supports the
+ µITRON version 3.02 specification, with complete
+ “Standard functionality” (level S), plus many
+ “Extended” (level E) functions. The definitive
+ reference on µITRON is Dr. Sakamura’s book:
+ µITRON 3.0, An Open and Portable Real-Time Operating
+ System for Embedded Systems.
+ The book can be purchased from the IEEE Press, and
+ an ASCII version of the standard can be found online at
+http://www.itron.gr.jp/.
+The old address
+
+http://tron.um.u-tokyo.ac.jp/TRON/ITRON/
+still exists as a mirror site.
+
+
+µITRON and eCos
+The eCos kernel implements the functionality
+used by the µITRON compatibility subsystem.
+The configuration of the kernel influences the behavior of µITRON
+programs.
+In particular, the default configuration has time slicing
+(also known as round-robin scheduling) switched on; this means that
+a task can be moved from RUN state
+to READY state at any time, in
+order that one of its peers may run. This is not strictly conformant
+to the µITRON specification, which
+states that timeslicing may be implemented by periodically issuing
+a rot_rdq(0) call from
+within a periodic task or cyclic handler; otherwise it is expected
+that a task runs until it is pre-empted in consequence of synchronization
+or communication calls it makes, or the effects of an interrupt
+or other external event on a higher priority task cause that task
+to become READY. To disable timeslicing
+functionality in the kernel and µITRON
+compatibility environment, please disable the
+CYGSEM_KERNEL_SCHED_TIMESLICE
+configuration option in the kernel package. A description of kernel
+scheduling is in .
+For another example, the semantics of task queueing when waiting
+on a synchronization object depend solely on the way the underlying
+kernel is configured. As discussed above, the multi-level queue
+scheduler is the only one which is µITRON
+compliant, and it queues waiting tasks in FIFO order. Future releases
+of that scheduler might be configurable to support priority ordering
+of task queues. Other schedulers might be different again: for example
+the bitmap scheduler can be used with the µITRON
+compatibility layer, even though it only allows one task at each
+priority and as such is not µITRON
+compliant, but it supports only priority ordering of task queues.
+So which queueing scheme is supported is not really a property of
+the µITRON compatibility layer; it
+depends on the kernel.
+In this version of the µITRON
+compatibility layer, the calls to disable and enable scheduling
+and interrupts (dis_dsp(),
+ena_dsp(), loc_cpu()
+and unl_cpu())
+call underlying kernel functions; in particular, the xxx_dsp() functions
+lock the scheduler entirely, which prevents dispatching of DSRs; functions
+implemented by DSRs include clock counters and alarm timers. Thus time “stops” while
+dispatching is disabled with dis_dsp().
+Like all parts of the eCos system, the
+detailed semantics of the µITRON layer
+are dependent on its configuration and the configuration of other components
+that it uses. The µITRON configuration
+options are all defined in the file pkgconf/uitron.h,
+and can be set using the configuration tool or editing the
+.ecc
+file in your build directory by hand.
+An important configuration option for the µITRON
+compatibility layer is “Option: Return Error Codes for Bad Params”
+(
+CYGSEM_UITRON_BAD_PARAMS_RETURN_ERRORS
+), which allows a lot of the error
+checking code in the µITRON compatibility layer to
+be removed. Of course this leaves a program open to undetected errors,
+so it should only be used once an application is fully debugged and
+tested. Its benefits include reduced code size and faster execution.
+However, it affects the API significantly, in that with this option
+enabled, bad calls do not return errors, but cause an assert
+failure (if that is itself enabled) or malfunction internally. There
+is discussion in more detail about this in each section below.
+We now give a brief description of the µITRON
+functions which are implemented in this release. Note that all C
+and C++ source files should have the following #include statement:
+#include <cyg/compat/uitron/uit_func.h>
+
+
+Task Management Functions
+The following functions are fully supported in this release:
+ER sta_tsk(
+ ID tskid,
+ INT stacd )
+
+void ext_tsk( void )
+
+void exd_tsk( void )
+
+ER dis_dsp( void )
+
+ER ena_dsp( void )
+
+ER chg_pri(
+ ID tskid,
+ PRI tskpri )
+
+ER rot_rdq(
+ PRI tskpri )
+
+ER get_tid(
+ ID *p_tskid )
+
+ER ref_tsk(
+ T_RTSK *pk_rtsk,
+ ID tskid )
+
+ER ter_tsk(
+ ID tskid )
+
+ER rel_wai(
+ ID tskid )
+The following two functions are supported in this release,
+when enabled with the configuration option
+CYGPKG_UITRON_TASKS_CREATE_DELETE
+with some restrictions:
+ER cre_tsk(
+ ID tskid,
+ T_CTSK *pk_ctsk )
+
+ER del_tsk(
+ ID tskid )
+These functions are restricted as follows:
+Because of the static initialization facilities provided for
+system objects, a task is allocated stack space statically in the
+configuration. So while tasks can be created and deleted, the same
+stack space is used for that task (task ID number) each time. Thus
+the stack size (pk_ctsk->stksz) requested in cre_tsk() is
+checked for being less than that which was statically allocated,
+and otherwise ignored. This ensures that the new task will have
+enough stack to run. For this reason del_tsk() does
+not in any sense free the memory that was in use for the task's
+stack.
+The task attributes (pk_ctsk->tskatr) are
+ignored; current versions of eCos do not need
+to know whether a task is written in assembler or C/C++ so
+long as the procedure call standard appropriate to the CPU is followed.
+Extended information (pk_ctsk->exinf) is
+ ignored.
+
+Error checking
+For all these calls, an invalid task id (tskid) (less than
+1 or greater than the number of configured tasks) only returns E_ID
+when bad params return errors (
+CYGSEM_UITRON_BAD_PARAMS_RETURN_ERRORS
+is enabled, see above).
+Similarly, the following conditions are only checked for,
+and only return errors if
+CYGSEM_UITRON_BAD_PARAMS_RETURN_ERRORS
+is enabled:
+
+
+pk_crtk in
+cre_tsk()
+ is a valid pointer, otherwise return E_PAR
+
+
+ter_tsk()
+ or
+rel_wai()
+ on the calling task returns E_OBJ
+
+
+the CPU is not locked already in
+dis_dsp()
+ and
+ena_dsp()
+; returns E_CTX
+
+
+priority level in
+chg_pri()
+ and
+rot_rdq()
+ is checked for validity, E_PAR
+
+
+return value pointer in
+get_tid()
+ and
+ref_tsk()
+ is a valid pointer, or E_PAR
+
+
+The following conditions are checked for, and return
+ error codes if appropriate, regardless of the setting of
+CYGSEM_UITRON_BAD_PARAMS_RETURN_ERRORS
+:
+
+
+When create and delete functions
+cre_tsk()
+ and
+del_tsk()
+ are supported, all calls which use a valid task ID number check
+that the task exists; if not, E_NOEXS is returned
+
+
+When supported,
+cre_tsk()
+: the task must not already exist; otherwise E_OBJ
+
+
+When supported,
+cre_tsk()
+: the requested stack size must not be larger than that statically
+configured for the task; see the configuration options
+“Static initializers”, and “Default stack size”.
+Else E_NOMEM
+
+
+When supported,
+del_tsk()
+: the underlying
+eCos
+ thread must not be running - this would imply either a bug or some
+program bypassing the
+µITRON compatibility layer and manipulating the thread directly.
+E_OBJ
+
+
+sta_tsk()
+: the task must be dormant, else E_OBJ
+
+
+ter_tsk()
+: the task must not be dormant, else E_OBJ
+
+
+chg_pri()
+: the task must not be dormant, else E_OBJ
+
+
+rel_wai()
+: the task must be in
+WAIT or WAIT-SUSPEND
+ state, else E_OBJ
+
+
+
+
+
+Task-Dependent Synchronization Functions
+These functions are fully supported in this release:
+ER sus_tsk(
+ ID tskid )
+
+ER rsm_tsk(
+ ID tskid )
+
+ER frsm_tsk(
+ ID tskid )
+
+ER slp_tsk( void )
+
+ER tslp_tsk(
+ TMO tmout )
+
+ER wup_tsk(
+ ID tskid )
+
+ER can_wup(
+ INT *p_wupcnt, ID tskid )
+
+Error checking
+The following conditions are only checked for, and only return
+errors if
+CYGSEM_UITRON_BAD_PARAMS_RETURN_ERRORS
+is enabled (see the configuration option “Return Error Codes for Bad
+Params”):
+
+
+invalid tskid; less than 1 or greater than
+CYGNUM_UITRON_TASKS
+returns E_ID
+
+
+wup_tsk()
+,
+sus_tsk()
+,
+rsm_tsk()
+,
+frsm_tsk()
+ on the calling task returns E_OBJ
+
+
+dispatching is enabled in
+tslp_tsk()
+ and
+slp_tsk()
+, or E_CTX
+
+
+tmout must be positive, otherwise E_PAR
+
+
+return value pointer in
+can_wup()
+ is a valid pointer, or E_PAR
+
+
+The following conditions are checked for, and can
+ return error codes, regardless of the setting of
+CYGSEM_UITRON_BAD_PARAMS_RETURN_ERRORS:
+
+
+
+When create and delete functions
+cre_tsk()
+ and
+del_tsk()
+ are supported, all calls which use a valid task ID number check
+that the task exists; if not, E_NOEXS is returned
+
+
+sus_tsk()
+: the task must not be dormant, else E_OBJ
+
+
+frsm/rsm_tsk()
+: the task must be suspended, else E_OBJ
+
+
+tslp/slp_tsk()
+: return codes E_TMOUT, E_RLWAI and E_DLT
+are returned depending on the reason for terminating the sleep
+
+
+wup_tsk()
+ and
+can_wup()
+: the task must not be dormant, or E_OBJ is returned
+
+
+
+
+
+ Synchronization and Communication Functions
+These functions are fully supported in this release:
+ER sig_sem(
+ ID semid )
+
+
+ER wai_sem(
+ ID semid )
+
+
+ER preq_sem(
+ ID semid )
+
+
+ER twai_sem(
+ ID semid, TMO tmout )
+
+
+ER ref_sem(
+ T_RSEM *pk_rsem , ID semid )
+
+
+ER set_flg(
+ ID flgid, UINT setptn )
+
+
+ER clr_flg(
+ ID flgid, UINT clrptn )
+
+
+ER wai_flg(
+ UINT *p_flgptn, ID flgid ,
+ UINT waiptn , UINT wfmode )
+
+
+ER pol_flg(
+ UINT *p_flgptn, ID flgid ,
+ UINT waiptn , UINT wfmode )
+
+
+ER twai_flg(
+ UINT *p_flgptn ID flgid ,
+ UINT waiptn , UINT wfmode, TMO tmout )
+
+
+ER ref_flg(
+ T_RFLG *pk_rflg, ID flgid )
+
+
+ER snd_msg(
+ ID mbxid, T_MSG *pk_msg )
+
+
+ER rcv_msg(
+ T_MSG **ppk_msg, ID mbxid )
+
+
+ER prcv_msg(
+ T_MSG **ppk_msg, ID mbxid )
+
+
+ER trcv_msg(
+ T_MSG **ppk_msg, ID mbxid , TMO tmout )
+
+
+ER ref_mbx(
+ T_RMBX *pk_rmbx, ID mbxid )
+The following functions are supported in this release (with
+some restrictions) if enabled with the appropriate configuration
+option for the object type (for example
+CYGPKG_UITRON_SEMAS_CREATE_DELETE):
+
+ER cre_sem(
+ ID semid, T_CSEM *pk_csem )
+
+
+ER del_sem(
+ ID semid )
+
+
+ER cre_flg(
+ ID flgid, T_CFLG *pk_cflg )
+
+
+ER del_flg(
+ ID flgid )
+
+
+ER cre_mbx(
+ ID mbxid, T_CMBX *pk_cmbx )
+
+
+ER del_mbx(
+ ID mbxid )
+In general the queueing order when waiting on a synchronization
+object depends on the underlying kernel configuration. The multi-level
+queue scheduler is required for strict µITRON
+conformance and it queues tasks in FIFO order, so requests to create
+an object with priority queueing of tasks (pk_cxxx->xxxatr = TA_TPRI)
+are rejected with E_RSATR. Additional undefined bits in
+the attributes fields must be zero.
+In general, extended information (pk_cxxx->exinf)
+is ignored.
+For semaphores, the initial semaphore count (pk_csem->isemcnt)
+is supported; the new semaphore's count is set. The maximum
+count is not supported, and is not in fact defined in type pk_csem.
+For flags, multiple tasks are allowed to wait. Because single
+task waiting is a subset of this, the W bit (TA_WMUL) of
+the flag attributes is ignored; all other bits must be zero. The
+initial flag value is supported.
+For mailboxes, the buffer count is defined statically by kernel
+configuration option
+CYGNUM_KERNEL_SYNCH_MBOX_QUEUE_SIZE;
+therefore the buffer count field is not supported and is not in
+fact defined in type pk_cmbx. Queueing of messages is FIFO
+ordered only, so TA_MPRI (in pk_cmbx->mbxatr)
+is not supported.
+
+Error checking
+The following conditions are only checked for, and only return
+errors if
+CYGSEM_UITRON_BAD_PARAMS_RETURN_ERRORS
+is enabled:
+
+
+invalid object id; less than 1 or greater than
+CYGNUM_UITRON_TASKS/SEMAS/MBOXES
+as appropriate returns E_ID
+
+
+dispatching is enabled in any call which can sleep, or
+E_CTX
+
+
+tmout must be positive, otherwise E_PAR
+
+
+pk_cxxx pointers in
+cre_xxx()
+ must be valid pointers, or E_PAR
+
+
+return value pointer in
+ref_xxx()
+ is valid pointer, or E_PAR
+
+
+flag wait pattern must be non-zero, and mode must be valid,
+or E_PAR
+
+
+return value pointer in flag wait calls is a valid pointer,
+or E_PAR
+
+
+The following conditions are checked for, and can return error
+codes, regardless of the setting of
+CYGSEM_UITRON_BAD_PARAMS_RETURN_ERRORS
+:
+
+
+When create and delete functions
+cre_xxx()
+ and
+del_xxx()
+ are supported, all calls which use a valid object ID number check
+that the object exists. If not, E_NOEXS is returned.
+
+
+In create functions
+cre_xxx()
+, when supported, if the object already exists, then E_OBJ
+
+
+In any call which can sleep, such as
+twai_sem()
+: return codes E_TMOUT, E_RLWAI, E_DLT
+or of course E_OK are returned depending on the reason
+for terminating the sleep
+
+
+In polling functions such as
+preq_sem()
+return codes E_TMOUT or E_OK are returned depending
+on the state of the synchronization object
+
+
+In creation functions, the attributes must be compatible
+with the selected underlying kernel configuration: in
+cre_sem()
+ pk_csem->sematr
+ must be equal to
+TA_TFIFO
+ else E_RSATR.
+
+
+In
+cre_flg()
+ pk_cflg->flgatr
+ must be either
+TA_WMUL
+ or
+TA_WSGL
+ else E_RSATR.
+
+
+In
+cre_mbx()
+
+pk_cmbx->mbxatr
+ must be
+TA_TFIFO + TA_MFIFO
+ else E_RSATR.
+
+
+
+
+
+Extended Synchronization and Communication Functions
+None of these functions are supported in this release.
+
+
+Interrupt management functions
+These functions are fully supported in this release:
+void ret_int( void )
+
+
+ER loc_cpu( void )
+
+
+ER unl_cpu( void )
+
+
+ER dis_int(
+ UINT eintno )
+
+
+ER ena_int(
+ UINT eintno )
+
+
+void ret_wup(
+ ID tskid )
+
+
+ER iwup_tsk(
+ ID tskid )
+
+
+ER isig_sem(
+ ID semid )
+
+
+ER iset_flg(
+ ID flgid ,
+ UID setptn )
+
+
+ER isend_msg(
+ ID mbxid ,
+ T_MSG *pk_msg )
+Note that ret_int() and
+the ret_wup() are implemented
+as macros, containing a “return” statement.
+Also note that ret_wup() and
+the ixxx_yyy() style functions
+will only work when called from an ISR whose associated DSR is cyg_uitron_dsr(),
+as specified in include file <cyg/compat/uitron/uit_ifnc.h>,
+which defines the ixxx_yyy() style
+functions also.
+If you are writing interrupt handlers more in the
+eCos style, with separate ISR and DSR routines both of
+your own devising, do not use these special functions from a DSR: use plain
+xxx_yyy() style functions (with no ‘i’ prefix)
+instead, and do not call any µITRON functions from the ISR at
+all.
+The following functions are not supported in this release:
+ER def_int(
+ UINT dintno,
+ T_DINT *pk_dint )
+
+ER chg_iXX(
+ UINT iXXXX )
+
+
+ER ref_iXX(
+ UINT * p_iXXXX )
+These unsupported functions are all Level C (CPU dependent).
+Equivalent functionality is available via other eCos-specific
+APIs.
+
+Error checking
+The following conditions are only checked for, and only return
+errors if
+CYGSEM_UITRON_BAD_PARAMS_RETURN_ERRORS
+is enabled:
+
+
+loc/unl_cpu()
+: these must only be called in a
+µITRON task context, else E_CTX.
+
+
+dis/ena_int()
+: the interrupt number must be in range as specified by the platform
+HAL in qustion, else E_PAR.
+
+
+
+
+
+ Memory pool Management Functions
+These functions are fully supported in this release:
+ER get_blf(
+ VP *p_blf, ID mpfid )
+
+
+ER pget_blf(
+ VP *p_blf, ID mpfid )
+
+
+ER tget_blf(
+ VP *p_blf, ID mpfid, TMO tmout )
+
+
+ER rel_blf(
+ ID mpfid, VP blf )
+
+
+ER ref_mpf(
+ T_RMPF *pk_rmpf, ID mpfid )
+
+
+ER get_blk(
+ VP *p_blk, ID mplid, INT blksz )
+
+
+ER pget_blk(
+ VP *p_blk, ID mplid, INT blksz )
+
+
+ER tget_blk(
+ VP *p_blk, ID mplid, INT blksz, TMO tmout )
+
+
+ER rel_blk(
+ ID mplid, VP blk )
+
+
+ER ref_mpl(
+ T_RMPL *pk_rmpl, ID mplid )
+
+
+Note that of the memory provided for a particular pool to
+manage in the static initialization of the memory pool objects,
+some memory will be used to manage the pool itself. Therefore the
+number of blocks * the blocksize will be less than the total
+memory size.
+The following functions are supported in this release, when
+enabled with
+CYGPKG_UITRON_MEMPOOLVAR_CREATE_DELETE
+or
+CYGPKG_UITRON_MEMPOOLFIXED_CREATE_DELETE
+as appropriate, with some restrictions:
+ER cre_mpl(
+ ID mplid, T_CMPL *pk_cmpl )
+
+
+ER del_mpl(
+ ID mplid )
+
+
+ER cre_mpf(
+ ID mpfid, T_CMPF *pk_cmpf )
+
+
+ER del_mpf(
+ ID mpfid )
+Because of the static initialization facilities provided for
+system objects, a memory pool is allocated a region of memory to
+manage statically in the configuration. So while memory pools can
+be created and deleted, the same area of memory is used for that
+memory pool (memory pool ID number) each time. The requested variable pool
+size (pk_cmpl->mplsz) or the number of fixed-size
+blocks (pk_cmpf->mpfcnt) times the block size
+(pk_cmpf->blfsz) are checked for fitting within
+the statically allocated memory area, so if a create call succeeds,
+the resulting pool will be at least as large as that requested.
+For this reason del_mpl() and del_mpf() do
+not in any sense free the memory that was managed by the deleted
+pool for use by other pools; it may only be managed by a pool of
+the same object id.
+For both fixed and variable memory pools, the queueing order
+when waiting on a synchronization object depends on the underlying
+kernel configuration. The multi-level queue scheduler is required
+for strict µITRON conformance and
+it queues tasks in FIFO order, so requests to create an object with
+priority queueing of tasks (pk_cxxx->xxxatr = TA_TPRI)
+are rejected with E_RSATR. Additional undefined bits in
+the attributes fields must be zero.
+In general, extended information (pk_cxxx->exinf)
+is ignored.
+
+Error checking
+The following conditions are only checked for, and only return
+errors if
+CYGSEM_UITRON_BAD_PARAMS_RETURN_ERRORS
+is enabled:
+
+
+invalid object id; less than 1 or greater than
+CYGNUM_UITRON_MEMPOOLVAR/MEMPOOLFIXED
+as appropriate returns E_ID
+
+
+dispatching is enabled in any call which can sleep, or
+E_CTX
+
+
+tmout must be positive, otherwise E_PAR
+
+
+pk_cxxx pointers in
+cre_xxx()
+ must be valid pointers, or E_PAR
+
+
+return value pointer in
+ref_xxx()
+ is a valid pointer, or E_PAR
+
+
+return value pointers in get block routines is a valid
+pointer, or E_PAR
+
+
+blocksize request in get variable block routines is greater
+than zero, or E_PAR
+
+
+The following conditions are checked for, and can return error
+codes, regardless of the setting of
+CYGSEM_UITRON_BAD_PARAMS_RETURN_ERRORS:
+
+
+
+When create and delete functions
+cre_xxx()
+ and
+del_xxx()
+ are supported, all calls which use a valid object ID number check
+that the object exists. If not, E_NOEXS is returned.
+
+
+When create functions
+cre_xxx()
+ are supported, if the object already exists, then E_OBJ
+
+
+In any call which can sleep, such as
+get_blk()
+: return codes E_TMOUT, E_RLWAI, E_DLT
+or of course E_OK are returned depending on the reason
+for terminating the sleep
+
+
+In polling functions such as
+pget_blk()
+return codes E_TMOUT or E_OK are returned depending
+on the state of the synchronization object
+
+
+In creation functions, the attributes must be compatible
+with the selected underlying kernel configuration: in
+cre_mpl()
+
+pk_cmpl->mplatr
+ must be equal to
+TA_TFIFO
+ else E_RSATR.
+
+
+In
+cre_mpf()
+
+pk_cmpf->mpfatr
+ must be equal to
+TA_TFIFO
+ else E_RSATR.
+
+
+In creation functions, the requested size of the memory
+pool must not be larger than that statically configured for the
+pool else E_RSATR; see the configuration option
+“Option: Static initializers”.
+ In
+cre_mpl()
+
+pk_cmpl->mplsz
+ is the field of interest
+
+
+In
+cre_mpf()
+ the product of
+pk_cmpf->blfsz
+ and
+pk_cmpf->mpfcnt
+ must be smaller than the memory statically configured for the pool
+else E_RSATR
+
+
+In functions which return memory to the pool
+rel_blk()
+ and
+rel_blf()
+, if the free fails, for example because the memory did not come
+from that pool originally, then E_PAR is returned
+
+
+
+
+
+Time Management Functions
+These functions are fully supported in this release:
+ER set_tim(
+ SYSTIME *pk_tim )
+
+ Setting the time may cause erroneous operation of the
+ kernel, for example a task performing a wait with a
+ time-out may never awaken.
+
+ER get_tim(
+ SYSTIME *pk_tim )
+
+
+ER dly_tsk(
+ DLYTIME dlytim )
+
+
+ER def_cyc(
+ HNO cycno, T_DCYC *pk_dcyc )
+
+
+ER act_cyc(
+ HNO cycno, UINT cycact )
+
+
+ER ref_cyc(
+ T_RCYC *pk_rcyc, HNO cycno )
+
+
+ER def_alm(
+ HNO almno, T_DALM *pk_dalm )
+
+
+ER ref_alm(
+ T_RALM *pk_ralm, HNO almno )
+
+
+void ret_tmr( void )
+
+ Error checking
+The following conditions are only checked for, and only return
+errors if
+CYGSEM_UITRON_BAD_PARAMS_RETURN_ERRORS
+is enabled:
+
+
+invalid handler number; less than 1 or greater than
+CYGNUM_UITRON_CYCLICS/ALARMS
+as appropriate, or E_PAR
+
+
+dispatching is enabled in
+dly_tsk()
+, or E_CTX
+
+
+dlytim must be positive or zero, otherwise E_PAR
+
+
+return value pointer in
+ref_xxx()
+ is a valid pointer, or E_PAR
+
+
+params within pk_dalm and pk_dcyc must
+be valid, or E_PAR
+
+
+cycact in
+act_cyc()
+ must be valid, or E_PAR
+
+
+handler must be defined in
+ref_xxx()
+ and
+act_cyc()
+, or E_NOEXS
+
+
+parameter pointer must be a good pointer in
+get_tim()
+ and
+set_tim()
+, otherwise E_PAR is returned
+
+
+The following conditions are checked for, and can return
+ error codes, regardless of the setting of
+CYGSEM_UITRON_BAD_PARAMS_RETURN_ERRORS
+:
+
+
+dly_tsk()
+: return code E_RLWAI is returned depending on the reason
+for terminating the sleep
+
+
+
+
+
+ System Management Functions
+These functions are fully supported in this release:
+
+ER get_ver(
+ T_VER *pk_ver )
+
+ER ref_sys(
+ T_RSYS *pk_rsys )
+
+ER ref_cfg(
+ T_RCFG *pk_rcfg )
+
+Note that the information returned by each of these calls
+may be configured to match the user's own versioning system,
+and the values supplied by the default configuration may be inappropriate.
+These functions are not supported in this release:
+ER def_svc(
+ FN s_fncd,
+ T_DSVC *pk_dsvc )
+
+ER def_exc(
+ UINT exckind,
+ T_DEXC *pk_dexc )
+
+
+Error checking
+The following conditions are only checked for, and
+ only return errors if
+
+CYGSEM_UITRON_BAD_PARAMS_RETURN_ERRORS
+ is enabled:
+
+
+return value pointer in all calls is a valid
+ pointer, or E_PAR
+
+
+
+
+
+ Network Support Functions
+None of these functions are supported in this release.
+
+
+
+µITRON Configuration FAQ
+Q: How are µITRON objects created?
+
+
+For each type of uITRON object (tasks, semaphores, flags, mboxes, mpf, mpl)
+these two quantities are controlled by configuration:
+
+
+
+The maximum number of this type of object.
+
+
+The number of these objects which exist initially.
+
+
+
+This is assuming that for the relevant object type,
+create and delete
+operations are enabled; enabled is the default. For example, the option
+CYGPKG_UITRON_MBOXES_CREATE_DELETE
+controls whether the functions
+cre_mbx()
+and
+del_mbx()
+exist in the API. If not, then the maximum number of
+mboxes is the same as the initial number of mboxes, and so on for all
+µITRON object types.
+
+
+Mboxes have no initialization, so there are only a few, simple
+configuration options:
+
+
+
+CYGNUM_UITRON_MBOXES
+is the total number of mboxes that you can have in the
+system. By default this is 4, so you can use mboxes 1,2,3 and 4. You
+cannot create mboxes outside this range; trying to
+cre_mbx(5,...)
+will return an error.
+
+
+CYGNUM_UITRON_MBOXES_INITIALLY
+is the number of mboxes created
+automatically for you, during startup. By default this is 4, so all 4
+mboxes exist already, and an attempt to create one of these
+eg. cre_mbx(3,...)
+will return an error because the mbox in quesion already
+exists. You can delete a pre-existing mbox, and then re-create it.
+
+
+
+If you change
+CYGNUM_UITRON_MBOXES_INITIALLY,
+for example to 0, no mboxes
+are created automatically for you during startup. Any attempt to use an
+mbox without creating it will return E_NOEXS because the mbox does not
+exist. You can create an mbox, say cre_mbx(3,...)
+and then use it, say
+snd_msg(3,&foo), and all will be well.
+
+Q: How are µITRON objects initialized?
+
+
+Some object types have optional initialization. Semaphores are an
+example. You could have
+CYGNUM_UITRON_SEMAS=10 and
+CYGNUM_UITRON_SEMAS_INITIALLY=5
+which means you can use semaphores 1-5
+straight off, but you must create semaphores 6-10 before you can use them.
+If you decide not to initialize semaphores, semaphores 1-5 will have an
+initial count of zero. If you decide to initialize them, you must supply
+a dummy initializer for semaphores 6-10 also. For example,
+in terms of the configuration output in
+pkgconf/uitron.h:
+
+
+ #define CYGDAT_UITRON_SEMA_INITIALIZERS \
+ CYG_UIT_SEMA( 1 ), \
+ CYG_UIT_SEMA( 0 ), \
+ CYG_UIT_SEMA( 0 ), \
+ CYG_UIT_SEMA( 99 ), \
+ CYG_UIT_SEMA( 1 ), \
+ CYG_UIT_SEMA_NOEXS, \
+ CYG_UIT_SEMA_NOEXS, \
+ CYG_UIT_SEMA_NOEXS, \
+ CYG_UIT_SEMA_NOEXS, \
+ CYG_UIT_SEMA_NOEXS
+
+
+Semaphore 1 will have initial count 1, semaphores 2 and 3 will be zero,
+number 4 will be 99 initially, 5 will be one and numbers 6 though 10 do not
+exist initially.
+
+
+Aside: this is how the definition of the symbol would appear in the
+configuration header file pkgconf/uitron.h —
+unfortunately editing such a long, multi-line definition is somewhat
+cumbersome in the GUI config tool in current releases. The macros
+CYG_UIT_SEMA()
+— to create a semaphore initializer — and
+CYG_UIT_SEMA_NOEXS
+— to invoke a dummy initializer —
+are provided in in the environment to help with this. Similar macros are
+provided for other object types. The resulting #define symbol is used in
+the context of a C++ array initializer, such as:
+
+Cyg_Counting_Semaphore2 cyg_uitron_SEMAS[ CYGNUM_UITRON_SEMAS ] = {
+ CYGDAT_UITRON_SEMA_INITIALIZERS
+};
+
+which is eventually macro-processed to give
+
+Cyg_Counting_Semaphore2 cyg_uitron_SEMAS[ 10 ] = {
+ Cyg_Counting_Semaphore2( ( 1 ) ),
+ Cyg_Counting_Semaphore2( ( 0 ) ),
+ Cyg_Counting_Semaphore2( ( 0 ) ),
+ Cyg_Counting_Semaphore2( ( 99 ) ),
+ Cyg_Counting_Semaphore2( ( 1 ) ),
+ Cyg_Counting_Semaphore2(0),
+ Cyg_Counting_Semaphore2(0),
+ Cyg_Counting_Semaphore2(0),
+ Cyg_Counting_Semaphore2(0),
+ Cyg_Counting_Semaphore2(0),
+};
+
+so you can see how it is necessary to include the dummy entries in that
+definition, otherwise the resulting code will not compile correctly.
+
+
+If you choose
+CYGNUM_UITRON_SEMAS_INITIALLY=0
+it is meaningless to initialize them, for they must be created and so
+initialized then, before use.
+
+Q: What about µITRON tasks?
+
+
+Some object types require initialization. Tasks are an example of this.
+You must provide a task with a priority, a function to enter when the task
+starts, a name (for debugging purposes), and some memory to use for the stack.
+For example (again in terms of the resulting
+definitions in pkgconf/uitron.h):
+
+
+#define CYGNUM_UITRON_TASKS 4 // valid task ids are 1,2,3,4
+#define CYGNUM_UITRON_TASKS_INITIALLY 4 // they all exist at start
+
+#define CYGDAT_UITRON_TASK_EXTERNS \
+extern "C" void startup( unsigned int ); \
+extern "C" void worktask( unsigned int ); \
+extern "C" void lowtask( unsigned int ); \
+static char stack1[ CYGNUM_UITRON_STACK_SIZE ], \
+ stack2[ CYGNUM_UITRON_STACK_SIZE ], \
+ stack3[ CYGNUM_UITRON_STACK_SIZE ], \
+ stack4[ CYGNUM_UITRON_STACK_SIZE ];
+
+#define CYGDAT_UITRON_TASK_INITIALIZERS \
+ CYG_UIT_TASK("main task", 8, startup, &stack1, sizeof( stack1 )), \
+ CYG_UIT_TASK("worker 2" , 9, worktask, &stack2, sizeof( stack2 )), \
+ CYG_UIT_TASK("worker 3" , 9, worktask, &stack3, sizeof( stack3 )), \
+ CYG_UIT_TASK("low task" ,20, lowtask, &stack4, sizeof( stack4 )), \
+
+
+
+So this example has all four tasks statically configured to exist, ready to
+run, from the start of time. The “main task” runs a routine
+called startup() at priority 8. Two
+“worker” tasks run both a priority 9, and a “low
+priority” task runs at priority 20 to do useful non-urgent background
+work.
+
+
+Task ID | Exists at | Function | Priority | Stack | Stack
+ number | startup | entry | | address | size
+--------+-----------+----------+----------+---------+----------
+ 1 | Yes | startup | 8 | &stack1 | CYGNUM...
+ 2 | Yes | worktask | 9 | &stack2 | CYGNUM...
+ 3 | Yes | worktask | 9 | &stack3 | CYGNUM...
+ 4 | Yes | lowtask | 20 | &stack4 | CYGNUM...
+--------+-----------+----------+----------+---------+----------
+
+Q: How can I create µITRON tasks in the program?
+
+
+You must provide free slots in the task table in which to create new tasks,
+by configuring the number of tasks existing initially to be smaller than
+the total.
+For a task ID which does not initially exist, it will be told what routine
+to call, and what priority it is, when the task is created. But you must
+still set aside memory for the task to use for its stack, and give it a
+name during initialization. For example:
+
+
+
+#define CYGNUM_UITRON_TASKS 4 // valid task ids are 1-4
+#define CYGNUM_UITRON_TASKS_INITIALLY 1 // only task #1 exists
+
+#define CYGDAT_UITRON_TASK_EXTERNS \
+extern "C" void startup( unsigned int ); \
+static char stack1[ CYGNUM_UITRON_STACK_SIZE ], \
+ stack2[ CYGNUM_UITRON_STACK_SIZE ], \
+ stack3[ CYGNUM_UITRON_STACK_SIZE ], \
+ stack4[ CYGNUM_UITRON_STACK_SIZE ];
+
+#define CYGDAT_UITRON_TASK_INITIALIZERS \
+ CYG_UIT_TASK( "main", 8, startup, &stack1, sizeof( stack1 ) ), \
+ CYG_UIT_TASK_NOEXS( "slave", &stack2, sizeof( stack2 ) ), \
+ CYG_UIT_TASK_NOEXS( "slave2", &stack3, sizeof( stack3 ) ), \
+ CYG_UIT_TASK_NOEXS( "slave3", &stack4, sizeof( stack4 ) ), \
+
+
+
+So tasks numbered 2,3 and 4 have been given their stacks during startup,
+though they do not yet exist in terms of cre_tsk() and
+del_tsk() so you can create tasks 2–4 at
+runtime.
+
+
+Task ID | Exists at | Function | Priority | Stack | Stack
+ number | startup | entry | | address | size
+--------+-----------+----------+----------+---------+----------
+ 1 | Yes | startup | 8 | &stack1 | CYGNUM...
+ 2 | No | N/A | N/A | &stack2 | CYGNUM...
+ 3 | No | N/A | N/A | &stack3 | CYGNUM...
+ 4 | No | N/A | N/A | &stack4 | CYGNUM...
+--------+-----------+----------+----------+---------+----------
+
+
+(you must have at least one task at startup in order that the system can
+ actually run; this is not so for other uITRON object types)
+
+Q: Can I have different stack sizes for µITRON tasks?
+
+
+Simply set aside different amounts of memory for each task to use for its
+stack. Going back to a typical default setting for the µITRON tasks,
+the definitions in pkgconf/uitron.h might look like this:
+
+
+#define CYGDAT_UITRON_TASK_EXTERNS \
+extern "C" void task1( unsigned int ); \
+extern "C" void task2( unsigned int ); \
+extern "C" void task3( unsigned int ); \
+extern "C" void task4( unsigned int ); \
+static char stack1[ CYGNUM_UITRON_STACK_SIZE ], \
+ stack2[ CYGNUM_UITRON_STACK_SIZE ], \
+ stack3[ CYGNUM_UITRON_STACK_SIZE ], \
+ stack4[ CYGNUM_UITRON_STACK_SIZE ];
+
+#define CYGDAT_UITRON_TASK_INITIALIZERS \
+ CYG_UIT_TASK( "t1", 1, task1, &stack1, CYGNUM_UITRON_STACK_SIZE ), \
+ CYG_UIT_TASK( "t2", 2, task2, &stack2, CYGNUM_UITRON_STACK_SIZE ), \
+ CYG_UIT_TASK( "t3", 3, task3, &stack3, CYGNUM_UITRON_STACK_SIZE ), \
+ CYG_UIT_TASK( "t4", 4, task4, &stack4, CYGNUM_UITRON_STACK_SIZE )
+
+
+
+Note that
+CYGNUM_UITRON_STACK_SIZE
+is used to control the size of the stack
+objects themselves, and to tell the system what size stack is being provided.
+
+
+Suppose instead stack sizes of 2000, 1000, 800 and 800 were required:
+this could be achieved by using the GUI config tool to edit these
+options, or editting the .ecc file to get these
+results in pkgconf/uitron.h:
+
+
+#define CYGDAT_UITRON_TASK_EXTERNS \
+extern "C" void task1( unsigned int ); \
+extern "C" void task2( unsigned int ); \
+extern "C" void task3( unsigned int ); \
+extern "C" void task4( unsigned int ); \
+static char stack1[ 2000 ], \
+ stack2[ 1000 ], \
+ stack3[ 800 ], \
+ stack4[ 800 ];
+
+#define CYGDAT_UITRON_TASK_INITIALIZERS \
+ CYG_UIT_TASK( "t1", 1, task1, &stack1, sizeof( stack1 ) ), \
+ CYG_UIT_TASK( "t2", 2, task2, &stack2, sizeof( stack2 ) ), \
+ CYG_UIT_TASK( "t3", 3, task3, &stack3, sizeof( stack3 ) ), \
+ CYG_UIT_TASK( "t4", 4, task4, &stack4, sizeof( stack4 ) )
+
+
+Note that the sizeof() operator has been used to tell the system what size
+stacks are provided, rather than quoting a number (which is difficult for
+maintenance) or the symbol
+CYGNUM_UITRON_STACK_SIZE
+(which is wrong).
+
+
+We recommend using (if available in your release) the stacksize symbols
+provided in the architectural HAL for your target, called
+CYGNUM_HAL_STACK_SIZE_TYPICAL
+and
+CYGNUM_HAL_STACK_SIZE_MINIMUM.
+So a better (more portable) version of the above might be:
+
+
+#define CYGDAT_UITRON_TASK_EXTERNS \
+extern "C" void task1( unsigned int ); \
+extern "C" void task2( unsigned int ); \
+extern "C" void task3( unsigned int ); \
+extern "C" void task4( unsigned int ); \
+static char stack1[ CYGNUM_HAL_STACK_SIZE_TYPICAL + 1200 ], \
+ stack2[ CYGNUM_HAL_STACK_SIZE_TYPICAL + 200 ], \
+ stack3[ CYGNUM_HAL_STACK_SIZE_TYPICAL ], \
+ stack4[ CYGNUM_HAL_STACK_SIZE_TYPICAL ];
+
+#define CYGDAT_UITRON_TASK_INITIALIZERS \
+ CYG_UIT_TASK( "t1", 1, task1, &stack1, sizeof( stack1 ) ), \
+ CYG_UIT_TASK( "t2", 2, task2, &stack2, sizeof( stack2 ) ), \
+ CYG_UIT_TASK( "t3", 3, task3, &stack3, sizeof( stack3 ) ), \
+ CYG_UIT_TASK( "t4", 4, task4, &stack4, sizeof( stack4 ) )
+
+
+
+
diff --git a/packages/devs/eth/arm/ks32c5000/current/ChangeLog b/packages/devs/eth/arm/ks32c5000/current/ChangeLog
--- a/packages/devs/eth/arm/ks32c5000/current/ChangeLog
+++ b/packages/devs/eth/arm/ks32c5000/current/ChangeLog
@@ -1,3 +1,9 @@
+2002-05-30 Jonathan Larmour
+
+ * src/ks5000_ether.c (ks32c5000_eth_send): Conditionalize on
+ CYGPKG_KERNEL for presence of thread delay function.
+ (ks32c5000_eth_init): No need conditionalizing unmask on CYGPKG_NET.
+
//===========================================================================
//####ECOSGPLCOPYRIGHTBEGIN####
// -------------------------------------------
diff --git a/packages/devs/eth/arm/ks32c5000/current/src/ks5000_ether.c b/packages/devs/eth/arm/ks32c5000/current/src/ks5000_ether.c
--- a/packages/devs/eth/arm/ks32c5000/current/src/ks5000_ether.c
+++ b/packages/devs/eth/arm/ks32c5000/current/src/ks5000_ether.c
@@ -1113,12 +1113,10 @@ static bool ks32c5000_eth_init(struct cy
#endif
installInterrupts();
EthInit(myMacAddr);
-#if defined(CYGPKG_NET)
cyg_drv_interrupt_unmask(CYGNUM_HAL_INTERRUPT_EtherBDMARx);
cyg_drv_interrupt_unmask(CYGNUM_HAL_INTERRUPT_EtherBDMATx);
cyg_drv_interrupt_unmask(CYGNUM_HAL_INTERRUPT_EtherMacRx);
cyg_drv_interrupt_unmask(CYGNUM_HAL_INTERRUPT_EtherMacTx);
-#endif
configDone = 1;
ethernetRunning = 1;
eth_drv_init(sc, myMacAddr);
@@ -1252,7 +1250,7 @@ static void ks32c5000_eth_send(struct et
while(!ks32c5000_eth_buffer_send(buf))
{
-#if defined(CYGPKG_NET)
+#if defined(CYGPKG_KERNEL)
// wait a tick and try again.
cyg_thread_delay(1);
#else
diff --git a/packages/devs/eth/cf/current/ChangeLog b/packages/devs/eth/cf/current/ChangeLog
--- a/packages/devs/eth/cf/current/ChangeLog
+++ b/packages/devs/eth/cf/current/ChangeLog
@@ -1,3 +1,8 @@
+2002-05-30 Jonathan Larmour
+
+ * src/if_sc_lpe.c: Conditionalize use of thread on CYGPKG_KERNEL
+ not CYGPKG_NET.
+
2002-04-12 Gary Thomas
* src/if_sc_lpe.c: Clean up warnings.
diff --git a/packages/devs/eth/cf/current/src/if_sc_lpe.c b/packages/devs/eth/cf/current/src/if_sc_lpe.c
--- a/packages/devs/eth/cf/current/src/if_sc_lpe.c
+++ b/packages/devs/eth/cf/current/src/if_sc_lpe.c
@@ -85,12 +85,12 @@
-#ifdef CYGPKG_NET
+#ifdef CYGPKG_KERNEL
#define STACK_SIZE CYGNUM_HAL_STACK_SIZE_TYPICAL
static char sc_lpe_card_handler_stack[STACK_SIZE];
static cyg_thread sc_lpe_card_handler_thread_data;
static cyg_handle_t sc_lpe_card_handler_thread_handle;
-#endif // CYGPKG_NET
+#endif // CYGPKG_KERNEL
static void
do_delay(int ticks)
@@ -107,7 +107,7 @@ do_delay(int ticks)
// and deletions need to be handled and they take time/coordination, thus the
// separate thread.
//
-#ifdef CYGPKG_NET
+#ifdef CYGPKG_KERNEL
static void
#else
static int
@@ -123,7 +123,7 @@ sc_lpe_card_handler(cyg_addrword_t param
unsigned char buf[256], *cp;
cyg_uint8* base;
unsigned char *vers_product, *vers_manuf, *vers_revision, *vers_date;
-#ifndef CYGPKG_NET
+#ifndef CYGPKG_KERNEL
int tries = 0;
#endif
bool first = true;
@@ -141,7 +141,7 @@ sc_lpe_card_handler(cyg_addrword_t param
}
if (slot->state != CF_SLOT_STATE_Ready) {
diag_printf("CF card won't go ready!\n");
-#ifndef CYGPKG_NET
+#ifndef CYGPKG_KERNEL
return false;
#else
continue;
@@ -166,7 +166,7 @@ sc_lpe_card_handler(cyg_addrword_t param
vers_revision = cp;
while (*cp++) ; // Skip to nul
vers_date = cp;
-#ifndef CYGPKG_NET
+#ifndef CYGPKG_KERNEL
if (tries != 0) diag_printf("\n");
diag_printf("%s: %s %s %s\n", vers_manuf, vers_product, vers_revision, vers_date);
#endif
@@ -249,7 +249,7 @@ sc_lpe_card_handler(cyg_addrword_t param
(sc->funs->eth_drv->init)(sc, dp->esa);
// Tell system card is ready to talk
dp->tab->status = CYG_NETDEVTAB_STATUS_AVAIL;
-#ifndef CYGPKG_NET
+#ifndef CYGPKG_KERNEL
cyg_drv_dsr_unlock();
return true;
#endif
@@ -266,7 +266,7 @@ sc_lpe_card_handler(cyg_addrword_t param
} else {
cyg_drv_dsr_unlock();
do_delay(50); // FIXME!
-#ifndef CYGPKG_NET
+#ifndef CYGPKG_KERNEL
if (tries == 0) diag_printf("... Waiting for network card: ");
diag_printf(".");
if (++tries == 10) {
@@ -291,7 +291,7 @@ cyg_sc_lpe_init(struct cyg_netdevtab_ent
slot = dp->plf_priv = (void*)cf_get_slot(0);
dp->tab = tab;
-#ifdef CYGPKG_NET
+#ifdef CYGPKG_KERNEL
// Create card handling [background] thread
cyg_thread_create(CYGPKG_NET_THREAD_PRIORITY-1, // Priority
sc_lpe_card_handler, // entry
diff --git a/packages/devs/eth/cl/cs8900a/current/ChangeLog b/packages/devs/eth/cl/cs8900a/current/ChangeLog
--- a/packages/devs/eth/cl/cs8900a/current/ChangeLog
+++ b/packages/devs/eth/cl/cs8900a/current/ChangeLog
@@ -1,3 +1,9 @@
+2002-05-30 Jonathan Larmour
+
+ * include/cs8900.h: Check for lost ints if we can - when kernel present.
+ * src/if_cs8900a.c: Use CYGINT_IO_ETH_INT_SUPPORT_REQUIRED where
+ appropriate.
+
2002-03-20 Gary Thomas
2002-03-06 Pieter Truter
diff --git a/packages/devs/eth/cl/cs8900a/current/include/cs8900.h b/packages/devs/eth/cl/cs8900a/current/include/cs8900.h
--- a/packages/devs/eth/cl/cs8900a/current/include/cs8900.h
+++ b/packages/devs/eth/cl/cs8900a/current/include/cs8900.h
@@ -118,7 +118,7 @@ typedef struct cs8900a_priv_data {
cyg_addrword_t base;
cyg_uint32 txkey; // Used to ack when packet sent
struct cyg_netdevtab_entry *tab;
-#ifdef CYGPKG_NET
+#ifdef CYGPKG_KERNEL
cyg_tick_count_t txstart;
#endif
} cs8900a_priv_data_t;
diff --git a/packages/devs/eth/cl/cs8900a/current/src/if_cs8900a.c b/packages/devs/eth/cl/cs8900a/current/src/if_cs8900a.c
--- a/packages/devs/eth/cl/cs8900a/current/src/if_cs8900a.c
+++ b/packages/devs/eth/cl/cs8900a/current/src/if_cs8900a.c
@@ -67,8 +67,7 @@
//==========================================================================
#include
-#ifdef CYGPKG_NET
-#include
+#ifdef CYGPKG_KERNEL
#include
#endif
#include
@@ -89,7 +88,7 @@
#undef __WANT_DEVS
// NOINTS operation only relevant when the NET package is loaded
-#ifndef CYGPKG_NET
+#if !defined(CYGPKG_NET) || !defined(CYGPKG_KERNEL)
# undef CYGSEM_DEVS_ETH_CL_CS8900A_NOINTS
#endif
@@ -106,7 +105,7 @@ extern int cyg_io_eth_net_debug;
#endif
static void cs8900a_poll(struct eth_drv_sc *sc);
-#ifdef CYGPKG_NET
+#ifdef CYGINT_IO_ETH_INT_SUPPORT_REQUIRED
// This ISR is called when the ethernet interrupt occurs
static int
cs8900a_isr(cyg_vector_t vector, cyg_addrword_t data, HAL_SavedRegisters *regs)
@@ -123,7 +122,7 @@ cs8900a_dsr(cyg_vector_t vector, cyg_uco
// This conditioning out is necessary because of explicit calls to this
// DSR - which would not ever be called in the case of a polled mode
// usage ie. in RedBoot.
-#ifdef CYGPKG_IO_ETH_DRIVERS_NET
+#ifdef CYGINT_IO_ETH_INT_SUPPORT_REQUIRED
cs8900a_priv_data_t* cpd = (cs8900a_priv_data_t *)data;
struct cyg_netdevtab_entry *ndp = (struct cyg_netdevtab_entry *)(cpd->tab);
struct eth_drv_sc *sc = (struct eth_drv_sc *)(ndp->device_instance);
@@ -145,7 +144,7 @@ static void
cs8900a_deliver(struct eth_drv_sc *sc)
{
cs8900a_poll(sc);
-#ifdef CYGPKG_NET
+#ifdef CYGINT_IO_ETH_INT_SUPPORT_REQUIRED
{
cs8900a_priv_data_t *cpd = (cs8900a_priv_data_t *)sc->driver_private;
// Allow interrupts to happen again
@@ -176,7 +175,7 @@ cs8900a_init(struct cyg_netdevtab_entry
CYGHWR_CL_CS8900A_PLF_INIT(cpd);
-#ifdef CYGPKG_NET
+#ifdef CYGINT_IO_ETH_INT_SUPPORT_REQUIRED
// Initialize environment, setup interrupt handler
cyg_drv_interrupt_create(cpd->interrupt,
0, // Priority - what goes here?
@@ -381,7 +380,7 @@ cs8900a_can_send(struct eth_drv_sc *sc)
if ((stat & PP_LineStat_LinkOK) == 0) {
return false; // Link not connected
}
-#ifdef CYGPKG_NET
+#ifdef CYGPKG_KERNEL
// Horrible hack!
if (cpd->txbusy) {
cyg_tick_count_t now = cyg_current_time();
@@ -416,7 +415,7 @@ cs8900a_send(struct eth_drv_sc *sc, stru
// Mark xmitter busy
cpd->txbusy = true;
cpd->txkey = key;
-#ifdef CYGPKG_NET
+#ifdef CYGPKG_KERNEL
cpd->txstart = cyg_current_time();
#endif
// Start the xmit sequence
diff --git a/packages/devs/eth/frv/frv400/current/ChangeLog b/packages/devs/eth/frv/frv400/current/ChangeLog
--- a/packages/devs/eth/frv/frv400/current/ChangeLog
+++ b/packages/devs/eth/frv/frv400/current/ChangeLog
@@ -1,3 +1,8 @@
+2002-05-30 Jonathan Larmour
+
+ * include/devs_eth_frv400.inl: Use CYGINT_IO_ETH_INT_SUPPORT_REQUIRED
+ instead of CYGPKG_NET where required.
+
2002-03-28 Gary Thomas
* cdl/frv400_eth_drivers.cdl: Don't define CYGHWR_NET_DRIVERS as this
diff --git a/packages/devs/eth/frv/frv400/current/include/devs_eth_frv400.inl b/packages/devs/eth/frv/frv400/current/include/devs_eth_frv400.inl
--- a/packages/devs/eth/frv/frv400/current/include/devs_eth_frv400.inl
+++ b/packages/devs/eth/frv/frv400/current/include/devs_eth_frv400.inl
@@ -172,7 +172,7 @@ static void
#define CYGHWR_NS_DP83902A_PLF_INIT(dp) _frv400_eth_init(dp)
-#ifndef CYGPKG_NET
+#ifndef CYGINT_IO_ETH_INT_SUPPORT_REQUIRED
static void
_frv400_eth_int_clear(dp83902a_priv_data_t *dp)
{
diff --git a/packages/devs/eth/h8300/aki3068net/current/ChangeLog b/packages/devs/eth/h8300/aki3068net/current/ChangeLog
--- a/packages/devs/eth/h8300/aki3068net/current/ChangeLog
+++ b/packages/devs/eth/h8300/aki3068net/current/ChangeLog
@@ -1,3 +1,7 @@
+2002-05-28 Jonathan Larmour
+
+ * src/if_aki3068net.c: Remove unused includes.
+
2002-04-24 Yoshinori Sato
* New package.
diff --git a/packages/devs/eth/h8300/aki3068net/current/src/if_aki3068net.c b/packages/devs/eth/h8300/aki3068net/current/src/if_aki3068net.c
--- a/packages/devs/eth/h8300/aki3068net/current/src/if_aki3068net.c
+++ b/packages/devs/eth/h8300/aki3068net/current/src/if_aki3068net.c
@@ -69,12 +69,6 @@
#include
#include
-#ifdef CYGPKG_NET
-#include
-#else
-#include
-#endif
-
#define DP_CARD_RESET 0x1f
#include
diff --git a/packages/devs/eth/ns/dp83902a/current/ChangeLog b/packages/devs/eth/ns/dp83902a/current/ChangeLog
--- a/packages/devs/eth/ns/dp83902a/current/ChangeLog
+++ b/packages/devs/eth/ns/dp83902a/current/ChangeLog
@@ -1,3 +1,8 @@
+2002-05-30 Jonathan Larmour
+
+ * src/if_dp83902a.c: Use CYGINT_IO_ETH_INT_SUPPORT_REQUIRED instead
+ of CYGPKG_NET where required.
+
2002-04-12 Gary Thomas
* src/if_dp83902a.c: Clean up warnings.
diff --git a/packages/devs/eth/ns/dp83902a/current/src/if_dp83902a.c b/packages/devs/eth/ns/dp83902a/current/src/if_dp83902a.c
--- a/packages/devs/eth/ns/dp83902a/current/src/if_dp83902a.c
+++ b/packages/devs/eth/ns/dp83902a/current/src/if_dp83902a.c
@@ -71,13 +71,7 @@
#include
#include
#include
-
-#ifdef CYGPKG_NET
-#include
#include
-#else
-#include
-#endif
#include
@@ -85,7 +79,7 @@
#include CYGDAT_DEVS_ETH_NS_DP83902A_INL
#undef __WANT_DEVS
-#ifdef CYGPKG_NET
+#ifdef CYGINT_IO_ETH_INT_SUPPORT_REQUIRED
// This ISR is called when the ethernet interrupt occurs
static cyg_uint32
dp83902a_isr(cyg_vector_t vector, cyg_addrword_t data)
@@ -121,7 +115,7 @@ dp83902a_dsr(cyg_vector_t vector, cyg_uc
# endif
#endif
}
-#endif // CYGPKG_NET
+#endif // CYGINT_IO_ETH_INT_SUPPORT_REQUIRED
// The deliver function (ex-DSR) handles the ethernet [logical] processing
static void
@@ -180,7 +174,7 @@ dp83902a_init(struct cyg_netdevtab_entry
dp->esa[4],
dp->esa[5] );
-#ifdef CYGPKG_NET
+#ifdef CYGINT_IO_ETH_INT_SUPPORT_REQUIRED
cyg_drv_interrupt_create(
dp->interrupt,
0, // Priority - unused
diff --git a/packages/devs/eth/powerpc/fec/current/ChangeLog b/packages/devs/eth/powerpc/fec/current/ChangeLog
--- a/packages/devs/eth/powerpc/fec/current/ChangeLog
+++ b/packages/devs/eth/powerpc/fec/current/ChangeLog
@@ -1,3 +1,15 @@
+2002-05-30 Jonathan Larmour
+
+ * src/if_fec.c: Use CYGINT_IO_ETH_INT_SUPPORT_REQUIRED where
+ appropriate.
+
+2002-05-30 Jesper Skov
+
+ * src/if_fec.c: Initialized a variable and removed an unused
+ variable. Also made one volatile. All to remove warnings.
+ * src/fec.h: Made more pointers volatile to avoid compiler
+ warnings.
+
2002-04-30 Nick Garnett
* src/if_fec.c: Changed order of initialization and made code more
diff --git a/packages/devs/eth/powerpc/fec/current/src/fec.h b/packages/devs/eth/powerpc/fec/current/src/fec.h
--- a/packages/devs/eth/powerpc/fec/current/src/fec.h
+++ b/packages/devs/eth/powerpc/fec/current/src/fec.h
@@ -92,8 +92,8 @@ struct fec_bd {
struct fec_eth_info {
volatile struct fec *fec;
volatile struct fec_bd *txbd, *rxbd; // Next Tx,Rx descriptor to use
- struct fec_bd *tbase, *rbase; // First Tx,Rx descriptor
- struct fec_bd *tnext, *rnext; // Next descriptor to check for interrupt
+ volatile struct fec_bd *tbase, *rbase; // First Tx,Rx descriptor
+ volatile struct fec_bd *tnext, *rnext; // Next descriptor to check for interrupt
int txsize, rxsize; // Length of individual buffers
int txactive; // Count of active Tx buffers
unsigned long txkey[CYGNUM_DEVS_ETH_POWERPC_FEC_TxNUM];
@@ -104,8 +104,8 @@ struct fec_eth_info {
struct fec {
unsigned long addr[2]; // ESA
unsigned long hash[2]; // Address hash mask
- struct fec_bd *RxRing;
- struct fec_bd *TxRing;
+ volatile struct fec_bd *RxRing;
+ volatile struct fec_bd *TxRing;
unsigned long RxBufSize;
unsigned char _fill0[0x40-0x1C];
unsigned long eControl; // Master control register
diff --git a/packages/devs/eth/powerpc/fec/current/src/if_fec.c b/packages/devs/eth/powerpc/fec/current/src/if_fec.c
--- a/packages/devs/eth/powerpc/fec/current/src/if_fec.c
+++ b/packages/devs/eth/powerpc/fec/current/src/if_fec.c
@@ -129,7 +129,7 @@ NETDEVTAB_ENTRY(fec_netdev,
fec_eth_init,
&fec_eth0_sc);
-#ifdef CYGPKG_NET
+#ifdef CYGINT_IO_ETH_INT_SUPPORT_REQUIRED
#define _FEC_USE_INTS
#ifdef _FEC_USE_INTS
static cyg_interrupt fec_eth_interrupt;
@@ -141,7 +141,7 @@ static cyg_thread fec_fake_int_thread_da
static cyg_handle_t fec_fake_int_thread_handle;
static void fec_fake_int(cyg_addrword_t);
#endif // _FEC_USE_INTS
-#endif // CYGPKG_NET
+#endif // CYGINT_IO_ETH_INT_SUPPORT_REQUIRED
static void fec_eth_int(struct eth_drv_sc *data);
#define FEC_ETH_INT CYGNUM_HAL_INTERRUPT_SIU_LVL1
@@ -238,7 +238,7 @@ fec_eth_reset(struct eth_drv_sc *sc, uns
struct fec_eth_info *qi = (struct fec_eth_info *)sc->driver_private;
volatile EPPC *eppc = (volatile EPPC *)eppc_base();
volatile struct fec *fec = (volatile struct fec *)((unsigned char *)eppc + FEC_OFFSET);
- struct fec_bd *rxbd, *txbd;
+ volatile struct fec_bd *rxbd, *txbd;
unsigned char *RxBUF, *TxBUF;
int cache_state, int_state;
int i;
@@ -394,7 +394,7 @@ fec_eth_init(struct cyg_netdevtab_entry
qi->fec = fec;
fec_eth_stop(sc); // Make sure it's not running yet
-#ifdef CYGPKG_NET
+#ifdef CYGINT_IO_ETH_INT_SUPPORT_REQUIRED
#ifdef _FEC_USE_INTS
// Set up to handle interrupts
cyg_drv_interrupt_create(FEC_ETH_INT,
@@ -455,6 +455,7 @@ fec_eth_init(struct cyg_netdevtab_entry
CYGACC_CALL_IF_DELAY_US(10000); // 10ms
eppc->pip_pbdat |= 0x00004000; // Enable PHY chip
// Enable transceiver (PHY)
+ phy_ok = 0;
phy_write(PHY_BMCR, 0, PHY_BMCR_RESET);
for (i = 0; i < 10; i++) {
phy_ok = phy_read(PHY_BMCR, 0, &phy_state);
@@ -524,7 +525,6 @@ fec_eth_control(struct eth_drv_sc *sc, u
void *data, int length)
{
#ifdef ETH_DRV_SET_MC_ALL
- struct eth_drv_mc_list *mc_list;
struct fec_eth_info *qi = (struct fec_eth_info *)sc->driver_private;
volatile struct fec *fec = qi->fec;
#endif
@@ -769,7 +769,7 @@ fec_eth_int_vector(struct eth_drv_sc *sc
return (FEC_ETH_INT);
}
-#if defined(CYGPKG_NET) && ~defined(_FEC_USE_INTS)
+#if defined(CYGINT_IO_ETH_INT_SUPPORT_REQUIRED) && ~defined(_FEC_USE_INTS)
void
fec_fake_int(cyg_addrword_t param)
{
diff --git a/packages/devs/eth/powerpc/quicc/current/ChangeLog b/packages/devs/eth/powerpc/quicc/current/ChangeLog
--- a/packages/devs/eth/powerpc/quicc/current/ChangeLog
+++ b/packages/devs/eth/powerpc/quicc/current/ChangeLog
@@ -1,3 +1,8 @@
+2002-05-30 Jonathan Larmour
+
+ * src/if_quicc.c: Use CYGINT_IO_ETH_INT_SUPPORT_REQUIRED where
+ appropriate.
+
2001-08-22 Gary Thomas
* src/if_quicc.c:
diff --git a/packages/devs/eth/powerpc/quicc/current/src/if_quicc.c b/packages/devs/eth/powerpc/quicc/current/src/if_quicc.c
--- a/packages/devs/eth/powerpc/quicc/current/src/if_quicc.c
+++ b/packages/devs/eth/powerpc/quicc/current/src/if_quicc.c
@@ -130,13 +130,13 @@ NETDEVTAB_ENTRY(quicc_netdev,
extern int _mbx_fetch_VPD(int, void *, int);
-#ifdef CYGPKG_NET
+#ifdef CYGINT_IO_ETH_INT_SUPPORT_REQUIRED
static cyg_interrupt quicc_eth_interrupt;
static cyg_handle_t quicc_eth_interrupt_handle;
#endif
static void quicc_eth_int(struct eth_drv_sc *data);
-#ifdef CYGPKG_NET
+#ifdef CYGINT_IO_ETH_INT_SUPPORT_REQUIRED
// This ISR is called when the ethernet interrupt occurs
static int
quicc_eth_isr(cyg_vector_t vector, cyg_addrword_t data, HAL_SavedRegisters *regs)
@@ -152,7 +152,7 @@ static void
quicc_eth_deliver(struct eth_drv_sc * sc)
{
quicc_eth_int(sc);
-#ifdef CYGPKG_NET
+#ifdef CYGINT_IO_ETH_INT_SUPPORT_REQUIRED
// Allow interrupts to happen again
cyg_drv_interrupt_unmask(CYGNUM_HAL_INTERRUPT_CPM_SCC1);
#endif
@@ -200,7 +200,7 @@ quicc_eth_init(struct cyg_netdevtab_entr
HAL_DCACHE_SYNC();
HAL_DCACHE_DISABLE();
-#ifdef CYGPKG_NET
+#ifdef CYGINT_IO_ETH_INT_SUPPORT_REQUIRED
// Set up to handle interrupts
cyg_drv_interrupt_create(CYGNUM_HAL_INTERRUPT_CPM_SCC1,
CYGARC_SIU_PRIORITY_HIGH,
diff --git a/packages/hal/arm/arch/current/ChangeLog b/packages/hal/arm/arch/current/ChangeLog
--- a/packages/hal/arm/arch/current/ChangeLog
+++ b/packages/hal/arm/arch/current/ChangeLog
@@ -1,3 +1,13 @@
+2002-05-28 Mark Salter
+
+ * cdl/hal_arm.cdl: Tweaked description for
+ CYGHWR_REDBOOT_ARM_LINUX_EXEC_ADDRESS.
+ Add CYGHWR_REDBOOT_ARM_LINUX_TAGS_ADDRESS.
+
+ * src/redboot_linux_exec.c (do_exec): Rework transition to MMU
+ off and jump to kernel so that it works for non 1-1 mapped
+ platforms.
+
2002-05-20 Gary Thomas
* include/hal_io.h: Fix ...STRING macros - not using index.
diff --git a/packages/hal/arm/arch/current/cdl/hal_arm.cdl b/packages/hal/arm/arch/current/cdl/hal_arm.cdl
--- a/packages/hal/arm/arch/current/cdl/hal_arm.cdl
+++ b/packages/hal/arm/arch/current/cdl/hal_arm.cdl
@@ -233,22 +233,32 @@ cdl_package CYGPKG_HAL_ARM {
}
cdl_option CYGHWR_REDBOOT_ARM_LINUX_EXEC_ADDRESS {
- display "Linux execution address"
+ display "Physical base address of linux kernel"
flavor data
default_value CYGHWR_REDBOOT_ARM_LINUX_EXEC_ADDRESS_DEFAULT
description "
- This is the physical address where Linux expects to be started
- from."
+ This is the physical address of the base of the Linux kernel
+ image."
}
cdl_option CYGHWR_REDBOOT_ARM_LINUX_EXEC_ADDRESS_DEFAULT {
- display "Linux execution address"
+ display "Default physical base address of linux kernel"
flavor data
default_value 0x00008000
no_define
description "
- This is the physical address where Linux expects to be started
- from. This option gets set by the platform CDL."
+ This is the physical address of the base of the Linux kernel
+ image. This option gets set by the platform CDL."
+ }
+
+ cdl_option CYGHWR_REDBOOT_ARM_LINUX_TAGS_ADDRESS {
+ display "Base address of linux kernel parameter tags"
+ flavor data
+ default_value 0x100
+ description "
+ This is the base address of the area of memory used to
+ pass parameters to the Linux kernel. This should be chosen
+ to avoid overlap with the kernel and any ramdisk image."
}
}
diff --git a/packages/hal/arm/arch/current/src/redboot_linux_exec.c b/packages/hal/arm/arch/current/src/redboot_linux_exec.c
--- a/packages/hal/arm/arch/current/src/redboot_linux_exec.c
+++ b/packages/hal/arm/arch/current/src/redboot_linux_exec.c
@@ -91,6 +91,20 @@ RedBoot_cmd("exec",
do_exec
);
+// CYGARC_HAL_MMU_OFF inserts code to turn off MMU and jump to a physical
+// address. Some ARM implementations may need special handling and define
+// their own version.
+#ifndef CYGARC_HAL_MMU_OFF
+#define CYGARC_HAL_MMU_OFF(__paddr__) \
+ " mcr p15,0,r0,c7,c10,4\n" \
+ " mcr p15,0,r0,c7,c7,0\n" \
+ " mrc p15,0,r0,c1,c0,0\n" \
+ " bic r0,r0,#0xd\n" \
+ " bic r0,r0,#0x1000\n" \
+ " mcr p15,0,r0,c1,c0,0\n" \
+ " mov pc," #__paddr__ "\n"
+#endif
+
//
// Parameter info for Linux kernel
// ** C A U T I O N ** This setup must match "asm-arm/setup.h"
@@ -243,9 +257,12 @@ do_exec(int argc, char *argv[])
struct option_info opts[6];
char line[8];
char *cmd_line;
- struct tag *params = (struct tag *)0x0100;
+ struct tag *params = (struct tag *)CYGHWR_REDBOOT_ARM_LINUX_TAGS_ADDRESS;
+ extern char __tramp_start__[], __tramp_end__[];
- entry = (unsigned long)CYGARC_PHYSICAL_ADDRESS(CYGHWR_REDBOOT_ARM_LINUX_EXEC_ADDRESS); // Default Linux execute address
+ // Default physical entry point for Linux is kernel base.
+ entry = (unsigned long)CYGHWR_REDBOOT_ARM_LINUX_EXEC_ADDRESS;
+
base_addr = load_address;
length = load_address_end - load_address;
ramdisk_size = 4096*1024;
@@ -339,73 +356,49 @@ do_exec(int argc, char *argv[])
HAL_ICACHE_INVALIDATE_ALL();
HAL_DCACHE_INVALIDATE_ALL();
- // Tricky code. We are currently running with the MMU on and the
- // memory map convoluted from 1-1. The trampoline code between
- // labels 1 and 2 must be copied to RAM and then executed at the
- // non-mapped address. Then when the code turns off the MMU, the
- // control flow is unchanged and control can be passed safely to
- // the program to be executed.
- // Note: This only works if phys=virt (or there are appropriate
- // double mapping of the memory). This should be rewritten
- // so a jump follows immediately after the MMU disable
- // operation.
+ // Tricky code. We are currently running with the MMU on and the
+ // memory map possibly convoluted from 1-1. The trampoline code
+ // between labels __tramp_start__ and __tramp_end__ must be copied
+ // to RAM and then executed at the non-mapped address.
//
- // This magic was created in order to
- // be able to execute standard Linux kernels with as little
- // change/perturberance as possible.
- asm volatile ("\n" // Copy code between labels 1-2 to the
- " ldr r2,=1f;\n" // trampoline address...
- " ldr r3,=2f;\n"
- " mov r5,%0;\n"
- "4:\n"
- " ldr r1,[r2],#4;\n"
- " str r1,[r5],#4;\n"
- " cmp r2,r3;\n"
- " bne 4b;\n"
- " nop;nop;nop;nop;nop;nop;nop;nop;\n"
- " mov r5,%1;\n"
- " mov r2,%2;\n"
- " mov r3,%3;\n"
- " mov r7,%4;\n"
- " mov r6,%5;\n"
- " mov pc,%0;\n" //... and jump to it.
- " \n"
- "1:\n"
- " mrs r1,cpsr;\n" // Put processor in IRQ mode
- " bic r0,r1,#0x1F;\n"
- " orr r0,r0,#0x12;\n"
- " msr cpsr,r0;\n"
- " msr spsr,r1;\n"
- " mov lr,r5;\n" // Set kernel entry point
- " mov sp,r5;\n" // Give the kernel a stack just below the entry point
- " mov r1,#0;\n" // Turn off MMU and caches
- " mcr p15,0,r1,c1,c0;\n"
- " nop;nop;nop;\n"
- " cmp r2,r6;\n" // Default kernel load address. Relocate
- " beq 10f;\n" // kernel image there if necessary, and
- " cmp r3,#0;\n" // if size is non-zero
- " beq 10f;\n"
- "05:\n"
- " ldr r4,[r2],#4;\n"
- " str r4,[r6],#4;\n"
- " sub r3,r3,#4;\n"
- " cmp r3,#0;\n"
- " bne 05b;\n"
- "10:\n"
- " mov r0,#0;\n" // Set board type and start the kernel
- " mov r1,r7;\n"
- " movs pc,lr;\n"
- "2:\n"
- : :
- "r"(CYGARC_PHYSICAL_ADDRESS(CYGHWR_REDBOOT_ARM_TRAMPOLINE_ADDRESS)),
- "r"(entry),
- "r"(CYGARC_PHYSICAL_ADDRESS(base_addr)),
- "r"(length),
- "r"(CYGHWR_REDBOOT_ARM_MACHINE_TYPE),
- "r"(CYGHWR_REDBOOT_ARM_LINUX_EXEC_ADDRESS) :
- "r7","r6","r5","r2","r3","r1");
+ // This magic was created in order to be able to execute standard
+ // Linux kernels with as little change/perturberance as possible.
+
+ // copy the trampline code
+ memcpy((char *)CYGHWR_REDBOOT_ARM_TRAMPOLINE_ADDRESS,
+ __tramp_start__,
+ __tramp_end__ - __tramp_start__);
+
+ asm volatile (
+ CYGARC_HAL_MMU_OFF(%5)
+ "__tramp_start__:\n"
+ " cmp %1,%4;\n" // Default kernel load address. Relocate
+ " beq 2f;\n" // kernel image there if necessary, and
+ " cmp %2,#0;\n" // if size is non-zero
+ " beq 2f;\n"
+ "1:\n"
+ " ldr r0,[%1],#4;\n"
+ " str r0,[%4],#4;\n"
+ " subs %2,%2,#4;\n"
+ " bne 1b;\n"
+ "2:\n"
+ " mov r0,#0;\n" // Set board type
+ " mov r1,%3;\n" // Machine type
+ " mov r2,%6;\n" // Kernel parameters
+ " mov pc,%0;\n" // Jump to kernel
+ "__tramp_end__:\n"
+ : :
+ "r"(entry),
+ "r"(CYGARC_PHYSICAL_ADDRESS(base_addr)),
+ "r"(length),
+ "r"(CYGHWR_REDBOOT_ARM_MACHINE_TYPE),
+ "r"(CYGHWR_REDBOOT_ARM_LINUX_EXEC_ADDRESS),
+ "r"(CYGARC_PHYSICAL_ADDRESS(CYGHWR_REDBOOT_ARM_TRAMPOLINE_ADDRESS)),
+ "r"(CYGARC_PHYSICAL_ADDRESS(CYGHWR_REDBOOT_ARM_LINUX_TAGS_ADDRESS))
+ : "r0", "r1"
+ );
}
-
+
#endif // HAL_PLATFORM_MACHINE_TYPE - otherwise we do not support this stuff...
// EOF redboot_linux_exec.c
diff --git a/packages/hal/arm/iq80310/current/ChangeLog b/packages/hal/arm/iq80310/current/ChangeLog
--- a/packages/hal/arm/iq80310/current/ChangeLog
+++ b/packages/hal/arm/iq80310/current/ChangeLog
@@ -1,3 +1,12 @@
+2002-05-28 Mark Salter
+
+ * cdl/hal_arm_iq80310.cdl: Add Linux boot support.
+ * misc/redboot_RAM.ecm: Ditto.
+ * misc/redboot_ROM.ecm: Ditto.
+
+ * include/hal_iq80310.h (CYGARC_HAL_MMU_OFF): Xscale has
+ special requirements for turning off MMU.
+
2002-05-24 Jonathan Larmour
* src/hal_diag.c: Support dynamic getting and setting of baud rates.
diff --git a/packages/hal/arm/iq80310/current/cdl/hal_arm_iq80310.cdl b/packages/hal/arm/iq80310/current/cdl/hal_arm_iq80310.cdl
--- a/packages/hal/arm/iq80310/current/cdl/hal_arm_iq80310.cdl
+++ b/packages/hal/arm/iq80310/current/cdl/hal_arm_iq80310.cdl
@@ -179,6 +179,25 @@ cdl_package CYGPKG_HAL_ARM_IQ80310 {
}
}
+ cdl_component CYGPKG_REDBOOT_XSCALE_OPTIONS {
+ display "Redboot for XScale options"
+ flavor none
+ no_define
+ parent CYGPKG_REDBOOT
+ active_if CYGPKG_REDBOOT
+ description "
+ This option lists the target's requirements for a valid Redboot
+ configuration."
+
+ # RedBoot details
+ requires { CYGSEM_REDBOOT_ARM_LINUX_BOOT }
+ requires { CYGHWR_REDBOOT_ARM_LINUX_EXEC_ADDRESS_DEFAULT == 0xa0008000 }
+ define_proc {
+ puts $::cdl_header "#define CYGHWR_REDBOOT_ARM_TRAMPOLINE_ADDRESS 0xA1FF0000"
+ puts $::cdl_header "#define HAL_PLATFORM_MACHINE_TYPE 70"
+ }
+ }
+
cdl_component CYGBLD_GLOBAL_OPTIONS {
display "Global build options"
flavor none
diff --git a/packages/hal/arm/iq80310/current/include/hal_iq80310.h b/packages/hal/arm/iq80310/current/include/hal_iq80310.h
--- a/packages/hal/arm/iq80310/current/include/hal_iq80310.h
+++ b/packages/hal/arm/iq80310/current/include/hal_iq80310.h
@@ -579,6 +579,22 @@
extern unsigned int _80312_EMISR; // Only valid for PEC ISR
#endif
+// ------------------------------------------------------------------------
+
+// Override the default MMU off code. This is intended
+// to be included in an inline asm statement.
+#define CYGARC_HAL_MMU_OFF(__paddr__) \
+ " mrc p15,0,r0,c1,c0,0\n" \
+ " bic r0,r0,#0x05\n" \
+ " b 99f\n" \
+ " .p2align 5\n" \
+ "99:\n" \
+ " mcr p15,0,r0,c1,c0,0\n" \
+ " mrc p15,0,r0,c2,c0,0\n" \
+ " mov r0,r0\n" \
+ " sub pc,pc,#4\n" \
+ " mov pc," #__paddr__ "\n"
+
/*---------------------------------------------------------------------------*/
/* end of hal_iq80310.h */
diff --git a/packages/hal/arm/iq80310/current/misc/redboot_RAM.ecm b/packages/hal/arm/iq80310/current/misc/redboot_RAM.ecm
--- a/packages/hal/arm/iq80310/current/misc/redboot_RAM.ecm
+++ b/packages/hal/arm/iq80310/current/misc/redboot_RAM.ecm
@@ -95,6 +95,14 @@ cdl_component CYGSEM_REDBOOT_BSP_SYSCALL
inferred_value 1
};
+cdl_option CYGSEM_REDBOOT_ARM_LINUX_BOOT {
+ inferred_value 1
+};
+
+cdl_option CYGHWR_REDBOOT_ARM_LINUX_EXEC_ADDRESS_DEFAULT {
+ inferred_value 0xA0008000
+};
+
cdl_option CYGBLD_ISO_STRTOK_R_HEADER {
inferred_value 1
};
diff --git a/packages/hal/arm/iq80310/current/misc/redboot_ROM.ecm b/packages/hal/arm/iq80310/current/misc/redboot_ROM.ecm
--- a/packages/hal/arm/iq80310/current/misc/redboot_ROM.ecm
+++ b/packages/hal/arm/iq80310/current/misc/redboot_ROM.ecm
@@ -99,6 +99,14 @@ cdl_component CYGSEM_REDBOOT_BSP_SYSCALL
inferred_value 1
};
+cdl_option CYGSEM_REDBOOT_ARM_LINUX_BOOT {
+ inferred_value 1
+};
+
+cdl_option CYGHWR_REDBOOT_ARM_LINUX_EXEC_ADDRESS_DEFAULT {
+ inferred_value 0xA0008000
+};
+
cdl_option CYGBLD_ISO_STRTOK_R_HEADER {
inferred_value 1
};
diff --git a/packages/hal/arm/xscale/iq80321/current/ChangeLog b/packages/hal/arm/xscale/iq80321/current/ChangeLog
--- a/packages/hal/arm/xscale/iq80321/current/ChangeLog
+++ b/packages/hal/arm/xscale/iq80321/current/ChangeLog
@@ -1,3 +1,10 @@
+2002-05-28 Mark Salter
+
+ * cdl/hal_arm_xscale_iq80321.cdl: Add HAL_PLATFORM_MACHINE_TYPE.
+
+ * misc/redboot_RAM.ecm: Changed Linux address.
+ * misc/redboot_ROM.ecm: Ditto.
+
2002-05-24 Jonathan Larmour
* src/hal_diag.c: Support dynamic getting and setting of baud rates.
diff --git a/packages/hal/arm/xscale/iq80321/current/cdl/hal_arm_xscale_iq80321.cdl b/packages/hal/arm/xscale/iq80321/current/cdl/hal_arm_xscale_iq80321.cdl
--- a/packages/hal/arm/xscale/iq80321/current/cdl/hal_arm_xscale_iq80321.cdl
+++ b/packages/hal/arm/xscale/iq80321/current/cdl/hal_arm_xscale_iq80321.cdl
@@ -73,6 +73,7 @@ cdl_package CYGPKG_HAL_ARM_XSCALE_IQ8032
puts $::cdl_header "#define HAL_PLATFORM_CPU \"XScale\""
puts $::cdl_header "#define HAL_PLATFORM_BOARD \"IQ80321\""
puts $::cdl_header "#define HAL_PLATFORM_EXTRA \"\""
+ puts $::cdl_header "#define HAL_PLATFORM_MACHINE_TYPE 169"
}
cdl_component CYG_HAL_STARTUP {
diff --git a/packages/hal/arm/xscale/iq80321/current/misc/redboot_RAM.ecm b/packages/hal/arm/xscale/iq80321/current/misc/redboot_RAM.ecm
--- a/packages/hal/arm/xscale/iq80321/current/misc/redboot_RAM.ecm
+++ b/packages/hal/arm/xscale/iq80321/current/misc/redboot_RAM.ecm
@@ -90,7 +90,7 @@ cdl_option CYGSEM_REDBOOT_ARM_LINUX_BOOT
};
cdl_option CYGHWR_REDBOOT_ARM_LINUX_EXEC_ADDRESS_DEFAULT {
- inferred_value 0xC0008000
+ inferred_value 0xA0008000
};
cdl_option CYGBLD_ISO_STRTOK_R_HEADER {
diff --git a/packages/hal/arm/xscale/iq80321/current/misc/redboot_ROM.ecm b/packages/hal/arm/xscale/iq80321/current/misc/redboot_ROM.ecm
--- a/packages/hal/arm/xscale/iq80321/current/misc/redboot_ROM.ecm
+++ b/packages/hal/arm/xscale/iq80321/current/misc/redboot_ROM.ecm
@@ -94,7 +94,7 @@ cdl_option CYGSEM_REDBOOT_ARM_LINUX_BOOT
};
cdl_option CYGHWR_REDBOOT_ARM_LINUX_EXEC_ADDRESS_DEFAULT {
- inferred_value 0xC0008000
+ inferred_value 0xA0008000
};
cdl_option CYGBLD_ISO_STRTOK_R_HEADER {
diff --git a/packages/hal/arm/xscale/verde/current/ChangeLog b/packages/hal/arm/xscale/verde/current/ChangeLog
--- a/packages/hal/arm/xscale/verde/current/ChangeLog
+++ b/packages/hal/arm/xscale/verde/current/ChangeLog
@@ -1,3 +1,10 @@
+2002-05-28 Mark Salter
+
+ * cdl/hal_arm_xscale_verde.cdl: Fix linux exec address test.
+
+ * include/hal_verde.h (CYGARC_HAL_MMU_OFF): XScale has
+ special requirements for turning off MMU.
+
2002-05-24 Jonathan Larmour
* cdl/hal_arm_xscale_verde.cdl: Remove implement of
diff --git a/packages/hal/arm/xscale/verde/current/cdl/hal_arm_xscale_verde.cdl b/packages/hal/arm/xscale/verde/current/cdl/hal_arm_xscale_verde.cdl
--- a/packages/hal/arm/xscale/verde/current/cdl/hal_arm_xscale_verde.cdl
+++ b/packages/hal/arm/xscale/verde/current/cdl/hal_arm_xscale_verde.cdl
@@ -127,7 +127,7 @@ cdl_package CYGPKG_HAL_ARM_XSCALE_VERDE
# RedBoot details
requires { CYGSEM_REDBOOT_ARM_LINUX_BOOT }
- requires { CYGHWR_REDBOOT_ARM_LINUX_EXEC_ADDRESS_DEFAULT == 0xc0008000 }
+ requires { CYGHWR_REDBOOT_ARM_LINUX_EXEC_ADDRESS_DEFAULT == 0xA0008000 }
define_proc {
puts $::cdl_header "#define CYGHWR_REDBOOT_ARM_TRAMPOLINE_ADDRESS 0x00001f00"
}
diff --git a/packages/hal/arm/xscale/verde/current/include/hal_verde.h b/packages/hal/arm/xscale/verde/current/include/hal_verde.h
--- a/packages/hal/arm/xscale/verde/current/include/hal_verde.h
+++ b/packages/hal/arm/xscale/verde/current/include/hal_verde.h
@@ -88,6 +88,19 @@ static inline void CPWAIT(void) {
}
#endif
+// Override the default MMU off code. This is intended
+// to be included in an inline asm statement.
+#define CYGARC_HAL_MMU_OFF(__paddr__) \
+ " mrc p15,0,r0,c1,c0,0\n" \
+ " bic r0,r0,#0x05\n" \
+ " b 99f\n" \
+ " .p2align 5\n" \
+ "99:\n" \
+ " mcr p15,0,r0,c1,c0,0\n" \
+ " mrc p15,0,r0,c2,c0,0\n" \
+ " mov r0,r0\n" \
+ " sub pc,pc,#4\n" \
+ " mov pc," #__paddr__ "\n"
#ifdef __ASSEMBLER__
diff --git a/packages/hal/powerpc/quicc/current/ChangeLog b/packages/hal/powerpc/quicc/current/ChangeLog
--- a/packages/hal/powerpc/quicc/current/ChangeLog
+++ b/packages/hal/powerpc/quicc/current/ChangeLog
@@ -1,3 +1,7 @@
+2002-05-30 Jesper Skov
+
+ * src/quicc_smc1.c: Fix warning.
+
2001-09-10 Jonathan Larmour
* cdl/hal_powerpc_quicc.cdl (CYGNUM_HAL_QUICC_DIAG_BAUD):
diff --git a/packages/hal/powerpc/quicc/current/src/quicc_smc1.c b/packages/hal/powerpc/quicc/current/src/quicc_smc1.c
--- a/packages/hal/powerpc/quicc/current/src/quicc_smc1.c
+++ b/packages/hal/powerpc/quicc/current/src/quicc_smc1.c
@@ -90,7 +90,7 @@
#define QUICC_SMCE_TX 0x02 // Tx interrupt
#define QUICC_SMCE_RX 0x01 // Rx interrupt
-static struct cp_bufdesc *next_rxbd;
+static volatile struct cp_bufdesc *next_rxbd;
/*
* Initialize SMC1 as a uart.
@@ -443,7 +443,7 @@ cyg_hal_plf_serial_isr(void *__ch_data,
CYG_ADDRWORD __vector, CYG_ADDRWORD __data)
{
EPPC *eppc = (EPPC*) __ch_data;
- struct cp_bufdesc *bd;
+ volatile struct cp_bufdesc *bd;
char ch;
int res = 0;
CYGARC_HAL_SAVE_GP();
diff --git a/packages/hal/powerpc/viper/current/ChangeLog b/packages/hal/powerpc/viper/current/ChangeLog
--- a/packages/hal/powerpc/viper/current/ChangeLog
+++ b/packages/hal/powerpc/viper/current/ChangeLog
@@ -1,3 +1,7 @@
+2002-05-30 John Dallaway
+
+ * include/pkgconf/mlt*: Regenerated memory layout files.
+
2002-04-30 Nick Garnett
* src/viper.S: Changed boot ROM wait states from 4 to 7.
diff --git a/packages/hal/powerpc/viper/current/include/pkgconf/mlt_powerpc_viper_ram.h b/packages/hal/powerpc/viper/current/include/pkgconf/mlt_powerpc_viper_ram.h
--- a/packages/hal/powerpc/viper/current/include/pkgconf/mlt_powerpc_viper_ram.h
+++ b/packages/hal/powerpc/viper/current/include/pkgconf/mlt_powerpc_viper_ram.h
@@ -1,37 +1,37 @@
-// eCos memory layout - Fri Oct 20 10:35:23 2000
-
-// This is a generated file - do not edit
-
-#ifndef __ASSEMBLER__
-#include
-#include
-
-#endif
-#define CYGMEM_REGION_ram (0)
-#define CYGMEM_REGION_ram_SIZE (0x0800000)
-#define CYGMEM_REGION_ram_ATTR (CYGMEM_REGION_ATTR_R | CYGMEM_REGION_ATTR_W)
-#ifndef __ASSEMBLER__
-extern char CYG_LABEL_NAME (__reserved_vectors) [];
-#endif
-#define CYGMEM_SECTION_reserved_vectors (CYG_LABEL_NAME (__reserved_vectors))
-#define CYGMEM_SECTION_reserved_vectors_SIZE (0x3000)
-#ifndef __ASSEMBLER__
-extern char CYG_LABEL_NAME (__reserved_vsr_table) [];
-#endif
-#define CYGMEM_SECTION_reserved_vsr_table (CYG_LABEL_NAME (__reserved_vsr_table))
-#define CYGMEM_SECTION_reserved_vsr_table_SIZE (0x200)
-#ifndef __ASSEMBLER__
-extern char CYG_LABEL_NAME (__reserved_virtual_table) [];
-#endif
-#define CYGMEM_SECTION_reserved_virtual_table (CYG_LABEL_NAME (__reserved_virtual_table))
-#define CYGMEM_SECTION_reserved_virtual_table_SIZE (0x100)
-#ifndef __ASSEMBLER__
-extern char CYG_LABEL_NAME (__reserved_for_rom) [];
-#endif
-#define CYGMEM_SECTION_reserved_for_rom (CYG_LABEL_NAME (__reserved_for_rom))
-#define CYGMEM_SECTION_reserved_for_rom_SIZE (0x3cd00)
-#ifndef __ASSEMBLER__
-extern char CYG_LABEL_NAME (__heap1) [];
-#endif
-#define CYGMEM_SECTION_heap1 (CYG_LABEL_NAME (__heap1))
-#define CYGMEM_SECTION_heap1_SIZE (0x800000 - (size_t) CYG_LABEL_NAME (__heap1))
+// eCos memory layout - Thu May 30 10:27:39 2002
+
+// This is a generated file - do not edit
+
+#ifndef __ASSEMBLER__
+#include
+#include
+
+#endif
+#define CYGMEM_REGION_ram (0)
+#define CYGMEM_REGION_ram_SIZE (0x800000)
+#define CYGMEM_REGION_ram_ATTR (CYGMEM_REGION_ATTR_R | CYGMEM_REGION_ATTR_W)
+#ifndef __ASSEMBLER__
+extern char CYG_LABEL_NAME (__reserved_vectors) [];
+#endif
+#define CYGMEM_SECTION_reserved_vectors (CYG_LABEL_NAME (__reserved_vectors))
+#define CYGMEM_SECTION_reserved_vectors_SIZE (0x3000)
+#ifndef __ASSEMBLER__
+extern char CYG_LABEL_NAME (__reserved_vsr_table) [];
+#endif
+#define CYGMEM_SECTION_reserved_vsr_table (CYG_LABEL_NAME (__reserved_vsr_table))
+#define CYGMEM_SECTION_reserved_vsr_table_SIZE (0x200)
+#ifndef __ASSEMBLER__
+extern char CYG_LABEL_NAME (__reserved_virtual_table) [];
+#endif
+#define CYGMEM_SECTION_reserved_virtual_table (CYG_LABEL_NAME (__reserved_virtual_table))
+#define CYGMEM_SECTION_reserved_virtual_table_SIZE (0x100)
+#ifndef __ASSEMBLER__
+extern char CYG_LABEL_NAME (__reserved_for_rom) [];
+#endif
+#define CYGMEM_SECTION_reserved_for_rom (CYG_LABEL_NAME (__reserved_for_rom))
+#define CYGMEM_SECTION_reserved_for_rom_SIZE (0x3cd00)
+#ifndef __ASSEMBLER__
+extern char CYG_LABEL_NAME (__heap1) [];
+#endif
+#define CYGMEM_SECTION_heap1 (CYG_LABEL_NAME (__heap1))
+#define CYGMEM_SECTION_heap1_SIZE (0x800000 - (size_t) CYG_LABEL_NAME (__heap1))
diff --git a/packages/hal/powerpc/viper/current/include/pkgconf/mlt_powerpc_viper_ram.ldi b/packages/hal/powerpc/viper/current/include/pkgconf/mlt_powerpc_viper_ram.ldi
--- a/packages/hal/powerpc/viper/current/include/pkgconf/mlt_powerpc_viper_ram.ldi
+++ b/packages/hal/powerpc/viper/current/include/pkgconf/mlt_powerpc_viper_ram.ldi
@@ -1,31 +1,31 @@
-// eCos memory layout - Fri Oct 20 10:35:23 2000
-
-// This is a generated file - do not edit
-
-#include
-
-MEMORY
-{
- ram : ORIGIN = 0, LENGTH = 0x0800000
-}
-
-SECTIONS
-{
- SECTIONS_BEGIN
- CYG_LABEL_DEFN(__reserved_vectors) = 0; . = CYG_LABEL_DEFN(__reserved_vectors) + 0x3000;
- CYG_LABEL_DEFN(__reserved_vsr_table) = ALIGN (0x10); . = CYG_LABEL_DEFN(__reserved_vsr_table) + 0x200;
- CYG_LABEL_DEFN(__reserved_virtual_table) = ALIGN (0x10); . = CYG_LABEL_DEFN(__reserved_virtual_table) + 0x100;
- CYG_LABEL_DEFN(__reserved_for_rom) = ALIGN (0x10); . = CYG_LABEL_DEFN(__reserved_for_rom) + 0x3cd00;
- SECTION_vectors (ram, ALIGN (0x10), LMA_EQ_VMA)
- SECTION_text (ram, ALIGN (0x4), LMA_EQ_VMA)
- SECTION_fini (ram, ALIGN (0x4), LMA_EQ_VMA)
- SECTION_rodata1 (ram, ALIGN (0x8), LMA_EQ_VMA)
- SECTION_rodata (ram, ALIGN (0x8), LMA_EQ_VMA)
- SECTION_fixup (ram, ALIGN (0x4), LMA_EQ_VMA)
- SECTION_gcc_except_table (ram, ALIGN (0x1), LMA_EQ_VMA)
- SECTION_data (ram, ALIGN (0x8), LMA_EQ_VMA)
- SECTION_sbss (ram, ALIGN (0x4), LMA_EQ_VMA)
- SECTION_bss (ram, ALIGN (0x10), LMA_EQ_VMA)
- CYG_LABEL_DEFN(__heap1) = ALIGN (0x8);
- SECTIONS_END
-}
+// eCos memory layout - Thu May 30 10:27:39 2002
+
+// This is a generated file - do not edit
+
+#include
+
+MEMORY
+{
+ ram : ORIGIN = 0, LENGTH = 0x800000
+}
+
+SECTIONS
+{
+ SECTIONS_BEGIN
+ CYG_LABEL_DEFN(__reserved_vectors) = 0; . = CYG_LABEL_DEFN(__reserved_vectors) + 0x3000;
+ CYG_LABEL_DEFN(__reserved_vsr_table) = ALIGN (0x10); . = CYG_LABEL_DEFN(__reserved_vsr_table) + 0x200;
+ CYG_LABEL_DEFN(__reserved_virtual_table) = ALIGN (0x10); . = CYG_LABEL_DEFN(__reserved_virtual_table) + 0x100;
+ CYG_LABEL_DEFN(__reserved_for_rom) = ALIGN (0x10); . = CYG_LABEL_DEFN(__reserved_for_rom) + 0x3cd00;
+ SECTION_vectors (ram, ALIGN (0x10), LMA_EQ_VMA)
+ SECTION_text (ram, ALIGN (0x4), LMA_EQ_VMA)
+ SECTION_fini (ram, ALIGN (0x4), LMA_EQ_VMA)
+ SECTION_rodata1 (ram, ALIGN (0x8), LMA_EQ_VMA)
+ SECTION_rodata (ram, ALIGN (0x8), LMA_EQ_VMA)
+ SECTION_fixup (ram, ALIGN (0x4), LMA_EQ_VMA)
+ SECTION_gcc_except_table (ram, ALIGN (0x1), LMA_EQ_VMA)
+ SECTION_data (ram, ALIGN (0x8), LMA_EQ_VMA)
+ SECTION_sbss (ram, ALIGN (0x4), LMA_EQ_VMA)
+ SECTION_bss (ram, ALIGN (0x10), LMA_EQ_VMA)
+ CYG_LABEL_DEFN(__heap1) = ALIGN (0x8);
+ SECTIONS_END
+}
diff --git a/packages/hal/powerpc/viper/current/include/pkgconf/mlt_powerpc_viper_ram.mlt b/packages/hal/powerpc/viper/current/include/pkgconf/mlt_powerpc_viper_ram.mlt
--- a/packages/hal/powerpc/viper/current/include/pkgconf/mlt_powerpc_viper_ram.mlt
+++ b/packages/hal/powerpc/viper/current/include/pkgconf/mlt_powerpc_viper_ram.mlt
@@ -1,17 +1,17 @@
-version 0
-region ram 0 800000 0 !
-section reserved_vectors 3000 1 0 0 1 1 1 1 0 0 reserved_vsr_table reserved_vsr_table !
-section reserved_vsr_table 200 10 0 0 0 1 0 1 reserved_virtual_table reserved_virtual_table !
-section reserved_virtual_table 100 10 0 0 0 1 0 1 reserved_for_rom reserved_for_rom !
-section reserved_for_rom 3cd00 10 0 0 0 1 0 1 vectors vectors !
-section vectors 0 10 0 1 0 1 0 1 text text !
-section text 0 4 0 1 0 1 0 1 fini fini !
-section fini 0 4 0 1 0 1 0 1 rodata1 rodata1 !
-section rodata1 0 8 0 1 0 1 0 1 rodata rodata !
-section rodata 0 8 0 1 0 1 0 1 fixup fixup !
-section fixup 0 4 0 1 0 1 0 1 gcc_except_table gcc_except_table !
-section gcc_except_table 0 1 0 1 0 1 0 1 data data !
-section data 0 8 0 1 0 1 0 1 sbss sbss !
-section sbss 0 4 0 1 0 1 0 1 bss bss !
-section bss 0 10 0 1 0 1 0 1 heap1 heap1 !
-section heap1 0 8 0 0 0 0 0 0 !
+version 0
+region ram 0 800000 0 !
+section reserved_vectors 3000 1 0 0 1 1 1 1 0 0 reserved_vsr_table reserved_vsr_table !
+section reserved_vsr_table 200 10 0 0 0 1 0 1 reserved_virtual_table reserved_virtual_table !
+section reserved_virtual_table 100 10 0 0 0 1 0 1 reserved_for_rom reserved_for_rom !
+section reserved_for_rom 3cd00 10 0 0 0 1 0 1 vectors vectors !
+section vectors 0 10 0 1 0 1 0 1 text text !
+section text 0 4 0 1 0 1 0 1 fini fini !
+section fini 0 4 0 1 0 1 0 1 rodata1 rodata1 !
+section rodata1 0 8 0 1 0 1 0 1 rodata rodata !
+section rodata 0 8 0 1 0 1 0 1 fixup fixup !
+section fixup 0 4 0 1 0 1 0 1 gcc_except_table gcc_except_table !
+section gcc_except_table 0 1 0 1 0 1 0 1 data data !
+section data 0 8 0 1 0 1 0 1 sbss sbss !
+section sbss 0 4 0 1 0 1 0 1 bss bss !
+section bss 0 10 0 1 0 1 0 1 heap1 heap1 !
+section heap1 0 8 0 0 0 0 0 0 !
diff --git a/packages/hal/powerpc/viper/current/include/pkgconf/mlt_powerpc_viper_rom.h b/packages/hal/powerpc/viper/current/include/pkgconf/mlt_powerpc_viper_rom.h
--- a/packages/hal/powerpc/viper/current/include/pkgconf/mlt_powerpc_viper_rom.h
+++ b/packages/hal/powerpc/viper/current/include/pkgconf/mlt_powerpc_viper_rom.h
@@ -1,35 +1,35 @@
-// eCos memory layout - Fri Oct 20 10:35:48 2000
-
-// This is a generated file - do not edit
-
-#ifndef __ASSEMBLER__
-#include
-#include
-
-#endif
-#define CYGMEM_REGION_ram (0)
-#define CYGMEM_REGION_ram_SIZE (0x800000)
-#define CYGMEM_REGION_ram_ATTR (CYGMEM_REGION_ATTR_R | CYGMEM_REGION_ATTR_W)
-#define CYGMEM_REGION_rom (0xfe000000)
-#define CYGMEM_REGION_rom_SIZE (0x800000)
-#define CYGMEM_REGION_rom_ATTR (CYGMEM_REGION_ATTR_R)
-#ifndef __ASSEMBLER__
-extern char CYG_LABEL_NAME (__reserved_vectors) [];
-#endif
-#define CYGMEM_SECTION_reserved_vectors (CYG_LABEL_NAME (__reserved_vectors))
-#define CYGMEM_SECTION_reserved_vectors_SIZE (0x3000)
-#ifndef __ASSEMBLER__
-extern char CYG_LABEL_NAME (__reserved_vsr_table) [];
-#endif
-#define CYGMEM_SECTION_reserved_vsr_table (CYG_LABEL_NAME (__reserved_vsr_table))
-#define CYGMEM_SECTION_reserved_vsr_table_SIZE (0x200)
-#ifndef __ASSEMBLER__
-extern char CYG_LABEL_NAME (__reserved_virtual_table) [];
-#endif
-#define CYGMEM_SECTION_reserved_virtual_table (CYG_LABEL_NAME (__reserved_virtual_table))
-#define CYGMEM_SECTION_reserved_virtual_table_SIZE (0x100)
-#ifndef __ASSEMBLER__
-extern char CYG_LABEL_NAME (__heap1) [];
-#endif
-#define CYGMEM_SECTION_heap1 (CYG_LABEL_NAME (__heap1))
-#define CYGMEM_SECTION_heap1_SIZE (0x800000 - (size_t) CYG_LABEL_NAME (__heap1))
+// eCos memory layout - Thu May 30 10:21:41 2002
+
+// This is a generated file - do not edit
+
+#ifndef __ASSEMBLER__
+#include
+#include
+
+#endif
+#define CYGMEM_REGION_ram (0)
+#define CYGMEM_REGION_ram_SIZE (0x800000)
+#define CYGMEM_REGION_ram_ATTR (CYGMEM_REGION_ATTR_R | CYGMEM_REGION_ATTR_W)
+#define CYGMEM_REGION_rom (0xfe000000)
+#define CYGMEM_REGION_rom_SIZE (0x800000)
+#define CYGMEM_REGION_rom_ATTR (CYGMEM_REGION_ATTR_R)
+#ifndef __ASSEMBLER__
+extern char CYG_LABEL_NAME (__reserved_vectors) [];
+#endif
+#define CYGMEM_SECTION_reserved_vectors (CYG_LABEL_NAME (__reserved_vectors))
+#define CYGMEM_SECTION_reserved_vectors_SIZE (0x3000)
+#ifndef __ASSEMBLER__
+extern char CYG_LABEL_NAME (__reserved_vsr_table) [];
+#endif
+#define CYGMEM_SECTION_reserved_vsr_table (CYG_LABEL_NAME (__reserved_vsr_table))
+#define CYGMEM_SECTION_reserved_vsr_table_SIZE (0x200)
+#ifndef __ASSEMBLER__
+extern char CYG_LABEL_NAME (__reserved_virtual_table) [];
+#endif
+#define CYGMEM_SECTION_reserved_virtual_table (CYG_LABEL_NAME (__reserved_virtual_table))
+#define CYGMEM_SECTION_reserved_virtual_table_SIZE (0x100)
+#ifndef __ASSEMBLER__
+extern char CYG_LABEL_NAME (__heap1) [];
+#endif
+#define CYGMEM_SECTION_heap1 (CYG_LABEL_NAME (__heap1))
+#define CYGMEM_SECTION_heap1_SIZE (0x800000 - (size_t) CYG_LABEL_NAME (__heap1))
diff --git a/packages/hal/powerpc/viper/current/include/pkgconf/mlt_powerpc_viper_rom.ldi b/packages/hal/powerpc/viper/current/include/pkgconf/mlt_powerpc_viper_rom.ldi
--- a/packages/hal/powerpc/viper/current/include/pkgconf/mlt_powerpc_viper_rom.ldi
+++ b/packages/hal/powerpc/viper/current/include/pkgconf/mlt_powerpc_viper_rom.ldi
@@ -1,4 +1,4 @@
-// eCos memory layout - Fri Oct 20 10:35:48 2000
+// eCos memory layout - Thu May 30 10:21:41 2002
// This is a generated file - do not edit
diff --git a/packages/hal/powerpc/viper/current/include/pkgconf/mlt_powerpc_viper_rom.mlt b/packages/hal/powerpc/viper/current/include/pkgconf/mlt_powerpc_viper_rom.mlt
--- a/packages/hal/powerpc/viper/current/include/pkgconf/mlt_powerpc_viper_rom.mlt
+++ b/packages/hal/powerpc/viper/current/include/pkgconf/mlt_powerpc_viper_rom.mlt
@@ -1,17 +1,17 @@
-version 0
-region ram 0 800000 0 !
-region rom fe000000 800000 1 !
-section reserved_vectors 3000 1 0 0 1 1 1 1 0 0 reserved_vsr_table reserved_vsr_table !
-section reserved_vsr_table 200 1 0 0 0 1 0 1 reserved_virtual_table reserved_virtual_table !
-section reserved_virtual_table 100 1 0 0 0 1 0 0 data !
-section data 0 10 1 1 0 1 0 0 sbss !
-section sbss 0 4 0 1 0 1 0 1 bss bss !
-section bss 0 10 0 1 0 1 0 1 heap1 heap1 !
-section heap1 0 8 0 0 0 0 0 0 !
-section vectors 0 1 0 1 1 1 1 1 fe000000 fe000000 text text !
-section text 0 4 0 1 0 1 0 1 fini fini !
-section fini 0 4 0 1 0 1 0 1 rodata1 rodata1 !
-section rodata1 0 8 0 1 0 1 0 1 rodata rodata !
-section rodata 0 8 0 1 0 1 0 1 fixup fixup !
-section fixup 0 4 0 1 0 1 0 1 gcc_except_table gcc_except_table !
-section gcc_except_table 0 1 0 1 0 0 0 1 data !
+version 0
+region ram 0 800000 0 !
+region rom fe000000 800000 1 !
+section reserved_vectors 3000 1 0 0 1 1 1 1 0 0 reserved_vsr_table reserved_vsr_table !
+section reserved_vsr_table 200 1 0 0 0 1 0 1 reserved_virtual_table reserved_virtual_table !
+section reserved_virtual_table 100 1 0 0 0 1 0 0 data !
+section data 0 10 1 1 0 1 0 0 sbss !
+section sbss 0 4 0 1 0 1 0 1 bss bss !
+section bss 0 10 0 1 0 1 0 1 heap1 heap1 !
+section heap1 0 8 0 0 0 0 0 0 !
+section vectors 0 1 0 1 1 1 1 1 fe000000 fe000000 text text !
+section text 0 4 0 1 0 1 0 1 fini fini !
+section fini 0 4 0 1 0 1 0 1 rodata1 rodata1 !
+section rodata1 0 8 0 1 0 1 0 1 rodata rodata !
+section rodata 0 8 0 1 0 1 0 1 fixup fixup !
+section fixup 0 4 0 1 0 1 0 1 gcc_except_table gcc_except_table !
+section gcc_except_table 0 1 0 1 0 0 0 1 data !
diff --git a/packages/hal/powerpc/viper/current/include/pkgconf/mlt_powerpc_viper_romram.h b/packages/hal/powerpc/viper/current/include/pkgconf/mlt_powerpc_viper_romram.h
--- a/packages/hal/powerpc/viper/current/include/pkgconf/mlt_powerpc_viper_romram.h
+++ b/packages/hal/powerpc/viper/current/include/pkgconf/mlt_powerpc_viper_romram.h
@@ -1,32 +1,17 @@
-// eCos memory layout - Fri Oct 20 10:35:23 2000
-
-// This is a generated file - do not edit
-
-#ifndef __ASSEMBLER__
-#include
-#include
-
-#endif
-#define CYGMEM_REGION_ram (0)
-#define CYGMEM_REGION_ram_SIZE (0x0800000)
-#define CYGMEM_REGION_ram_ATTR (CYGMEM_REGION_ATTR_R | CYGMEM_REGION_ATTR_W)
-#ifndef __ASSEMBLER__
-extern char CYG_LABEL_NAME (__reserved_vectors) [];
-#endif
-#define CYGMEM_SECTION_reserved_vectors (CYG_LABEL_NAME (__reserved_vectors))
-#define CYGMEM_SECTION_reserved_vectors_SIZE (0x3000)
-#ifndef __ASSEMBLER__
-extern char CYG_LABEL_NAME (__reserved_vsr_table) [];
-#endif
-#define CYGMEM_SECTION_reserved_vsr_table (CYG_LABEL_NAME (__reserved_vsr_table))
-#define CYGMEM_SECTION_reserved_vsr_table_SIZE (0x200)
-#ifndef __ASSEMBLER__
-extern char CYG_LABEL_NAME (__reserved_virtual_table) [];
-#endif
-#define CYGMEM_SECTION_reserved_virtual_table (CYG_LABEL_NAME (__reserved_virtual_table))
-#define CYGMEM_SECTION_reserved_virtual_table_SIZE (0x100)
-#ifndef __ASSEMBLER__
-extern char CYG_LABEL_NAME (__heap1) [];
-#endif
-#define CYGMEM_SECTION_heap1 (CYG_LABEL_NAME (__heap1))
-#define CYGMEM_SECTION_heap1_SIZE (0x800000 - (size_t) CYG_LABEL_NAME (__heap1))
+// eCos memory layout - Thu May 30 10:05:45 2002
+
+// This is a generated file - do not edit
+
+#ifndef __ASSEMBLER__
+#include
+#include
+
+#endif
+#define CYGMEM_REGION_ram (0)
+#define CYGMEM_REGION_ram_SIZE (0x800000)
+#define CYGMEM_REGION_ram_ATTR (CYGMEM_REGION_ATTR_R | CYGMEM_REGION_ATTR_W)
+#ifndef __ASSEMBLER__
+extern char CYG_LABEL_NAME (__heap1) [];
+#endif
+#define CYGMEM_SECTION_heap1 (CYG_LABEL_NAME (__heap1))
+#define CYGMEM_SECTION_heap1_SIZE (0x800000 - (size_t) CYG_LABEL_NAME (__heap1))
diff --git a/packages/hal/powerpc/viper/current/include/pkgconf/mlt_powerpc_viper_romram.ldi b/packages/hal/powerpc/viper/current/include/pkgconf/mlt_powerpc_viper_romram.ldi
--- a/packages/hal/powerpc/viper/current/include/pkgconf/mlt_powerpc_viper_romram.ldi
+++ b/packages/hal/powerpc/viper/current/include/pkgconf/mlt_powerpc_viper_romram.ldi
@@ -1,30 +1,27 @@
-// eCos memory layout - Fri Oct 20 10:35:23 2000
-
-// This is a generated file - do not edit
-
-#include
-
-MEMORY
-{
- ram : ORIGIN = 0, LENGTH = 0x0800000
-}
-
-SECTIONS
-{
- SECTIONS_BEGIN
- SECTION_vectors (ram, 0x000000, LMA_EQ_VMA)
- CYG_LABEL_DEFN(__reserved_vectors) = 0; . = CYG_LABEL_DEFN(__reserved_vectors) + 0x3000;
- CYG_LABEL_DEFN(__reserved_vsr_table) = ALIGN (0x10); . = CYG_LABEL_DEFN(__reserved_vsr_table) + 0x200;
- CYG_LABEL_DEFN(__reserved_virtual_table) = ALIGN (0x10); . = CYG_LABEL_DEFN(__reserved_virtual_table) + 0x100;
- SECTION_text (ram, 0x3400, LMA_EQ_VMA)
- SECTION_fini (ram, ALIGN (0x4), LMA_EQ_VMA)
- SECTION_rodata1 (ram, ALIGN (0x8), LMA_EQ_VMA)
- SECTION_rodata (ram, ALIGN (0x8), LMA_EQ_VMA)
- SECTION_fixup (ram, ALIGN (0x4), LMA_EQ_VMA)
- SECTION_gcc_except_table (ram, ALIGN (0x1), LMA_EQ_VMA)
- SECTION_data (ram, ALIGN (0x8), LMA_EQ_VMA)
- SECTION_sbss (ram, ALIGN (0x4), LMA_EQ_VMA)
- SECTION_bss (ram, ALIGN (0x10), LMA_EQ_VMA)
- CYG_LABEL_DEFN(__heap1) = ALIGN (0x8);
- SECTIONS_END
-}
+// eCos memory layout - Thu May 30 10:05:45 2002
+
+// This is a generated file - do not edit
+
+#include
+
+MEMORY
+{
+ ram : ORIGIN = 0, LENGTH = 0x800000
+}
+
+SECTIONS
+{
+ SECTIONS_BEGIN
+ SECTION_vectors (ram, 0, LMA_EQ_VMA)
+ SECTION_text (ram, 0x3400, LMA_EQ_VMA)
+ SECTION_fini (ram, ALIGN (0x4), LMA_EQ_VMA)
+ SECTION_rodata1 (ram, ALIGN (0x8), LMA_EQ_VMA)
+ SECTION_rodata (ram, ALIGN (0x8), LMA_EQ_VMA)
+ SECTION_fixup (ram, ALIGN (0x4), LMA_EQ_VMA)
+ SECTION_gcc_except_table (ram, ALIGN (0x1), LMA_EQ_VMA)
+ SECTION_data (ram, ALIGN (0x8), LMA_EQ_VMA)
+ SECTION_sbss (ram, ALIGN (0x4), LMA_EQ_VMA)
+ SECTION_bss (ram, ALIGN (0x10), LMA_EQ_VMA)
+ CYG_LABEL_DEFN(__heap1) = ALIGN (0x8);
+ SECTIONS_END
+}
diff --git a/packages/hal/powerpc/viper/current/include/pkgconf/mlt_powerpc_viper_romram.mlt b/packages/hal/powerpc/viper/current/include/pkgconf/mlt_powerpc_viper_romram.mlt
--- a/packages/hal/powerpc/viper/current/include/pkgconf/mlt_powerpc_viper_romram.mlt
+++ b/packages/hal/powerpc/viper/current/include/pkgconf/mlt_powerpc_viper_romram.mlt
@@ -1,17 +1,13 @@
-version 0
-region ram 0 800000 0 !
-section reserved_vectors 3000 1 0 0 1 1 1 1 0 0 reserved_vsr_table reserved_vsr_table !
-section reserved_vsr_table 200 10 0 0 0 1 0 1 reserved_virtual_table reserved_virtual_table !
-section reserved_virtual_table 100 10 0 0 0 1 0 1 reserved_for_rom reserved_for_rom !
-section reserved_for_rom 1cd00 10 0 0 0 1 0 1 vectors vectors !
-section vectors 0 10 0 1 0 1 0 1 text text !
-section text 0 4 0 1 0 1 0 1 fini fini !
-section fini 0 4 0 1 0 1 0 1 rodata1 rodata1 !
-section rodata1 0 8 0 1 0 1 0 1 rodata rodata !
-section rodata 0 8 0 1 0 1 0 1 fixup fixup !
-section fixup 0 4 0 1 0 1 0 1 gcc_except_table gcc_except_table !
-section gcc_except_table 0 1 0 1 0 1 0 1 data data !
-section data 0 8 0 1 0 1 0 1 sbss sbss !
-section sbss 0 4 0 1 0 1 0 1 bss bss !
-section bss 0 10 0 1 0 1 0 1 heap1 heap1 !
-section heap1 0 8 0 0 0 0 0 0 !
+version 0
+region ram 0 800000 0 !
+section vectors 0 1 0 1 1 0 1 0 0 0 !
+section text 0 1 0 1 1 1 1 1 3400 3400 fini fini !
+section fini 0 4 0 1 0 1 0 1 rodata1 rodata1 !
+section rodata1 0 8 0 1 0 1 0 1 rodata rodata !
+section rodata 0 8 0 1 0 1 0 1 fixup fixup !
+section fixup 0 4 0 1 0 1 0 1 gcc_except_table gcc_except_table !
+section gcc_except_table 0 1 0 1 0 1 0 1 data data !
+section data 0 8 0 1 0 1 0 1 sbss sbss !
+section sbss 0 4 0 1 0 1 0 1 bss bss !
+section bss 0 10 0 1 0 1 0 1 heap1 heap1 !
+section heap1 0 8 0 0 0 0 0 0 !
diff --git a/packages/io/eth/current/ChangeLog b/packages/io/eth/current/ChangeLog
--- a/packages/io/eth/current/ChangeLog
+++ b/packages/io/eth/current/ChangeLog
@@ -1,3 +1,8 @@
+2002-05-30 Jonathan Larmour
+
+ * cdl/eth_drivers.cdl: Provide CYGINT_IO_ETH_INT_SUPPORT_REQUIRED
+ interface to indicate if interrupt support is required.
+
2002-05-28 Jonathan Larmour
* src/lwip/lw.diff: Remove. Obsolete.
diff --git a/packages/io/eth/current/cdl/eth_drivers.cdl b/packages/io/eth/current/cdl/eth_drivers.cdl
--- a/packages/io/eth/current/cdl/eth_drivers.cdl
+++ b/packages/io/eth/current/cdl/eth_drivers.cdl
@@ -91,6 +91,7 @@ cdl_package CYGPKG_IO_ETH_DRIVERS {
flavor bool
active_if CYGPKG_NET
requires CYGINT_ISO_STRING_STRFUNCS
+ implements CYGINT_IO_ETH_INT_SUPPORT_REQUIRED
default_value 1
compile net/eth_drv.c
@@ -201,9 +202,18 @@ cdl_package CYGPKG_IO_ETH_DRIVERS {
requires !CYGPKG_NET
active_if CYGPKG_NET_LWIP
default_value 1
+ implements CYGINT_IO_ETH_INT_SUPPORT_REQUIRED
compile lwip/eth_drv.c
}
+ cdl_interface CYGINT_IO_ETH_INT_SUPPORT_REQUIRED {
+ display "Interrupt support required"
+ flavor booldata
+ description "This interface is used to indicate to the low
+ level device drivers that interrupt driven operation
+ is required by higher layers."
+ }
+
cdl_component CYGPKG_IO_ETH_DRIVERS_OPTIONS {
display "Common ethernet support build options"
flavor none
diff --git a/packages/net/common/current/ChangeLog b/packages/net/common/current/ChangeLog
--- a/packages/net/common/current/ChangeLog
+++ b/packages/net/common/current/ChangeLog
@@ -1,3 +1,7 @@
+2002-05-30 Jesper Skov
+
+ * tests/flood.c (floodsend): Fixed warning.
+
2002-05-28 Jonathan Larmour
* src/dhcp_prot.c (do_dhcp): xmit2 need not be static.
diff --git a/packages/net/common/current/src/inet_pton.c b/packages/net/common/current/src/inet_pton.c
--- a/packages/net/common/current/src/inet_pton.c
+++ b/packages/net/common/current/src/inet_pton.c
@@ -39,7 +39,7 @@
*/
//#if defined(LIBC_SCCS) && !defined(lint)
-//static char rcsid[] = "$Id: inet_pton.c,v 1.4 2002/03/06 15:20:46 gthomas Exp $";
+//static char rcsid[] = "$Id: inet_pton.c,v 1.3 2002/02/20 17:39:39 gthomas Exp $";
//#endif /* LIBC_SCCS and not lint */
//#ifdef HAVE_CONFIG_H
diff --git a/packages/net/common/current/tests/bridge.c b/packages/net/common/current/tests/bridge.c
--- a/packages/net/common/current/tests/bridge.c
+++ b/packages/net/common/current/tests/bridge.c
@@ -67,6 +67,7 @@
#include
#include
#include
+#ifdef CYGPKG_NET_BRIDGE
#include
#include
#include
@@ -983,4 +984,11 @@ cyg_user_start(void) {
printf("cyg_user_start done\n");
}
+#else // CYGPKG_NET_BRIDGE
+void
+cyg_user_start(void) {
+ printf("No bridge support available\n");
+}
+#endif
+
diff --git a/packages/net/common/current/tests/flood.c b/packages/net/common/current/tests/flood.c
--- a/packages/net/common/current/tests/flood.c
+++ b/packages/net/common/current/tests/flood.c
@@ -266,10 +266,14 @@ pingsend( int seq, struct sockaddr_in *h
static void
floodsend(cyg_addrword_t param)
{
- unsigned char pkt0[MAX_PACKET], pkt1[MAX_PACKET];
-
+#ifdef CYGHWR_NET_DRIVER_ETH0
+ unsigned char pkt0[MAX_PACKET];
struct icmp *icmp0 = (struct icmp *)pkt0;
+#endif
+#ifdef CYGHWR_NET_DRIVER_ETH1
+ unsigned char pkt1[MAX_PACKET];
struct icmp *icmp1 = (struct icmp *)pkt1;
+#endif
int icmp_len = 64;
int seq;
diff --git a/packages/net/common/current/tests/tcp_echo.c b/packages/net/common/current/tests/tcp_echo.c
--- a/packages/net/common/current/tests/tcp_echo.c
+++ b/packages/net/common/current/tests/tcp_echo.c
@@ -65,9 +65,13 @@
// Network throughput test code
-#include
+#include
-#include
+static __inline__ int
+max(int m, int n)
+{
+ return m > n ? m : n;
+}
#define SOURCE_PORT 9990
#define SINK_PORT 9991
diff --git a/packages/net/ns/dns/current/ChangeLog b/packages/net/ns/dns/current/ChangeLog
--- a/packages/net/ns/dns/current/ChangeLog
+++ b/packages/net/ns/dns/current/ChangeLog
@@ -1,3 +1,7 @@
+2002-05-30 Jesper Skov
+
+ * src/dns.c: fixed index->ptdindex oversight.
+
2002-05-24 Jonathan Larmour
* src/dns.c (free_hent): Actually free hent itself!
diff --git a/packages/net/ns/dns/current/src/dns.c b/packages/net/ns/dns/current/src/dns.c
--- a/packages/net/ns/dns/current/src/dns.c
+++ b/packages/net/ns/dns/current/src/dns.c
@@ -149,7 +149,7 @@ static void
thread_destructor(CYG_ADDRWORD data)
{
struct hostent *hent;
- hent = (struct hostent *)cyg_thread_get_data(index);
+ hent = (struct hostent *)cyg_thread_get_data(ptdindex);
if (hent)
free_hent(hent);
return;
@@ -163,7 +163,7 @@ store_hent(struct hostent *hent)
// Prevent memory leaks by setting a destructor to be
// called on thread exit to free per-thread data.
cyg_thread_add_destructor( &thread_destructor, 0 );
- cyg_thread_set_data(index, (CYG_ADDRWORD)hent);
+ cyg_thread_set_data(ptdindex, (CYG_ADDRWORD)hent);
}
/* If there is an answer to an old query, free the memory it uses. */
@@ -171,10 +171,10 @@ static void
free_stored_hent(void)
{
struct hostent *hent;
- hent = (struct hostent *)cyg_thread_get_data(index);
+ hent = (struct hostent *)cyg_thread_get_data(ptdindex);
if (hent) {
free_hent(hent);
- cyg_thread_set_data(index, (CYG_ADDRWORD)NULL);
+ cyg_thread_set_data(ptdindex, (CYG_ADDRWORD)NULL);
cyg_thread_rem_destructor( &thread_destructor, 0 );
}
}
diff --git a/packages/redboot/current/doc/redboot_cmds.sgml b/packages/redboot/current/doc/redboot_cmds.sgml
--- a/packages/redboot/current/doc/redboot_cmds.sgml
+++ b/packages/redboot/current/doc/redboot_cmds.sgml
@@ -756,7 +756,7 @@ 0xFE00B080: 45 6E 74 72 79 20 70 6F 69
-
+
help
Display help on available commands