# 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 + +<!-- <xref> -->µITRON API + +<!-- <index></index> -->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. + + +<!-- <index></index> -->µITRON and <EMPHASIS>eCos</EMPHASIS> +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> + + +<!-- <index></index> -->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 + + + + + +<!-- <index></index> -->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 + + + + + +<!-- <index></index> --> 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. + + + + + +<!-- <index></index> -->Extended Synchronization and Communication Functions +None of these functions are supported in this release. + + +<!-- <index></index> -->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. + + + + + +<!-- <index></index> --> 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 + + + + + +<!-- <index></index> -->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 + + + + + +<!-- <index></index> --> 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 + + + + + +<!-- <index></index> --> Network Support Functions +None of these functions are supported in this release. + + + +<!-- <index></index> -->µ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